@posthog/wizard 1.32.0 → 1.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/android/android-wizard-agent.js +2 -0
- package/dist/src/android/android-wizard-agent.js.map +1 -1
- package/dist/src/angular/angular-wizard-agent.js +2 -1
- package/dist/src/angular/angular-wizard-agent.js.map +1 -1
- package/dist/src/astro/astro-wizard-agent.js +2 -1
- package/dist/src/astro/astro-wizard-agent.js.map +1 -1
- package/dist/src/django/django-wizard-agent.js +4 -1
- package/dist/src/django/django-wizard-agent.js.map +1 -1
- package/dist/src/fastapi/fastapi-wizard-agent.js +4 -1
- package/dist/src/fastapi/fastapi-wizard-agent.js.map +1 -1
- package/dist/src/flask/flask-wizard-agent.js +4 -1
- package/dist/src/flask/flask-wizard-agent.js.map +1 -1
- package/dist/src/laravel/laravel-wizard-agent.js +2 -0
- package/dist/src/laravel/laravel-wizard-agent.js.map +1 -1
- package/dist/src/lib/__tests__/package-manager-detection.test.d.ts +1 -0
- package/dist/src/lib/__tests__/package-manager-detection.test.js +195 -0
- package/dist/src/lib/__tests__/package-manager-detection.test.js.map +1 -0
- package/dist/src/lib/__tests__/wizard-tools.test.d.ts +1 -0
- package/dist/src/lib/__tests__/wizard-tools.test.js +200 -0
- package/dist/src/lib/__tests__/wizard-tools.test.js.map +1 -0
- package/dist/src/lib/agent-interface.d.ts +2 -0
- package/dist/src/lib/agent-interface.js +19 -11
- package/dist/src/lib/agent-interface.js.map +1 -1
- package/dist/src/lib/agent-runner.js +7 -4
- package/dist/src/lib/agent-runner.js.map +1 -1
- package/dist/src/lib/framework-config.d.ts +15 -2
- package/dist/src/lib/framework-config.js +8 -1
- package/dist/src/lib/framework-config.js.map +1 -1
- package/dist/src/lib/package-manager-detection.d.ts +36 -0
- package/dist/src/lib/package-manager-detection.js +166 -0
- package/dist/src/lib/package-manager-detection.js.map +1 -0
- package/dist/src/lib/wizard-tools.d.ts +40 -0
- package/dist/src/lib/{env-file-tools.js → wizard-tools.js} +95 -46
- package/dist/src/lib/wizard-tools.js.map +1 -0
- package/dist/src/nextjs/nextjs-wizard-agent.js +2 -1
- package/dist/src/nextjs/nextjs-wizard-agent.js.map +1 -1
- package/dist/src/nuxt/nuxt-wizard-agent.js +2 -1
- package/dist/src/nuxt/nuxt-wizard-agent.js.map +1 -1
- package/dist/src/python/python-wizard-agent.js +4 -1
- package/dist/src/python/python-wizard-agent.js.map +1 -1
- package/dist/src/react-native/react-native-wizard-agent.js +2 -1
- package/dist/src/react-native/react-native-wizard-agent.js.map +1 -1
- package/dist/src/react-router/react-router-wizard-agent.js +2 -1
- package/dist/src/react-router/react-router-wizard-agent.js.map +1 -1
- package/dist/src/run.js +13 -3
- package/dist/src/run.js.map +1 -1
- package/dist/src/svelte/svelte-wizard-agent.js +2 -1
- package/dist/src/svelte/svelte-wizard-agent.js.map +1 -1
- package/dist/src/swift/swift-wizard-agent.js +2 -0
- package/dist/src/swift/swift-wizard-agent.js.map +1 -1
- package/dist/src/tanstack-router/tanstack-router-wizard-agent.js +2 -1
- package/dist/src/tanstack-router/tanstack-router-wizard-agent.js.map +1 -1
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js +2 -1
- package/dist/src/tanstack-start/tanstack-start-wizard-agent.js.map +1 -1
- package/dist/src/vue/vue-wizard-agent.js +2 -1
- package/dist/src/vue/vue-wizard-agent.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/lib/env-file-tools.d.ts +0 -11
- package/dist/src/lib/env-file-tools.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"python-wizard-agent.js","sourceRoot":"","sources":["../../../src/python/python-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Generic Python language wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { Integration } from '../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getPythonVersion,\n getPythonVersionBucket,\n detectPackageManager,\n getPackageManagerName,\n PythonPackageManager,\n} from './utils';\n\ntype PythonContext = {\n packageManager?: PythonPackageManager;\n};\n\nexport const PYTHON_AGENT_CONFIG: FrameworkConfig<PythonContext> = {\n metadata: {\n name: 'Python Language',\n integration: Integration.python,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const packageManager = await detectPackageManager(options);\n return { packageManager };\n },\n },\n\n detection: {\n packageName: 'python',\n packageDisplayName: 'Python',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: getPythonVersionBucket,\n minimumVersion: '3.8.0',\n getInstalledVersion: (options: WizardOptions) =>\n Promise.resolve(getPythonVersion(options)),\n detect: async (options) => {\n const { installDir } = options;\n\n // Look for Python package management files\n const pythonConfigFiles = await fg(\n [\n '**/requirements*.txt',\n '**/pyproject.toml',\n '**/setup.py',\n '**/Pipfile',\n ],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n if (pythonConfigFiles.length === 0) {\n return false;\n }\n\n // Make sure this isn't Django or Flask (those should be detected first)\n // Check for Django\n const managePyMatches = await fg('**/manage.py', {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n });\n\n for (const match of managePyMatches) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, match),\n 'utf-8',\n );\n if (\n content.includes('django') ||\n content.includes('DJANGO_SETTINGS_MODULE')\n ) {\n return false; // Django detected, use django agent instead\n }\n } catch {\n continue;\n }\n }\n\n // Check for Flask\n for (const configFile of pythonConfigFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, configFile),\n 'utf-8',\n );\n if (\n /^flask([<>=~!]|$|\\s)/im.test(content) ||\n /[\"']flask[\"']/i.test(content)\n ) {\n return false; // Flask detected, use flask agent instead\n }\n } catch {\n continue;\n }\n }\n\n const pyFiles = await fg(\n ['**/app.py', '**/wsgi.py', '**/application.py', '**/__init__.py'],\n {\n cwd: installDir,\n ignore: [\n '**/venv/**',\n '**/.venv/**',\n '**/env/**',\n '**/.env/**',\n '**/__pycache__/**',\n ],\n },\n );\n\n for (const pyFile of pyFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, pyFile),\n 'utf-8',\n );\n if (\n content.includes('from flask import') ||\n content.includes('import flask') ||\n /Flask\\s*\\(/.test(content)\n ) {\n return false; // Flask detected, use flask agent instead\n }\n } catch {\n continue;\n }\n }\n\n // If we have Python config files but it's not Django or Flask, it's a generic Python project\n return true;\n },\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_API_KEY: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => {\n const packageManagerName = context.packageManager\n ? getPackageManagerName(context.packageManager)\n : 'unknown';\n return {\n packageManager: packageManagerName,\n };\n },\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a generic Python project. Look for requirements.txt, pyproject.toml, setup.py, or Pipfile to confirm.',\n packageInstallation:\n 'Use pip, poetry, or pipenv based on existing config files (requirements.txt, pyproject.toml, Pipfile). Do not pin the posthog version - just add \"posthog\" without version constraints.',\n getAdditionalContextLines: (context) => {\n const packageManagerName = context.packageManager\n ? getPackageManagerName(context.packageManager)\n : 'unknown';\n\n const lines = [\n `Package manager: ${packageManagerName}`,\n `Framework docs ID: python (use posthog://docs/frameworks/python for documentation)`,\n `Project type: Generic Python application (CLI, script, worker, data pipeline, etc.)`,\n ``,\n `## CRITICAL: Python PostHog Best Practices`,\n ``,\n `### 1. Use Instance-Based API (REQUIRED)`,\n `Always use the Posthog() class constructor instead of module-level posthog:`,\n ``,\n `CORRECT:`,\n `from posthog import Posthog`,\n `posthog_client = Posthog(`,\n ` api_key=\"your_api_key\",`,\n ` host=\"https://us.i.posthog.com\",`,\n ` debug=False,`,\n ` enable_exception_autocapture=True, # Auto-capture exceptions`,\n `)`,\n ``,\n `INCORRECT (DO NOT USE):`,\n `import posthog`,\n `posthog.api_key = \"your_api_key\" # Don't use module-level config`,\n ``,\n `### 2. Enable Exception Autocapture`,\n `ALWAYS include enable_exception_autocapture=True in the Posthog() initialization to automatically track exceptions.`,\n ``,\n `### 3. NEVER Send PII (Personally Identifiable Information)`,\n `DO NOT include in event properties:`,\n `- Email addresses`,\n `- Full names`,\n `- Phone numbers`,\n `- Physical addresses`,\n `- IP addresses`,\n `- Any user-generated content (messages, comments, form submissions)`,\n ``,\n `SAFE event properties:`,\n `posthog_client.capture('contact_form_submitted', properties={`,\n ` 'message_length': len(message), # Metadata is OK`,\n ` 'has_email': bool(email), # Boolean flags are OK`,\n ` 'form_type': 'contact' # Categories are OK`,\n `})`,\n ``,\n `UNSAFE (DO NOT DO THIS):`,\n `posthog_client.capture('form_submitted', properties={`,\n ` 'email': user_email, # NEVER send actual email`,\n ` 'message': message_content, # NEVER send user content`,\n ` 'name': user_name # NEVER send names`,\n `})`,\n ``,\n `### 4. Implement Graceful Shutdown`,\n `ALWAYS call posthog_client.shutdown() when your application exits to ensure all events are flushed:`,\n ``,\n `import atexit`,\n `atexit.register(posthog_client.shutdown) # Ensures events are sent on exit`,\n ``,\n `For Django, use AppConfig.ready() to register the shutdown handler.`,\n `For Flask, use @app.teardown_appcontext or atexit.`,\n `For scripts/workers, call shutdown() explicitly or use atexit.`,\n ``,\n `### 5. For Django Projects`,\n `Initialize PostHog in your AppConfig.ready() method:`,\n ``,\n `from django.apps import AppConfig`,\n `from posthog import Posthog`,\n ``,\n `class YourAppConfig(AppConfig):`,\n ` posthog_client = None`,\n ` `,\n ` def ready(self):`,\n ` if YourAppConfig.posthog_client is None:`,\n ` YourAppConfig.posthog_client = Posthog(`,\n ` settings.POSTHOG_API_KEY,`,\n ` host=settings.POSTHOG_HOST,`,\n ` debug=settings.DEBUG,`,\n ` enable_exception_autocapture=True,`,\n ` )`,\n ` import atexit`,\n ` atexit.register(YourAppConfig.posthog_client.shutdown)`,\n ``,\n `IMPORTANT: These best practices are MANDATORY. The implementation will fail review if they are not followed.`,\n ];\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const packageManagerName = context.packageManager\n ? getPackageManagerName(context.packageManager)\n : 'package manager';\n return [\n `Analyzed your Python project structure`,\n `Installed the PostHog Python package using ${packageManagerName}`,\n `Created PostHog initialization using instance-based API (Posthog class)`,\n `Configured exception autocapture and graceful shutdown`,\n `Added example code for events, feature flags, and error capture (without PII)`,\n ];\n },\n getOutroNextSteps: () => [\n 'Use Posthog() class (not module-level posthog) with enable_exception_autocapture=True',\n 'Call posthog_client.shutdown() on application exit (use atexit.register)',\n 'NEVER send PII in event properties (no emails, names, or user content)',\n 'Use posthog_client.capture() for events and posthog_client.identify() for users',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
|
|
1
|
+
{"version":3,"file":"python-wizard-agent.js","sourceRoot":"","sources":["../../../src/python/python-wizard-agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,8DAAsE;AACtE,gFAA+E;AAC/E,gDAA+C;AAC/C,0DAA2B;AAC3B,4CAA8B;AAC9B,gDAAkC;AAClC,mCAMiB;AAMJ,QAAA,mBAAmB,GAAmC;IACjE,QAAQ,EAAE;QACR,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,uBAAW,CAAC,MAAM;QAC/B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,2CAA2C;QACpD,aAAa,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YAC9C,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAoB,EAAC,OAAO,CAAC,CAAC;YAC3D,OAAO,EAAE,cAAc,EAAE,CAAC;QAC5B,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,QAAQ;QACrB,kBAAkB,EAAE,QAAQ;QAC5B,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;QAC3B,gBAAgB,EAAE,8BAAsB;QACxC,cAAc,EAAE,OAAO;QACvB,mBAAmB,EAAE,CAAC,OAAsB,EAAE,EAAE,CAC9C,OAAO,CAAC,OAAO,CAAC,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAE/B,2CAA2C;YAC3C,MAAM,iBAAiB,GAAG,MAAM,IAAA,mBAAE,EAChC;gBACE,sBAAsB;gBACtB,mBAAmB;gBACnB,aAAa;gBACb,YAAY;aACb,EACD;gBACE,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,CAAC;aACjE,CACF,CAAC;YAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,wEAAwE;YACxE,mBAAmB;YACnB,MAAM,eAAe,GAAG,MAAM,IAAA,mBAAE,EAAC,cAAc,EAAE;gBAC/C,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,CAAC;aACjE,CAAC,CAAC;YAEH,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,EAC5B,OAAO,CACR,CAAC;oBACF,IACE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;wBAC1B,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAC1C,CAAC;wBACD,OAAO,KAAK,CAAC,CAAC,4CAA4C;oBAC5D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAED,kBAAkB;YAClB,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EACjC,OAAO,CACR,CAAC;oBACF,IACE,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC;wBACtC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,EAC9B,CAAC;wBACD,OAAO,KAAK,CAAC,CAAC,0CAA0C;oBAC1D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAE,EACtB,CAAC,WAAW,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,EAClE;gBACE,GAAG,EAAE,UAAU;gBACf,MAAM,EAAE;oBACN,YAAY;oBACZ,aAAa;oBACb,WAAW;oBACX,YAAY;oBACZ,mBAAmB;iBACpB;aACF,CACF,CAAC;YAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAC7B,OAAO,CACR,CAAC;oBACF,IACE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;wBACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;wBAChC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAC1B,CAAC;wBACD,OAAO,KAAK,CAAC,CAAC,0CAA0C;oBAC1D,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAED,6FAA6F;YAC7F,OAAO,IAAI,CAAC;QACd,CAAC;QACD,oBAAoB,EAAE,uDAA2B;KAClD;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,eAAe,EAAE,MAAM;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;YACnB,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAc;gBAC/C,CAAC,CAAC,IAAA,6BAAqB,EAAC,OAAO,CAAC,cAAc,CAAC;gBAC/C,CAAC,CAAC,SAAS,CAAC;YACd,OAAO;gBACL,cAAc,EAAE,kBAAkB;aACnC,CAAC;QACJ,CAAC;KACF;IAED,OAAO,EAAE;QACP,mBAAmB,EAAE,8CAA2B;QAChD,oBAAoB,EAClB,+GAA+G;QACjH,yBAAyB,EAAE,CAAC,OAAO,EAAE,EAAE;YACrC,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAc;gBAC/C,CAAC,CAAC,IAAA,6BAAqB,EAAC,OAAO,CAAC,cAAc,CAAC;gBAC/C,CAAC,CAAC,SAAS,CAAC;YAEd,MAAM,KAAK,GAAG;gBACZ,oBAAoB,kBAAkB,EAAE;gBACxC,oFAAoF;gBACpF,qFAAqF;gBACrF,EAAE;gBACF,4CAA4C;gBAC5C,EAAE;gBACF,0CAA0C;gBAC1C,6EAA6E;gBAC7E,EAAE;gBACF,UAAU;gBACV,6BAA6B;gBAC7B,2BAA2B;gBAC3B,6BAA6B;gBAC7B,sCAAsC;gBACtC,kBAAkB;gBAClB,mEAAmE;gBACnE,GAAG;gBACH,EAAE;gBACF,yBAAyB;gBACzB,gBAAgB;gBAChB,mEAAmE;gBACnE,EAAE;gBACF,qCAAqC;gBACrC,qHAAqH;gBACrH,EAAE;gBACF,6DAA6D;gBAC7D,qCAAqC;gBACrC,mBAAmB;gBACnB,cAAc;gBACd,iBAAiB;gBACjB,sBAAsB;gBACtB,gBAAgB;gBAChB,qEAAqE;gBACrE,EAAE;gBACF,wBAAwB;gBACxB,+DAA+D;gBAC/D,uDAAuD;gBACvD,uDAAuD;gBACvD,iDAAiD;gBACjD,IAAI;gBACJ,EAAE;gBACF,0BAA0B;gBAC1B,uDAAuD;gBACvD,qDAAqD;gBACrD,4DAA4D;gBAC5D,2CAA2C;gBAC3C,IAAI;gBACJ,EAAE;gBACF,oCAAoC;gBACpC,qGAAqG;gBACrG,EAAE;gBACF,eAAe;gBACf,6EAA6E;gBAC7E,EAAE;gBACF,qEAAqE;gBACrE,oDAAoD;gBACpD,gEAAgE;gBAChE,EAAE;gBACF,4BAA4B;gBAC5B,sDAAsD;gBACtD,EAAE;gBACF,mCAAmC;gBACnC,6BAA6B;gBAC7B,EAAE;gBACF,iCAAiC;gBACjC,2BAA2B;gBAC3B,MAAM;gBACN,sBAAsB;gBACtB,kDAAkD;gBAClD,qDAAqD;gBACrD,2CAA2C;gBAC3C,6CAA6C;gBAC7C,uCAAuC;gBACvC,oDAAoD;gBACpD,eAAe;gBACf,2BAA2B;gBAC3B,oEAAoE;gBACpE,EAAE;gBACF,8GAA8G;aAC/G,CAAC;YAEF,OAAO,KAAK,CAAC;QACf,CAAC;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,kBAAkB,GAAG,OAAO,CAAC,cAAc;gBAC/C,CAAC,CAAC,IAAA,6BAAqB,EAAC,OAAO,CAAC,cAAc,CAAC;gBAC/C,CAAC,CAAC,iBAAiB,CAAC;YACtB,OAAO;gBACL,wCAAwC;gBACxC,8CAA8C,kBAAkB,EAAE;gBAClE,yEAAyE;gBACzE,wDAAwD;gBACxD,+EAA+E;aAChF,CAAC;QACJ,CAAC;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,uFAAuF;YACvF,0EAA0E;YAC1E,wEAAwE;YACxE,iFAAiF;YACjF,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* Generic Python language wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { PYTHON_PACKAGE_INSTALLATION } from '../lib/framework-config';\nimport { detectPythonPackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n getPythonVersion,\n getPythonVersionBucket,\n detectPackageManager,\n getPackageManagerName,\n PythonPackageManager,\n} from './utils';\n\ntype PythonContext = {\n packageManager?: PythonPackageManager;\n};\n\nexport const PYTHON_AGENT_CONFIG: FrameworkConfig<PythonContext> = {\n metadata: {\n name: 'Python Language',\n integration: Integration.python,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/python',\n gatherContext: async (options: WizardOptions) => {\n const packageManager = await detectPackageManager(options);\n return { packageManager };\n },\n },\n\n detection: {\n packageName: 'python',\n packageDisplayName: 'Python',\n usesPackageJson: false,\n getVersion: () => undefined,\n getVersionBucket: getPythonVersionBucket,\n minimumVersion: '3.8.0',\n getInstalledVersion: (options: WizardOptions) =>\n Promise.resolve(getPythonVersion(options)),\n detect: async (options) => {\n const { installDir } = options;\n\n // Look for Python package management files\n const pythonConfigFiles = await fg(\n [\n '**/requirements*.txt',\n '**/pyproject.toml',\n '**/setup.py',\n '**/Pipfile',\n ],\n {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n },\n );\n\n if (pythonConfigFiles.length === 0) {\n return false;\n }\n\n // Make sure this isn't Django or Flask (those should be detected first)\n // Check for Django\n const managePyMatches = await fg('**/manage.py', {\n cwd: installDir,\n ignore: ['**/venv/**', '**/.venv/**', '**/env/**', '**/.env/**'],\n });\n\n for (const match of managePyMatches) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, match),\n 'utf-8',\n );\n if (\n content.includes('django') ||\n content.includes('DJANGO_SETTINGS_MODULE')\n ) {\n return false; // Django detected, use django agent instead\n }\n } catch {\n continue;\n }\n }\n\n // Check for Flask\n for (const configFile of pythonConfigFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, configFile),\n 'utf-8',\n );\n if (\n /^flask([<>=~!]|$|\\s)/im.test(content) ||\n /[\"']flask[\"']/i.test(content)\n ) {\n return false; // Flask detected, use flask agent instead\n }\n } catch {\n continue;\n }\n }\n\n const pyFiles = await fg(\n ['**/app.py', '**/wsgi.py', '**/application.py', '**/__init__.py'],\n {\n cwd: installDir,\n ignore: [\n '**/venv/**',\n '**/.venv/**',\n '**/env/**',\n '**/.env/**',\n '**/__pycache__/**',\n ],\n },\n );\n\n for (const pyFile of pyFiles) {\n try {\n const content = fs.readFileSync(\n path.join(installDir, pyFile),\n 'utf-8',\n );\n if (\n content.includes('from flask import') ||\n content.includes('import flask') ||\n /Flask\\s*\\(/.test(content)\n ) {\n return false; // Flask detected, use flask agent instead\n }\n } catch {\n continue;\n }\n }\n\n // If we have Python config files but it's not Django or Flask, it's a generic Python project\n return true;\n },\n detectPackageManager: detectPythonPackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_API_KEY: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => {\n const packageManagerName = context.packageManager\n ? getPackageManagerName(context.packageManager)\n : 'unknown';\n return {\n packageManager: packageManagerName,\n };\n },\n },\n\n prompts: {\n packageInstallation: PYTHON_PACKAGE_INSTALLATION,\n projectTypeDetection:\n 'This is a generic Python project. Look for requirements.txt, pyproject.toml, setup.py, or Pipfile to confirm.',\n getAdditionalContextLines: (context) => {\n const packageManagerName = context.packageManager\n ? getPackageManagerName(context.packageManager)\n : 'unknown';\n\n const lines = [\n `Package manager: ${packageManagerName}`,\n `Framework docs ID: python (use posthog://docs/frameworks/python for documentation)`,\n `Project type: Generic Python application (CLI, script, worker, data pipeline, etc.)`,\n ``,\n `## CRITICAL: Python PostHog Best Practices`,\n ``,\n `### 1. Use Instance-Based API (REQUIRED)`,\n `Always use the Posthog() class constructor instead of module-level posthog:`,\n ``,\n `CORRECT:`,\n `from posthog import Posthog`,\n `posthog_client = Posthog(`,\n ` api_key=\"your_api_key\",`,\n ` host=\"https://us.i.posthog.com\",`,\n ` debug=False,`,\n ` enable_exception_autocapture=True, # Auto-capture exceptions`,\n `)`,\n ``,\n `INCORRECT (DO NOT USE):`,\n `import posthog`,\n `posthog.api_key = \"your_api_key\" # Don't use module-level config`,\n ``,\n `### 2. Enable Exception Autocapture`,\n `ALWAYS include enable_exception_autocapture=True in the Posthog() initialization to automatically track exceptions.`,\n ``,\n `### 3. NEVER Send PII (Personally Identifiable Information)`,\n `DO NOT include in event properties:`,\n `- Email addresses`,\n `- Full names`,\n `- Phone numbers`,\n `- Physical addresses`,\n `- IP addresses`,\n `- Any user-generated content (messages, comments, form submissions)`,\n ``,\n `SAFE event properties:`,\n `posthog_client.capture('contact_form_submitted', properties={`,\n ` 'message_length': len(message), # Metadata is OK`,\n ` 'has_email': bool(email), # Boolean flags are OK`,\n ` 'form_type': 'contact' # Categories are OK`,\n `})`,\n ``,\n `UNSAFE (DO NOT DO THIS):`,\n `posthog_client.capture('form_submitted', properties={`,\n ` 'email': user_email, # NEVER send actual email`,\n ` 'message': message_content, # NEVER send user content`,\n ` 'name': user_name # NEVER send names`,\n `})`,\n ``,\n `### 4. Implement Graceful Shutdown`,\n `ALWAYS call posthog_client.shutdown() when your application exits to ensure all events are flushed:`,\n ``,\n `import atexit`,\n `atexit.register(posthog_client.shutdown) # Ensures events are sent on exit`,\n ``,\n `For Django, use AppConfig.ready() to register the shutdown handler.`,\n `For Flask, use @app.teardown_appcontext or atexit.`,\n `For scripts/workers, call shutdown() explicitly or use atexit.`,\n ``,\n `### 5. For Django Projects`,\n `Initialize PostHog in your AppConfig.ready() method:`,\n ``,\n `from django.apps import AppConfig`,\n `from posthog import Posthog`,\n ``,\n `class YourAppConfig(AppConfig):`,\n ` posthog_client = None`,\n ` `,\n ` def ready(self):`,\n ` if YourAppConfig.posthog_client is None:`,\n ` YourAppConfig.posthog_client = Posthog(`,\n ` settings.POSTHOG_API_KEY,`,\n ` host=settings.POSTHOG_HOST,`,\n ` debug=settings.DEBUG,`,\n ` enable_exception_autocapture=True,`,\n ` )`,\n ` import atexit`,\n ` atexit.register(YourAppConfig.posthog_client.shutdown)`,\n ``,\n `IMPORTANT: These best practices are MANDATORY. The implementation will fail review if they are not followed.`,\n ];\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const packageManagerName = context.packageManager\n ? getPackageManagerName(context.packageManager)\n : 'package manager';\n return [\n `Analyzed your Python project structure`,\n `Installed the PostHog Python package using ${packageManagerName}`,\n `Created PostHog initialization using instance-based API (Posthog class)`,\n `Configured exception autocapture and graceful shutdown`,\n `Added example code for events, feature flags, and error capture (without PII)`,\n ];\n },\n getOutroNextSteps: () => [\n 'Use Posthog() class (not module-level posthog) with enable_exception_autocapture=True',\n 'Call posthog_client.shutdown() on application exit (use atexit.register)',\n 'NEVER send PII in event properties (no emails, names, or user content)',\n 'Use posthog_client.capture() for events and posthog_client.identify() for users',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.REACT_NATIVE_AGENT_CONFIG = void 0;
|
|
4
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
4
5
|
const constants_1 = require("../lib/constants");
|
|
5
6
|
const package_json_1 = require("../utils/package-json");
|
|
6
7
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
@@ -31,6 +32,7 @@ exports.REACT_NATIVE_AGENT_CONFIG = {
|
|
|
31
32
|
? (0, package_json_1.hasPackageInstalled)('react-native', packageJson)
|
|
32
33
|
: false;
|
|
33
34
|
},
|
|
35
|
+
detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
|
|
34
36
|
},
|
|
35
37
|
environment: {
|
|
36
38
|
uploadToHosting: false,
|
|
@@ -46,7 +48,6 @@ exports.REACT_NATIVE_AGENT_CONFIG = {
|
|
|
46
48
|
},
|
|
47
49
|
prompts: {
|
|
48
50
|
projectTypeDetection: 'This is a React Native project. Look for package.json, android/ and ios/ directories, and lockfiles to confirm. Check for expo in package.json to determine the variant.',
|
|
49
|
-
packageInstallation: 'Look for lockfiles to determine the package manager (npm, yarn, pnpm). Do not manually edit package.json.',
|
|
50
51
|
getAdditionalContextLines: (context) => {
|
|
51
52
|
const isExpo = context.variant === utils_1.ReactNativeVariant.EXPO;
|
|
52
53
|
const frameworkId = 'react-native';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-native-wizard-agent.js","sourceRoot":"","sources":["../../../src/react-native/react-native-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,mCAKiB;AAMJ,QAAA,yBAAyB,GAAwC;IAC5E,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uBAAW,CAAC,WAAW;QACpC,OAAO,EAAE,iDAAiD;QAC1D,aAAa,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAwB,EAAC,OAAO,CAAC,CAAC;YACxD,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,cAAc;QAClC,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,cAAc,EAAE,WAA6B,CAAC;QAClE,gBAAgB,EAAE,mCAA2B;QAC7C,cAAc,EAAE,QAAQ;QACxB,mBAAmB,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,cAAc,EAAE,WAAW,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"react-native-wizard-agent.js","sourceRoot":"","sources":["../../../src/react-native/react-native-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* React Native wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { detectNodePackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport {\n getPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../utils/package-json';\nimport { getPackageDotJson, tryGetPackageJson } from '../utils/clack-utils';\nimport {\n detectReactNativeVariant,\n getReactNativeVariantName,\n getReactNativeVersionBucket,\n ReactNativeVariant,\n} from './utils';\n\ntype ReactNativeContext = {\n variant?: ReactNativeVariant;\n};\n\nexport const REACT_NATIVE_AGENT_CONFIG: FrameworkConfig<ReactNativeContext> = {\n metadata: {\n name: 'React Native',\n integration: Integration.reactNative,\n docsUrl: 'https://posthog.com/docs/libraries/react-native',\n gatherContext: async (options: WizardOptions) => {\n const variant = await detectReactNativeVariant(options);\n return { variant };\n },\n },\n\n detection: {\n packageName: 'react-native',\n packageDisplayName: 'React Native',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('react-native', packageJson as PackageDotJson),\n getVersionBucket: getReactNativeVersionBucket,\n minimumVersion: '0.73.0',\n getInstalledVersion: async (options: WizardOptions) => {\n const packageJson = await getPackageDotJson(options);\n return getPackageVersion('react-native', packageJson);\n },\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson\n ? hasPackageInstalled('react-native', packageJson)\n : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_API_KEY: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n variant:\n context.variant === ReactNativeVariant.EXPO ? 'expo' : 'react-native',\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a React Native project. Look for package.json, android/ and ios/ directories, and lockfiles to confirm. Check for expo in package.json to determine the variant.',\n getAdditionalContextLines: (context) => {\n const isExpo = context.variant === ReactNativeVariant.EXPO;\n const frameworkId = 'react-native';\n\n const lines = [\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n `Variant: ${isExpo ? 'Expo' : 'React Native'}`,\n ];\n\n if (isExpo) {\n lines.push(\n 'Use `npx expo install` for package installation.',\n 'Use EXPO_PUBLIC_ prefix for environment variables exposed to the client.',\n );\n } else {\n lines.push(\n 'This is a React Native project without Expo. Native linking may be required.',\n 'For iOS, ensure pods are installed after adding PostHog.',\n );\n }\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 10,\n getOutroChanges: (context) => {\n const variant = context.variant ?? ReactNativeVariant.REACT_NATIVE;\n const variantName = getReactNativeVariantName(variant);\n return [\n `Analyzed your React Native project structure (${variantName})`,\n `Installed and configured the PostHog React Native SDK`,\n `Integrated PostHog into your application`,\n ];\n },\n getOutroNextSteps: (context) => {\n const isExpo = context.variant === ReactNativeVariant.EXPO;\n const steps = [];\n\n if (!isExpo) {\n steps.push('Run `npx pod-install` to install iOS dependencies');\n }\n\n steps.push(\n isExpo\n ? 'Start your development server with `npx expo start` to see PostHog in action'\n : 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n );\n\n return steps;\n },\n },\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.REACT_ROUTER_AGENT_CONFIG = void 0;
|
|
4
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
4
5
|
const constants_1 = require("../lib/constants");
|
|
5
6
|
const package_json_1 = require("../utils/package-json");
|
|
6
7
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
@@ -32,6 +33,7 @@ exports.REACT_ROUTER_AGENT_CONFIG = {
|
|
|
32
33
|
? (0, package_json_1.hasPackageInstalled)('react-router', packageJson)
|
|
33
34
|
: false;
|
|
34
35
|
},
|
|
36
|
+
detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
|
|
35
37
|
},
|
|
36
38
|
environment: {
|
|
37
39
|
uploadToHosting: false,
|
|
@@ -47,7 +49,6 @@ exports.REACT_ROUTER_AGENT_CONFIG = {
|
|
|
47
49
|
},
|
|
48
50
|
prompts: {
|
|
49
51
|
projectTypeDetection: 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',
|
|
50
|
-
packageInstallation: 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',
|
|
51
52
|
getAdditionalContextLines: (context) => {
|
|
52
53
|
const routerMode = context.routerMode;
|
|
53
54
|
const modeName = routerMode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-router-wizard-agent.js","sourceRoot":"","sources":["../../../src/react-router/react-router-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,mCAKiB;AAMJ,QAAA,yBAAyB,GAAwC;IAC5E,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uBAAW,CAAC,WAAW;QACpC,OAAO,EAAE,0CAA0C;QACnD,yBAAyB,EAAE,0CAA0C;QACrE,aAAa,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAkB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,cAAc;QAC3B,kBAAkB,EAAE,cAAc;QAClC,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,cAAc,EAAE,WAA6B,CAAC;QAClE,gBAAgB,EAAE,mCAA2B;QAC7C,cAAc,EAAE,OAAO;QACvB,mBAAmB,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,cAAc,EAAE,WAAW,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"react-router-wizard-agent.js","sourceRoot":"","sources":["../../../src/react-router/react-router-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* React Router wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { detectNodePackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport {\n getPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../utils/package-json';\nimport { getPackageDotJson, tryGetPackageJson } from '../utils/clack-utils';\nimport {\n getReactRouterMode,\n getReactRouterModeName,\n getReactRouterVersionBucket,\n ReactRouterMode,\n} from './utils';\n\ntype ReactRouterContext = {\n routerMode?: ReactRouterMode;\n};\n\nexport const REACT_ROUTER_AGENT_CONFIG: FrameworkConfig<ReactRouterContext> = {\n metadata: {\n name: 'React Router',\n integration: Integration.reactRouter,\n docsUrl: 'https://posthog.com/docs/libraries/react',\n unsupportedVersionDocsUrl: 'https://posthog.com/docs/libraries/react',\n gatherContext: async (options: WizardOptions) => {\n const routerMode = await getReactRouterMode(options);\n return { routerMode };\n },\n },\n\n detection: {\n packageName: 'react-router',\n packageDisplayName: 'React Router',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('react-router', packageJson as PackageDotJson),\n getVersionBucket: getReactRouterVersionBucket,\n minimumVersion: '6.0.0',\n getInstalledVersion: async (options: WizardOptions) => {\n const packageJson = await getPackageDotJson(options);\n return getPackageVersion('react-router', packageJson);\n },\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson\n ? hasPackageInstalled('react-router', packageJson)\n : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n REACT_APP_POSTHOG_KEY: apiKey,\n REACT_APP_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n routerMode: context.routerMode || 'unknown',\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: (context) => {\n const routerMode = context.routerMode;\n const modeName = routerMode\n ? getReactRouterModeName(routerMode)\n : 'unknown';\n\n // Map router mode to framework ID for MCP docs resource\n const frameworkIdMap: Record<ReactRouterMode, string> = {\n [ReactRouterMode.V6]: 'react-react-router-6',\n [ReactRouterMode.V7_FRAMEWORK]: 'react-react-router-7-framework',\n [ReactRouterMode.V7_DATA]: 'react-react-router-7-data',\n [ReactRouterMode.V7_DECLARATIVE]: 'react-react-router-7-declarative',\n };\n\n const frameworkId = routerMode\n ? frameworkIdMap[routerMode]\n : ReactRouterMode.V7_FRAMEWORK;\n\n return [\n `Router mode: ${modeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 8,\n getOutroChanges: (context) => {\n const modeName = context.routerMode\n ? getReactRouterModeName(context.routerMode)\n : 'React Router';\n return [\n `Analyzed your React Router project structure (${modeName})`,\n `Created and configured PostHog initializers`,\n `Integrated PostHog into your application`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
|
package/dist/src/run.js
CHANGED
|
@@ -75,12 +75,21 @@ async function runWizard(argv) {
|
|
|
75
75
|
process.exit(1);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
+
const DETECTION_TIMEOUT_MS = 5000;
|
|
78
79
|
async function detectIntegration(options) {
|
|
79
80
|
for (const integration of Object.values(constants_1.Integration)) {
|
|
80
81
|
const config = registry_1.FRAMEWORK_REGISTRY[integration];
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
try {
|
|
83
|
+
const detected = await Promise.race([
|
|
84
|
+
config.detection.detect(options),
|
|
85
|
+
new Promise((resolve) => setTimeout(() => resolve(false), DETECTION_TIMEOUT_MS)),
|
|
86
|
+
]);
|
|
87
|
+
if (detected) {
|
|
88
|
+
return integration;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Skip frameworks whose detection throws
|
|
84
93
|
}
|
|
85
94
|
}
|
|
86
95
|
}
|
|
@@ -91,6 +100,7 @@ async function getIntegrationForSetup(options) {
|
|
|
91
100
|
clack_1.default.log.success(`Detected integration: ${registry_1.FRAMEWORK_REGISTRY[detectedIntegration].metadata.name}`);
|
|
92
101
|
return detectedIntegration;
|
|
93
102
|
}
|
|
103
|
+
clack_1.default.log.info("I couldn't detect your framework. Please choose one to get started.");
|
|
94
104
|
}
|
|
95
105
|
const integration = await (0, clack_utils_1.abortIfCancelled)(clack_1.default.select({
|
|
96
106
|
message: 'What do you want to set up?',
|
package/dist/src/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/run.ts"],"names":[],"mappings":"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","sourcesContent":["import { abortIfCancelled } from './utils/clack-utils';\n\nimport type { CloudRegion, WizardOptions } from './utils/types';\n\nimport { Integration } from './lib/constants';\nimport { readEnvironment } from './utils/environment';\nimport clack from './utils/clack';\nimport path from 'path';\nimport { FRAMEWORK_REGISTRY } from './lib/registry';\nimport { analytics } from './utils/analytics';\nimport { runAgentWizard } from './lib/agent-runner';\nimport { EventEmitter } from 'events';\nimport chalk from 'chalk';\nimport { logToFile } from './utils/debug';\n\nEventEmitter.defaultMaxListeners = 50;\n\ntype Args = {\n integration?: Integration;\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n region?: CloudRegion;\n default?: boolean;\n signup?: boolean;\n localMcp?: boolean;\n ci?: boolean;\n apiKey?: string;\n menu?: boolean;\n};\n\nexport async function runWizard(argv: Args) {\n const finalArgs = {\n ...argv,\n ...readEnvironment(),\n };\n\n let resolvedInstallDir: string;\n if (finalArgs.installDir) {\n if (path.isAbsolute(finalArgs.installDir)) {\n resolvedInstallDir = finalArgs.installDir;\n } else {\n resolvedInstallDir = path.join(process.cwd(), finalArgs.installDir);\n }\n } else {\n resolvedInstallDir = process.cwd();\n }\n\n const wizardOptions: WizardOptions = {\n debug: finalArgs.debug ?? false,\n forceInstall: finalArgs.forceInstall ?? false,\n installDir: resolvedInstallDir,\n cloudRegion: finalArgs.region ?? undefined,\n default: finalArgs.default ?? false,\n signup: finalArgs.signup ?? false,\n localMcp: finalArgs.localMcp ?? false,\n ci: finalArgs.ci ?? false,\n apiKey: finalArgs.apiKey,\n menu: finalArgs.menu ?? false,\n };\n\n clack.intro(`Welcome to the PostHog setup wizard ✨`);\n\n if (wizardOptions.ci) {\n clack.log.info(chalk.dim('Running in CI mode'));\n }\n\n const integration =\n finalArgs.integration ?? (await getIntegrationForSetup(wizardOptions));\n\n analytics.setTag('integration', integration);\n\n const config = FRAMEWORK_REGISTRY[integration];\n\n try {\n await runAgentWizard(config, wizardOptions);\n } catch (error) {\n analytics.captureException(error as Error, {\n integration,\n arguments: JSON.stringify(finalArgs),\n });\n\n await analytics.shutdown('error');\n\n const errorMessage = error instanceof Error ? error.message : String(error);\n const errorStack =\n error instanceof Error && error.stack ? error.stack : undefined;\n\n // Log to file for debugging\n logToFile(`[Wizard run.ts] ERROR MESSAGE: ${errorMessage} `);\n if (errorStack) {\n logToFile(`[Wizard run.ts] ERROR STACK: ${errorStack}`);\n }\n\n clack.log.error(\n `Something went wrong: ${chalk.red(\n errorMessage,\n )}\\n\\nYou can read the documentation at ${chalk.cyan(\n config.metadata.docsUrl,\n )} to set up PostHog manually.`,\n );\n\n if (wizardOptions.debug && errorStack) {\n clack.log.info(chalk.dim(errorStack));\n }\n\n process.exit(1);\n }\n}\n\nconst DETECTION_TIMEOUT_MS = 5000;\n\nasync function detectIntegration(\n options: Pick<WizardOptions, 'installDir'>,\n): Promise<Integration | undefined> {\n for (const integration of Object.values(Integration)) {\n const config = FRAMEWORK_REGISTRY[integration];\n try {\n const detected = await Promise.race([\n config.detection.detect(options),\n new Promise<false>((resolve) =>\n setTimeout(() => resolve(false), DETECTION_TIMEOUT_MS),\n ),\n ]);\n if (detected) {\n return integration;\n }\n } catch {\n // Skip frameworks whose detection throws\n }\n }\n}\n\nasync function getIntegrationForSetup(\n options: Pick<WizardOptions, 'installDir' | 'menu'>,\n) {\n if (!options.menu) {\n const detectedIntegration = await detectIntegration(options);\n\n if (detectedIntegration) {\n clack.log.success(\n `Detected integration: ${FRAMEWORK_REGISTRY[detectedIntegration].metadata.name}`,\n );\n return detectedIntegration;\n }\n\n clack.log.info(\n \"I couldn't detect your framework. Please choose one to get started.\",\n );\n }\n\n const integration: Integration = await abortIfCancelled(\n clack.select({\n message: 'What do you want to set up?',\n options: Object.values(Integration).map((value) => ({\n value,\n label: FRAMEWORK_REGISTRY[value].metadata.name,\n })),\n }),\n );\n\n return integration;\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SVELTEKIT_AGENT_CONFIG = void 0;
|
|
4
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
4
5
|
const constants_1 = require("../lib/constants");
|
|
5
6
|
const package_json_1 = require("../utils/package-json");
|
|
6
7
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
@@ -25,6 +26,7 @@ exports.SVELTEKIT_AGENT_CONFIG = {
|
|
|
25
26
|
: false;
|
|
26
27
|
},
|
|
27
28
|
minimumVersion: '2.0.0',
|
|
29
|
+
detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
|
|
28
30
|
},
|
|
29
31
|
environment: {
|
|
30
32
|
uploadToHosting: true,
|
|
@@ -38,7 +40,6 @@ exports.SVELTEKIT_AGENT_CONFIG = {
|
|
|
38
40
|
},
|
|
39
41
|
prompts: {
|
|
40
42
|
projectTypeDetection: 'This is a JavaScript/TypeScript project using SvelteKit. Look for package.json, svelte.config.js, and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',
|
|
41
|
-
packageInstallation: 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',
|
|
42
43
|
getAdditionalContextLines: () => [
|
|
43
44
|
'Framework docs ID: sveltekit (use posthog://docs/frameworks/sveltekit for documentation)',
|
|
44
45
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svelte-wizard-agent.js","sourceRoot":"","sources":["../../../src/svelte/svelte-wizard-agent.ts"],"names":[],"mappings":";;;AAEA,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAAyD;AAI5C,QAAA,sBAAsB,GAAsC;IACvE,QAAQ,EAAE;QACR,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uBAAW,CAAC,SAAS;QAClC,OAAO,EAAE,2CAA2C;QACpD,IAAI,EAAE,IAAI;QACV,oBAAoB,EAAE;YACpB,MAAM,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE;SAC9C;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,eAAe;QAC5B,kBAAkB,EAAE,WAAW;QAC/B,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,eAAe,EAAE,WAA6B,CAAC;QACnE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,eAAe,EAAE,WAAW,CAAC;gBACnD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;QACD,cAAc,EAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"svelte-wizard-agent.js","sourceRoot":"","sources":["../../../src/svelte/svelte-wizard-agent.ts"],"names":[],"mappings":";;;AAEA,gFAA6E;AAC7E,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAAyD;AAI5C,QAAA,sBAAsB,GAAsC;IACvE,QAAQ,EAAE;QACR,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uBAAW,CAAC,SAAS;QAClC,OAAO,EAAE,2CAA2C;QACpD,IAAI,EAAE,IAAI;QACV,oBAAoB,EAAE;YACpB,MAAM,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE;SAC9C;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,eAAe;QAC5B,kBAAkB,EAAE,WAAW;QAC/B,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,eAAe,EAAE,WAA6B,CAAC;QACnE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,eAAe,EAAE,WAAW,CAAC;gBACnD,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;QACD,cAAc,EAAE,OAAO;QACvB,oBAAoB,EAAE,qDAAyB;KAChD;IAED,WAAW,EAAE;QACX,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,kBAAkB,EAAE,MAAM;YAC1B,mBAAmB,EAAE,IAAI;SAC1B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,uLAAuL;QACzL,yBAAyB,EAAE,GAAG,EAAE,CAAC;YAC/B,0FAA0F;SAC3F;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,2CAA2C;YAC3C,6CAA6C;YAC7C,0CAA0C;SAC3C;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wDAAwD;YACxD,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* SvelteKit wizard using posthog-agent with PostHog MCP */\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { detectNodePackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport {\n getPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../utils/package-json';\nimport { tryGetPackageJson } from '../utils/clack-utils';\n\ntype SvelteKitContext = Record<string, unknown>;\n\nexport const SVELTEKIT_AGENT_CONFIG: FrameworkConfig<SvelteKitContext> = {\n metadata: {\n name: 'SvelteKit',\n integration: Integration.sveltekit,\n docsUrl: 'https://posthog.com/docs/libraries/svelte',\n beta: true,\n additionalMcpServers: {\n svelte: { url: 'https://mcp.svelte.dev/mcp' },\n },\n },\n\n detection: {\n packageName: '@sveltejs/kit',\n packageDisplayName: 'SvelteKit',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('@sveltejs/kit', packageJson as PackageDotJson),\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson\n ? hasPackageInstalled('@sveltejs/kit', packageJson)\n : false;\n },\n minimumVersion: '2.0.0',\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: true,\n getEnvVars: (apiKey: string, host: string) => ({\n PUBLIC_POSTHOG_KEY: apiKey,\n PUBLIC_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project using SvelteKit. Look for package.json, svelte.config.js, and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: () => [\n 'Framework docs ID: sveltekit (use posthog://docs/frameworks/sveltekit for documentation)',\n ],\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 8,\n getOutroChanges: () => [\n 'Analyzed your SvelteKit project structure',\n 'Created and configured PostHog initializers',\n 'Integrated PostHog into your application',\n ],\n getOutroNextSteps: () => [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
|
|
@@ -37,6 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.SWIFT_AGENT_CONFIG = void 0;
|
|
40
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
40
41
|
const constants_1 = require("../lib/constants");
|
|
41
42
|
const fast_glob_1 = __importDefault(require("fast-glob"));
|
|
42
43
|
const fs = __importStar(require("node:fs"));
|
|
@@ -89,6 +90,7 @@ exports.SWIFT_AGENT_CONFIG = {
|
|
|
89
90
|
}
|
|
90
91
|
return false;
|
|
91
92
|
},
|
|
93
|
+
detectPackageManager: package_manager_detection_1.swiftPackageManager,
|
|
92
94
|
},
|
|
93
95
|
environment: {
|
|
94
96
|
uploadToHosting: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swift-wizard-agent.js","sourceRoot":"","sources":["../../../src/swift/swift-wizard-agent.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,gDAA+C;AAC/C,0DAA2B;AAC3B,4CAA8B;AAC9B,gDAAkC;AAClC,mCAIiB;AAMJ,QAAA,kBAAkB,GAAkC;IAC/D,QAAQ,EAAE;QACR,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,uBAAW,CAAC,KAAK;QAC9B,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,wCAAwC;QACjD,YAAY,EACV,kHAAkH;QACpH,aAAa,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YAC9C,MAAM,WAAW,GAAG,MAAM,IAAA,8BAAsB,EAAC,OAAO,CAAC,CAAC;YAC1D,OAAO,EAAE,WAAW,EAAE,CAAC;QACzB,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,aAAa;QAC1B,kBAAkB,EAAE,OAAO;QAC3B,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;QAC3B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;YAE/B,0BAA0B;YAC1B,MAAM,aAAa,GAAG,MAAM,IAAA,mBAAE,EAAC,aAAa,EAAE;gBAC5C,GAAG,EAAE,UAAU;gBACf,eAAe,EAAE,IAAI;aACtB,CAAC,CAAC;YAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,wCAAwC;gBACxC,MAAM,UAAU,GAAG,MAAM,IAAA,mBAAE,EAAC,YAAY,EAAE;oBACxC,GAAG,EAAE,UAAU;oBACf,MAAM,EAAE;wBACN,cAAc;wBACd,mBAAmB;wBACnB,aAAa;wBACb,mBAAmB;wBACnB,YAAY;qBACb;iBACF,CAAC,CAAC;gBACH,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1B,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;YAChE,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;
|
|
1
|
+
{"version":3,"file":"swift-wizard-agent.js","sourceRoot":"","sources":["../../../src/swift/swift-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* Swift wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { swiftPackageManager } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport fg from 'fast-glob';\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport {\n detectSwiftProjectType,\n getSwiftProjectTypeName,\n SwiftProjectType,\n} from './utils';\n\ntype SwiftContext = {\n projectType?: SwiftProjectType;\n};\n\nexport const SWIFT_AGENT_CONFIG: FrameworkConfig<SwiftContext> = {\n metadata: {\n name: 'Swift (iOS/macOS)',\n integration: Integration.swift,\n beta: true,\n docsUrl: 'https://posthog.com/docs/libraries/ios',\n preRunNotice:\n 'Please close the Xcode project before proceeding. Xcode may overwrite changes the wizard makes to project files.',\n gatherContext: async (options: WizardOptions) => {\n const projectType = await detectSwiftProjectType(options);\n return { projectType };\n },\n },\n\n detection: {\n packageName: 'posthog-ios',\n packageDisplayName: 'Swift',\n usesPackageJson: false,\n getVersion: () => undefined,\n detect: async (options) => {\n const { installDir } = options;\n\n // Check for Xcode project\n const xcodeProjects = await fg('*.xcodeproj', {\n cwd: installDir,\n onlyDirectories: true,\n });\n\n if (xcodeProjects.length > 0) {\n // Verify it contains Swift source files\n const swiftFiles = await fg('**/*.swift', {\n cwd: installDir,\n ignore: [\n '**/.build/**',\n '**/DerivedData/**',\n '**/build/**',\n '**/*.xcodeproj/**',\n '**/Pods/**',\n ],\n });\n if (swiftFiles.length > 0) {\n return true;\n }\n }\n\n // Check for Swift Package Manager project\n const packageSwiftPath = path.join(installDir, 'Package.swift');\n if (fs.existsSync(packageSwiftPath)) {\n return true;\n }\n\n return false;\n },\n detectPackageManager: swiftPackageManager,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n POSTHOG_API_KEY: apiKey,\n POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n projectType: context.projectType || 'unknown',\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a Swift project. Look for .xcodeproj directories, Package.swift, and .swift source files to confirm. Check for SwiftUI or UIKit imports to determine the UI framework.',\n packageInstallation:\n 'Add the posthog-ios package via Swift Package Manager. For Xcode projects, add XCRemoteSwiftPackageReference and XCSwiftPackageProductDependency to the .pbxproj file. For Swift packages, add the dependency to Package.swift.',\n getAdditionalContextLines: (context) => {\n const projectTypeName = context.projectType\n ? getSwiftProjectTypeName(context.projectType)\n : 'unknown';\n\n const lines = [\n `Project type: ${projectTypeName}`,\n `Framework docs ID: swift (use posthog://docs/frameworks/swift for documentation)`,\n ];\n\n return lines;\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: (context) => {\n const projectTypeName = context.projectType\n ? getSwiftProjectTypeName(context.projectType)\n : 'Swift';\n\n const changes = [\n `Analyzed your ${projectTypeName} project structure`,\n `Added the PostHog iOS SDK via Swift Package Manager`,\n `Configured PostHog initialization in your app entry point`,\n `Added event capture and user identification`,\n ];\n\n return changes;\n },\n getOutroNextSteps: () => [\n 'Set POSTHOG_API_KEY and POSTHOG_HOST in your Xcode scheme environment variables',\n 'Build and run your app to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TANSTACK_ROUTER_AGENT_CONFIG = void 0;
|
|
4
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
4
5
|
const constants_1 = require("../lib/constants");
|
|
5
6
|
const package_json_1 = require("../utils/package-json");
|
|
6
7
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
@@ -36,6 +37,7 @@ exports.TANSTACK_ROUTER_AGENT_CONFIG = {
|
|
|
36
37
|
}
|
|
37
38
|
return (0, package_json_1.hasPackageInstalled)('@tanstack/react-router', packageJson);
|
|
38
39
|
},
|
|
40
|
+
detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
|
|
39
41
|
},
|
|
40
42
|
environment: {
|
|
41
43
|
uploadToHosting: false,
|
|
@@ -51,7 +53,6 @@ exports.TANSTACK_ROUTER_AGENT_CONFIG = {
|
|
|
51
53
|
},
|
|
52
54
|
prompts: {
|
|
53
55
|
projectTypeDetection: 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',
|
|
54
|
-
packageInstallation: 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',
|
|
55
56
|
getAdditionalContextLines: (context) => {
|
|
56
57
|
const routerMode = context.routerMode;
|
|
57
58
|
const modeName = routerMode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-router-wizard-agent.js","sourceRoot":"","sources":["../../../src/tanstack-router/tanstack-router-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,mCAKiB;AAMJ,QAAA,4BAA4B,GACvC;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,uBAAW,CAAC,cAAc;QACvC,OAAO,EAAE,0CAA0C;QACnD,aAAa,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YAC9C,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAqB,EAAC,OAAO,CAAC,CAAC;YACxD,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,CAAC;KACF;IAED,SAAS,EAAE;QACT,WAAW,EAAE,wBAAwB;QACrC,kBAAkB,EAAE,iBAAiB;QACrC,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EACf,wBAAwB,EACxB,WAA6B,CAC9B;QACH,gBAAgB,EAAE,sCAA8B;QAChD,cAAc,EAAE,OAAO;QACvB,mBAAmB,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,oEAAoE;YACpE,IAAI,IAAA,kCAAmB,EAAC,uBAAuB,EAAE,WAAW,CAAC,EAAE,CAAC;gBAC9D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAA,kCAAmB,EAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;QACpE,CAAC;
|
|
1
|
+
{"version":3,"file":"tanstack-router-wizard-agent.js","sourceRoot":"","sources":["../../../src/tanstack-router/tanstack-router-wizard-agent.ts"],"names":[],"mappings":"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","sourcesContent":["/* TanStack Router wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { detectNodePackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport {\n getPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../utils/package-json';\nimport { getPackageDotJson, tryGetPackageJson } from '../utils/clack-utils';\nimport {\n getTanStackRouterMode,\n getTanStackRouterModeName,\n getTanStackRouterVersionBucket,\n TanStackRouterMode,\n} from './utils';\n\ntype TanStackRouterContext = {\n routerMode?: TanStackRouterMode;\n};\n\nexport const TANSTACK_ROUTER_AGENT_CONFIG: FrameworkConfig<TanStackRouterContext> =\n {\n metadata: {\n name: 'React (TanStack Router)',\n integration: Integration.tanstackRouter,\n docsUrl: 'https://posthog.com/docs/libraries/react',\n gatherContext: async (options: WizardOptions) => {\n const routerMode = await getTanStackRouterMode(options);\n return { routerMode };\n },\n },\n\n detection: {\n packageName: '@tanstack/react-router',\n packageDisplayName: 'TanStack Router',\n getVersion: (packageJson: unknown) =>\n getPackageVersion(\n '@tanstack/react-router',\n packageJson as PackageDotJson,\n ),\n getVersionBucket: getTanStackRouterVersionBucket,\n minimumVersion: '1.0.0',\n getInstalledVersion: async (options: WizardOptions) => {\n const packageJson = await getPackageDotJson(options);\n return getPackageVersion('@tanstack/react-router', packageJson);\n },\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n if (!packageJson) {\n return false;\n }\n // Exclude TanStack Start projects (they have their own integration)\n if (hasPackageInstalled('@tanstack/react-start', packageJson)) {\n return false;\n }\n return hasPackageInstalled('@tanstack/react-router', packageJson);\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n VITE_PUBLIC_POSTHOG_KEY: apiKey,\n VITE_PUBLIC_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: (context) => ({\n routerMode: context.routerMode || 'unknown',\n }),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: (context) => {\n const routerMode = context.routerMode;\n const modeName = routerMode\n ? getTanStackRouterModeName(routerMode)\n : 'unknown';\n\n // Map router mode to framework ID for MCP docs resource\n const frameworkIdMap: Record<TanStackRouterMode, string> = {\n [TanStackRouterMode.FILE_BASED]: 'react-tanstack-router-file-based',\n [TanStackRouterMode.CODE_BASED]: 'react-tanstack-router-code-based',\n };\n\n const frameworkId = routerMode\n ? frameworkIdMap[routerMode]\n : 'react-tanstack-router-file-based';\n\n return [\n `Router mode: ${modeName}`,\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 8,\n getOutroChanges: (context) => {\n const modeName = context.routerMode\n ? getTanStackRouterModeName(context.routerMode)\n : 'TanStack Router';\n return [\n `Analyzed your React (TanStack Router) project structure (${modeName})`,\n `Created and configured PostHog initializers`,\n `Integrated PostHog into your application`,\n ];\n },\n getOutroNextSteps: () => [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n };\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TANSTACK_START_AGENT_CONFIG = void 0;
|
|
4
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
4
5
|
const constants_1 = require("../lib/constants");
|
|
5
6
|
const package_json_1 = require("../utils/package-json");
|
|
6
7
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
@@ -27,6 +28,7 @@ exports.TANSTACK_START_AGENT_CONFIG = {
|
|
|
27
28
|
? (0, package_json_1.hasPackageInstalled)('@tanstack/react-start', packageJson)
|
|
28
29
|
: false;
|
|
29
30
|
},
|
|
31
|
+
detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
|
|
30
32
|
},
|
|
31
33
|
environment: {
|
|
32
34
|
uploadToHosting: false,
|
|
@@ -40,7 +42,6 @@ exports.TANSTACK_START_AGENT_CONFIG = {
|
|
|
40
42
|
},
|
|
41
43
|
prompts: {
|
|
42
44
|
projectTypeDetection: 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',
|
|
43
|
-
packageInstallation: 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',
|
|
44
45
|
getAdditionalContextLines: () => {
|
|
45
46
|
// TanStack Start always uses file-based routing (it's a full-stack framework built on TanStack Router)
|
|
46
47
|
const frameworkId = 'react-tanstack-start';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tanstack-start-wizard-agent.js","sourceRoot":"","sources":["../../../src/tanstack-start/tanstack-start-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,mCAAwD;AAI3C,QAAA,2BAA2B,GACtC;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uBAAW,CAAC,aAAa;QACtC,OAAO,EAAE,0CAA0C;KACpD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,uBAAuB;QACpC,kBAAkB,EAAE,gBAAgB;QACpC,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EACf,uBAAuB,EACvB,WAA6B,CAC9B;QACH,gBAAgB,EAAE,qCAA6B;QAC/C,cAAc,EAAE,OAAO;QACvB,mBAAmB,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,uBAAuB,EAAE,WAAW,CAAC;gBAC3D,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;
|
|
1
|
+
{"version":3,"file":"tanstack-start-wizard-agent.js","sourceRoot":"","sources":["../../../src/tanstack-start/tanstack-start-wizard-agent.ts"],"names":[],"mappings":";;;AAGA,gFAA6E;AAC7E,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,mCAAwD;AAI3C,QAAA,2BAA2B,GACtC;IACE,QAAQ,EAAE;QACR,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,uBAAW,CAAC,aAAa;QACtC,OAAO,EAAE,0CAA0C;KACpD;IAED,SAAS,EAAE;QACT,WAAW,EAAE,uBAAuB;QACpC,kBAAkB,EAAE,gBAAgB;QACpC,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EACf,uBAAuB,EACvB,WAA6B,CAC9B;QACH,gBAAgB,EAAE,qCAA6B;QAC/C,cAAc,EAAE,OAAO;QACvB,mBAAmB,EAAE,KAAK,EAAE,OAAsB,EAAE,EAAE;YACpD,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW;gBAChB,CAAC,CAAC,IAAA,kCAAmB,EAAC,uBAAuB,EAAE,WAAW,CAAC;gBAC3D,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;QACD,oBAAoB,EAAE,qDAAyB;KAChD;IAED,WAAW,EAAE;QACX,eAAe,EAAE,KAAK;QACtB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,uBAAuB,EAAE,MAAM;YAC/B,wBAAwB,EAAE,IAAI;SAC/B,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,oJAAoJ;QACtJ,yBAAyB,EAAE,GAAG,EAAE;YAC9B,uGAAuG;YACvG,MAAM,WAAW,GAAG,sBAAsB,CAAC;YAE3C,OAAO;gBACL,sBAAsB,WAAW,mCAAmC,WAAW,qBAAqB;aACrG,CAAC;QACJ,CAAC;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,gDAAgD;YAChD,6CAA6C;YAC7C,0CAA0C;SAC3C;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wDAAwD;YACxD,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* TanStack Start wizard using posthog-agent with PostHog MCP */\nimport type { WizardOptions } from '../utils/types';\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { detectNodePackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport {\n getPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../utils/package-json';\nimport { getPackageDotJson, tryGetPackageJson } from '../utils/clack-utils';\nimport { getTanStackStartVersionBucket } from './utils';\n\ntype TanStackStartContext = Record<string, unknown>;\n\nexport const TANSTACK_START_AGENT_CONFIG: FrameworkConfig<TanStackStartContext> =\n {\n metadata: {\n name: 'TanStack Start',\n integration: Integration.tanstackStart,\n docsUrl: 'https://posthog.com/docs/libraries/react',\n },\n\n detection: {\n packageName: '@tanstack/react-start',\n packageDisplayName: 'TanStack Start',\n getVersion: (packageJson: unknown) =>\n getPackageVersion(\n '@tanstack/react-start',\n packageJson as PackageDotJson,\n ),\n getVersionBucket: getTanStackStartVersionBucket,\n minimumVersion: '1.0.0',\n getInstalledVersion: async (options: WizardOptions) => {\n const packageJson = await getPackageDotJson(options);\n return getPackageVersion('@tanstack/react-start', packageJson);\n },\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson\n ? hasPackageInstalled('@tanstack/react-start', packageJson)\n : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: false,\n getEnvVars: (apiKey: string, host: string) => ({\n VITE_PUBLIC_POSTHOG_KEY: apiKey,\n VITE_PUBLIC_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: () => {\n // TanStack Start always uses file-based routing (it's a full-stack framework built on TanStack Router)\n const frameworkId = 'react-tanstack-start';\n\n return [\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 8,\n getOutroChanges: () => [\n `Analyzed your TanStack Start project structure`,\n `Created and configured PostHog initializers`,\n `Integrated PostHog into your application`,\n ],\n getOutroNextSteps: () => [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n };\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VUE_AGENT_CONFIG = void 0;
|
|
4
|
+
const package_manager_detection_1 = require("../lib/package-manager-detection");
|
|
4
5
|
const constants_1 = require("../lib/constants");
|
|
5
6
|
const package_json_1 = require("../utils/package-json");
|
|
6
7
|
const clack_utils_1 = require("../utils/clack-utils");
|
|
@@ -26,6 +27,7 @@ exports.VUE_AGENT_CONFIG = {
|
|
|
26
27
|
const packageJson = await (0, clack_utils_1.tryGetPackageJson)(options);
|
|
27
28
|
return packageJson ? (0, package_json_1.hasPackageInstalled)('vue', packageJson) : false;
|
|
28
29
|
},
|
|
30
|
+
detectPackageManager: package_manager_detection_1.detectNodePackageManagers,
|
|
29
31
|
},
|
|
30
32
|
environment: {
|
|
31
33
|
uploadToHosting: true,
|
|
@@ -39,7 +41,6 @@ exports.VUE_AGENT_CONFIG = {
|
|
|
39
41
|
},
|
|
40
42
|
prompts: {
|
|
41
43
|
projectTypeDetection: 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',
|
|
42
|
-
packageInstallation: 'Look for lockfiles to determine the package manager (npm, yarn, pnpm, bun). Do not manually edit package.json.',
|
|
43
44
|
getAdditionalContextLines: () => {
|
|
44
45
|
const frameworkId = 'vue';
|
|
45
46
|
return [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-wizard-agent.js","sourceRoot":"","sources":["../../../src/vue/vue-wizard-agent.ts"],"names":[],"mappings":";;;AAEA,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,4CAAsD;AAEtD,MAAM,mBAAmB,GAAG,IAAA,4BAAmB,GAAE,CAAC;AAIrC,QAAA,gBAAgB,GAAgC;IAC3D,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,uBAAW,CAAC,GAAG;QAC5B,OAAO,EAAE,wCAAwC;QACjD,IAAI,EAAE,IAAI;KACX;IAED,SAAS,EAAE;QACT,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,KAAK;QACzB,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,KAAK,EAAE,WAA6B,CAAC;QACzD,gBAAgB,EAAE,mBAAmB;QACrC,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW,CAAC,CAAC,CAAC,IAAA,kCAAmB,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,CAAC;
|
|
1
|
+
{"version":3,"file":"vue-wizard-agent.js","sourceRoot":"","sources":["../../../src/vue/vue-wizard-agent.ts"],"names":[],"mappings":";;;AAEA,gFAA6E;AAC7E,gDAA+C;AAC/C,wDAI+B;AAC/B,sDAA4E;AAC5E,4CAAsD;AAEtD,MAAM,mBAAmB,GAAG,IAAA,4BAAmB,GAAE,CAAC;AAIrC,QAAA,gBAAgB,GAAgC;IAC3D,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,uBAAW,CAAC,GAAG;QAC5B,OAAO,EAAE,wCAAwC;QACjD,IAAI,EAAE,IAAI;KACX;IAED,SAAS,EAAE;QACT,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,KAAK;QACzB,UAAU,EAAE,CAAC,WAAoB,EAAE,EAAE,CACnC,IAAA,gCAAiB,EAAC,KAAK,EAAE,WAA6B,CAAC;QACzD,gBAAgB,EAAE,mBAAmB;QACrC,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrC,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,IAAA,gCAAiB,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,MAAM,IAAA,+BAAiB,EAAC,OAAO,CAAC,CAAC;YACrD,OAAO,WAAW,CAAC,CAAC,CAAC,IAAA,kCAAmB,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,CAAC;QACD,oBAAoB,EAAE,qDAAyB;KAChD;IAED,WAAW,EAAE;QACX,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,CAAC;YAC7C,gBAAgB,EAAE,MAAM;YACxB,iBAAiB,EAAE,IAAI;SACxB,CAAC;KACH;IAED,SAAS,EAAE;QACT,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACpB;IAED,OAAO,EAAE;QACP,oBAAoB,EAClB,oJAAoJ;QACtJ,yBAAyB,EAAE,GAAG,EAAE;YAC9B,MAAM,WAAW,GAAG,KAAK,CAAC;YAC1B,OAAO;gBACL,sBAAsB,WAAW,mCAAmC,WAAW,qBAAqB;aACrG,CAAC;QACJ,CAAC;KACF;IAED,EAAE,EAAE;QACF,cAAc,EAAE,8BAA8B;QAC9C,wBAAwB,EAAE,CAAC;QAC3B,eAAe,EAAE,GAAG,EAAE,CAAC;YACrB,qCAAqC;YACrC,6CAA6C;YAC7C,0CAA0C;SAC3C;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC;YACvB,wDAAwD;YACxD,qDAAqD;SACtD;KACF;CACF,CAAC","sourcesContent":["/* Vue wizard using posthog-agent with PostHog MCP */\nimport type { FrameworkConfig } from '../lib/framework-config';\nimport { detectNodePackageManagers } from '../lib/package-manager-detection';\nimport { Integration } from '../lib/constants';\nimport {\n getPackageVersion,\n hasPackageInstalled,\n type PackageDotJson,\n} from '../utils/package-json';\nimport { getPackageDotJson, tryGetPackageJson } from '../utils/clack-utils';\nimport { createVersionBucket } from '../utils/semver';\n\nconst getVueVersionBucket = createVersionBucket();\n\ntype VueContext = Record<string, unknown>;\n\nexport const VUE_AGENT_CONFIG: FrameworkConfig<VueContext> = {\n metadata: {\n name: 'Vue',\n integration: Integration.vue,\n docsUrl: 'https://posthog.com/docs/libraries/vue',\n beta: true,\n },\n\n detection: {\n packageName: 'vue',\n packageDisplayName: 'Vue',\n getVersion: (packageJson: unknown) =>\n getPackageVersion('vue', packageJson as PackageDotJson),\n getVersionBucket: getVueVersionBucket,\n getInstalledVersion: async (options) => {\n const packageJson = await getPackageDotJson(options);\n return getPackageVersion('vue', packageJson);\n },\n detect: async (options) => {\n const packageJson = await tryGetPackageJson(options);\n return packageJson ? hasPackageInstalled('vue', packageJson) : false;\n },\n detectPackageManager: detectNodePackageManagers,\n },\n\n environment: {\n uploadToHosting: true,\n getEnvVars: (apiKey: string, host: string) => ({\n VITE_POSTHOG_KEY: apiKey,\n VITE_POSTHOG_HOST: host,\n }),\n },\n\n analytics: {\n getTags: () => ({}),\n },\n\n prompts: {\n projectTypeDetection:\n 'This is a JavaScript/TypeScript project. Look for package.json and lockfiles (package-lock.json, yarn.lock, pnpm-lock.yaml, bun.lockb) to confirm.',\n getAdditionalContextLines: () => {\n const frameworkId = 'vue';\n return [\n `Framework docs ID: ${frameworkId} (use posthog://docs/frameworks/${frameworkId} for documentation)`,\n ];\n },\n },\n\n ui: {\n successMessage: 'PostHog integration complete',\n estimatedDurationMinutes: 5,\n getOutroChanges: () => [\n 'Analyzed your Vue project structure',\n 'Created and configured PostHog initializers',\n 'Integrated PostHog into your application',\n ],\n getOutroNextSteps: () => [\n 'Start your development server to see PostHog in action',\n 'Visit your PostHog dashboard to see incoming events',\n ],\n },\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* In-process MCP server that reads/writes .env files locally.
|
|
3
|
-
* Secret values never leave the machine.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Create an in-process MCP server with env file tools.
|
|
7
|
-
* Must be called asynchronously because the SDK is an ESM module loaded via dynamic import.
|
|
8
|
-
*/
|
|
9
|
-
export declare function createEnvFileServer(workingDirectory: string): Promise<any>;
|
|
10
|
-
/** Tool names exposed by the env file server, for use in allowedTools */
|
|
11
|
-
export declare const ENV_FILE_TOOL_NAMES: string[];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env-file-tools.js","sourceRoot":"","sources":["../../../src/lib/env-file-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * In-process MCP server that reads/writes .env files locally.\n * Secret values never leave the machine.\n */\n\nimport path from 'path';\nimport fs from 'fs';\nimport { z } from 'zod';\nimport { logToFile } from '../utils/debug';\n\n// Dynamic import cache for ESM module (same pattern as agent-interface.ts)\nlet _sdkModule: any = null;\nasync function getSDKModule(): Promise<any> {\n if (!_sdkModule) {\n _sdkModule = await import('@anthropic-ai/claude-agent-sdk');\n }\n return _sdkModule;\n}\n\n/**\n * Resolve filePath relative to workingDirectory, rejecting path traversal.\n */\nfunction resolveEnvPath(workingDirectory: string, filePath: string): string {\n const resolved = path.resolve(workingDirectory, filePath);\n if (\n !resolved.startsWith(workingDirectory + path.sep) &&\n resolved !== workingDirectory\n ) {\n throw new Error(\n `Path traversal rejected: \"${filePath}\" resolves outside working directory`,\n );\n }\n return resolved;\n}\n\n/**\n * Ensure the given env file basename is covered by .gitignore in the working directory.\n * Creates .gitignore if it doesn't exist; appends the entry if missing.\n */\nfunction ensureGitignoreCoverage(\n workingDirectory: string,\n envFileName: string,\n): void {\n const gitignorePath = path.join(workingDirectory, '.gitignore');\n\n if (fs.existsSync(gitignorePath)) {\n const content = fs.readFileSync(gitignorePath, 'utf8');\n // Check if the file (or a glob covering it) is already listed\n if (content.split('\\n').some((line) => line.trim() === envFileName)) {\n return;\n }\n const newContent = content.endsWith('\\n')\n ? `${content}${envFileName}\\n`\n : `${content}\\n${envFileName}\\n`;\n fs.writeFileSync(gitignorePath, newContent, 'utf8');\n } else {\n fs.writeFileSync(gitignorePath, `${envFileName}\\n`, 'utf8');\n }\n}\n\n/**\n * Create an in-process MCP server with env file tools.\n * Must be called asynchronously because the SDK is an ESM module loaded via dynamic import.\n */\nexport async function createEnvFileServer(workingDirectory: string) {\n const sdk = await getSDKModule();\n const { tool, createSdkMcpServer } = sdk;\n\n const checkEnvKeys = tool(\n 'check_env_keys',\n 'Check which environment variable keys are present or missing in a .env file. Never reveals values.',\n {\n filePath: z\n .string()\n .describe('Path to the .env file, relative to the project root'),\n keys: z\n .array(z.string())\n .describe('Environment variable key names to check'),\n },\n (args: { filePath: string; keys: string[] }) => {\n const resolved = resolveEnvPath(workingDirectory, args.filePath);\n logToFile(`check_env_keys: ${resolved}, keys: ${args.keys.join(', ')}`);\n\n const existingKeys: Set<string> = new Set();\n if (fs.existsSync(resolved)) {\n const content = fs.readFileSync(resolved, 'utf8');\n for (const line of content.split('\\n')) {\n const match = line.match(/^\\s*([A-Za-z_][A-Za-z0-9_]*)\\s*=/);\n if (match) {\n existingKeys.add(match[1]);\n }\n }\n }\n\n const results: Record<string, 'present' | 'missing'> = {};\n for (const key of args.keys) {\n results[key] = existingKeys.has(key) ? 'present' : 'missing';\n }\n\n return {\n content: [\n { type: 'text' as const, text: JSON.stringify(results, null, 2) },\n ],\n };\n },\n );\n\n const setEnvValues = tool(\n 'set_env_values',\n 'Create or update environment variable keys in a .env file. Creates the file if it does not exist. Ensures .gitignore coverage.',\n {\n filePath: z\n .string()\n .describe('Path to the .env file, relative to the project root'),\n values: z\n .record(z.string(), z.string())\n .describe('Key-value pairs to set'),\n },\n (args: { filePath: string; values: Record<string, string> }) => {\n const resolved = resolveEnvPath(workingDirectory, args.filePath);\n logToFile(\n `set_env_values: ${resolved}, keys: ${Object.keys(args.values).join(\n ', ',\n )}`,\n );\n\n let content = '';\n if (fs.existsSync(resolved)) {\n content = fs.readFileSync(resolved, 'utf8');\n }\n\n const updatedKeys = new Set<string>();\n\n for (const [key, value] of Object.entries(args.values)) {\n const regex = new RegExp(`^(\\\\s*${key}\\\\s*=).*$`, 'm');\n if (regex.test(content)) {\n content = content.replace(regex, `$1${value}`);\n updatedKeys.add(key);\n }\n }\n\n // Append keys that weren't already in the file\n const newKeys = Object.entries(args.values).filter(\n ([key]) => !updatedKeys.has(key),\n );\n if (newKeys.length > 0) {\n if (content.length > 0 && !content.endsWith('\\n')) {\n content += '\\n';\n }\n for (const [key, value] of newKeys) {\n content += `${key}=${value}\\n`;\n }\n }\n\n // Ensure parent directory exists\n const dir = path.dirname(resolved);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n fs.writeFileSync(resolved, content, 'utf8');\n\n // Ensure .gitignore coverage for this env file\n const envFileName = path.basename(resolved);\n ensureGitignoreCoverage(workingDirectory, envFileName);\n\n return {\n content: [\n {\n type: 'text' as const,\n text: `Updated ${Object.keys(args.values).length} key(s) in ${\n args.filePath\n }`,\n },\n ],\n };\n },\n );\n\n return createSdkMcpServer({\n name: 'env-file-tools',\n version: '1.0.0',\n tools: [checkEnvKeys, setEnvValues],\n });\n}\n\n/** Tool names exposed by the env file server, for use in allowedTools */\nexport const ENV_FILE_TOOL_NAMES = [\n 'env-file-tools:check_env_keys',\n 'env-file-tools:set_env_values',\n];\n"]}
|