AI Code Review
Run ID: 69bca44077c0421c0bf494512026-03-29Development
PantheraHive BOS
BOS Dashboard

As a professional AI assistant within PantheraHive, I have executed the ai_refactor step of the "AI Code Review" workflow (category: Development).

Given the code_input was a test string ("This is a test input for the AI Code Review workflow. Please generate comprehensive output.") and not actual code, this output will demonstrate the comprehensive capabilities of the ai_refactor step using a hypothetical, simple code example. This approach ensures you receive a detailed, actionable, and professionally structured output, illustrating what you would typically receive for a "Standard" review depth with auto_fix set to false.


AI Refactor: Demonstrative Output

1. Refactoring Summary

This section presents the refactored version of the hypothetical code, focusing on improvements identified during the ai_review phase (which precedes this step). The refactoring aims to enhance readability, maintainability, and efficiency while adhering to best practices. No automatic fixes have been applied to your codebase as auto_fix was set to false.

Original Hypothetical Code (for context):

text • 1,076 chars
### 3. Detailed Refactoring Explanation

This section provides a granular breakdown of the changes made in the refactored code, along with the rationale behind each modification.

#### 3.1 Function Signature and Naming

*   **Original:** `def calculate_total_price(items_list, discount_percentage):`
*   **Refactored:** `def calculate_final_price(cart_items: list[dict], discount_rate: float) -> float:`
*   **Rationale:**
    *   **Function Name:** Renamed from `calculate_total_price` to `calculate_final_price` to better reflect that the function returns the price *after* discount, not just a raw total.
    *   **Parameter Names:** `items_list` was changed to `cart_items` for clearer context. `discount_percentage` was changed to `discount_rate` as it's a more common and precise term.
    *   **Type Hinting:** Added type hints (`list[dict]`, `float`, `-> float`) to improve code readability, enable static analysis, and make the expected input/output types explicit.

#### 3.2 Input Validation

*   **Original:** No explicit input validation.
*   **Refactored:**
    
Sandboxed live preview

AI Code Review: Step 1 - Code Analysis

Workflow Name: AI Code Review

Category: Development

Description: Comprehensive code review with suggestions and refactoring


Analysis of Provided Code Input

The code_input provided is: "This is a test input for the AI Code Review workflow. Please generate comprehensive output."

Observation: The provided input is a string describing a request for comprehensive output, not actual executable code (e.g., Python, Java, JavaScript, C#, etc.). As such, a direct analysis of code syntax, logic, performance, or security vulnerabilities is not possible.

Approach for this Step: This analysis will proceed by outlining the structure and types of insights that would be generated if actual code were provided, thus demonstrating a "comprehensive output" in the context of a placeholder input. This will serve as a template for future code reviews.


Simulated Code Review: Standard Depth Analysis

If actual code were provided, the analyze_code step with review_depth: Standard would focus on the following key areas, providing detailed observations and actionable recommendations:

1. Code Overview and Intent

  • Summary: A high-level description of what the code aims to achieve, its main components, and its primary functions.
  • Identified Technologies/Languages: Detection of the programming language, frameworks, and libraries used.
  • Overall Complexity: An initial assessment of the code's structural and algorithmic complexity.

2. Readability and Style

  • Clarity and Conciseness:

Observation Example: Variable names like x, y, temp_var are used without clear context.*

* Recommendation Example: Use descriptive variable and function names (e.g., user_input, process_data, calculate_average).

  • Comments and Documentation:

Observation Example: Lack of inline comments for complex logic blocks or public function docstrings.*

* Recommendation Example: Add docstrings for all functions/methods explaining their purpose, arguments, and return values. Include comments for non-obvious code sections.

  • Formatting and Consistency:

Observation Example: Inconsistent indentation, spacing around operators, or line breaks.*

* Recommendation Example: Adhere to a consistent style guide (e.g., PEP 8 for Python, Google Java Style Guide). Utilize an auto-formatter (e.g., Black, Prettier) for consistency.

  • Error Handling Readability:

Observation Example: Generic try-except blocks that catch all exceptions without specific handling.*

* Recommendation Example: Catch specific exception types and provide meaningful error messages. Log errors appropriately.

3. Potential Issues and Bugs

  • Logic Errors:

Observation Example: Off-by-one errors in loops, incorrect conditional logic, or flawed algorithmic implementations.*

* Recommendation Example: Review loop boundaries. Ensure conditional statements cover all intended cases and edge cases.

  • Edge Cases and Input Validation:

Observation Example: Code assumes valid input and does not handle empty strings, null values, or out-of-range numbers.*

* Recommendation Example: Implement robust input validation at API boundaries and wherever user input is processed.

  • Resource Leaks:

Observation Example: File handles, database connections, or network sockets are opened but not properly closed.*

* Recommendation Example: Use with statements (Python), try-with-resources (Java), or explicit close() calls in finally blocks to ensure resources are released.

  • Concurrency Issues (if applicable):

Observation Example: Shared mutable state accessed by multiple threads without proper synchronization.*

* Recommendation Example: Implement locks, mutexes, or use thread-safe data structures to prevent race conditions.

4. Performance Considerations

  • Inefficient Algorithms:

Observation Example: Nested loops where a more efficient data structure or algorithm (e.g., hash map lookup instead of linear search) could be used.*

* Recommendation Example: Analyze time and space complexity. Consider alternative algorithms or data structures for performance-critical sections.

  • Excessive Memory Usage:

Observation Example: Loading entire large datasets into memory when only a subset is needed, or creating many temporary objects.*

* Recommendation Example: Implement streaming data processing. Optimize data structures to reduce memory footprint.

  • Unnecessary Computations:

Observation Example: Recalculating values within a loop that remain constant, or redundant database queries.*

* Recommendation Example: Cache results of expensive computations. Hoist constant expressions out of loops.

  • I/O Bottlenecks:

Observation Example: Synchronous I/O operations blocking the main thread for extended periods.*

* Recommendation Example: Utilize asynchronous I/O where appropriate. Batch database operations to reduce overhead.

5. Security Vulnerabilities (if applicable)

  • Injection Flaws:

Observation Example: Direct concatenation of user input into SQL queries, shell commands, or HTML outputs.*

* Recommendation Example: Use parameterized queries for databases. Sanitize and escape all user-supplied input before rendering or executing.

  • Cross-Site Scripting (XSS):

Observation Example: Unsanitized user input rendered directly into web pages.*

* Recommendation Example: Implement strict output encoding for all user-generated content displayed in a browser.

  • Insecure Deserialization:

Observation Example: Deserializing untrusted data without validation.*

* Recommendation Example: Avoid deserializing data from untrusted sources. If necessary, implement strict type and content validation.

  • Hardcoded Credentials/Sensitive Data:

Observation Example: API keys, database passwords, or secret tokens directly embedded in the source code.*

* Recommendation Example: Store sensitive information in environment variables, secure configuration files, or dedicated secret management systems (e.g., AWS Secrets Manager, HashiCorp Vault).

  • Broken Access Control:

Observation Example: Lack of proper authorization checks before granting access to sensitive resources or functions.*

* Recommendation Example: Implement granular access control (RBAC, ABAC) and ensure all sensitive endpoints/actions are protected.

6. Maintainability and Scalability

  • Modularity and Separation of Concerns:

Observation Example: Large, monolithic functions or classes attempting to do too many things.*

* Recommendation Example: Break down complex logic into smaller, single-responsibility functions/classes. Promote loose coupling and high cohesion.

  • Testability:

Observation Example: Functions with many external dependencies that are hard to mock, or global state making unit testing difficult.*

* Recommendation Example: Design functions to be pure (deterministic output for given input) where possible. Use dependency injection to make components easier to test in isolation.

  • Extensibility:

Observation Example: Hardcoded logic that makes adding new features or changing behavior difficult without significant code changes.*

* Recommendation Example: Employ design patterns (e.g., Strategy, Factory, Observer) that allow for easy extension without modifying existing, working code (Open/Closed Principle).

  • Dependency Management:

Observation Example: Outdated libraries or unclear dependency versions.*

* Recommendation Example: Regularly update dependencies. Use precise versioning for critical libraries and define a clear dependency management strategy.

7. Best Practices and Design Patterns

  • Adherence to Language Idioms:

Observation Example: Using C-style loops in Python instead of list comprehensions or iterators.*

* Recommendation Example: Embrace language-specific idioms and features to write more Pythonic, Java-like, etc., code.

  • DRY Principle (Don't Repeat Yourself):

Observation Example: Identical or very similar blocks of code duplicated in multiple places.*

* Recommendation Example: Extract repeated logic into a shared function, class, or module.

  • SOLID Principles (if applicable to OOP):

Observation Example: A single class handling multiple, unrelated responsibilities (violating Single Responsibility Principle).*

* Recommendation Example: Refactor classes to have a single, well-defined responsibility.

  • Immutability:

Observation Example: Mutable objects passed around and modified unexpectedly, leading to difficult-to-trace bugs.*

* Recommendation Example: Favor immutable data structures and objects where possible to reduce side effects and enhance predictability.


Structured Data: Potential Issues Summary (Simulated)

If actual code were provided, a structured list of identified issues would be generated, similar to the following format:

| Severity | Category | Description (Example) | File/Module (Example) | Line(s) (Example) | Recommendation (Example) |

| :------- | :------------------- | :-------------------------------------------------------- | :-------------------- | :---------------- | :---------------------------------------------------------------------------------------- |

| High | Security | SQL Injection vulnerability due to unsanitized input | database.py | 45 | Use parameterized queries for all database interactions. |

| Medium | Performance | Nested loop leads to O(N^2) complexity for large datasets | processor.js | 120-135 | Refactor to use a hash map for O(N) lookup. |

| Medium | Readability | Inconsistent naming convention for variables | utils.java | 10-200 | Adhere to camelCase for variables as per Java standard. |

| Low | Maintainability | Lack of docstrings for public functions | api_handlers.py | All | Add comprehensive docstrings explaining purpose, args, and returns. |

| High | Reliability | No error handling for file I/O operations | file_manager.cs | 70 | Implement try-catch blocks to handle FileNotFoundException and IOException. |

| Medium | Best Practice | Duplicated logic for user authentication | auth_service.py | 50, 150 | Extract common authentication logic into a dedicated helper function. |


Next Steps (Simulated)

Based on this comprehensive analysis, the next step would typically involve:

  • Prioritization: The user would prioritize the identified issues based on their severity and impact.
  • Refactoring Plan: A detailed plan for addressing the recommendations and refactoring opportunities would be developed.
  • Automated Fixes (if auto_fix was true): If auto_fix were enabled, the system would attempt to apply automated corrections for certain types of issues (e.g., formatting, simple style guide violations).
  • Manual Refinement: For complex issues or architectural changes, manual intervention and developer expertise would be required.

This concludes the analyze_code step, providing a detailed blueprint for improving code quality, even with a placeholder input.

  • Rationale:

* Clarity: Instead of subtracting a calculated discount, the refactored code calculates a discount_factor (e.g., for a 10% discount, the factor is 0.9) and multiplies the subtotal by it. This often leads to clearer mathematical expression and reduces potential for off-by-one errors in complex discount scenarios.

* Magic Number: Replaced 100 with 100.0 to ensure floating-point division, preventing potential integer division issues in some Python versions/contexts.

* Explicit else: Added an explicit else block to assign final_price when no discount is applied, making the flow more explicit.

3.6 Return Value Rounding

  • Original: return total
  • Refactored: return round(final_price, 2)
  • Rationale: For financial calculations, it's common practice to round the final result to two decimal places to avoid floating-point inaccuracies and align with currency conventions.

4. Benefits of Refactoring

The proposed refactoring delivers several key benefits:

  • Improved Readability: Clearer variable names, docstrings, and a more Pythonic approach to calculations make the code easier to understand at a glance.
  • Enhanced Maintainability: Well-documented code with clear logic is simpler to modify, debug, and extend in the future.
  • Increased Robustness: Input validation guards against invalid data, reducing the likelihood of unexpected errors and improving the function's reliability.
  • Better Code Quality: Adherence to best practices (e.g., type hinting, docstrings, Pythonic constructs) raises the overall quality of the codebase.
  • Reduced Cognitive Load: Developers can grasp the function's purpose and mechanics more quickly, leading to faster development cycles and fewer mistakes.
  • Explicit Error Handling: By raising specific exceptions (TypeError, ValueError), the function communicates issues more effectively to the caller.

5. Further Considerations & Next Steps

  • Unit Tests: It is highly recommended to write comprehensive unit tests for this function to ensure its correctness and prevent regressions when future changes are made.
  • Configuration: For discount_rate, consider if it should be expressed as a decimal (e.g., 0.10 for 10%) internally for consistency with other mathematical operations, converting from a percentage only at the input/output boundary if necessary.
  • Error Handling Strategy: Evaluate if raising exceptions is the desired error handling strategy for your application, or if returning a tuple (e.g., (price, error_message)) or using a custom result object would be more appropriate in certain contexts.
  • Currency Handling: For a real-world e-commerce scenario, consider using a dedicated library for currency handling (e.g., decimal module) to avoid floating-point precision issues, especially for critical financial calculations. The round() function is a good start, but decimal offers more control.

This comprehensive refactoring output provides a clear path to improving your codebase based on the identified issues, even with a placeholder input. Please apply these recommendations to your actual code as appropriate.

ai_code_review.txt
Download source file
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
\n\n\n"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\nimport './index.css'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n \n \n \n)\n"); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react'\nimport './App.css'\n\nfunction App(){\n return(\n
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n
\n )\n}\nexport default App\n"); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e}\n.app{min-height:100vh;display:flex;flex-direction:column}\n.app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px}\nh1{font-size:2.5rem;font-weight:700}\n"); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\n## Open in IDE\nOpen the project folder in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "type": "module",\n "scripts": {\n "dev": "vite",\n "build": "vue-tsc -b && vite build",\n "preview": "vite preview"\n },\n "dependencies": {\n "vue": "^3.5.13",\n "vue-router": "^4.4.5",\n "pinia": "^2.3.0",\n "axios": "^1.7.9"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^5.2.1",\n "typescript": "~5.7.3",\n "vite": "^6.0.5",\n "vue-tsc": "^2.2.0"\n }\n}\n'); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport { resolve } from 'path'\n\nexport default defineConfig({\n plugins: [vue()],\n resolve: { alias: { '@': resolve(__dirname,'src') } }\n})\n"); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]}\n'); zip.file(folder+"tsconfig.app.json",'{\n "compilerOptions":{\n "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"],\n "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true,\n "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue",\n "strict":true,"paths":{"@/*":["./src/*"]}\n },\n "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"]\n}\n'); zip.file(folder+"env.d.ts","/// \n"); zip.file(folder+"index.html","\n\n\n \n \n "+slugTitle(pn)+"\n\n\n
\n \n\n\n"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue'\nimport { createPinia } from 'pinia'\nimport App from './App.vue'\nimport './assets/main.css'\n\nconst app = createApp(App)\napp.use(createPinia())\napp.mount('#app')\n"); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue","\n\n\n\n\n"); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547}\n"); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nnpm run dev\n\`\`\`\n\n## Build\n\`\`\`bash\nnpm run build\n\`\`\`\n\nOpen in VS Code or WebStorm.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n"); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{\n "name": "'+pn+'",\n "version": "0.0.0",\n "scripts": {\n "ng": "ng",\n "start": "ng serve",\n "build": "ng build",\n "test": "ng test"\n },\n "dependencies": {\n "@angular/animations": "^19.0.0",\n "@angular/common": "^19.0.0",\n "@angular/compiler": "^19.0.0",\n "@angular/core": "^19.0.0",\n "@angular/forms": "^19.0.0",\n "@angular/platform-browser": "^19.0.0",\n "@angular/platform-browser-dynamic": "^19.0.0",\n "@angular/router": "^19.0.0",\n "rxjs": "~7.8.0",\n "tslib": "^2.3.0",\n "zone.js": "~0.15.0"\n },\n "devDependencies": {\n "@angular-devkit/build-angular": "^19.0.0",\n "@angular/cli": "^19.0.0",\n "@angular/compiler-cli": "^19.0.0",\n "typescript": "~5.6.0"\n }\n}\n'); zip.file(folder+"angular.json",'{\n "$schema": "./node_modules/@angular/cli/lib/config/schema.json",\n "version": 1,\n "newProjectRoot": "projects",\n "projects": {\n "'+pn+'": {\n "projectType": "application",\n "root": "",\n "sourceRoot": "src",\n "prefix": "app",\n "architect": {\n "build": {\n "builder": "@angular-devkit/build-angular:application",\n "options": {\n "outputPath": "dist/'+pn+'",\n "index": "src/index.html",\n "browser": "src/main.ts",\n "tsConfig": "tsconfig.app.json",\n "styles": ["src/styles.css"],\n "scripts": []\n }\n },\n "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"}\n }\n }\n }\n}\n'); zip.file(folder+"tsconfig.json",'{\n "compileOnSave": false,\n "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]},\n "references":[{"path":"./tsconfig.app.json"}]\n}\n'); zip.file(folder+"tsconfig.app.json",'{\n "extends":"./tsconfig.json",\n "compilerOptions":{"outDir":"./dist/out-tsc","types":[]},\n "files":["src/main.ts"],\n "include":["src/**/*.d.ts"]\n}\n'); zip.file(folder+"src/index.html","\n\n\n \n "+slugTitle(pn)+"\n \n \n \n\n\n \n\n\n"); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser';\nimport { appConfig } from './app/app.config';\nimport { AppComponent } from './app/app.component';\n\nbootstrapApplication(AppComponent, appConfig)\n .catch(err => console.error(err));\n"); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; }\nbody { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; }\n"); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n\n@Component({\n selector: 'app-root',\n standalone: true,\n imports: [RouterOutlet],\n templateUrl: './app.component.html',\n styleUrl: './app.component.css'\n})\nexport class AppComponent {\n title = '"+pn+"';\n}\n"); zip.file(folder+"src/app/app.component.html","
\n
\n

"+slugTitle(pn)+"

\n

Built with PantheraHive BOS

\n
\n \n
\n"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1}\n"); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';\nimport { provideRouter } from '@angular/router';\nimport { routes } from './app.routes';\n\nexport const appConfig: ApplicationConfig = {\n providers: [\n provideZoneChangeDetection({ eventCoalescing: true }),\n provideRouter(routes)\n ]\n};\n"); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router';\n\nexport const routes: Routes = [];\n"); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\nng serve\n# or: npm start\n\`\`\`\n\n## Build\n\`\`\`bash\nng build\n\`\`\`\n\nOpen in VS Code with Angular Language Service extension.\n"); zip.file(folder+".gitignore","node_modules/\ndist/\n.env\n.DS_Store\n*.local\n.angular/\n"); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join("\n"):"# add dependencies here\n"; zip.file(folder+"main.py",src||"# "+title+"\n# Generated by PantheraHive BOS\n\nprint(title+\" loaded\")\n"); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\n\`\`\`\n\n## Run\n\`\`\`bash\npython main.py\n\`\`\`\n"); zip.file(folder+".gitignore",".venv/\n__pycache__/\n*.pyc\n.env\n.DS_Store\n"); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^\`\`\`[\w]*\n?/m,"").replace(/\n?\`\`\`$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+"\n"; zip.file(folder+"package.json",pkgJson); var fallback="const express=require(\"express\");\nconst app=express();\napp.use(express.json());\n\napp.get(\"/\",(req,res)=>{\n res.json({message:\""+title+" API\"});\n});\n\nconst PORT=process.env.PORT||3000;\napp.listen(PORT,()=>console.log(\"Server on port \"+PORT));\n"; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000\n"); zip.file(folder+".gitignore","node_modules/\n.env\n.DS_Store\n"); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Setup\n\`\`\`bash\nnpm install\n\`\`\`\n\n## Run\n\`\`\`bash\nnpm run dev\n\`\`\`\n"); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:"\n\n\n\n\n"+title+"\n\n\n\n"+code+"\n\n\n\n"; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */\n*{margin:0;padding:0;box-sizing:border-box}\nbody{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e}\n"); zip.file(folder+"script.js","/* "+title+" — scripts */\n"); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\n## Open\nDouble-click \`index.html\` in your browser.\n\nOr serve locally:\n\`\`\`bash\nnpx serve .\n# or\npython3 -m http.server 3000\n\`\`\`\n"); zip.file(folder+".gitignore",".DS_Store\nnode_modules/\n.env\n"); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/\.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/\*\*(.+?)\*\*/g,"$1"); hc=hc.replace(/\n{2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+"\n\nGenerated by PantheraHive BOS.\n\nFiles:\n- "+app+".md (Markdown)\n- "+app+".html (styled HTML)\n"); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); } function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}