@posthog/wizard 2.7.0 → 2.9.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/README.md +11 -0
- package/dist/bin.js +289 -162
- package/dist/bin.js.map +1 -1
- package/dist/src/__tests__/cli.test.js +92 -59
- package/dist/src/__tests__/cli.test.js.map +1 -1
- package/dist/src/__tests__/wizard-abort.test.js +34 -13
- package/dist/src/__tests__/wizard-abort.test.js.map +1 -1
- package/dist/src/frameworks/android/android-wizard-agent.js +2 -2
- package/dist/src/frameworks/android/android-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/angular/angular-wizard-agent.js +2 -2
- package/dist/src/frameworks/angular/angular-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/astro/astro-wizard-agent.js +2 -2
- package/dist/src/frameworks/astro/astro-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/django/django-wizard-agent.js +2 -2
- package/dist/src/frameworks/django/django-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js +2 -2
- package/dist/src/frameworks/fastapi/fastapi-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/flask/flask-wizard-agent.js +2 -2
- package/dist/src/frameworks/flask/flask-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js +2 -2
- package/dist/src/frameworks/javascript-node/javascript-node-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js +2 -2
- package/dist/src/frameworks/javascript-web/javascript-web-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/laravel/laravel-wizard-agent.js +2 -2
- package/dist/src/frameworks/laravel/laravel-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js +2 -2
- package/dist/src/frameworks/nextjs/nextjs-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js +2 -2
- package/dist/src/frameworks/nuxt/nuxt-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/python/python-wizard-agent.js +2 -2
- package/dist/src/frameworks/python/python-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/rails/rails-wizard-agent.js +2 -2
- package/dist/src/frameworks/rails/rails-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/react-native/react-native-wizard-agent.js +2 -2
- package/dist/src/frameworks/react-native/react-native-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/react-router/react-router-wizard-agent.js +2 -2
- package/dist/src/frameworks/react-router/react-router-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/ruby/ruby-wizard-agent.js +2 -2
- package/dist/src/frameworks/ruby/ruby-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/svelte/svelte-wizard-agent.js +2 -2
- package/dist/src/frameworks/svelte/svelte-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/swift/swift-wizard-agent.js +2 -2
- package/dist/src/frameworks/swift/swift-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js +2 -2
- package/dist/src/frameworks/tanstack-router/tanstack-router-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js +2 -2
- package/dist/src/frameworks/tanstack-start/tanstack-start-wizard-agent.js.map +1 -1
- package/dist/src/frameworks/vue/vue-wizard-agent.js +2 -2
- package/dist/src/frameworks/vue/vue-wizard-agent.js.map +1 -1
- package/dist/src/lib/__tests__/agent-interface.test.js +29 -1
- package/dist/src/lib/__tests__/agent-interface.test.js.map +1 -1
- package/dist/src/lib/agent/__tests__/agent-prompt.test.js +57 -0
- package/dist/src/lib/agent/__tests__/agent-prompt.test.js.map +1 -0
- package/dist/src/lib/{agent-interface.d.ts → agent/agent-interface.d.ts} +18 -6
- package/dist/src/lib/{agent-interface.js → agent/agent-interface.js} +63 -13
- package/dist/src/lib/agent/agent-interface.js.map +1 -0
- package/dist/src/lib/agent/agent-prompt.d.ts +23 -0
- package/dist/src/lib/agent/agent-prompt.js +47 -0
- package/dist/src/lib/agent/agent-prompt.js.map +1 -0
- package/dist/src/lib/agent/agent-runner.d.ts +78 -0
- package/dist/src/lib/agent/agent-runner.js +323 -0
- package/dist/src/lib/agent/agent-runner.js.map +1 -0
- package/dist/src/lib/agent/commandments.js.map +1 -0
- package/dist/src/lib/constants.d.ts +10 -1
- package/dist/src/lib/constants.js +13 -1
- package/dist/src/lib/constants.js.map +1 -1
- package/dist/src/lib/detection/__tests__/context.test.js +72 -0
- package/dist/src/lib/detection/__tests__/context.test.js.map +1 -0
- package/dist/src/lib/detection/__tests__/features.test.d.ts +1 -0
- package/dist/src/lib/detection/__tests__/features.test.js +75 -0
- package/dist/src/lib/detection/__tests__/features.test.js.map +1 -0
- package/dist/src/lib/detection/__tests__/package-manager.test.d.ts +1 -0
- package/dist/src/lib/{__tests__/package-manager-detection.test.js → detection/__tests__/package-manager.test.js} +25 -25
- package/dist/src/lib/detection/__tests__/package-manager.test.js.map +1 -0
- package/dist/src/lib/detection/context.d.ts +31 -0
- package/dist/src/lib/detection/context.js +92 -0
- package/dist/src/lib/detection/context.js.map +1 -0
- package/dist/src/lib/detection/features.d.ts +16 -0
- package/dist/src/lib/detection/features.js +56 -0
- package/dist/src/lib/detection/features.js.map +1 -0
- package/dist/src/lib/detection/framework.d.ts +14 -0
- package/dist/src/lib/detection/framework.js +35 -0
- package/dist/src/lib/detection/framework.js.map +1 -0
- package/dist/src/lib/detection/index.d.ts +3 -0
- package/dist/src/lib/detection/index.js +11 -0
- package/dist/src/lib/detection/index.js.map +1 -0
- package/dist/src/lib/{package-manager-detection.js → detection/package-manager.js} +3 -3
- package/dist/src/lib/detection/package-manager.js.map +1 -0
- package/dist/src/lib/framework-config.d.ts +1 -1
- package/dist/src/lib/framework-config.js.map +1 -1
- package/dist/src/lib/health-checks/endpoints.js +2 -1
- package/dist/src/lib/health-checks/endpoints.js.map +1 -1
- package/dist/src/lib/middleware/benchmark.js +1 -1
- package/dist/src/lib/middleware/benchmark.js.map +1 -1
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.js +1 -1
- package/dist/src/lib/middleware/benchmarks/compaction-tracker.js.map +1 -1
- package/dist/src/lib/middleware/benchmarks/json-writer.js +1 -1
- package/dist/src/lib/middleware/benchmarks/json-writer.js.map +1 -1
- package/dist/src/lib/middleware/benchmarks/summary.js +1 -1
- package/dist/src/lib/middleware/benchmarks/summary.js.map +1 -1
- package/dist/src/lib/middleware/config.js +1 -1
- package/dist/src/lib/middleware/config.js.map +1 -1
- package/dist/src/lib/version.d.ts +1 -1
- package/dist/src/lib/version.js +1 -1
- package/dist/src/lib/version.js.map +1 -1
- package/dist/src/lib/wizard-session.d.ts +20 -7
- package/dist/src/lib/wizard-session.js +4 -0
- package/dist/src/lib/wizard-session.js.map +1 -1
- package/dist/src/lib/wizard-tools.d.ts +28 -1
- package/dist/src/lib/wizard-tools.js +24 -0
- package/dist/src/lib/wizard-tools.js.map +1 -1
- package/dist/src/lib/workflows/__tests__/agent-skill.test.d.ts +1 -0
- package/dist/src/lib/workflows/__tests__/agent-skill.test.js +66 -0
- package/dist/src/lib/workflows/__tests__/agent-skill.test.js.map +1 -0
- package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.d.ts +1 -0
- package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.js +101 -0
- package/dist/src/lib/workflows/__tests__/revenue-analytics-detect.test.js.map +1 -0
- package/dist/src/lib/workflows/__tests__/workflow-registry.test.d.ts +1 -0
- package/dist/src/lib/workflows/__tests__/workflow-registry.test.js +32 -0
- package/dist/src/lib/workflows/__tests__/workflow-registry.test.js.map +1 -0
- package/dist/src/lib/workflows/__tests__/workflow-step.test.d.ts +1 -0
- package/dist/src/lib/workflows/__tests__/workflow-step.test.js +54 -0
- package/dist/src/lib/workflows/__tests__/workflow-step.test.js.map +1 -0
- package/dist/src/lib/workflows/agent-skill/index.d.ts +44 -0
- package/dist/src/lib/workflows/agent-skill/index.js +47 -0
- package/dist/src/lib/workflows/agent-skill/index.js.map +1 -0
- package/dist/src/lib/workflows/agent-skill/steps.d.ts +8 -0
- package/dist/src/lib/workflows/agent-skill/steps.js +32 -0
- package/dist/src/lib/workflows/agent-skill/steps.js.map +1 -0
- package/dist/src/lib/workflows/posthog-integration/detect.d.ts +12 -0
- package/dist/src/lib/workflows/posthog-integration/detect.js +57 -0
- package/dist/src/lib/workflows/posthog-integration/detect.js.map +1 -0
- package/dist/src/lib/workflows/posthog-integration/index.d.ts +3 -0
- package/dist/src/lib/workflows/posthog-integration/index.js +152 -0
- package/dist/src/lib/workflows/posthog-integration/index.js.map +1 -0
- package/dist/src/lib/workflows/posthog-integration/steps.d.ts +9 -0
- package/dist/src/lib/workflows/posthog-integration/steps.js +100 -0
- package/dist/src/lib/workflows/posthog-integration/steps.js.map +1 -0
- package/dist/src/lib/workflows/revenue-analytics/detect.d.ts +40 -0
- package/dist/src/lib/workflows/revenue-analytics/detect.js +156 -0
- package/dist/src/lib/workflows/revenue-analytics/detect.js.map +1 -0
- package/dist/src/lib/workflows/revenue-analytics/index.d.ts +4 -0
- package/dist/src/lib/workflows/revenue-analytics/index.js +30 -0
- package/dist/src/lib/workflows/revenue-analytics/index.js.map +1 -0
- package/dist/src/lib/workflows/revenue-analytics/steps.d.ts +8 -0
- package/dist/src/lib/workflows/revenue-analytics/steps.js +48 -0
- package/dist/src/lib/workflows/revenue-analytics/steps.js.map +1 -0
- package/dist/src/lib/workflows/workflow-registry.d.ts +18 -0
- package/dist/src/lib/workflows/workflow-registry.js +32 -0
- package/dist/src/lib/workflows/workflow-registry.js.map +1 -0
- package/dist/src/lib/workflows/workflow-step.d.ts +126 -0
- package/dist/src/lib/workflows/workflow-step.js +28 -0
- package/dist/src/lib/workflows/workflow-step.js.map +1 -0
- package/dist/src/steps/add-mcp-server-to-clients/index.d.ts +2 -1
- package/dist/src/steps/add-mcp-server-to-clients/index.js.map +1 -1
- package/dist/src/ui/logging-ui.d.ts +6 -3
- package/dist/src/ui/logging-ui.js +7 -0
- package/dist/src/ui/logging-ui.js.map +1 -1
- package/dist/src/ui/tui/__tests__/flows.test.d.ts +1 -0
- package/dist/src/ui/tui/__tests__/flows.test.js +115 -0
- package/dist/src/ui/tui/__tests__/flows.test.js.map +1 -0
- package/dist/src/ui/tui/__tests__/router.test.d.ts +1 -0
- package/dist/src/ui/tui/__tests__/router.test.js +87 -0
- package/dist/src/ui/tui/__tests__/router.test.js.map +1 -0
- package/dist/src/ui/tui/__tests__/store.test.js +100 -10
- package/dist/src/ui/tui/__tests__/store.test.js.map +1 -1
- package/dist/src/ui/tui/flows.d.ts +17 -6
- package/dist/src/ui/tui/flows.js +28 -52
- package/dist/src/ui/tui/flows.js.map +1 -1
- package/dist/src/ui/tui/ink-ui.d.ts +6 -3
- package/dist/src/ui/tui/ink-ui.js +7 -0
- package/dist/src/ui/tui/ink-ui.js.map +1 -1
- package/dist/src/ui/tui/primitives/ProgressList.d.ts +3 -1
- package/dist/src/ui/tui/primitives/ProgressList.js +2 -2
- package/dist/src/ui/tui/primitives/ProgressList.js.map +1 -1
- package/dist/src/ui/tui/router.js +1 -1
- package/dist/src/ui/tui/router.js.map +1 -1
- package/dist/src/ui/tui/screen-registry.js +2 -0
- package/dist/src/ui/tui/screen-registry.js.map +1 -1
- package/dist/src/ui/tui/screens/ManagedSettingsScreen.js.map +1 -1
- package/dist/src/ui/tui/screens/OutroScreen.js +1 -1
- package/dist/src/ui/tui/screens/OutroScreen.js.map +1 -1
- package/dist/src/ui/tui/screens/RevenueIntroScreen.d.ts +16 -0
- package/dist/src/ui/tui/screens/RevenueIntroScreen.js +64 -0
- package/dist/src/ui/tui/screens/RevenueIntroScreen.js.map +1 -0
- package/dist/src/ui/tui/screens/RunScreen.js +1 -1
- package/dist/src/ui/tui/screens/RunScreen.js.map +1 -1
- package/dist/src/ui/tui/screens/SettingsOverrideScreen.js.map +1 -1
- package/dist/src/ui/tui/screens/health/HealthCheckScreen.js +2 -2
- package/dist/src/ui/tui/screens/health/HealthCheckScreen.js.map +1 -1
- package/dist/src/ui/tui/start-tui.js +2 -2
- package/dist/src/ui/tui/start-tui.js.map +1 -1
- package/dist/src/ui/tui/store.d.ts +46 -21
- package/dist/src/ui/tui/store.js +105 -47
- package/dist/src/ui/tui/store.js.map +1 -1
- package/dist/src/ui/wizard-ui.d.ts +13 -3
- package/dist/src/ui/wizard-ui.js.map +1 -1
- package/dist/src/utils/__tests__/provisioning.test.d.ts +1 -0
- package/dist/src/utils/__tests__/provisioning.test.js +192 -0
- package/dist/src/utils/__tests__/provisioning.test.js.map +1 -0
- package/dist/src/utils/file-utils.d.ts +8 -0
- package/dist/src/utils/file-utils.js +32 -0
- package/dist/src/utils/file-utils.js.map +1 -1
- package/dist/src/utils/provisioning.d.ts +25 -0
- package/dist/src/utils/provisioning.js +191 -0
- package/dist/src/utils/provisioning.js.map +1 -0
- package/dist/src/utils/setup-utils.d.ts +4 -1
- package/dist/src/utils/setup-utils.js +46 -2
- package/dist/src/utils/setup-utils.js.map +1 -1
- package/dist/src/utils/types.d.ts +4 -0
- package/dist/src/utils/types.js.map +1 -1
- package/dist/src/utils/wizard-abort.d.ts +3 -0
- package/dist/src/utils/wizard-abort.js +5 -3
- package/dist/src/utils/wizard-abort.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/dist/src/__tests__/run.test.js +0 -95
- package/dist/src/__tests__/run.test.js.map +0 -1
- package/dist/src/lib/__tests__/package-manager-detection.test.js.map +0 -1
- package/dist/src/lib/agent-interface.js.map +0 -1
- package/dist/src/lib/agent-runner.d.ts +0 -9
- package/dist/src/lib/agent-runner.js +0 -383
- package/dist/src/lib/agent-runner.js.map +0 -1
- package/dist/src/lib/commandments.js.map +0 -1
- package/dist/src/lib/package-manager-detection.js.map +0 -1
- package/dist/src/run.d.ts +0 -22
- package/dist/src/run.js +0 -152
- package/dist/src/run.js.map +0 -1
- /package/dist/src/{__tests__/run.test.d.ts → lib/agent/__tests__/agent-prompt.test.d.ts} +0 -0
- /package/dist/src/lib/{commandments.d.ts → agent/commandments.d.ts} +0 -0
- /package/dist/src/lib/{commandments.js → agent/commandments.js} +0 -0
- /package/dist/src/lib/{__tests__/package-manager-detection.test.d.ts → detection/__tests__/context.test.d.ts} +0 -0
- /package/dist/src/lib/{package-manager-detection.d.ts → detection/package-manager.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../../../src/lib/detection/package-manager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Cross-ecosystem package manager detection.\n *\n * Provides a common interface (PackageManagerDetector) that each FrameworkConfig\n * implements, plus shared helpers for Node.js, Python, PHP, and Swift ecosystems.\n * The MCP tool in wizard-tools.ts delegates to whatever detector the\n * current framework supplies.\n */\n\nimport {\n detectAllPackageManagers,\n type PackageManager,\n} from '../../utils/package-manager';\nimport {\n detectPackageManager as detectPythonPM,\n PythonPackageManager,\n} from '../../frameworks/python/utils';\n\n// ---------------------------------------------------------------------------\n// Common types\n// ---------------------------------------------------------------------------\n\n/** Structured package manager info the agent can act on */\nexport interface DetectedPackageManager {\n name: string;\n label: string;\n installCommand: string;\n runCommand?: string;\n}\n\n/** Result returned by every detector */\nexport interface PackageManagerInfo {\n detected: DetectedPackageManager[];\n primary: DetectedPackageManager | null;\n recommendation: string;\n}\n\n/** Signature each framework implements */\nexport type PackageManagerDetector = (\n installDir: string,\n) => Promise<PackageManagerInfo>;\n\n// ---------------------------------------------------------------------------\n// Node.js helper\n// ---------------------------------------------------------------------------\n\nfunction serializeNodePM(pm: PackageManager): DetectedPackageManager {\n return {\n name: pm.name,\n label: pm.label,\n installCommand: pm.installCommand,\n runCommand: pm.runScriptCommand,\n };\n}\n\n/**\n * Detect Node.js package managers via lockfiles.\n * Wraps the existing detectAllPackageManagers() from utils/package-manager.ts.\n */\nexport function detectNodePackageManagers(\n installDir: string,\n): Promise<PackageManagerInfo> {\n const detected = detectAllPackageManagers({ installDir }).map(\n serializeNodePM,\n );\n\n if (detected.length === 0) {\n return Promise.resolve({\n detected: [],\n primary: null,\n recommendation: 'No lockfile found. Default to npm (npm add, npm run).',\n });\n }\n\n const primary = detected[0];\n return Promise.resolve({\n detected,\n primary,\n recommendation:\n detected.length === 1\n ? `Use ${primary.label} (${primary.installCommand}).`\n : `Multiple package managers detected. Prefer ${primary.label} (${primary.installCommand}).`,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Python helper\n// ---------------------------------------------------------------------------\n\nconst PYTHON_PM_INFO: Record<PythonPackageManager, DetectedPackageManager> = {\n [PythonPackageManager.UV]: {\n name: 'uv',\n label: 'uv',\n installCommand: 'uv add',\n runCommand: 'uv run',\n },\n [PythonPackageManager.POETRY]: {\n name: 'poetry',\n label: 'Poetry',\n installCommand: 'poetry add',\n runCommand: 'poetry run',\n },\n [PythonPackageManager.PDM]: {\n name: 'pdm',\n label: 'PDM',\n installCommand: 'pdm add',\n runCommand: 'pdm run',\n },\n [PythonPackageManager.HATCH]: {\n name: 'hatch',\n label: 'Hatch',\n installCommand: 'hatch add',\n runCommand: 'hatch run',\n },\n [PythonPackageManager.RYE]: {\n name: 'rye',\n label: 'Rye',\n installCommand: 'rye add',\n runCommand: 'rye run',\n },\n [PythonPackageManager.PIPENV]: {\n name: 'pipenv',\n label: 'Pipenv',\n installCommand: 'pipenv install',\n runCommand: 'pipenv run',\n },\n [PythonPackageManager.CONDA]: {\n name: 'conda',\n label: 'Conda',\n installCommand: 'conda install',\n runCommand: 'conda run',\n },\n [PythonPackageManager.PIP]: {\n name: 'pip',\n label: 'pip',\n installCommand: 'pip install',\n },\n [PythonPackageManager.UNKNOWN]: {\n name: 'pip',\n label: 'pip (default)',\n installCommand: 'pip install',\n },\n};\n\n/**\n * Detect Python package managers via lockfiles and config files.\n * Wraps the existing detectPackageManager() from python/utils.ts.\n */\nexport async function detectPythonPackageManagers(\n installDir: string,\n): Promise<PackageManagerInfo> {\n const pm = await detectPythonPM({ installDir } as any);\n const info = PYTHON_PM_INFO[pm];\n\n return {\n detected: [info],\n primary: info,\n recommendation: `Use ${info.label} (${info.installCommand}).`,\n };\n}\n\n// ---------------------------------------------------------------------------\n// PHP (Composer) helper\n// ---------------------------------------------------------------------------\n\nconst COMPOSER: DetectedPackageManager = {\n name: 'composer',\n label: 'Composer',\n installCommand: 'composer require',\n};\n\nexport function composerPackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [COMPOSER],\n primary: COMPOSER,\n recommendation: 'Use Composer (composer require).',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Swift (SPM) helper\n// ---------------------------------------------------------------------------\n\nconst SPM: DetectedPackageManager = {\n name: 'spm',\n label: 'Swift Package Manager',\n installCommand: 'swift package add-dependency',\n};\n\nexport function swiftPackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [SPM],\n primary: SPM,\n recommendation:\n 'Use Swift Package Manager. Add the dependency to Package.swift or via Xcode.',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Ruby (Bundler) helper\n// ---------------------------------------------------------------------------\n\nconst BUNDLER: DetectedPackageManager = {\n name: 'bundler',\n label: 'Bundler',\n installCommand: 'bundle add',\n runCommand: 'bundle exec',\n};\n\nexport function bundlerPackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [BUNDLER],\n primary: BUNDLER,\n recommendation: 'Use Bundler (bundle add). Run commands with bundle exec.',\n });\n}\n\n// ---------------------------------------------------------------------------\n// Android (Gradle) helper\n// ---------------------------------------------------------------------------\n\nconst GRADLE: DetectedPackageManager = {\n name: 'gradle',\n label: 'Gradle',\n installCommand: 'implementation',\n};\n\nexport function gradlePackageManager(): Promise<PackageManagerInfo> {\n return Promise.resolve({\n detected: [GRADLE],\n primary: GRADLE,\n recommendation:\n 'Add dependencies to build.gradle(.kts) using implementation().',\n });\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Integration } from './constants';
|
|
2
2
|
import type { WizardOptions } from '../utils/types';
|
|
3
|
-
import type { PackageManagerDetector } from './package-manager
|
|
3
|
+
import type { PackageManagerDetector } from './detection/package-manager';
|
|
4
4
|
/**
|
|
5
5
|
* A setup question that the SetupScreen renders for framework disambiguation.
|
|
6
6
|
* If detect() returns a value, the question is auto-resolved and not shown.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework-config.js","sourceRoot":"","sources":["../../../src/lib/framework-config.ts"],"names":[],"mappings":";;;AAoNA,8CAEC;AAhED;;;;GAIG;AACU,QAAA,4BAA4B,GACvC,wJAAwJ,CAAC;AAE9I,QAAA,2BAA2B,GACtC,8SAA8S,CAAC;AAkDjT;;GAEG;AACH,SAAgB,iBAAiB,CAAC,aAAqB;IACrD,OAAO,WAAW,aAAa,yBAAyB,CAAC;AAC3D,CAAC;AAED;;GAEG;AACU,QAAA,eAAe,GAC1B,mEAAmE,CAAC","sourcesContent":["import type { Integration } from './constants';\nimport type { WizardOptions } from '../utils/types';\nimport type { PackageManagerDetector } from './package-manager
|
|
1
|
+
{"version":3,"file":"framework-config.js","sourceRoot":"","sources":["../../../src/lib/framework-config.ts"],"names":[],"mappings":";;;AAoNA,8CAEC;AAhED;;;;GAIG;AACU,QAAA,4BAA4B,GACvC,wJAAwJ,CAAC;AAE9I,QAAA,2BAA2B,GACtC,8SAA8S,CAAC;AAkDjT;;GAEG;AACH,SAAgB,iBAAiB,CAAC,aAAqB;IACrD,OAAO,WAAW,aAAa,yBAAyB,CAAC;AAC3D,CAAC;AAED;;GAEG;AACU,QAAA,eAAe,GAC1B,mEAAmE,CAAC","sourcesContent":["import type { Integration } from './constants';\nimport type { WizardOptions } from '../utils/types';\nimport type { PackageManagerDetector } from './detection/package-manager';\n\n/**\n * A setup question that the SetupScreen renders for framework disambiguation.\n * If detect() returns a value, the question is auto-resolved and not shown.\n */\nexport interface SetupQuestion {\n /** Stored in session.frameworkContext[key] */\n key: string;\n /** Displayed to user, e.g. \"Which router are you using?\" */\n message: string;\n /** Picker options */\n options: Array<{ label: string; value: string; hint?: string }>;\n /** Auto-detect; null = ask the user */\n detect: (\n options: Pick<WizardOptions, 'installDir'>,\n ) => Promise<string | null>;\n}\n\n/**\n * Configuration interface for framework-specific agent integrations.\n * Each framework exports a FrameworkConfig that the universal runner uses.\n *\n * The TContext generic represents the framework-specific context gathered\n * before the agent runs (e.g., router type for Next.js, project type for Django).\n * The runner threads this opaquely — all framework-specific logic stays inside the config.\n */\nexport interface FrameworkConfig<\n TContext extends Record<string, unknown> = Record<string, unknown>,\n> {\n metadata: FrameworkMetadata<TContext>;\n detection: FrameworkDetection;\n environment: EnvironmentConfig;\n analytics: AnalyticsConfig<TContext>;\n prompts: PromptConfig<TContext>;\n ui: UIConfig<TContext>;\n}\n\n/**\n * Basic framework information and documentation\n */\nexport interface FrameworkMetadata<\n TContext extends Record<string, unknown> = Record<string, unknown>,\n> {\n /** Display name (e.g., \"Next.js\", \"React\") */\n name: string;\n\n /** Integration type from constants */\n integration: Integration;\n\n /** URL to framework-specific PostHog docs */\n docsUrl: string;\n\n /**\n * Optional URL to docs for users with unsupported framework versions.\n * If not provided, defaults to docsUrl.\n */\n unsupportedVersionDocsUrl?: string;\n\n /** If true, shows a beta notice before running the wizard. */\n beta?: boolean;\n\n /** Optional notice shown before the agent runs (e.g., \"Close Xcode before proceeding\"). */\n preRunNotice?: string;\n\n /**\n * Optional function to gather framework-specific context before agent runs.\n * For Next.js: detects router type\n * For React Native: detects Expo vs bare\n */\n gatherContext?: (options: WizardOptions) => Promise<TContext>;\n\n /** Optional additional MCP servers for this framework (e.g., Svelte MCP). */\n additionalMcpServers?: Record<string, { url: string }>;\n\n /**\n * Setup questions for framework disambiguation.\n * The SetupScreen iterates unresolved questions and renders a PickerMenu for each.\n * If all questions are auto-resolved (or none defined), the screen is skipped.\n */\n setup?: {\n questions: SetupQuestion[];\n };\n}\n\n/**\n * Framework detection and version handling\n */\nexport interface FrameworkDetection {\n /** Package name to check in package.json (e.g., \"next\", \"react\") */\n packageName: string;\n\n /** Human-readable name for error messages (e.g., \"Next.js\") */\n packageDisplayName: string;\n\n /** Extract version from package.json */\n getVersion: (packageJson: unknown) => string | undefined;\n\n /** Optional: Convert version to analytics bucket (e.g., \"15.x\") */\n getVersionBucket?: (version: string) => string;\n\n /**\n * Whether this framework uses package.json (Node.js/JavaScript).\n * If false, skips package.json checks (for Python, Go, etc.)\n * Defaults to true if not specified.\n */\n usesPackageJson?: boolean;\n\n /** Minimum supported version. If set, runner checks before proceeding. */\n minimumVersion?: string;\n\n /** Get the currently installed version. Called by runner for version check. */\n getInstalledVersion?: (options: WizardOptions) => Promise<string | undefined>;\n\n /** Detect whether this framework is present in the project. */\n detect: (options: Pick<WizardOptions, 'installDir'>) => Promise<boolean>;\n\n /** Detect the project's package manager(s). Used by the in-process MCP tool. */\n detectPackageManager: PackageManagerDetector;\n}\n\n/**\n * Environment variable configuration\n */\nexport interface EnvironmentConfig {\n /** Whether to upload env vars to hosting providers post-agent */\n uploadToHosting: boolean;\n\n /**\n * Build the environment variables object for this framework.\n * Returns the exact variable names and values to upload to hosting providers.\n */\n getEnvVars: (apiKey: string, host: string) => Record<string, string>;\n}\n\n/**\n * Analytics configuration\n */\nexport interface AnalyticsConfig<\n TContext extends Record<string, unknown> = Record<string, unknown>,\n> {\n /** Generate tags from context (e.g., { 'nextjs-version': '15.x', 'router': 'app' }) */\n getTags: (context: TContext) => Record<string, string>;\n\n /** Optional: Additional event properties */\n getEventProperties?: (context: TContext) => Record<string, string>;\n}\n\n/**\n * Default package installation instruction used when frameworks don't\n * provide their own. Frameworks with specific needs (e.g., Swift SPM,\n * Composer) override this in their config.\n */\nexport const DEFAULT_PACKAGE_INSTALLATION =\n 'Use the detect_package_manager tool to determine the package manager. Do not manually edit package.json; the package manager handles it automatically.';\n\nexport const PYTHON_PACKAGE_INSTALLATION =\n 'Use the detect_package_manager tool to determine the package manager. If the detected tool manages dependencies directly (e.g. uv add, poetry add), use it — it will update the manifest automatically. If using pip, you must also add the dependency to requirements.txt or the appropriate manifest file.';\n\n/**\n * Prompt configuration\n */\nexport interface PromptConfig<\n TContext extends Record<string, unknown> = Record<string, unknown>,\n> {\n /**\n * Optional: Additional context lines to append to base prompt\n * For Next.js: \"- Router: app\"\n * For React Native: \"- Platform: Expo\"\n */\n getAdditionalContextLines?: (context: TContext) => string[];\n\n /**\n * How to detect the project type for this framework.\n * Included in the agent prompt as project context.\n * e.g., \"Look for package.json and lockfiles\" or \"Look for requirements.txt and manage.py\"\n */\n projectTypeDetection: string;\n\n /**\n * How to install packages for this framework.\n * Included in the agent prompt as project context.\n * Defaults to DEFAULT_PACKAGE_INSTALLATION. Only override if the framework\n * has specific installation guidance (e.g., Swift SPM, Composer).\n */\n packageInstallation?: string;\n}\n\n/**\n * UI messaging configuration\n */\nexport interface UIConfig<\n TContext extends Record<string, unknown> = Record<string, unknown>,\n> {\n /** Success message when agent completes */\n successMessage: string;\n\n /** Estimated time for agent to complete (in minutes) */\n estimatedDurationMinutes: number;\n\n /** Generate \"What the agent did\" bullets from context */\n getOutroChanges: (context: TContext) => string[];\n\n /** Generate \"Next steps\" bullets from context */\n getOutroNextSteps: (context: TContext) => string[];\n}\n\n/**\n * Generate welcome message from framework name\n */\nexport function getWelcomeMessage(frameworkName: string): string {\n return `PostHog ${frameworkName} wizard (agent-powered)`;\n}\n\n/**\n * Shared spinner message for all frameworks\n */\nexport const SPINNER_MESSAGE =\n 'Writing your PostHog setup with events, error capture and more...';\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.checkGithubReleasesHealth = exports.checkMcpHealth = exports.checkLlmGatewayHealth = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
4
5
|
const types_1 = require("./types");
|
|
5
6
|
// ---------------------------------------------------------------------------
|
|
6
7
|
// Direct endpoint health checks
|
|
@@ -43,6 +44,6 @@ const checkLlmGatewayHealth = () => fetchEndpointHealth('https://gateway.us.post
|
|
|
43
44
|
exports.checkLlmGatewayHealth = checkLlmGatewayHealth;
|
|
44
45
|
const checkMcpHealth = () => fetchEndpointHealth('https://mcp.posthog.com/');
|
|
45
46
|
exports.checkMcpHealth = checkMcpHealth;
|
|
46
|
-
const checkGithubReleasesHealth = () => fetchEndpointHealth(
|
|
47
|
+
const checkGithubReleasesHealth = () => fetchEndpointHealth(`${constants_1.REMOTE_SKILLS_BASE_URL}/skill-menu.json`);
|
|
47
48
|
exports.checkGithubReleasesHealth = checkGithubReleasesHealth;
|
|
48
49
|
//# sourceMappingURL=endpoints.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../src/lib/health-checks/endpoints.ts"],"names":[],"mappings":";;;AAAA,mCAAqE;AAErE,8EAA8E;AAC9E,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,EAAE;AACF,gCAAgC;AAChC,uEAAuE;AACvE,4CAA4C;AAC5C,EAAE;AACF,0BAA0B;AAC1B,8CAA8C;AAC9C,oCAAoC;AACpC,8EAA8E;AAE9E,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,EAAE,MAAM,EAAE,2BAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,GAAW,EACX,SAAS,GAAG,IAAI,EAChB,cAAc,GAAG,GAAG;IAEpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,YAAY,CAAC,GAAG,CAAC,CAAC;QAElB,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YAClC,OAAO;gBACL,MAAM,EAAE,2BAAmB,CAAC,OAAO;gBACnC,YAAY,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE;aACnC,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAC/C,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAEM,MAAM,qBAAqB,GAAG,GAA8B,EAAE,CACnE,mBAAmB,CAAC,0CAA0C,CAAC,CAAC;AADrD,QAAA,qBAAqB,yBACgC;AAE3D,MAAM,cAAc,GAAG,GAA8B,EAAE,CAC5D,mBAAmB,CAAC,0BAA0B,CAAC,CAAC;AADrC,QAAA,cAAc,kBACuB;AAE3C,MAAM,yBAAyB,GAAG,GAA8B,EAAE,CACvE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../../../../src/lib/health-checks/endpoints.ts"],"names":[],"mappings":";;;AAAA,4CAAsD;AACtD,mCAAqE;AAErE,8EAA8E;AAC9E,gCAAgC;AAChC,EAAE;AACF,2EAA2E;AAC3E,sEAAsE;AACtE,EAAE;AACF,gCAAgC;AAChC,uEAAuE;AACvE,4CAA4C;AAC5C,EAAE;AACF,0BAA0B;AAC1B,8CAA8C;AAC9C,oCAAoC;AACpC,8EAA8E;AAE9E,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,EAAE,MAAM,EAAE,2BAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,GAAW,EACX,SAAS,GAAG,IAAI,EAChB,cAAc,GAAG,GAAG;IAEpB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,YAAY,CAAC,GAAG,CAAC,CAAC;QAElB,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YAClC,OAAO;gBACL,MAAM,EAAE,2BAAmB,CAAC,OAAO;gBACnC,YAAY,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE;aACnC,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY;YAC/C,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAEM,MAAM,qBAAqB,GAAG,GAA8B,EAAE,CACnE,mBAAmB,CAAC,0CAA0C,CAAC,CAAC;AADrD,QAAA,qBAAqB,yBACgC;AAE3D,MAAM,cAAc,GAAG,GAA8B,EAAE,CAC5D,mBAAmB,CAAC,0BAA0B,CAAC,CAAC;AADrC,QAAA,cAAc,kBACuB;AAE3C,MAAM,yBAAyB,GAAG,GAA8B,EAAE,CACvE,mBAAmB,CAAC,GAAG,kCAAsB,kBAAkB,CAAC,CAAC;AADtD,QAAA,yBAAyB,6BAC6B","sourcesContent":["import { REMOTE_SKILLS_BASE_URL } from '../constants';\nimport { ServiceHealthStatus, type BaseHealthResult } from './types';\n\n// ---------------------------------------------------------------------------\n// Direct endpoint health checks\n//\n// These ping PostHog-owned services directly (no Statuspage intermediary).\n// A non-expected HTTP status or any network error is treated as Down.\n//\n// LLM Gateway – FastAPI service\n// Source: posthog/services/llm-gateway/src/llm_gateway/api/health.py\n// GET /_liveness → 200 {\"status\":\"alive\"}\n//\n// MCP – Cloudflare Worker\n// Source: posthog/services/mcp/src/index.ts\n// GET / → 200 (HTML landing page)\n// ---------------------------------------------------------------------------\n\nfunction downResult(error: string): BaseHealthResult {\n return { status: ServiceHealthStatus.Down, error };\n}\n\nasync function fetchEndpointHealth(\n url: string,\n timeoutMs = 5000,\n expectedStatus = 200,\n): Promise<BaseHealthResult> {\n try {\n const controller = new AbortController();\n const tid = setTimeout(() => controller.abort(), timeoutMs);\n const res = await fetch(url, { signal: controller.signal });\n clearTimeout(tid);\n\n if (res.status === expectedStatus) {\n return {\n status: ServiceHealthStatus.Healthy,\n rawIndicator: `HTTP ${res.status}`,\n };\n }\n return downResult(`HTTP ${res.status}`);\n } catch (e) {\n if (e instanceof Error && e.name === 'AbortError')\n return downResult('Request timed out');\n return downResult(e instanceof Error ? e.message : 'Unknown error');\n }\n}\n\nexport const checkLlmGatewayHealth = (): Promise<BaseHealthResult> =>\n fetchEndpointHealth('https://gateway.us.posthog.com/_liveness');\n\nexport const checkMcpHealth = (): Promise<BaseHealthResult> =>\n fetchEndpointHealth('https://mcp.posthog.com/');\n\nexport const checkGithubReleasesHealth = (): Promise<BaseHealthResult> =>\n fetchEndpointHealth(`${REMOTE_SKILLS_BASE_URL}/skill-menu.json`);\n"]}
|
|
@@ -15,7 +15,7 @@ const pipeline_1 = require("./pipeline");
|
|
|
15
15
|
const phase_detector_1 = require("./phase-detector");
|
|
16
16
|
const config_1 = require("./config");
|
|
17
17
|
const benchmarks_1 = require("./benchmarks");
|
|
18
|
-
const agent_interface_1 = require("../agent-interface");
|
|
18
|
+
const agent_interface_1 = require("../agent/agent-interface");
|
|
19
19
|
// ── Factory ────────────────────────────────────────────────────────────
|
|
20
20
|
/**
|
|
21
21
|
* Create a middleware pipeline configured for benchmarking.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../../src/lib/middleware/benchmark.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA2DH,0DAmCC;AA5FD,iCAAqD;AACrD,6CAAgF;AAChF,yCAAgD;AAChD,qDAAiD;AACjD,qCAA+C;AAC/C,6CAAuD;AAGvD,
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../../../../src/lib/middleware/benchmark.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AA2DH,0DAmCC;AA5FD,iCAAqD;AACrD,6CAAgF;AAChF,yCAAgD;AAChD,qDAAiD;AACjD,qCAA+C;AAC/C,6CAAuD;AAGvD,8DAAwD;AA2CxD,0EAA0E;AAE1E;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,OAAsB,EACtB,OAAsB,EACtB,cAAgC;IAEhC,MAAM,MAAM,GAAG,cAAc,IAAI,IAAA,4BAAmB,EAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEzE,IAAA,wBAAgB,EAAC;QACf,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO;QAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;KAClC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,oCAAuB,EAAC,MAAM,EAAE;QAC9C,OAAO;QACP,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa;KACxC,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtC,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,IAAI,CACd,GAAG,8BAAY,CAAC,SAAS,kBAAkB,IAAA,sBAAc,GAAE,EAAE,CAC9D,CAAC;QACF,IAAA,UAAK,GAAE,CAAC,GAAG,CAAC,IAAI,CACd,GAAG,8BAAY,CAAC,SAAS,uCAAuC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAC9F,CAAC;IACJ,CAAC;IAED,IAAA,iBAAS,EACP,GAAG,8BAAY,CAAC,SAAS,8CAA8C,CACxE,CAAC;IAEF,OAAO,IAAI,6BAAkB,CAAC,OAAO,EAAE;QACrC,aAAa,EAAE,IAAI,8BAAa,EAAE;QAClC,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;AACL,CAAC","sourcesContent":["/**\n * Benchmark tracking for wizard runs.\n *\n * Usage:\n * const pipeline = createBenchmarkPipeline(spinner, options);\n * pipeline.onMessage(message);\n * pipeline.finalize(resultMessage, durationMs);\n */\n\nimport { getUI, type SpinnerHandle } from '../../ui';\nimport { logToFile, getLogFilePath, configureLogFile } from '../../utils/debug';\nimport { MiddlewarePipeline } from './pipeline';\nimport { PhaseDetector } from './phase-detector';\nimport { loadBenchmarkConfig } from './config';\nimport { createPluginsFromConfig } from './benchmarks';\nimport type { BenchmarkConfig } from './config';\nimport type { WizardOptions } from '../../utils/types';\nimport { AgentSignals } from '../agent/agent-interface';\n\n// ── Types ──────────────────────────────────────────────────────────────\n\nexport interface StepUsage {\n name: string;\n usage: {\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens: number;\n cache_read_input_tokens: number;\n cache_creation?: {\n ephemeral_5m_input_tokens: number;\n ephemeral_1h_input_tokens: number;\n };\n };\n modelUsage: Record<string, unknown>;\n totalCostUsd: number;\n durationMs: number;\n durationApiMs: number;\n numTurns: number;\n contextTokensIn?: number;\n contextTokensOut?: number;\n compactions?: number;\n compactionPreTokens?: number[];\n}\n\nexport interface BenchmarkData {\n timestamp: string;\n steps: StepUsage[];\n totals: {\n totalCostUsd: number;\n durationMs: number;\n inputTokens: number;\n outputTokens: number;\n numTurns: number;\n totalCompactions: number;\n totalCacheReadTokens: number;\n totalCacheCreation5mTokens: number;\n totalCacheCreation1hTokens: number;\n };\n}\n\n// ── Factory ────────────────────────────────────────────────────────────\n\n/**\n * Create a middleware pipeline configured for benchmarking.\n * Loads .benchmark-config.json from the install dir, falls back to defaults.\n */\nexport function createBenchmarkPipeline(\n spinner: SpinnerHandle,\n options: WizardOptions,\n configOverride?: BenchmarkConfig,\n): MiddlewarePipeline {\n const config = configOverride ?? loadBenchmarkConfig(options.installDir);\n\n configureLogFile({\n path: config.output.logPath,\n enabled: config.output.logEnabled,\n });\n\n const plugins = createPluginsFromConfig(config, {\n spinner,\n phased: false,\n outputPath: config.output.benchmarkPath,\n });\n\n if (!config.output.suppressWizardLogs) {\n getUI().log.info(\n `${AgentSignals.BENCHMARK} Verbose logs: ${getLogFilePath()}`,\n );\n getUI().log.info(\n `${AgentSignals.BENCHMARK} Benchmark data will be written to: ${config.output.benchmarkPath}`,\n );\n }\n\n logToFile(\n `${AgentSignals.BENCHMARK} Tracking enabled, starting with setup phase`,\n );\n\n return new MiddlewarePipeline(plugins, {\n phaseDetector: new PhaseDetector(),\n autoDetectPhases: true,\n });\n}\n"]}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.CompactionTrackerPlugin = void 0;
|
|
10
10
|
const debug_1 = require("../../../utils/debug");
|
|
11
|
-
const agent_interface_1 = require("../../agent-interface");
|
|
11
|
+
const agent_interface_1 = require("../../agent/agent-interface");
|
|
12
12
|
class CompactionTrackerPlugin {
|
|
13
13
|
name = 'compactions';
|
|
14
14
|
phaseCompactions = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-tracker.js","sourceRoot":"","sources":["../../../../../src/lib/middleware/benchmarks/compaction-tracker.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,gDAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"compaction-tracker.js","sourceRoot":"","sources":["../../../../../src/lib/middleware/benchmarks/compaction-tracker.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,gDAAiD;AACjD,iEAA2D;AAa3D,MAAa,uBAAuB;IACzB,IAAI,GAAG,aAAa,CAAC;IAEtB,gBAAgB,GAAG,CAAC,CAAC;IACrB,cAAc,GAAa,EAAE,CAAC;IAC9B,gBAAgB,GAAG,CAAC,CAAC;IACrB,cAAc,GAIjB,EAAE,CAAC;IACA,YAAY,GAAG,OAAO,CAAC;IAE/B,SAAS,CACP,OAAY,EACZ,GAAsB,EACtB,KAAsB;QAEtB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;YACxE,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,EAAE,UAAU,IAAI,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,EAAE,OAAO,IAAI,SAAS,CAAC;QAC/D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpC,IAAA,iBAAS,EACP,GAAG,8BAAY,CAAC,SAAS,2CAA2C,GAAG,CAAC,YAAY,eAAe,OAAO,iBAAiB,SAAS,GAAG,CACxI,CAAC;QAEF,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB,CACf,SAAiB,EACjB,OAAe,EACf,IAAuB,EACvB,KAAsB;QAEtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,IAAI,CAAC,gBAAgB;YAClC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,UAAU,CACR,cAAmB,EACnB,gBAAwB,EACxB,IAAuB,EACvB,KAAsB;QAEtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,WAAW,EAAE,IAAI,CAAC,gBAAgB;YAClC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;SACpC,CAAC,CAAC;QACH,KAAK,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC;IAEO,OAAO;QACb,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;YACxC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;SACzC,CAAC;IACJ,CAAC;CACF;AA1ED,0DA0EC","sourcesContent":["/**\n * Compaction event tracking plugin.\n *\n * Tracks context compaction events (compact_boundary system messages)\n * including pre-compaction token counts per phase.\n */\n\nimport type { Middleware, MiddlewareContext, MiddlewareStore } from '../types';\nimport { logToFile } from '../../../utils/debug';\nimport { AgentSignals } from '../../agent/agent-interface';\n\nexport interface CompactionData {\n phaseCompactions: number;\n phasePreTokens: number[];\n totalCompactions: number;\n phaseSnapshots: Array<{\n phase: string;\n compactions: number;\n preTokens: number[];\n }>;\n}\n\nexport class CompactionTrackerPlugin implements Middleware {\n readonly name = 'compactions';\n\n private phaseCompactions = 0;\n private phasePreTokens: number[] = [];\n private totalCompactions = 0;\n private phaseSnapshots: Array<{\n phase: string;\n compactions: number;\n preTokens: number[];\n }> = [];\n private currentPhase = 'setup';\n\n onMessage(\n message: any,\n ctx: MiddlewareContext,\n store: MiddlewareStore,\n ): void {\n if (message.type !== 'system' || message.subtype !== 'compact_boundary') {\n return;\n }\n\n const preTokens = message.compact_metadata?.pre_tokens ?? 0;\n const trigger = message.compact_metadata?.trigger ?? 'unknown';\n this.phaseCompactions++;\n this.totalCompactions++;\n this.phasePreTokens.push(preTokens);\n\n logToFile(\n `${AgentSignals.BENCHMARK} [COMPACTION] Context compacted during \"${ctx.currentPhase}\" (trigger: ${trigger}, pre_tokens: ${preTokens})`,\n );\n\n store.set('compactions', this.getData());\n }\n\n onPhaseTransition(\n fromPhase: string,\n toPhase: string,\n _ctx: MiddlewareContext,\n store: MiddlewareStore,\n ): void {\n this.phaseSnapshots.push({\n phase: fromPhase,\n compactions: this.phaseCompactions,\n preTokens: [...this.phasePreTokens],\n });\n this.currentPhase = toPhase;\n this.phaseCompactions = 0;\n this.phasePreTokens = [];\n store.set('compactions', this.getData());\n }\n\n onFinalize(\n _resultMessage: any,\n _totalDurationMs: number,\n _ctx: MiddlewareContext,\n store: MiddlewareStore,\n ): void {\n this.phaseSnapshots.push({\n phase: this.currentPhase,\n compactions: this.phaseCompactions,\n preTokens: [...this.phasePreTokens],\n });\n store.set('compactions', this.getData());\n }\n\n private getData(): CompactionData {\n return {\n phaseCompactions: this.phaseCompactions,\n phasePreTokens: [...this.phasePreTokens],\n totalCompactions: this.totalCompactions,\n phaseSnapshots: [...this.phaseSnapshots],\n };\n }\n}\n"]}
|
|
@@ -13,7 +13,7 @@ exports.JsonWriterPlugin = void 0;
|
|
|
13
13
|
const fs_1 = __importDefault(require("fs"));
|
|
14
14
|
const ui_1 = require("../../../ui");
|
|
15
15
|
const debug_1 = require("../../../utils/debug");
|
|
16
|
-
const agent_interface_1 = require("../../agent-interface");
|
|
16
|
+
const agent_interface_1 = require("../../agent/agent-interface");
|
|
17
17
|
/**
|
|
18
18
|
* Sum token usage across all models from the SDK's modelUsage field.
|
|
19
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-writer.js","sourceRoot":"","sources":["../../../../../src/lib/middleware/benchmarks/json-writer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * JSON file output plugin.\n *\n * Assembles the BenchmarkData structure from all upstream plugin data\n * and writes it to a JSON file. Returns the BenchmarkData for backward compat.\n */\n\nimport fs from 'fs';\nimport { getUI } from '../../../ui';\nimport { logToFile } from '../../../utils/debug';\nimport { AgentSignals } from '../../agent-interface';\nimport type { Middleware, MiddlewareContext, MiddlewareStore } from '../types';\nimport type { TokenData } from './token-tracker';\nimport type { CacheData } from './cache-tracker';\nimport type { TurnData } from './turn-counter';\nimport type { CostData } from './cost-tracker';\nimport type { DurationData } from './duration-tracker';\nimport type { CompactionData } from './compaction-tracker';\nimport type { ContextSizeData } from './context-size-tracker';\nimport type { BenchmarkData, StepUsage } from '../benchmark';\n\n/**\n * Sum token usage across all models from the SDK's modelUsage field.\n */\nfunction sumModelUsage(modelUsage: Record<string, any>): {\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens: number;\n cache_read_input_tokens: number;\n} {\n let input_tokens = 0;\n let output_tokens = 0;\n let cache_creation_input_tokens = 0;\n let cache_read_input_tokens = 0;\n\n for (const model of Object.values(modelUsage)) {\n input_tokens += model.inputTokens ?? 0;\n output_tokens += model.outputTokens ?? 0;\n cache_creation_input_tokens += model.cacheCreationInputTokens ?? 0;\n cache_read_input_tokens += model.cacheReadInputTokens ?? 0;\n }\n\n return {\n input_tokens,\n output_tokens,\n cache_creation_input_tokens,\n cache_read_input_tokens,\n };\n}\n\nexport class JsonWriterPlugin implements Middleware {\n readonly name = 'jsonWriter';\n\n private outputPath: string;\n\n constructor(outputPath: string) {\n this.outputPath = outputPath;\n }\n\n onFinalize(\n resultMessage: any,\n totalDurationMs: number,\n ctx: MiddlewareContext,\n _store: MiddlewareStore,\n ): BenchmarkData {\n const tokens = ctx.get<TokenData>('tokens');\n const cache = ctx.get<CacheData>('cache');\n const turns = ctx.get<TurnData>('turns');\n const cost = ctx.get<CostData>('cost');\n const duration = ctx.get<DurationData>('duration');\n const compactions = ctx.get<CompactionData>('compactions');\n const contextSize = ctx.get<ContextSizeData>('contextSize');\n\n const modelUsage = resultMessage?.modelUsage ?? {};\n const aggregateUsage = sumModelUsage(modelUsage);\n\n const phaseCount = duration?.phaseSnapshots.length ?? 0;\n const steps: StepUsage[] = [];\n\n for (let i = 0; i < phaseCount; i++) {\n const dur = duration!.phaseSnapshots[i];\n const tokenSnap = tokens?.phaseSnapshots[i];\n const cacheSnap = cache?.phaseSnapshots[i];\n const turnSnap = turns?.phaseSnapshots[i];\n const costSnap = cost?.phaseCosts[i];\n const compSnap = compactions?.phaseSnapshots[i];\n const ctxSnap = contextSize?.phaseSnapshots[i];\n\n const step: StepUsage = {\n name: dur.phase,\n usage: {\n input_tokens: tokenSnap?.inputTokens ?? 0,\n output_tokens: tokenSnap?.outputTokens ?? 0,\n cache_creation_input_tokens: cacheSnap?.cacheCreationTokens ?? 0,\n cache_read_input_tokens: cacheSnap?.cacheReadTokens ?? 0,\n ...((cacheSnap?.cacheCreation5m ?? 0) +\n (cacheSnap?.cacheCreation1h ?? 0) >\n 0 && {\n cache_creation: {\n ephemeral_5m_input_tokens: cacheSnap?.cacheCreation5m ?? 0,\n ephemeral_1h_input_tokens: cacheSnap?.cacheCreation1h ?? 0,\n },\n }),\n },\n modelUsage: {},\n totalCostUsd: costSnap?.cost ?? 0,\n durationMs: dur.durationMs,\n durationApiMs: 0,\n numTurns: turnSnap?.turns ?? 0,\n ...(ctxSnap?.contextTokensIn !== undefined && {\n contextTokensIn: ctxSnap.contextTokensIn,\n }),\n ...(ctxSnap?.contextTokensOut !== undefined && {\n contextTokensOut: ctxSnap.contextTokensOut,\n }),\n ...(compSnap && compSnap.compactions > 0\n ? {\n compactions: compSnap.compactions,\n compactionPreTokens: compSnap.preTokens,\n }\n : {}),\n };\n\n steps.push(step);\n }\n\n const totalTurns = turns?.totalTurns ?? 0;\n const totalCost = cost?.totalCost ?? 0;\n const totalCompactions = compactions?.totalCompactions ?? 0;\n const fromModelUsage =\n aggregateUsage.input_tokens +\n aggregateUsage.cache_read_input_tokens +\n aggregateUsage.cache_creation_input_tokens;\n const inputTokens =\n fromModelUsage > 0\n ? fromModelUsage\n : (tokens?.totalInput ?? 0) +\n (cache?.totalRead ?? 0) +\n (cache?.totalCreation ?? 0);\n const outputTokens =\n aggregateUsage.output_tokens > 0\n ? aggregateUsage.output_tokens\n : tokens?.totalOutput ?? 0;\n\n const benchmark: BenchmarkData = {\n timestamp: new Date().toISOString(),\n steps,\n totals: {\n totalCostUsd: totalCost,\n durationMs: totalDurationMs,\n inputTokens,\n outputTokens,\n numTurns: resultMessage?.num_turns ?? totalTurns,\n totalCompactions,\n totalCacheReadTokens: cache?.totalRead ?? 0,\n totalCacheCreation5mTokens: cache?.totalCreation5m ?? 0,\n totalCacheCreation1hTokens: cache?.totalCreation1h ?? 0,\n },\n };\n\n this.writeBenchmarkData(benchmark);\n return benchmark;\n }\n\n private writeBenchmarkData(data: BenchmarkData): void {\n try {\n fs.writeFileSync(this.outputPath, JSON.stringify(data, null, 2));\n logToFile(`Benchmark data written to ${this.outputPath}`);\n getUI().log.info(\n `● ${AgentSignals.BENCHMARK} Results written to ${this.outputPath}`,\n );\n } catch (error) {\n logToFile('Failed to write benchmark data:', error);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"json-writer.js","sourceRoot":"","sources":["../../../../../src/lib/middleware/benchmarks/json-writer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * JSON file output plugin.\n *\n * Assembles the BenchmarkData structure from all upstream plugin data\n * and writes it to a JSON file. Returns the BenchmarkData for backward compat.\n */\n\nimport fs from 'fs';\nimport { getUI } from '../../../ui';\nimport { logToFile } from '../../../utils/debug';\nimport { AgentSignals } from '../../agent/agent-interface';\nimport type { Middleware, MiddlewareContext, MiddlewareStore } from '../types';\nimport type { TokenData } from './token-tracker';\nimport type { CacheData } from './cache-tracker';\nimport type { TurnData } from './turn-counter';\nimport type { CostData } from './cost-tracker';\nimport type { DurationData } from './duration-tracker';\nimport type { CompactionData } from './compaction-tracker';\nimport type { ContextSizeData } from './context-size-tracker';\nimport type { BenchmarkData, StepUsage } from '../benchmark';\n\n/**\n * Sum token usage across all models from the SDK's modelUsage field.\n */\nfunction sumModelUsage(modelUsage: Record<string, any>): {\n input_tokens: number;\n output_tokens: number;\n cache_creation_input_tokens: number;\n cache_read_input_tokens: number;\n} {\n let input_tokens = 0;\n let output_tokens = 0;\n let cache_creation_input_tokens = 0;\n let cache_read_input_tokens = 0;\n\n for (const model of Object.values(modelUsage)) {\n input_tokens += model.inputTokens ?? 0;\n output_tokens += model.outputTokens ?? 0;\n cache_creation_input_tokens += model.cacheCreationInputTokens ?? 0;\n cache_read_input_tokens += model.cacheReadInputTokens ?? 0;\n }\n\n return {\n input_tokens,\n output_tokens,\n cache_creation_input_tokens,\n cache_read_input_tokens,\n };\n}\n\nexport class JsonWriterPlugin implements Middleware {\n readonly name = 'jsonWriter';\n\n private outputPath: string;\n\n constructor(outputPath: string) {\n this.outputPath = outputPath;\n }\n\n onFinalize(\n resultMessage: any,\n totalDurationMs: number,\n ctx: MiddlewareContext,\n _store: MiddlewareStore,\n ): BenchmarkData {\n const tokens = ctx.get<TokenData>('tokens');\n const cache = ctx.get<CacheData>('cache');\n const turns = ctx.get<TurnData>('turns');\n const cost = ctx.get<CostData>('cost');\n const duration = ctx.get<DurationData>('duration');\n const compactions = ctx.get<CompactionData>('compactions');\n const contextSize = ctx.get<ContextSizeData>('contextSize');\n\n const modelUsage = resultMessage?.modelUsage ?? {};\n const aggregateUsage = sumModelUsage(modelUsage);\n\n const phaseCount = duration?.phaseSnapshots.length ?? 0;\n const steps: StepUsage[] = [];\n\n for (let i = 0; i < phaseCount; i++) {\n const dur = duration!.phaseSnapshots[i];\n const tokenSnap = tokens?.phaseSnapshots[i];\n const cacheSnap = cache?.phaseSnapshots[i];\n const turnSnap = turns?.phaseSnapshots[i];\n const costSnap = cost?.phaseCosts[i];\n const compSnap = compactions?.phaseSnapshots[i];\n const ctxSnap = contextSize?.phaseSnapshots[i];\n\n const step: StepUsage = {\n name: dur.phase,\n usage: {\n input_tokens: tokenSnap?.inputTokens ?? 0,\n output_tokens: tokenSnap?.outputTokens ?? 0,\n cache_creation_input_tokens: cacheSnap?.cacheCreationTokens ?? 0,\n cache_read_input_tokens: cacheSnap?.cacheReadTokens ?? 0,\n ...((cacheSnap?.cacheCreation5m ?? 0) +\n (cacheSnap?.cacheCreation1h ?? 0) >\n 0 && {\n cache_creation: {\n ephemeral_5m_input_tokens: cacheSnap?.cacheCreation5m ?? 0,\n ephemeral_1h_input_tokens: cacheSnap?.cacheCreation1h ?? 0,\n },\n }),\n },\n modelUsage: {},\n totalCostUsd: costSnap?.cost ?? 0,\n durationMs: dur.durationMs,\n durationApiMs: 0,\n numTurns: turnSnap?.turns ?? 0,\n ...(ctxSnap?.contextTokensIn !== undefined && {\n contextTokensIn: ctxSnap.contextTokensIn,\n }),\n ...(ctxSnap?.contextTokensOut !== undefined && {\n contextTokensOut: ctxSnap.contextTokensOut,\n }),\n ...(compSnap && compSnap.compactions > 0\n ? {\n compactions: compSnap.compactions,\n compactionPreTokens: compSnap.preTokens,\n }\n : {}),\n };\n\n steps.push(step);\n }\n\n const totalTurns = turns?.totalTurns ?? 0;\n const totalCost = cost?.totalCost ?? 0;\n const totalCompactions = compactions?.totalCompactions ?? 0;\n const fromModelUsage =\n aggregateUsage.input_tokens +\n aggregateUsage.cache_read_input_tokens +\n aggregateUsage.cache_creation_input_tokens;\n const inputTokens =\n fromModelUsage > 0\n ? fromModelUsage\n : (tokens?.totalInput ?? 0) +\n (cache?.totalRead ?? 0) +\n (cache?.totalCreation ?? 0);\n const outputTokens =\n aggregateUsage.output_tokens > 0\n ? aggregateUsage.output_tokens\n : tokens?.totalOutput ?? 0;\n\n const benchmark: BenchmarkData = {\n timestamp: new Date().toISOString(),\n steps,\n totals: {\n totalCostUsd: totalCost,\n durationMs: totalDurationMs,\n inputTokens,\n outputTokens,\n numTurns: resultMessage?.num_turns ?? totalTurns,\n totalCompactions,\n totalCacheReadTokens: cache?.totalRead ?? 0,\n totalCacheCreation5mTokens: cache?.totalCreation5m ?? 0,\n totalCacheCreation1hTokens: cache?.totalCreation1h ?? 0,\n },\n };\n\n this.writeBenchmarkData(benchmark);\n return benchmark;\n }\n\n private writeBenchmarkData(data: BenchmarkData): void {\n try {\n fs.writeFileSync(this.outputPath, JSON.stringify(data, null, 2));\n logToFile(`Benchmark data written to ${this.outputPath}`);\n getUI().log.info(\n `● ${AgentSignals.BENCHMARK} Results written to ${this.outputPath}`,\n );\n } catch (error) {\n logToFile('Failed to write benchmark data:', error);\n }\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SummaryPlugin = void 0;
|
|
4
4
|
const ui_1 = require("../../../ui");
|
|
5
|
-
const agent_interface_1 = require("../../agent-interface");
|
|
5
|
+
const agent_interface_1 = require("../../agent/agent-interface");
|
|
6
6
|
function fmtDuration(ms) {
|
|
7
7
|
const s = Math.round(ms / 1000);
|
|
8
8
|
const m = Math.floor(s / 60);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../../../src/lib/middleware/benchmarks/summary.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUI, type SpinnerHandle } from '../../../ui';\nimport { AgentSignals } from '../../agent-interface';\nimport type { Middleware, MiddlewareContext, MiddlewareStore } from '../types';\nimport type { TokenData } from './token-tracker';\nimport type { TurnData } from './turn-counter';\nimport type { CostData } from './cost-tracker';\nimport type { DurationData } from './duration-tracker';\nimport type { CompactionData } from './compaction-tracker';\nimport type { ContextSizeData } from './context-size-tracker';\nimport type { CacheData } from './cache-tracker';\n\nfunction fmtDuration(ms: number): string {\n const s = Math.round(ms / 1000);\n const m = Math.floor(s / 60);\n return m > 0 ? `${m}m ${s % 60}s` : `${s}s`;\n}\n\nfunction fmtTok(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1000).toFixed(1)}K`;\n return n.toLocaleString();\n}\n\nfunction fmtCost(usd: number): string {\n if (usd > 0 && usd < 0.01) return `$${usd.toFixed(4)}`;\n return `$${usd.toFixed(2)}`;\n}\n\ninterface PhaseStats {\n phase: string;\n durationMs: number;\n turns: number;\n inputTokens: number;\n outputTokens: number;\n cacheRead: number;\n cacheCreation5m: number;\n cacheCreation1h: number;\n cost: number;\n compactions: number;\n contextOut: number | undefined;\n}\n\nfunction printPhase(s: PhaseStats): string {\n const baseIn = Math.max(\n 0,\n s.inputTokens - s.cacheRead - s.cacheCreation5m - s.cacheCreation1h,\n );\n return [\n `${s.phase}: ${fmtDuration(s.durationMs)}, ${\n s.turns\n } turns, cost: ${fmtCost(s.cost)}`,\n ` in: ${fmtTok(baseIn)}, out: ${fmtTok(\n s.outputTokens,\n )}, cache_read: ${fmtTok(s.cacheRead)}, cache_5m: ${fmtTok(\n s.cacheCreation5m,\n )}, cache_1h: ${fmtTok(s.cacheCreation1h)}`,\n s.compactions > 0 ? ` ${s.compactions} compaction(s)` : null,\n s.contextOut !== undefined ? ` ctx_out: ${fmtTok(s.contextOut)}` : null,\n ]\n .filter(Boolean)\n .join('\\n');\n}\n\nfunction getPhaseStats(i: number, ctx: MiddlewareContext): PhaseStats | null {\n const duration = ctx.get<DurationData>('duration');\n const dur = duration?.phaseSnapshots[i];\n if (!dur) return null;\n\n const tokens = ctx.get<TokenData>('tokens');\n const turns = ctx.get<TurnData>('turns');\n const cost = ctx.get<CostData>('cost');\n const compactions = ctx.get<CompactionData>('compactions');\n const contextSize = ctx.get<ContextSizeData>('contextSize');\n const cache = ctx.get<CacheData>('cache');\n\n return {\n phase: dur.phase,\n durationMs: dur.durationMs,\n turns: turns?.phaseSnapshots[i]?.turns ?? 0,\n inputTokens: tokens?.phaseSnapshots[i]?.inputTokens ?? 0,\n outputTokens: tokens?.phaseSnapshots[i]?.outputTokens ?? 0,\n cacheRead: cache?.phaseSnapshots[i]?.cacheReadTokens ?? 0,\n cacheCreation5m: cache?.phaseSnapshots[i]?.cacheCreation5m ?? 0,\n cacheCreation1h: cache?.phaseSnapshots[i]?.cacheCreation1h ?? 0,\n cost: cost?.phaseCosts[i]?.cost ?? 0,\n compactions: compactions?.phaseSnapshots[i]?.compactions ?? 0,\n contextOut: contextSize?.phaseSnapshots[i]?.contextTokensOut,\n };\n}\n\nexport class SummaryPlugin implements Middleware {\n readonly name = 'summary';\n\n private spinner: SpinnerHandle;\n\n constructor(spinner: SpinnerHandle) {\n this.spinner = spinner;\n }\n\n onPhaseTransition(\n fromPhase: string,\n toPhase: string,\n ctx: MiddlewareContext,\n _store: MiddlewareStore,\n ): void {\n const duration = ctx.get<DurationData>('duration');\n const idx = (duration?.phaseSnapshots.length ?? 1) - 1;\n const stats = getPhaseStats(idx, ctx);\n\n if (stats) {\n this.spinner.stop(`${AgentSignals.BENCHMARK} ${printPhase(stats)}`);\n } else {\n this.spinner.stop(`${AgentSignals.BENCHMARK} ${fromPhase}`);\n }\n\n getUI().log.info(`${AgentSignals.BENCHMARK} Starting phase: ${toPhase}`);\n this.spinner.start(`Integrating PostHog (${toPhase})...`);\n }\n\n onFinalize(\n _resultMessage: any,\n totalDurationMs: number,\n ctx: MiddlewareContext,\n _store: MiddlewareStore,\n ): void {\n const duration = ctx.get<DurationData>('duration');\n const cost = ctx.get<CostData>('cost');\n const tokens = ctx.get<TokenData>('tokens');\n const cache = ctx.get<CacheData>('cache');\n\n const phaseCount = duration?.phaseSnapshots.length ?? 0;\n const totalCost = cost?.totalCost ?? 0;\n\n getUI().log.info('');\n getUI().log.info(\n `◇ ${AgentSignals.BENCHMARK} ${phaseCount} phases in ${fmtDuration(\n totalDurationMs,\n )}, cost: ${fmtCost(totalCost)}`,\n );\n getUI().log.info(\n ` total in: ${fmtTok(tokens?.totalInput ?? 0)}, out: ${fmtTok(\n tokens?.totalOutput ?? 0,\n )}, cache_read: ${fmtTok(cache?.totalRead ?? 0)}, cache_5m: ${fmtTok(\n cache?.totalCreation5m ?? 0,\n )}, cache_1h: ${fmtTok(cache?.totalCreation1h ?? 0)}`,\n );\n getUI().log.info('');\n getUI().log.info(`● ${AgentSignals.BENCHMARK} Summary by phase:`);\n\n if (duration?.phaseSnapshots) {\n for (let i = 0; i < duration.phaseSnapshots.length; i++) {\n const stats = getPhaseStats(i, ctx);\n if (stats) {\n getUI().log.info(printPhase(stats));\n }\n }\n }\n\n getUI().log.info('');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../../../../src/lib/middleware/benchmarks/summary.ts"],"names":[],"mappings":"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","sourcesContent":["import { getUI, type SpinnerHandle } from '../../../ui';\nimport { AgentSignals } from '../../agent/agent-interface';\nimport type { Middleware, MiddlewareContext, MiddlewareStore } from '../types';\nimport type { TokenData } from './token-tracker';\nimport type { TurnData } from './turn-counter';\nimport type { CostData } from './cost-tracker';\nimport type { DurationData } from './duration-tracker';\nimport type { CompactionData } from './compaction-tracker';\nimport type { ContextSizeData } from './context-size-tracker';\nimport type { CacheData } from './cache-tracker';\n\nfunction fmtDuration(ms: number): string {\n const s = Math.round(ms / 1000);\n const m = Math.floor(s / 60);\n return m > 0 ? `${m}m ${s % 60}s` : `${s}s`;\n}\n\nfunction fmtTok(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1_000) return `${(n / 1000).toFixed(1)}K`;\n return n.toLocaleString();\n}\n\nfunction fmtCost(usd: number): string {\n if (usd > 0 && usd < 0.01) return `$${usd.toFixed(4)}`;\n return `$${usd.toFixed(2)}`;\n}\n\ninterface PhaseStats {\n phase: string;\n durationMs: number;\n turns: number;\n inputTokens: number;\n outputTokens: number;\n cacheRead: number;\n cacheCreation5m: number;\n cacheCreation1h: number;\n cost: number;\n compactions: number;\n contextOut: number | undefined;\n}\n\nfunction printPhase(s: PhaseStats): string {\n const baseIn = Math.max(\n 0,\n s.inputTokens - s.cacheRead - s.cacheCreation5m - s.cacheCreation1h,\n );\n return [\n `${s.phase}: ${fmtDuration(s.durationMs)}, ${\n s.turns\n } turns, cost: ${fmtCost(s.cost)}`,\n ` in: ${fmtTok(baseIn)}, out: ${fmtTok(\n s.outputTokens,\n )}, cache_read: ${fmtTok(s.cacheRead)}, cache_5m: ${fmtTok(\n s.cacheCreation5m,\n )}, cache_1h: ${fmtTok(s.cacheCreation1h)}`,\n s.compactions > 0 ? ` ${s.compactions} compaction(s)` : null,\n s.contextOut !== undefined ? ` ctx_out: ${fmtTok(s.contextOut)}` : null,\n ]\n .filter(Boolean)\n .join('\\n');\n}\n\nfunction getPhaseStats(i: number, ctx: MiddlewareContext): PhaseStats | null {\n const duration = ctx.get<DurationData>('duration');\n const dur = duration?.phaseSnapshots[i];\n if (!dur) return null;\n\n const tokens = ctx.get<TokenData>('tokens');\n const turns = ctx.get<TurnData>('turns');\n const cost = ctx.get<CostData>('cost');\n const compactions = ctx.get<CompactionData>('compactions');\n const contextSize = ctx.get<ContextSizeData>('contextSize');\n const cache = ctx.get<CacheData>('cache');\n\n return {\n phase: dur.phase,\n durationMs: dur.durationMs,\n turns: turns?.phaseSnapshots[i]?.turns ?? 0,\n inputTokens: tokens?.phaseSnapshots[i]?.inputTokens ?? 0,\n outputTokens: tokens?.phaseSnapshots[i]?.outputTokens ?? 0,\n cacheRead: cache?.phaseSnapshots[i]?.cacheReadTokens ?? 0,\n cacheCreation5m: cache?.phaseSnapshots[i]?.cacheCreation5m ?? 0,\n cacheCreation1h: cache?.phaseSnapshots[i]?.cacheCreation1h ?? 0,\n cost: cost?.phaseCosts[i]?.cost ?? 0,\n compactions: compactions?.phaseSnapshots[i]?.compactions ?? 0,\n contextOut: contextSize?.phaseSnapshots[i]?.contextTokensOut,\n };\n}\n\nexport class SummaryPlugin implements Middleware {\n readonly name = 'summary';\n\n private spinner: SpinnerHandle;\n\n constructor(spinner: SpinnerHandle) {\n this.spinner = spinner;\n }\n\n onPhaseTransition(\n fromPhase: string,\n toPhase: string,\n ctx: MiddlewareContext,\n _store: MiddlewareStore,\n ): void {\n const duration = ctx.get<DurationData>('duration');\n const idx = (duration?.phaseSnapshots.length ?? 1) - 1;\n const stats = getPhaseStats(idx, ctx);\n\n if (stats) {\n this.spinner.stop(`${AgentSignals.BENCHMARK} ${printPhase(stats)}`);\n } else {\n this.spinner.stop(`${AgentSignals.BENCHMARK} ${fromPhase}`);\n }\n\n getUI().log.info(`${AgentSignals.BENCHMARK} Starting phase: ${toPhase}`);\n this.spinner.start(`Integrating PostHog (${toPhase})...`);\n }\n\n onFinalize(\n _resultMessage: any,\n totalDurationMs: number,\n ctx: MiddlewareContext,\n _store: MiddlewareStore,\n ): void {\n const duration = ctx.get<DurationData>('duration');\n const cost = ctx.get<CostData>('cost');\n const tokens = ctx.get<TokenData>('tokens');\n const cache = ctx.get<CacheData>('cache');\n\n const phaseCount = duration?.phaseSnapshots.length ?? 0;\n const totalCost = cost?.totalCost ?? 0;\n\n getUI().log.info('');\n getUI().log.info(\n `◇ ${AgentSignals.BENCHMARK} ${phaseCount} phases in ${fmtDuration(\n totalDurationMs,\n )}, cost: ${fmtCost(totalCost)}`,\n );\n getUI().log.info(\n ` total in: ${fmtTok(tokens?.totalInput ?? 0)}, out: ${fmtTok(\n tokens?.totalOutput ?? 0,\n )}, cache_read: ${fmtTok(cache?.totalRead ?? 0)}, cache_5m: ${fmtTok(\n cache?.totalCreation5m ?? 0,\n )}, cache_1h: ${fmtTok(cache?.totalCreation1h ?? 0)}`,\n );\n getUI().log.info('');\n getUI().log.info(`● ${AgentSignals.BENCHMARK} Summary by phase:`);\n\n if (duration?.phaseSnapshots) {\n for (let i = 0; i < duration.phaseSnapshots.length; i++) {\n const stats = getPhaseStats(i, ctx);\n if (stats) {\n getUI().log.info(printPhase(stats));\n }\n }\n }\n\n getUI().log.info('');\n }\n}\n"]}
|
|
@@ -14,7 +14,7 @@ exports.getDefaultConfig = getDefaultConfig;
|
|
|
14
14
|
const fs_1 = __importDefault(require("fs"));
|
|
15
15
|
const path_1 = __importDefault(require("path"));
|
|
16
16
|
const debug_1 = require("../../utils/debug");
|
|
17
|
-
const agent_interface_1 = require("../agent-interface");
|
|
17
|
+
const agent_interface_1 = require("../agent/agent-interface");
|
|
18
18
|
const DEFAULT_CONFIG = {
|
|
19
19
|
plugins: {
|
|
20
20
|
tokens: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/middleware/config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AA6CH,kDA+CC;AAED,4CAEC;AA9FD,4CAAoB;AACpB,gDAAwB;AACxB,6CAA8C;AAC9C,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/lib/middleware/config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;AA6CH,kDA+CC;AAED,4CAEC;AA9FD,4CAAoB;AACpB,gDAAwB;AACxB,6CAA8C;AAC9C,8DAAwD;AAmBxD,MAAM,cAAc,GAAoB;IACtC,OAAO,EAAE;QACP,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;QACjB,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,IAAI;KACjB;IACD,MAAM,EAAE;QACN,aAAa,EAAE,oCAAoC;QACnD,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,yBAAyB;QAClC,UAAU,EAAE,IAAI;QAChB,kBAAkB,EAAE,KAAK;KAC1B;CACF,CAAC;AAEF,SAAgB,mBAAmB,CAAC,UAAkB;IACpD,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,+BAA+B;QAC3C,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAoB;YAC9B,OAAO,EAAE,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE;YACzD,MAAM,EAAE,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE;SACvD,CAAC;QAEF,sCAAsC;QACtC,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,cAAI,CAAC,IAAI,CAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAClC,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,iEAAiE;QACjE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;QACpC,CAAC;QAED,IAAA,iBAAS,EAAC,GAAG,8BAAY,CAAC,SAAS,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAE/C,oBAAoB;QACpB,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;QAC1E,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,cAAI,CAAC,IAAI,CAC/B,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAClC,oBAAoB,CACrB,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB;IAC9B,OAAO,eAAe,CAAC,cAAc,CAAC,CAAC;AACzC,CAAC","sourcesContent":["/**\n * Benchmark configuration loader.\n *\n * Loads .benchmark-config.json from the working directory with sensible defaults.\n * All fields are optional — missing fields fall back to defaults.\n */\n\nimport fs from 'fs';\nimport path from 'path';\nimport { logToFile } from '../../utils/debug';\nimport { AgentSignals } from '../agent/agent-interface';\n\nexport interface BenchmarkConfig {\n /** Enable/disable individual metric plugins */\n plugins: Record<string, boolean>;\n output: {\n /** Path for the benchmark JSON output file */\n benchmarkPath: string;\n /** Whether to write the benchmark JSON file */\n benchmarkEnabled: boolean;\n /** Path for the main wizard debug log file */\n logPath: string;\n /** Whether to write the main wizard debug log */\n logEnabled: boolean;\n /** Suppress benchmark console output (disables the summary plugin) */\n suppressWizardLogs: boolean;\n };\n}\n\nconst DEFAULT_CONFIG: BenchmarkConfig = {\n plugins: {\n tokens: true,\n cache: true,\n turns: true,\n compactions: true,\n contextSize: true,\n cost: true,\n duration: true,\n summary: true,\n jsonWriter: true,\n },\n output: {\n benchmarkPath: '/tmp/posthog-wizard-benchmark.json',\n benchmarkEnabled: true,\n logPath: '/tmp/posthog-wizard.log',\n logEnabled: true,\n suppressWizardLogs: false,\n },\n};\n\nexport function loadBenchmarkConfig(installDir: string): BenchmarkConfig {\n const configPath =\n process.env.POSTHOG_WIZARD_BENCHMARK_CONFIG ??\n path.join(installDir, '.benchmark-config.json');\n try {\n const raw = fs.readFileSync(configPath, 'utf-8');\n const parsed = JSON.parse(raw);\n const config: BenchmarkConfig = {\n plugins: { ...DEFAULT_CONFIG.plugins, ...parsed.plugins },\n output: { ...DEFAULT_CONFIG.output, ...parsed.output },\n };\n\n // Env var overrides for parallel runs\n if (process.env.POSTHOG_WIZARD_BENCHMARK_FILE) {\n config.output.benchmarkPath = process.env.POSTHOG_WIZARD_BENCHMARK_FILE;\n }\n if (process.env.POSTHOG_WIZARD_LOG_DIR) {\n config.output.logPath = path.join(\n process.env.POSTHOG_WIZARD_LOG_DIR,\n 'posthog-wizard.log',\n );\n }\n\n // If benchmark output is disabled, disable the jsonWriter plugin\n if (!config.output.benchmarkEnabled) {\n config.plugins.jsonWriter = false;\n }\n\n logToFile(`${AgentSignals.BENCHMARK} Loaded config from ${configPath}`);\n return config;\n } catch {\n // No config file or invalid JSON — use defaults\n const config = structuredClone(DEFAULT_CONFIG);\n\n // Env var overrides\n if (process.env.POSTHOG_WIZARD_BENCHMARK_FILE) {\n config.output.benchmarkPath = process.env.POSTHOG_WIZARD_BENCHMARK_FILE;\n }\n if (process.env.POSTHOG_WIZARD_LOG_DIR) {\n config.output.logPath = path.join(\n process.env.POSTHOG_WIZARD_LOG_DIR,\n 'posthog-wizard.log',\n );\n }\n\n return config;\n }\n}\n\nexport function getDefaultConfig(): BenchmarkConfig {\n return structuredClone(DEFAULT_CONFIG);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "2.
|
|
1
|
+
export declare const VERSION = "2.9.0";
|
package/dist/src/lib/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/lib/version.ts"],"names":[],"mappings":";;;AAAA,8DAA8D;AACjD,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["// Auto-generated by scripts/generate-version.js — do not edit\nexport const VERSION = '2.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/lib/version.ts"],"names":[],"mappings":";;;AAAA,8DAA8D;AACjD,QAAA,OAAO,GAAG,OAAO,CAAC","sourcesContent":["// Auto-generated by scripts/generate-version.js — do not edit\nexport const VERSION = '2.9.0';\n"]}
|
|
@@ -12,7 +12,13 @@
|
|
|
12
12
|
import type { Integration } from './constants';
|
|
13
13
|
import type { FrameworkConfig } from './framework-config';
|
|
14
14
|
import type { WizardReadinessResult } from './health-checks/readiness';
|
|
15
|
-
import type { SettingsConflict } from './agent-interface';
|
|
15
|
+
import type { SettingsConflict } from './agent/agent-interface';
|
|
16
|
+
export interface Credentials {
|
|
17
|
+
accessToken: string;
|
|
18
|
+
projectApiKey: string;
|
|
19
|
+
host: string;
|
|
20
|
+
projectId: number;
|
|
21
|
+
}
|
|
16
22
|
export type CloudRegion = 'us' | 'eu';
|
|
17
23
|
/** Lifecycle phase of the main work (agent run, MCP install, etc.) */
|
|
18
24
|
export declare enum RunPhase {
|
|
@@ -53,10 +59,16 @@ export declare enum OutroKind {
|
|
|
53
59
|
}
|
|
54
60
|
export interface OutroData {
|
|
55
61
|
kind: OutroKind;
|
|
62
|
+
/** Main headline (green check for Success, red X for Error, etc.) */
|
|
56
63
|
message?: string;
|
|
64
|
+
/** Free-form body text shown under the headline. Use \n for paragraph breaks. */
|
|
65
|
+
body?: string;
|
|
66
|
+
/** Success-only: bulleted list of "what the agent did" */
|
|
57
67
|
changes?: string[];
|
|
58
68
|
docsUrl?: string;
|
|
59
69
|
continueUrl?: string;
|
|
70
|
+
/** Report file the agent wrote (e.g. "posthog-setup-report.md") */
|
|
71
|
+
reportFile?: string;
|
|
60
72
|
}
|
|
61
73
|
export interface WizardSession {
|
|
62
74
|
debug: boolean;
|
|
@@ -67,6 +79,8 @@ export interface WizardSession {
|
|
|
67
79
|
localMcp: boolean;
|
|
68
80
|
mcpFeatures?: string[];
|
|
69
81
|
apiKey?: string;
|
|
82
|
+
email?: string;
|
|
83
|
+
region?: CloudRegion;
|
|
70
84
|
menu: boolean;
|
|
71
85
|
benchmark: boolean;
|
|
72
86
|
yaraReport: boolean;
|
|
@@ -85,12 +99,7 @@ export interface WizardSession {
|
|
|
85
99
|
minimum: string;
|
|
86
100
|
docsUrl: string;
|
|
87
101
|
} | null;
|
|
88
|
-
credentials:
|
|
89
|
-
accessToken: string;
|
|
90
|
-
projectApiKey: string;
|
|
91
|
-
host: string;
|
|
92
|
-
projectId: number;
|
|
93
|
-
} | null;
|
|
102
|
+
credentials: Credentials | null;
|
|
94
103
|
runPhase: RunPhase;
|
|
95
104
|
loginUrl: string | null;
|
|
96
105
|
discoveredFeatures: DiscoveredFeature[];
|
|
@@ -111,6 +120,8 @@ export interface WizardSession {
|
|
|
111
120
|
} | null;
|
|
112
121
|
outroData: OutroData | null;
|
|
113
122
|
additionalFeatureQueue: AdditionalFeature[];
|
|
123
|
+
workflowLabel: string | null;
|
|
124
|
+
skillId: string | null;
|
|
114
125
|
frameworkConfig: FrameworkConfig | null;
|
|
115
126
|
}
|
|
116
127
|
/**
|
|
@@ -125,6 +136,8 @@ export declare function buildSession(args: {
|
|
|
125
136
|
localMcp?: boolean;
|
|
126
137
|
mcpFeatures?: string[];
|
|
127
138
|
apiKey?: string;
|
|
139
|
+
email?: string;
|
|
140
|
+
region?: CloudRegion;
|
|
128
141
|
menu?: boolean;
|
|
129
142
|
integration?: Integration;
|
|
130
143
|
benchmark?: boolean;
|
|
@@ -78,6 +78,8 @@ function buildSession(args) {
|
|
|
78
78
|
localMcp: args.localMcp ?? false,
|
|
79
79
|
mcpFeatures: args.mcpFeatures,
|
|
80
80
|
apiKey: args.apiKey,
|
|
81
|
+
email: args.email,
|
|
82
|
+
region: args.region,
|
|
81
83
|
menu: args.menu ?? false,
|
|
82
84
|
benchmark: args.benchmark ?? false,
|
|
83
85
|
yaraReport: args.yaraReport ?? false,
|
|
@@ -106,6 +108,8 @@ function buildSession(args) {
|
|
|
106
108
|
portConflictProcess: null,
|
|
107
109
|
outroData: null,
|
|
108
110
|
additionalFeatureQueue: [],
|
|
111
|
+
workflowLabel: null,
|
|
112
|
+
skillId: null,
|
|
109
113
|
frameworkConfig: null,
|
|
110
114
|
};
|
|
111
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard-session.js","sourceRoot":"","sources":["../../../src/lib/wizard-session.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;
|
|
1
|
+
{"version":3,"file":"wizard-session.js","sourceRoot":"","sources":["../../../src/lib/wizard-session.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * WizardSession — single source of truth for every decision the wizard needs.\n *\n * Populated in layers:\n * CLI args / env vars → populate fields directly\n * Auto-detection → framework, typescript, package manager\n * TUI screens → region, framework disambiguation, etc.\n * OAuth → credentials\n *\n * Business logic reads from the session. Never calls a prompt.\n */\n\nimport type { Integration } from './constants';\nimport type { FrameworkConfig } from './framework-config';\nimport type { WizardReadinessResult } from './health-checks/readiness';\nimport type { SettingsConflict } from './agent/agent-interface';\n\nexport interface Credentials {\n accessToken: string;\n projectApiKey: string;\n host: string;\n projectId: number;\n}\n\nfunction parseProjectIdArg(value: string | undefined): number | undefined {\n if (value === undefined || value === '') return undefined;\n const n = Number(value);\n return Number.isInteger(n) && n > 0 ? n : undefined;\n}\n\nexport type CloudRegion = 'us' | 'eu';\n\n/** Lifecycle phase of the main work (agent run, MCP install, etc.) */\nexport enum RunPhase {\n /** Still gathering input (intro, setup screens) */\n Idle = 'idle',\n /** Main work is in progress */\n Running = 'running',\n /** Main work finished successfully */\n Completed = 'completed',\n /** Main work finished with an error */\n Error = 'error',\n}\n\n/** Features discovered by the feature-discovery subagent */\nexport enum DiscoveredFeature {\n Stripe = 'stripe',\n LLM = 'llm',\n}\n\n/** Additional features the agent can integrate after the main setup */\nexport enum AdditionalFeature {\n LLM = 'llm',\n}\n\n/** Human-readable labels for additional features (used in TUI progress) */\nexport const ADDITIONAL_FEATURE_LABELS: Record<AdditionalFeature, string> = {\n [AdditionalFeature.LLM]: 'LLM analytics',\n};\n\n/** Agent prompts for each additional feature, injected via the stop hook */\nexport const ADDITIONAL_FEATURE_PROMPTS: Record<AdditionalFeature, string> = {\n [AdditionalFeature.LLM]: `Now integrate LLM analytics with PostHog. Use the PostHog MCP server to find the appropriate LLM analytics skill, install it, and follow its workflow. PostHog basics are already installed. Update the setup report markdown file when complete with additions from this task. `,\n};\n\n/** Outcome of the MCP server installation step */\nexport enum McpOutcome {\n NoClients = 'no_clients',\n Skipped = 'skipped',\n Installed = 'installed',\n Failed = 'failed',\n}\n\n/** Outcome kind for the outro screen */\nexport enum OutroKind {\n Success = 'success',\n Error = 'error',\n Cancel = 'cancel',\n}\n\nexport interface OutroData {\n kind: OutroKind;\n /** Main headline (green check for Success, red X for Error, etc.) */\n message?: string;\n /** Free-form body text shown under the headline. Use \\n for paragraph breaks. */\n body?: string;\n /** Success-only: bulleted list of \"what the agent did\" */\n changes?: string[];\n docsUrl?: string;\n continueUrl?: string;\n /** Report file the agent wrote (e.g. \"posthog-setup-report.md\") */\n reportFile?: string;\n}\n\nexport interface WizardSession {\n // From CLI args\n debug: boolean;\n forceInstall: boolean;\n installDir: string;\n ci: boolean;\n signup: boolean;\n localMcp: boolean;\n mcpFeatures?: string[];\n apiKey?: string;\n email?: string;\n region?: CloudRegion;\n menu: boolean;\n benchmark: boolean;\n yaraReport: boolean;\n projectId?: number;\n\n // From detection + screens\n setupConfirmed: boolean;\n integration: Integration | null;\n frameworkContext: Record<string, unknown>;\n typescript: boolean;\n\n /** Human-readable label for the detected framework variant (e.g., \"Django with Wagtail CMS\") */\n detectedFrameworkLabel: string | null;\n\n /** True once framework detection has run (whether it found something or not) */\n detectionComplete: boolean;\n\n /** Set when the detected framework version is too old for the wizard */\n unsupportedVersion: {\n current: string;\n minimum: string;\n docsUrl: string;\n } | null;\n\n // From OAuth\n credentials: Credentials | null;\n\n // Lifecycle\n runPhase: RunPhase;\n loginUrl: string | null;\n\n // Feature discovery\n discoveredFeatures: DiscoveredFeature[];\n llmOptIn: boolean;\n\n // Screen completion\n mcpComplete: boolean;\n mcpOutcome: McpOutcome | null;\n mcpInstalledClients: string[];\n skillsComplete: boolean;\n outroDismissed: boolean;\n\n // Runtime\n readinessResult: WizardReadinessResult | null;\n outageDismissed: boolean;\n settingsOverrideKeys: string[] | null;\n settingsConflicts: SettingsConflict[] | null;\n portConflictProcess: { command: string; pid: string; user: string } | null;\n outroData: OutroData | null;\n\n // Additional features queue (drained via stop hook after main integration)\n additionalFeatureQueue: AdditionalFeature[];\n\n // Workflow metadata (set by runWizard in bin.ts)\n workflowLabel: string | null;\n skillId: string | null;\n\n // Resolved framework config (set after integration is known)\n frameworkConfig: FrameworkConfig | null;\n}\n\n/**\n * Build a WizardSession from CLI args, pre-populating whatever is known.\n */\nexport function buildSession(args: {\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n ci?: boolean;\n signup?: boolean;\n localMcp?: boolean;\n mcpFeatures?: string[];\n apiKey?: string;\n email?: string;\n region?: CloudRegion;\n menu?: boolean;\n integration?: Integration;\n benchmark?: boolean;\n yaraReport?: boolean;\n projectId?: string;\n}): WizardSession {\n return {\n debug: args.debug ?? false,\n forceInstall: args.forceInstall ?? false,\n installDir: args.installDir ?? process.cwd(),\n ci: args.ci ?? false,\n signup: args.signup ?? false,\n localMcp: args.localMcp ?? false,\n mcpFeatures: args.mcpFeatures,\n apiKey: args.apiKey,\n email: args.email,\n region: args.region,\n menu: args.menu ?? false,\n benchmark: args.benchmark ?? false,\n yaraReport: args.yaraReport ?? false,\n projectId: parseProjectIdArg(args.projectId),\n\n setupConfirmed: false,\n integration: args.integration ?? null,\n frameworkContext: {},\n typescript: false,\n detectedFrameworkLabel: null,\n detectionComplete: false,\n unsupportedVersion: null,\n\n runPhase: RunPhase.Idle,\n discoveredFeatures: [],\n llmOptIn: false,\n mcpComplete: false,\n mcpOutcome: null,\n mcpInstalledClients: [],\n skillsComplete: false,\n outroDismissed: false,\n loginUrl: null,\n credentials: null,\n readinessResult: null,\n outageDismissed: false,\n settingsOverrideKeys: null,\n settingsConflicts: null,\n portConflictProcess: null,\n outroData: null,\n additionalFeatureQueue: [],\n workflowLabel: null,\n skillId: null,\n frameworkConfig: null,\n };\n}\n"]}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - set_env_values: Create/update env vars in a .env file
|
|
7
7
|
* - detect_package_manager: Detect the project's package manager(s)
|
|
8
8
|
*/
|
|
9
|
-
import type { PackageManagerDetector } from './package-manager
|
|
9
|
+
import type { PackageManagerDetector } from './detection/package-manager';
|
|
10
10
|
export type SkillEntry = {
|
|
11
11
|
id: string;
|
|
12
12
|
name: string;
|
|
@@ -29,6 +29,33 @@ export declare function downloadSkill(skillEntry: SkillEntry, installDir: string
|
|
|
29
29
|
success: boolean;
|
|
30
30
|
error?: string;
|
|
31
31
|
};
|
|
32
|
+
/**
|
|
33
|
+
* Structured result for installSkillById.
|
|
34
|
+
* - `ok`: the skill was fetched and extracted; `path` is where it lives
|
|
35
|
+
* relative to installDir.
|
|
36
|
+
* - `menu-fetch-failed`: couldn't fetch or parse the skill menu.
|
|
37
|
+
* - `skill-not-found`: the menu didn't contain a skill with this id.
|
|
38
|
+
* - `download-failed`: found the skill but download/extract failed;
|
|
39
|
+
* `message` has the underlying error.
|
|
40
|
+
*/
|
|
41
|
+
export type InstallSkillResult = {
|
|
42
|
+
kind: 'ok';
|
|
43
|
+
path: string;
|
|
44
|
+
} | {
|
|
45
|
+
kind: 'menu-fetch-failed';
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'skill-not-found';
|
|
48
|
+
skillId: string;
|
|
49
|
+
} | {
|
|
50
|
+
kind: 'download-failed';
|
|
51
|
+
message: string;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* High-level "install a skill by ID" helper. Fetches the skill menu,
|
|
55
|
+
* finds the skill, downloads and extracts it. Workflows should use this
|
|
56
|
+
* instead of composing fetchSkillMenu + downloadSkill themselves.
|
|
57
|
+
*/
|
|
58
|
+
export declare function installSkillById(skillId: string, installDir: string, skillsBaseUrl: string, skillsRoot?: string): Promise<InstallSkillResult>;
|
|
32
59
|
export interface WizardToolsOptions {
|
|
33
60
|
/** Root directory of the project being analyzed */
|
|
34
61
|
workingDirectory: string;
|
|
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
14
14
|
exports.WIZARD_TOOL_NAMES = void 0;
|
|
15
15
|
exports.fetchSkillMenu = fetchSkillMenu;
|
|
16
16
|
exports.downloadSkill = downloadSkill;
|
|
17
|
+
exports.installSkillById = installSkillById;
|
|
17
18
|
exports.resolveEnvPath = resolveEnvPath;
|
|
18
19
|
exports.ensureGitignoreCoverage = ensureGitignoreCoverage;
|
|
19
20
|
exports.parseEnvKeys = parseEnvKeys;
|
|
@@ -91,6 +92,29 @@ function downloadSkill(skillEntry, installDir, skillsRoot) {
|
|
|
91
92
|
return { success: false, error: err.message };
|
|
92
93
|
}
|
|
93
94
|
}
|
|
95
|
+
/**
|
|
96
|
+
* High-level "install a skill by ID" helper. Fetches the skill menu,
|
|
97
|
+
* finds the skill, downloads and extracts it. Workflows should use this
|
|
98
|
+
* instead of composing fetchSkillMenu + downloadSkill themselves.
|
|
99
|
+
*/
|
|
100
|
+
async function installSkillById(skillId, installDir, skillsBaseUrl, skillsRoot) {
|
|
101
|
+
const menu = await fetchSkillMenu(skillsBaseUrl);
|
|
102
|
+
if (!menu)
|
|
103
|
+
return { kind: 'menu-fetch-failed' };
|
|
104
|
+
const skill = Object.values(menu.categories)
|
|
105
|
+
.flat()
|
|
106
|
+
.find((s) => s.id === skillId);
|
|
107
|
+
if (!skill)
|
|
108
|
+
return { kind: 'skill-not-found', skillId };
|
|
109
|
+
const result = downloadSkill(skill, installDir, skillsRoot);
|
|
110
|
+
if (!result.success) {
|
|
111
|
+
return { kind: 'download-failed', message: result.error ?? 'unknown' };
|
|
112
|
+
}
|
|
113
|
+
const relPath = skillsRoot
|
|
114
|
+
? `${skillsRoot}/${skillId}`
|
|
115
|
+
: `.claude/skills/${skillId}`;
|
|
116
|
+
return { kind: 'ok', path: relPath };
|
|
117
|
+
}
|
|
94
118
|
// ---------------------------------------------------------------------------
|
|
95
119
|
// Env file helpers
|
|
96
120
|
// ---------------------------------------------------------------------------
|