AI Code Review
Run ID: 69cb39a061b1021a29a870652026-03-31Development
PantheraHive BOS
BOS Dashboard

AI Code Review: Step 1 of 2 - Code Analysis Report

Workflow Description: Comprehensive code review with suggestions and refactoring.

Current Step: collab → analyze_code


1. Introduction & Executive Summary

This report details the comprehensive code analysis performed as the initial step of the "AI Code Review" workflow. The objective of this phase is to systematically evaluate the provided codebase against industry best practices, identify potential issues, security vulnerabilities, performance bottlenecks, and areas for improvement in maintainability, scalability, and readability.

While no specific code was provided for this immediate interaction, this document outlines the methodology employed and provides a detailed, hypothetical example of the output generated during a typical code analysis. This example demonstrates the depth, specificity, and actionable nature of the findings we deliver, including suggested refactorings and explanations.

Key Deliverables for this Step:


2. Code Analysis Methodology

Our AI-driven code analysis employs a multi-faceted approach, combining static code analysis techniques with contextual understanding derived from large language models trained on vast repositories of high-quality code.

2.1. Core Analysis Pillars:

* Adherence to language-specific conventions (e.g., PEP 8 for Python, ESLint for JavaScript).

* Consistency in naming conventions, indentation, and formatting.

* Modularity and separation of concerns.

* Identification of common vulnerabilities (e.g., SQL injection, XSS, insecure deserialization, broken authentication, weak cryptographic practices, hardcoded credentials).

* Review of input validation and sanitization.

* Analysis of authentication and authorization mechanisms.

* Dependency vulnerability scanning (where applicable).

* Detection of inefficient algorithms or data structures.

* Identification of potential N+1 queries in database interactions.

* Analysis of I/O operations and resource utilization.

* Suggestions for caching strategies or asynchronous processing.

* Clarity of variable, function, and class names.

* Presence and quality of comments and documentation.

* Cyclomatic complexity assessment.

* Reduction of code duplication (DRY principle).

* Testability of code units.

* Appropriate use of exception handling.

* Logging strategies and error reporting.

* Graceful degradation and resilience to unexpected inputs or failures.

* Identification of potential bottlenecks as load increases.

* Review of resource management and statelessness (for web services).

* Database interaction patterns.

2.2. Tooling & Techniques:


3. Hypothetical Code Review Example: Python Flask API Endpoint

To illustrate the depth and detail of our analysis, consider a hypothetical Flask API endpoint responsible for user login.

Context: A Python Flask application where users can log in via a POST request to /api/login.

3.1. Original (Hypothetical) Code Snippet:

text • 995 chars
*   **Explanation:** `bcrypt` is a robust, adaptive password hashing function designed to be slow and resistant to brute-force attacks. `bcrypt.gensalt()` generates a unique salt for each password, and `bcrypt.hashpw()` performs the hashing with a configurable number of iterations (cost factor). `bcrypt.checkpw()` safely verifies a password against a stored hash without re-hashing. This significantly enhances the security of user authentication.

---

**Finding 3: Resource Management - Unreliable Database Connection Closing**

*   **Severity:** Medium
*   **Category:** Maintainability, Robustness, Performance
*   **Location:** All routes interacting with the database.
*   **Issue:** The `conn.close()` calls are placed directly after database operations without ensuring they are always executed, especially in the presence of exceptions. This can lead to open database connections, resource leaks, and potential performance degradation over time.
*   **Original Code (Excerpt):**
    
Sandboxed live preview
  • Explanation: Python's with statement (context manager) is the idiomatic way to handle resources that need to be acquired and released reliably. By wrapping the sqlite3.connect call in a context manager, the connection is guaranteed to be closed even if exceptions occur within the with block, preventing resource leaks. This requires minor modification to the get_db_connection function or direct usage of sqlite3.connect as a context manager if no custom row factory is needed. For simplicity, I've shown adapting get_db_connection to be used with with. A more robust solution might involve a dedicated database wrapper class.

Finding 4: Lack of Environment-Specific Configuration

  • Severity: Medium
  • Category:
collab Output

AI Code Review & Refactoring Report: Comprehensive Analysis

Workflow Step: collab → ai_refactor

Description: Comprehensive code review with suggestions and refactoring opportunities.


Executive Summary

This report provides a comprehensive AI-driven code review and proposes specific refactoring opportunities, architectural improvements, and best practice recommendations. The objective is to enhance code quality, improve maintainability, boost performance, strengthen security, and ensure adherence to modern coding standards.

Note: As no specific code was provided for this execution, this output serves as a detailed template and example of the comprehensive analysis and refactoring suggestions that would be generated. For a live execution, you would provide your codebase (or relevant snippets) for a tailored report.


1. Review Scope & Methodology

Our AI code review system employs a multi-faceted approach, analyzing code across several dimensions:

  • Static Code Analysis: Identifying potential bugs, vulnerabilities, and anti-patterns without executing the code.
  • Complexity Analysis: Assessing cyclomatic complexity, cognitive complexity, and function length to pinpoint hard-to-understand or maintain sections.
  • Performance Profiling (Theoretical): Analyzing algorithmic efficiency, data structure choices, and potential bottlenecks based on common patterns.
  • Security Vulnerability Scanning: Detecting common security flaws (e.g., SQL injection, XSS, insecure deserialization) and misconfigurations.
  • Best Practices Adherence: Evaluating compliance with language-specific style guides, design patterns, and architectural principles.
  • Code Duplication Detection: Identifying redundant code blocks that can be consolidated.
  • Maintainability Index Calculation: Providing an overall score for the ease of maintaining the codebase.

2. Key Findings & Identified Issues (Template Examples)

This section outlines common issues identified during an AI code review, presented with their impact and actionable recommendations.

2.1. Performance & Efficiency Issues

  • Issue: Inefficient Database Queries / N+1 Problem

* Description: Repeated individual queries within a loop instead of a single batched query, leading to excessive database roundtrips.

* Impact: Significant performance degradation, especially with large datasets; increased load on the database server.

* Example (Hypothetical):


        # Original (Inefficient)
        for user in users:
            orders = db.get_orders_by_user(user.id) # N queries
            # ... process orders

* Recommendation: Utilize eager loading, JOIN queries, or batching mechanisms to fetch all necessary data in a single (or minimal) query.

* Actionable Suggestion: Refactor data access layers to use ORM features like select_related or prefetch_related (Django), includes (Rails), or equivalent batching for direct SQL.

  • Issue: Suboptimal Algorithm Choice

* Description: Use of algorithms with higher time complexity (e.g., O(n^2) when O(n log n) or O(n) is possible) for operations on large collections.

* Impact: Slow execution times, especially as input size grows; high CPU utilization.

* Example (Hypothetical):


        // Original (Inefficient search in unsorted list)
        List<Item> items = getUnsortedItems();
        boolean found = false;
        for (Item item : items) {
            if (item.getId() == targetId) {
                found = true;
                break;
            }
        }

* Recommendation: Evaluate data structures and algorithms for operations involving sorting, searching, or complex computations.

* Actionable Suggestion: Consider using HashMap/Dictionary for O(1) lookups, sorting lists for binary search (O(log n)), or more appropriate collection types.

2.2. Security Vulnerabilities

  • Issue: SQL Injection Vulnerability

* Description: Constructing SQL queries directly by concatenating user input without proper sanitization or parameterized queries.

* Impact: Malicious users can execute arbitrary SQL commands, leading to data breaches, corruption, or unauthorized access.

* Example (Hypothetical):


        // Original (Vulnerable)
        $id = $_GET['id'];
        $query = "SELECT * FROM users WHERE id = " . $id; // SQL Injection risk
        $result = mysqli_query($conn, $query);

* Recommendation: Always use parameterized queries (prepared statements) or ORM methods that handle parameter binding automatically.

* Actionable Suggestion: Replace direct string concatenation with prepared statements using placeholders (? or named parameters) and bind values.

  • Issue: Insecure Handling of Sensitive Data

* Description: Storing passwords in plain text, logging sensitive information without redaction, or transmitting data over unencrypted channels.

* Impact: Compromise of user accounts, regulatory compliance failures (GDPR, HIPAA), and severe reputational damage.

* Example (Hypothetical):


        // Original (Storing plain text password)
        const user = { username: "admin", password: "password123" };
        db.save(user); // Password saved directly

* Recommendation: Hash passwords using strong, modern algorithms (e.g., bcrypt, Argon2) with appropriate salt. Encrypt sensitive data at rest and in transit (HTTPS/TLS).

* Actionable Suggestion: Implement password hashing library (e.g., bcryptjs in Node.js, Spring Security in Java) and ensure all API endpoints use HTTPS.

2.3. Maintainability & Readability Issues

  • Issue: High Cyclomatic Complexity / "God Object"

* Description: Functions or classes with too many conditional branches, loops, or responsibilities, making them difficult to test, understand, and modify.

* Impact: Increased likelihood of bugs, longer debugging cycles, and resistance to future changes.

* Example (Hypothetical):


        // Original (Highly complex method)
        public void ProcessOrder(Order order, User user, PaymentGateway gateway) {
            if (order.Status == "Pending") {
                // ... complex logic for pending order
                if (user.IsPremium) { /* ... */ } else { /* ... */ }
            } else if (order.Status == "Processing") {
                // ... complex logic for processing
            } // ... many more else-if branches
        }

* Recommendation: Refactor into smaller, single-responsibility functions/methods. Apply design patterns like Strategy, State, or Command to reduce conditional logic.

* Actionable Suggestion: Extract sub-logics into private helper methods. Consider using polymorphism or a state machine to manage different order statuses.

  • Issue: Inconsistent Naming Conventions

* Description: Mixing camelCase, snake_case, PascalCase, or using unclear/abbreviated names for variables, functions, and classes.

* Impact: Reduces code readability, increases cognitive load for developers, and violates language-specific style guides.

* Example (Hypothetical):


        # Original (Inconsistent naming)
        def Calculate_Total_Cost(item_list, TaxRate):
            # ...
        class Userdata:
            # ...

* Recommendation: Adhere strictly to a consistent naming convention (e.g., PEP 8 for Python, Java Naming Conventions). Use clear, descriptive names.

* Actionable Suggestion: Establish and enforce a project-wide style guide. Use linters with naming convention rules configured.

2.4. Code Duplication

  • Issue: Repeated Code Blocks ("Copy-Paste Programming")

* Description: Identical or very similar blocks of code appearing in multiple places across the codebase.

* Impact: Increased maintenance burden (changes need to be applied everywhere), higher bug potential (if a fix is missed in one place), and larger codebase size.

* Example (Hypothetical):


        # Original (Duplicated logic in two methods)
        def process_payment_for_user(user, amount)
            log_transaction("Attempting payment for user #{user.id}")
            # ... payment gateway logic ...
            log_transaction("Payment successful for user #{user.id}")
        end

        def process_refund_for_user(user, amount)
            log_transaction("Attempting refund for user #{user.id}") # Duplication
            # ... refund gateway logic ...
            log_transaction("Refund successful for user #{user.id}") # Duplication
        end

* Recommendation: Extract duplicated logic into a shared function, method, or class.

* Actionable Suggestion: Create a utility function (e.g., log_transaction(message)) or a base class/module for common operations.


3. Proposed Refactoring Opportunities

Based on the identified issues, here are common refactoring strategies and examples.

3.1. Extract Method/Function

  • Scenario: A method is too long, or a block of code is duplicated.
  • Strategy: Move the block of code into a new, well-named method and replace the original block with a call to the new method.
  • Before (Hypothetical):

    public void generateReport(List<Data> dataList) {
        // ... setup report ...
        for (Data data : dataList) {
            // Complex calculation logic
            double result = data.getValue() * 0.15 + Math.pow(data.getFactor(), 2);
            // ... more logic ...
            report.addEntry(data.getName(), result);
        }
        // ... finalize report ...
    }
  • After (Hypothetical):

    public void generateReport(List<Data> dataList) {
        // ... setup report ...
        for (Data data : dataList) {
            double result = calculateDataResult(data); // Extracted method
            report.addEntry(data.getName(), result);
        }
        // ... finalize report ...
    }

    private double calculateDataResult(Data data) {
        return data.getValue() * 0.15 + Math.pow(data.getFactor(), 2);
    }
  • Benefits: Improved readability, reusability, testability, and reduced complexity of the original method.

3.2. Introduce Parameter Object

  • Scenario: A method has too many parameters, making its signature unwieldy and hard to understand.
  • Strategy: Create a new class to encapsulate related parameters, then pass an instance of this class instead of individual parameters.
  • Before (Hypothetical):

    public void CreateUser(string firstName, string lastName, string email, string password,
                           string addressLine1, string addressLine2, string city, string state, string zipCode) {
        // ... user creation logic ...
    }
  • After (Hypothetical):

    public class UserCreationData {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }
        public Address Address { get; set; } // Another parameter object
    }

    public class Address {
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string ZipCode { get; set; }
    }

    public void CreateUser(UserCreationData userData) {
        // ... user creation logic using userData.FirstName, userData.Address.City etc. ...
    }
  • Benefits: Cleaner method signatures, better encapsulation, easier to add new related parameters, and improved readability.

3.3. Replace Conditional with Polymorphism

  • Scenario: A large if-else if or switch statement that varies behavior based on type or state.
  • Strategy: Create a hierarchy of classes, each implementing a common interface or extending a base class, with specific behavior defined in each subclass.
  • Before (Hypothetical):

    function calculateShipping(order) {
        if (order.country === 'USA') {
            return order.weight * 0.5;
        } else if (order.country === 'Canada') {
            return order.weight * 0.7 + 5;
        } else if (order.country === 'Mexico') {
            return order.weight * 0.6 + 10;
        }
        return order.weight * 1.0; // Default international
    }
  • After (Hypothetical - using Strategy Pattern):

    // Interface/Base Class
    class ShippingStrategy {
        calculate(order) { throw new Error("Implement calculate method"); }
    }

    class USAShipping extends ShippingStrategy {
        calculate(order) { return order.weight * 0.5; }
    }

    class CanadaShipping extends ShippingStrategy {
        calculate(order) { return order.weight * 0.7 + 5; }
    }

    class MexicoShipping extends ShippingStrategy {
        calculate(order) { return order.weight * 0.6 + 10; }
    }

    class InternationalShipping extends ShippingStrategy {
        calculate(order) { return order.weight * 1.0; }
    }

    // Factory to get the correct strategy
    function getShippingStrategy(country) {
        switch (country) {
            case 'USA': return new USAShipping();
            case 'Canada': return new CanadaShipping();
            case 'Mexico': return new MexicoShipping();
            default: return new InternationalShipping();
        }
    }

    // Usage
    const order = { country: 'USA', weight: 10 };
    const strategy = getShippingStrategy(order.country);
    const shippingCost = strategy.calculate(order);
  • Benefits: Open/Closed Principle adherence (easy to add new shipping rules without modifying existing code), reduced complexity, improved testability.

4. General Recommendations & Best Practices

4.1. Code Quality & Style

  • Linting & Formatting: Implement automated linting (e.g., ESLint, Prettier, Black, Flake8, RuboCop) and code formatting tools in your CI/CD pipeline to enforce consistent style.
  • Comments & Documentation: Ensure adequate, up-to-date comments for complex logic, public APIs, and configuration files. Generate API documentation where applicable (e.g., Javadoc, Sphinx, Swagger).
  • Naming Conventions: Strictly follow established naming conventions for your language and framework. Prioritize clarity over brevity.

4.2. Testing Strategy

  • Unit Tests: Aim for high unit test coverage (e.g., 80%+) for all critical business logic. Focus on testing individual components in isolation.
  • Integration Tests: Implement tests that verify the interaction between different components (
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);}});}