@planu/cli 4.12.3 → 4.14.1
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/CHANGELOG.md +35 -0
- package/README.md +29 -25
- package/dist/cli/commands/inspect.d.ts +4 -0
- package/dist/cli/commands/inspect.js +144 -0
- package/dist/cli/commands/install.d.ts +19 -1
- package/dist/cli/commands/install.js +145 -43
- package/dist/cli/commands/job.d.ts +3 -0
- package/dist/cli/commands/job.js +119 -0
- package/dist/cli/commands/offline.d.ts +15 -0
- package/dist/cli/commands/offline.js +132 -0
- package/dist/cli/commands/serve.js +4 -0
- package/dist/cli/commands/spec.js +1 -1
- package/dist/cli/commands/storage.d.ts +3 -0
- package/dist/cli/commands/storage.js +102 -0
- package/dist/cli/commands/uninstall.d.ts +10 -0
- package/dist/cli/commands/uninstall.js +93 -7
- package/dist/cli/commands/validate.js +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/router.js +9 -1
- package/dist/config/crash-shield-framework-rules.json +93 -0
- package/dist/config/environment-schema.json +149 -0
- package/dist/config/hardcode-exceptions.json +4 -0
- package/dist/config/license-plans.json +7 -0
- package/dist/config/native-release-public-key.pem +3 -0
- package/dist/config/native-targets.json +87 -0
- package/dist/config/product-public.d.ts +89 -0
- package/dist/config/product-public.js +140 -0
- package/dist/config/product-public.json +312 -0
- package/dist/config/product-public.ts +148 -0
- package/dist/config/release-compatibility.json +13 -0
- package/dist/config/release-policy.json +26 -0
- package/dist/config/runtime-policy.json +44 -0
- package/dist/config/skill-templates/planu-validate.md +7 -4
- package/dist/config/subagent-templates/planu-spec-implementer.md +7 -3
- package/dist/config/subagent-templates/planu-validator.md +10 -5
- package/dist/config/technology-registry.json +120 -0
- package/dist/config/version.js +7 -8
- package/dist/config/version.ts +10 -7
- package/dist/engine/abortable-process-runner.js +40 -9
- package/dist/engine/advanced-testing/accessibility-checker.js +12 -14
- package/dist/engine/advanced-testing/mutation-advisor.js +3 -4
- package/dist/engine/advanced-testing/property-based.js +2 -3
- package/dist/engine/advanced-testing/test-data-advisor.js +2 -3
- package/dist/engine/agent-generator.js +2 -1
- package/dist/engine/agent-handoff-store.js +2 -1
- package/dist/engine/agent-prompt-generator.js +7 -5
- package/dist/engine/agent-telemetry.js +2 -1
- package/dist/engine/ai-integration/gemini/extensions-advisor.js +41 -9
- package/dist/engine/ambiguity-detector.js +12 -11
- package/dist/engine/analyzer/db-engine.js +2 -3
- package/dist/engine/analyzer/detectors.js +13 -14
- package/dist/engine/analyzer/env-setup.js +9 -10
- package/dist/engine/analyzer-env-scanner/env-example.js +7 -8
- package/dist/engine/api-spec-generator/graphql-parser.js +2 -2
- package/dist/engine/api-validation/graphql-schema-validator.js +2 -1
- package/dist/engine/api-validation/openapi-impl-validator.js +6 -7
- package/dist/engine/architecture-detector.js +10 -8
- package/dist/engine/auth/config.d.ts +1 -1
- package/dist/engine/auth/config.js +4 -3
- package/dist/engine/auto-updater/atomic-upgrade.d.ts +8 -0
- package/dist/engine/auto-updater/atomic-upgrade.js +381 -0
- package/dist/engine/auto-updater/config-detector.js +9 -3
- package/dist/engine/auto-updater/config-patcher.d.ts +0 -4
- package/dist/engine/auto-updater/config-patcher.js +10 -15
- package/dist/engine/auto-updater/index.d.ts +3 -1
- package/dist/engine/auto-updater/index.js +44 -30
- package/dist/engine/auto-updater/npm-registry.js +10 -2
- package/dist/engine/auto-updater/release-verifier.d.ts +3 -0
- package/dist/engine/auto-updater/release-verifier.js +112 -0
- package/dist/engine/auto-updater/upgrade-lock.d.ts +6 -0
- package/dist/engine/auto-updater/upgrade-lock.js +28 -0
- package/dist/engine/auto-updater/upgrade-trust-state.d.ts +7 -0
- package/dist/engine/auto-updater/upgrade-trust-state.js +59 -0
- package/dist/engine/autopilot/audit-logger.js +2 -5
- package/dist/engine/best-practices-library.js +2 -1
- package/dist/engine/browser-validator.js +2 -1
- package/dist/engine/build-tool-detector.js +3 -2
- package/dist/engine/ci-generator/context-builders.js +7 -5
- package/dist/engine/ci-generator/stack-detector.js +0 -2
- package/dist/engine/ci-generator/yaml-builder.js +0 -2
- package/dist/engine/claude-config-auditor/rules-auditor.js +4 -3
- package/dist/engine/code-transforms/typescript/ast-utils.js +2 -3
- package/dist/engine/complexity-budget/trivial-detector.js +2 -1
- package/dist/engine/compliance-test-generator/index.js +7 -2
- package/dist/engine/compliance-test-generator/test-formatter.js +2 -2
- package/dist/engine/config-health/mcp-config-checker.js +2 -1
- package/dist/engine/config-health/ts-checker-scripts.js +4 -3
- package/dist/engine/config-health/ts-checker.js +3 -2
- package/dist/engine/convention-injector.js +5 -7
- package/dist/engine/convention-scanner/convention-parser.js +3 -2
- package/dist/engine/core-bridge-duplicate-blocks.d.ts +3 -0
- package/dist/engine/core-bridge-duplicate-blocks.js +57 -0
- package/dist/engine/core-bridge-gaps.d.ts +4 -0
- package/dist/engine/core-bridge-gaps.js +75 -0
- package/dist/engine/core-bridge.d.ts +9 -9
- package/dist/engine/core-bridge.js +196 -283
- package/dist/engine/cost-tracking/ledger.js +2 -5
- package/dist/engine/coverage-gap-analyzer.js +10 -1
- package/dist/engine/crash-shield/detectors/framework-detector.d.ts +2 -0
- package/dist/engine/crash-shield/detectors/framework-detector.js +110 -192
- package/dist/engine/crash-shield/detectors/typescript-detector.js +2 -1
- package/dist/engine/dashboard/data-loader.js +2 -1
- package/dist/engine/data-projects-gc/gc-runner.d.ts +7 -0
- package/dist/engine/data-projects-gc/gc-runner.js +113 -3
- package/dist/engine/data-projects-gc/scanner.js +5 -1
- package/dist/engine/decision-store.js +11 -14
- package/dist/engine/deleter/core.js +5 -5
- package/dist/engine/dep-auditor/abandonment-data.js +2 -1
- package/dist/engine/dep-auditor/abandonment-registry.js +3 -1
- package/dist/engine/dep-auditor/cve-fetcher.js +3 -0
- package/dist/engine/dep-auditor/dep-duplicates-detector.js +36 -4
- package/dist/engine/dep-auditor/license-registry.js +2 -0
- package/dist/engine/dependency-evaluator.d.ts +14 -0
- package/dist/engine/dependency-evaluator.js +81 -0
- package/dist/engine/deploy/providers/fly.js +7 -7
- package/dist/engine/deploy/providers/netlify.js +7 -7
- package/dist/engine/deploy/providers/railway.js +10 -12
- package/dist/engine/deploy/providers/vercel.js +7 -9
- package/dist/engine/deprecation-scanner/pattern-loader.js +0 -2
- package/dist/engine/desktop-detector.js +2 -3
- package/dist/engine/detect-duplication.js +2 -1
- package/dist/engine/detectors/advanced-framework-detector/css-state-detector.js +2 -1
- package/dist/engine/detectors/advanced-framework-detector/legacy-detector.js +2 -3
- package/dist/engine/detectors/advanced-framework-detector/modern-detector.js +3 -4
- package/dist/engine/detectors/agent-framework-detector.js +3 -2
- package/dist/engine/detectors/ai-native-detector.js +4 -6
- package/dist/engine/detectors/cache-db-detector.js +4 -3
- package/dist/engine/detectors/cicd-detector.js +4 -3
- package/dist/engine/detectors/deployment-detector.js +11 -12
- package/dist/engine/detectors/frontend-perf-detector.js +14 -9
- package/dist/engine/detectors/library-detector-multilang-a.js +16 -3
- package/dist/engine/detectors/library-detector-node.js +14 -4
- package/dist/engine/detectors/library-detector-python.js +7 -1
- package/dist/engine/detectors/library-detector.js +0 -2
- package/dist/engine/detectors/llm-detector/provider-maps.js +3 -2
- package/dist/engine/detectors/mcp-candidate-detector.js +12 -16
- package/dist/engine/detectors/mfe-detector.js +6 -7
- package/dist/engine/detectors/monitoring-detector.js +4 -3
- package/dist/engine/detectors/otel-detector.js +3 -2
- package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -2
- package/dist/engine/detectors/otel-ecosystem-detectors.js +4 -3
- package/dist/engine/detectors/platform-specialty-detector.js +3 -5
- package/dist/engine/detectors/template-engine-detector.js +3 -4
- package/dist/engine/doc-generator/builders.js +2 -3
- package/dist/engine/doc-generator/mobile-distribution-guide.js +13 -17
- package/dist/engine/doc-generator/portal/dirty-flag-map.d.ts +2 -2
- package/dist/engine/doc-generator/portal/portal-regenerator.js +3 -47
- package/dist/engine/domain-detector.js +3 -6
- package/dist/engine/dynamic-knowledge/knowledge-cache.js +3 -4
- package/dist/engine/dynamic-knowledge/knowledge-merger.js +17 -2
- package/dist/engine/dynamic-knowledge/web-researcher.js +15 -14
- package/dist/engine/dynamic-migration-detector/manifest-readers-extended.js +0 -2
- package/dist/engine/e2e-test-generator.js +4 -3
- package/dist/engine/ecosystem-absorber/knowledge-cache.js +2 -1
- package/dist/engine/ecosystem-absorber/platform-crawler.js +2 -2
- package/dist/engine/escalator/retry-counter.js +2 -1
- package/dist/engine/evidence-gates/artifact-reader.d.ts +6 -0
- package/dist/engine/evidence-gates/artifact-reader.js +105 -21
- package/dist/engine/evidence-gates/lifecycle-gate.d.ts +2 -1
- package/dist/engine/evidence-gates/lifecycle-gate.js +54 -0
- package/dist/engine/execution/context.d.ts +19 -0
- package/dist/engine/execution/context.js +127 -0
- package/dist/engine/execution/deadline-io.d.ts +21 -0
- package/dist/engine/execution/deadline-io.js +45 -0
- package/dist/engine/execution/job-executor.d.ts +16 -0
- package/dist/engine/execution/job-executor.js +140 -0
- package/dist/engine/execution/job-runtime.d.ts +78 -0
- package/dist/engine/execution/job-runtime.js +220 -0
- package/dist/engine/execution/native-relevance-scorer.d.ts +6 -0
- package/dist/engine/execution/native-relevance-scorer.js +64 -0
- package/dist/engine/execution/native-worker-dispatch.d.ts +3 -0
- package/dist/engine/execution/native-worker-dispatch.js +46 -0
- package/dist/engine/execution/native-worker-protocol.d.ts +6 -0
- package/dist/engine/execution/native-worker-protocol.js +33 -0
- package/dist/engine/execution/native-worker-runtime.d.ts +4 -0
- package/dist/engine/execution/native-worker-runtime.js +177 -0
- package/dist/engine/execution/native-worker-thread.d.ts +2 -0
- package/dist/engine/execution/native-worker-thread.js +66 -0
- package/dist/engine/execution/operation-journal.d.ts +66 -0
- package/dist/engine/execution/operation-journal.js +260 -0
- package/dist/engine/execution/outbox-worker.d.ts +31 -0
- package/dist/engine/execution/outbox-worker.js +192 -0
- package/dist/engine/execution/validate-job-executor.d.ts +24 -0
- package/dist/engine/execution/validate-job-executor.js +342 -0
- package/dist/engine/execution/validate-job-payload.d.ts +5 -0
- package/dist/engine/execution/validate-job-payload.js +87 -0
- package/dist/engine/execution/validate-job-recovery.d.ts +4 -0
- package/dist/engine/execution/validate-job-recovery.js +47 -0
- package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
- package/dist/engine/execution/validate-worker-runtime.js +100 -0
- package/dist/engine/execution/validate-worker-thread.d.ts +2 -0
- package/dist/engine/execution/validate-worker-thread.js +71 -0
- package/dist/engine/execution-plan/desktop-distribution.js +3 -7
- package/dist/engine/execution-plan/mobile-distribution.js +4 -9
- package/dist/engine/execution-plan/phases.js +4 -5
- package/dist/engine/execution-plan/plan-utils.js +8 -5
- package/dist/engine/facilitate/context-loader.js +3 -9
- package/dist/engine/figma/code-connect-fetcher.js +9 -8
- package/dist/engine/filesystem-watcher/index.d.ts +3 -3
- package/dist/engine/filesystem-watcher/index.js +5 -5
- package/dist/engine/framework-detector.js +14 -15
- package/dist/engine/git/planu-autocommit.js +8 -7
- package/dist/engine/git/repository-probe.d.ts +3 -0
- package/dist/engine/git/repository-probe.js +13 -0
- package/dist/engine/global-rules-manager.js +2 -2
- package/dist/engine/handoff-artifacts/io.js +2 -3
- package/dist/engine/handoff-artifacts/schemas/red-tests-handoff.js +8 -1
- package/dist/engine/handoff-artifacts/schemas.d.ts +4 -0
- package/dist/engine/handoff-artifacts/schemas.js +5 -0
- package/dist/engine/hook-generator/stack-hook-templates.js +4 -4
- package/dist/engine/hooks/config-loader.js +1 -1
- package/dist/engine/hooks/context-injector.js +4 -7
- package/dist/engine/hooks/file-watcher.js +1 -14
- package/dist/engine/hooks-reconciler.js +6 -4
- package/dist/engine/infrastructure/component-mapper.js +5 -7
- package/dist/engine/infrastructure/docker-compose-generator.js +8 -10
- package/dist/engine/infrastructure/index.js +6 -3
- package/dist/engine/infrastructure/kubernetes-generator.js +2 -2
- package/dist/engine/infrastructure/railway-generator.js +10 -8
- package/dist/engine/infrastructure/signal-detector.js +6 -8
- package/dist/engine/infrastructure/terraform-generator.js +6 -8
- package/dist/engine/legal-compliance/detector.js +3 -2
- package/dist/engine/local-first/storage-advisor.js +5 -6
- package/dist/engine/macos-keychain-native-port.d.ts +5 -0
- package/dist/engine/macos-keychain-native-port.js +26 -0
- package/dist/engine/marketplace-fetcher/cache.js +3 -1
- package/dist/engine/mcp-config/mcp-config-writer.d.ts +2 -2
- package/dist/engine/mcp-config/mcp-config-writer.js +10 -8
- package/dist/engine/migration/db-migrator.js +2 -5
- package/dist/engine/migration/equivalence-mapper.js +12 -13
- package/dist/engine/migration/service-catalogs.js +6 -7
- package/dist/engine/migration/service-migrator-catalogs.js +6 -7
- package/dist/engine/mobile-detector-ios.js +2 -3
- package/dist/engine/mobile-detector.js +16 -4
- package/dist/engine/model-router/complexity-analyzer.js +4 -7
- package/dist/engine/multi-agent-review/security-analyzer.js +3 -1
- package/dist/engine/multi-app-detector/app-type.js +26 -21
- package/dist/engine/multi-app-detector/core.js +3 -2
- package/dist/engine/multi-teammate-review/disagreement-counter.js +2 -1
- package/dist/engine/multi-teammate-review/panel-orchestrator.js +0 -2
- package/dist/engine/mutation-config-generator.js +10 -7
- package/dist/engine/native-capability-policy.d.ts +4 -0
- package/dist/engine/native-capability-policy.js +24 -0
- package/dist/engine/native-platform.d.ts +3 -0
- package/dist/engine/native-platform.js +44 -0
- package/dist/engine/native-runtime-handshake.d.ts +20 -0
- package/dist/engine/native-runtime-handshake.js +230 -0
- package/dist/engine/network-policy.d.ts +27 -0
- package/dist/engine/network-policy.js +174 -0
- package/dist/engine/next-spec-resolver/dependency-filter.js +2 -22
- package/dist/engine/nfr-profile-detector.js +12 -16
- package/dist/engine/nli-keywords.js +8 -9
- package/dist/engine/oauth/config-guard.js +4 -5
- package/dist/engine/observability/local-execution-spans.d.ts +15 -0
- package/dist/engine/observability/local-execution-spans.js +63 -0
- package/dist/engine/orchestrator/runtime.js +0 -1
- package/dist/engine/package-registry.js +2 -6
- package/dist/engine/performance-analyzer.js +2 -5
- package/dist/engine/permissions-merger/stack-detectors.js +5 -5
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +39 -0
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +1310 -0
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +39 -0
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +1310 -0
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +38 -0
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +1310 -0
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +38 -0
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +1310 -0
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +38 -0
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +1310 -0
- package/dist/engine/platform-detector/desktop.js +15 -2
- package/dist/engine/platform-detector/extensions.js +2 -1
- package/dist/engine/platform-detector/games.js +2 -1
- package/dist/engine/platform-detector.js +3 -2
- package/dist/engine/platform-engineering/idp-detector.js +2 -1
- package/dist/engine/plugin-installer/stack-matcher.js +9 -17
- package/dist/engine/plugins/lifecycle.js +6 -2
- package/dist/engine/prior-decisions/contradiction-detector.js +60 -30
- package/dist/engine/project-dna/stack-detector.js +15 -17
- package/dist/engine/project-graph/builder.js +11 -0
- package/dist/engine/project-graph/cache.js +1 -1
- package/dist/engine/project-graph/freshness-projection.d.ts +16 -0
- package/dist/engine/project-graph/freshness-projection.js +95 -0
- package/dist/engine/project-graph/index.d.ts +1 -0
- package/dist/engine/project-graph/index.js +1 -0
- package/dist/engine/project-graph/query.js +15 -25
- package/dist/engine/project-health-checker.js +3 -4
- package/dist/engine/project-scanner/stack-detector.js +17 -17
- package/dist/engine/property-test-generator.js +2 -3
- package/dist/engine/qa-gate.d.ts +1 -0
- package/dist/engine/qa-gate.js +6 -4
- package/dist/engine/quality-gates/gate-catalog.js +47 -46
- package/dist/engine/quality-gates/gate-injector.js +9 -4
- package/dist/engine/registry/core.js +0 -2
- package/dist/engine/registry/loader.js +9 -12
- package/dist/engine/registry/matcher.js +129 -24
- package/dist/engine/resilience-detector/concurrency-detector.js +4 -4
- package/dist/engine/resilience-detector/middleware-detector.js +11 -13
- package/dist/engine/resilience-detector/validation-detector.js +17 -4
- package/dist/engine/reverse-engineer/config-analyzer.js +9 -8
- package/dist/engine/reverse-engineer/orchestrator.js +5 -9
- package/dist/engine/reverse-engineer/test-file-parser.js +6 -3
- package/dist/engine/rules-generator/index.js +6 -5
- package/dist/engine/runtime-policy.d.ts +7 -0
- package/dist/engine/runtime-policy.js +101 -0
- package/dist/engine/runtime-security/checkers/content-security.js +21 -6
- package/dist/engine/runtime-security/checkers/file-permissions.js +0 -2
- package/dist/engine/safety/atomic-write-file.js +20 -9
- package/dist/engine/safety/atomic-writer.js +10 -3
- package/dist/engine/safety/cross-process-lock.d.ts +3 -40
- package/dist/engine/safety/cross-process-lock.js +268 -272
- package/dist/engine/safety/file-mutex.d.ts +2 -9
- package/dist/engine/safety/file-mutex.js +155 -87
- package/dist/engine/safety/health-monitor.js +15 -6
- package/dist/engine/safety/lock-lease-store.d.ts +79 -0
- package/dist/engine/safety/lock-lease-store.js +372 -0
- package/dist/engine/safety/lock-scavenger.d.ts +2 -5
- package/dist/engine/safety/lock-scavenger.js +158 -76
- package/dist/engine/safety/lock-staleness.js +4 -1
- package/dist/engine/safety/obsolete-lock-guard.d.ts +8 -0
- package/dist/engine/safety/obsolete-lock-guard.js +31 -0
- package/dist/engine/safety/transaction.js +3 -3
- package/dist/engine/sandbox/index.js +2 -1
- package/dist/engine/sandbox/runner-detect.js +3 -2
- package/dist/engine/sandbox/runner-docker.js +4 -3
- package/dist/engine/scan-project/module-discoverer.js +3 -2
- package/dist/engine/schema-generator.js +16 -9
- package/dist/engine/security-analyzer/criteria-generator.js +2 -3
- package/dist/engine/self-healing/healer.js +4 -4
- package/dist/engine/session-safeguard/learnings-buffer.d.ts +1 -2
- package/dist/engine/session-safeguard/learnings-buffer.js +42 -65
- package/dist/engine/shared-agent-memory.js +66 -74
- package/dist/engine/skill-adapter/command-rewriter.js +3 -2
- package/dist/engine/skill-adapter/index.js +3 -3
- package/dist/engine/skill-adapter/placeholder-map.js +3 -2
- package/dist/engine/skill-bootstrap/stack-matcher.js +47 -48
- package/dist/engine/skill-generation/stack-content-generator.js +0 -2
- package/dist/engine/skill-generator/workflow-skill-generator.js +2 -1
- package/dist/engine/skill-registry/ttl-refresh.js +3 -1
- package/dist/engine/skills/skills-fetcher.js +3 -6
- package/dist/engine/skills-reconciler.js +19 -39
- package/dist/engine/spec-coverage/test-finder.js +7 -6
- package/dist/engine/spec-diff-engine.js +3 -3
- package/dist/engine/spec-generator/api-key-resolver.d.ts +1 -1
- package/dist/engine/spec-generator/api-key-resolver.js +3 -24
- package/dist/engine/spec-generators/issue-extractor.js +9 -3
- package/dist/engine/spec-migrator/drift-detector.js +5 -13
- package/dist/engine/spec-migrator/filesystem-import.js +14 -10
- package/dist/engine/spec-migrator/planu-canonical-policy.js +10 -1
- package/dist/engine/spec-migrator/strict-planu-cleanup.js +24 -25
- package/dist/engine/spec-registry/adapter.d.ts +0 -5
- package/dist/engine/spec-registry/adapter.js +45 -46
- package/dist/engine/spec-registry/client.js +2 -0
- package/dist/engine/spec-source-sync.js +3 -2
- package/dist/engine/spec-templates/custom-loader.js +2 -3
- package/dist/engine/spec-templates/templates-domain-specific.js +8 -5
- package/dist/engine/spec-templates/templates-perf-integration.js +2 -3
- package/dist/engine/stack-auditor/manifest-reader.js +0 -2
- package/dist/engine/staleness/stale-implementing.js +7 -7
- package/dist/engine/tdd-scaffold-generator.js +24 -11
- package/dist/engine/teammate-router/green-phase-verifier.js +2 -1
- package/dist/engine/teammate-router/red-phase-verifier.js +2 -1
- package/dist/engine/technology-registry.d.ts +11 -0
- package/dist/engine/technology-registry.js +142 -0
- package/dist/engine/telemetry/error-reporter.d.ts +1 -2
- package/dist/engine/telemetry/error-reporter.js +11 -18
- package/dist/engine/telemetry/health-checker.js +5 -14
- package/dist/engine/telemetry/index.d.ts +0 -1
- package/dist/engine/telemetry/index.js +0 -1
- package/dist/engine/telemetry/stance.js +3 -2
- package/dist/engine/telemetry/telemetry-client.d.ts +1 -5
- package/dist/engine/telemetry/telemetry-client.js +45 -29
- package/dist/engine/telemetry/telemetry-store.d.ts +3 -3
- package/dist/engine/telemetry/telemetry-store.js +30 -23
- package/dist/engine/test-framework-detector/detectors.js +8 -8
- package/dist/engine/test-framework-detector/strategy.js +8 -9
- package/dist/engine/test-generators/agent-test-templates.js +2 -3
- package/dist/engine/test-generators/contract-test-generator.d.ts +1 -1
- package/dist/engine/test-generators/contract-test-generator.js +9 -202
- package/dist/engine/test-generators/platform-test-templates-b.js +2 -3
- package/dist/engine/test-generators/platform-test-templates.js +2 -5
- package/dist/engine/test-mocks-generator.js +4 -3
- package/dist/engine/test-plan-generator.js +30 -12
- package/dist/engine/test-scaffold-generator/advanced-scaffold.js +4 -5
- package/dist/engine/test-scaffold-generator/unit-scaffold.js +5 -6
- package/dist/engine/timing/budget.d.ts +6 -17
- package/dist/engine/timing/budget.js +80 -64
- package/dist/engine/tool-groups/group-manager.js +3 -3
- package/dist/engine/universal-rules/installer.js +1 -1
- package/dist/engine/universal-rules/rules/planu-modes.js +2 -0
- package/dist/engine/universal-rules/rules/planu-release-policy.js +1 -0
- package/dist/engine/update-notifier.js +8 -5
- package/dist/engine/validation/approved-spec-portability.d.ts +12 -0
- package/dist/engine/validation/approved-spec-portability.js +107 -0
- package/dist/engine/validation/durable-validation.d.ts +36 -0
- package/dist/engine/validation/durable-validation.js +335 -0
- package/dist/engine/validation/validation-freshness.d.ts +36 -0
- package/dist/engine/validation/validation-freshness.js +427 -0
- package/dist/engine/validation/validation-receipt-codec.d.ts +13 -0
- package/dist/engine/validation/validation-receipt-codec.js +182 -0
- package/dist/engine/validation/validation-receipt.d.ts +59 -0
- package/dist/engine/validation/validation-receipt.js +282 -0
- package/dist/engine/validation/validation-source-policy.d.ts +4 -0
- package/dist/engine/validation/validation-source-policy.js +16 -0
- package/dist/engine/validation/validation-submission.d.ts +36 -0
- package/dist/engine/validation/validation-submission.js +128 -0
- package/dist/engine/validation-evidence-ledger.js +41 -0
- package/dist/engine/validation-impact-planner.js +25 -9
- package/dist/engine/validator/spec-compliance-runner.d.ts +1 -1
- package/dist/engine/validator/spec-compliance-runner.js +17 -8
- package/dist/engine/validator/validation-report-writer.js +1 -1
- package/dist/engine/validator.js +2 -1
- package/dist/engine/verify-integrations/index.js +1 -1
- package/dist/engine/version-resolver.js +5 -6
- package/dist/engine/web-fetcher/stack-advisor.js +156 -92
- package/dist/engine/web-fetcher/stack-detector.js +114 -54
- package/dist/engine/workspace-manager.js +3 -2
- package/dist/errors/classified-degradation.d.ts +3 -0
- package/dist/errors/classified-degradation.js +10 -0
- package/dist/errors/degradation-sink.d.ts +3 -0
- package/dist/errors/degradation-sink.js +5 -0
- package/dist/errors/error-taxonomy.d.ts +12 -0
- package/dist/errors/error-taxonomy.js +62 -0
- package/dist/hosts/claude-code/ux/mcp-prompts.js +10 -4
- package/dist/hosts/claude-code/ux/mcp-resources.js +4 -2
- package/dist/hosts/codex/config-scaffold.js +4 -3
- package/dist/hosts/gemini/config-scaffold.js +2 -1
- package/dist/hosts/gemini/multimodal-spec-flow.js +7 -4
- package/dist/index.js +21 -6
- package/dist/resources/patterns.js +3 -1
- package/dist/resources/specs.js +3 -1
- package/dist/resources/templates.js +3 -1
- package/dist/security/adapters/environment.d.ts +12 -0
- package/dist/security/adapters/environment.js +25 -0
- package/dist/security/adapters/linux-secret-service.d.ts +8 -0
- package/dist/security/adapters/linux-secret-service.js +60 -0
- package/dist/security/adapters/macos-keychain.d.ts +18 -0
- package/dist/security/adapters/macos-keychain.js +90 -0
- package/dist/security/adapters/windows-credential-manager.d.ts +8 -0
- package/dist/security/adapters/windows-credential-manager.js +58 -0
- package/dist/security/redactor.d.ts +5 -0
- package/dist/security/redactor.js +58 -0
- package/dist/security/secret-field.d.ts +5 -0
- package/dist/security/secret-field.js +17 -0
- package/dist/security/secret-migration.d.ts +3 -0
- package/dist/security/secret-migration.js +123 -0
- package/dist/security/secret-provider.d.ts +23 -0
- package/dist/security/secret-provider.js +145 -0
- package/dist/security/secure-json.d.ts +3 -0
- package/dist/security/secure-json.js +29 -0
- package/dist/storage/api-surfaces-store.js +2 -2
- package/dist/storage/approval-operation-lock.d.ts +1 -1
- package/dist/storage/approval-operation-lock.js +5 -3
- package/dist/storage/audit-trail-store.d.ts +1 -1
- package/dist/storage/audit-trail-store.js +48 -62
- package/dist/storage/autopilot-log-store.js +12 -5
- package/dist/storage/base-store.d.ts +8 -8
- package/dist/storage/base-store.js +57 -20
- package/dist/storage/checkpoint-store.js +5 -2
- package/dist/storage/comments-store.js +2 -2
- package/dist/storage/compliance-audit-store.js +5 -2
- package/dist/storage/compliance-gate-config-store.js +7 -4
- package/dist/storage/compliance-store.js +2 -2
- package/dist/storage/context-profile-store.js +2 -2
- package/dist/storage/crash-shield-store.js +8 -4
- package/dist/storage/feedback-store.js +10 -6
- package/dist/storage/figma-store.js +8 -4
- package/dist/storage/file-mutex.js +9 -1
- package/dist/storage/gaps-log.js +7 -4
- package/dist/storage/global-projects-store.js +4 -2
- package/dist/storage/ideas-store.js +2 -2
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/knowledge-store/knowledge.js +27 -33
- package/dist/storage/lessons-store.js +2 -2
- package/dist/storage/license-store.js +13 -41
- package/dist/storage/migrations/canonical-storage.d.ts +15 -0
- package/dist/storage/migrations/canonical-storage.js +599 -0
- package/dist/storage/oauth-store.js +36 -8
- package/dist/storage/path-resolver.js +16 -3
- package/dist/storage/pr-store.js +2 -2
- package/dist/storage/project-drift-store.js +20 -8
- package/dist/storage/project-identity.d.ts +32 -0
- package/dist/storage/project-identity.js +194 -0
- package/dist/storage/project-resolver.js +14 -7
- package/dist/storage/release-notes-store.js +2 -6
- package/dist/storage/runtime-db.d.ts +186 -0
- package/dist/storage/runtime-db.js +1054 -0
- package/dist/storage/schema-registry.d.ts +5 -0
- package/dist/storage/schema-registry.js +74 -0
- package/dist/storage/sentry-store.js +20 -9
- package/dist/storage/session-state-store.js +12 -5
- package/dist/storage/session-store.js +12 -4
- package/dist/storage/skill-registry-storage.d.ts +1 -1
- package/dist/storage/skill-registry-storage.js +13 -11
- package/dist/storage/slack-store.js +10 -5
- package/dist/storage/spec-store.js +31 -24
- package/dist/storage/status-store/file-lock.js +31 -9
- package/dist/storage/status-store/self-healing.js +10 -5
- package/dist/storage/status-store/version-sync.js +8 -6
- package/dist/storage/steering-store.js +2 -2
- package/dist/storage/storage-bundle.d.ts +5 -0
- package/dist/storage/storage-bundle.js +117 -0
- package/dist/storage/storage-catalog-validation.d.ts +3 -0
- package/dist/storage/storage-catalog-validation.js +20 -0
- package/dist/storage/storage-catalog.d.ts +25 -0
- package/dist/storage/storage-catalog.js +390 -0
- package/dist/storage/storage-layout.d.ts +24 -0
- package/dist/storage/storage-layout.js +101 -0
- package/dist/storage/storybook-store.js +2 -2
- package/dist/storage/supabase-store.js +24 -6
- package/dist/storage/tdd-policy-store.js +8 -6
- package/dist/storage/tech-debt-store.js +3 -3
- package/dist/storage/technology-selection-store.d.ts +1 -1
- package/dist/storage/technology-selection-store.js +6 -3
- package/dist/storage/token-cache-store.js +3 -3
- package/dist/storage/token-ledger-store.js +13 -8
- package/dist/storage/transition-log.js +7 -4
- package/dist/storage/trash-store.js +15 -6
- package/dist/storage/vector-store/migrator.js +7 -2
- package/dist/storage/vector-store/sqlite-adapter.js +4 -1
- package/dist/storage/webhook-server-store.js +2 -2
- package/dist/tools/api-spec-generator-handler.js +3 -2
- package/dist/tools/auto-update-handler.d.ts +1 -1
- package/dist/tools/auto-update-handler.js +1 -1
- package/dist/tools/browser-validate-handler.js +2 -1
- package/dist/tools/challenge-spec/platform-challenge-scenarios-b.js +8 -5
- package/dist/tools/challenge-spec/scenarios-desktop.js +8 -3
- package/dist/tools/challenge-spec/scenarios-failure.js +7 -2
- package/dist/tools/challenge-spec/security-challenge-scenarios.js +3 -3
- package/dist/tools/clarify-requirements/multiple-choice.js +53 -41
- package/dist/tools/comments-handler.js +2 -3
- package/dist/tools/compliance-test-handler.js +2 -2
- package/dist/tools/configure-telemetry.js +11 -11
- package/dist/tools/create-spec/auto-pipeline.js +13 -1
- package/dist/tools/create-spec/autopilot-analyzer.d.ts +1 -1
- package/dist/tools/create-spec/autopilot-analyzer.js +2 -4
- package/dist/tools/create-spec/mcp-tool-contract.d.ts +10 -4
- package/dist/tools/create-spec/mcp-tool-contract.js +7 -36
- package/dist/tools/create-spec/post-creation.d.ts +2 -1
- package/dist/tools/create-spec/post-creation.js +56 -54
- package/dist/tools/create-spec/relevance-scorer.d.ts +1 -1
- package/dist/tools/create-spec/relevance-scorer.js +17 -1
- package/dist/tools/create-spec/spec-builder.js +2 -12
- package/dist/tools/create-spec/spec-created-outbox-consumer.d.ts +14 -0
- package/dist/tools/create-spec/spec-created-outbox-consumer.js +176 -0
- package/dist/tools/create-spec.js +385 -520
- package/dist/tools/define-ui-contract/agent-interaction-contract.js +2 -4
- package/dist/tools/define-ui-contract-desktop/desktop-contract.js +12 -4
- package/dist/tools/define-ui-contract-desktop/native-contract.js +7 -3
- package/dist/tools/define-ui-contract-extensions.js +2 -3
- package/dist/tools/define-ui-contract-mobile.js +5 -9
- package/dist/tools/define-ui-contract-web/component-tree.js +4 -3
- package/dist/tools/define-ui-contract.js +7 -4
- package/dist/tools/deploy/deploy-spec.js +2 -4
- package/dist/tools/deploy/deploy-status.js +2 -4
- package/dist/tools/design-schema/nosql-category-schemas.js +2 -3
- package/dist/tools/design-schema-sql/migrations.js +3 -2
- package/dist/tools/design-schema-sql/tables.js +4 -1
- package/dist/tools/design-schema.js +4 -3
- package/dist/tools/feedback-handler.js +2 -4
- package/dist/tools/gc-data-projects.js +5 -5
- package/dist/tools/generate-execution-plan.js +3 -4
- package/dist/tools/generate-sub-agent.js +2 -1
- package/dist/tools/generate-tests/generators/a11y-tests-generator.js +5 -4
- package/dist/tools/generate-tests/generators/advanced-testing-generator.js +5 -4
- package/dist/tools/generate-tests/generators/concurrency-test-generator/js-templates.js +9 -4
- package/dist/tools/generate-tests/generators/concurrency-test-generator.js +8 -4
- package/dist/tools/generate-tests/generators/database/detectors.js +9 -3
- package/dist/tools/generate-tests/generators/database/index.js +2 -4
- package/dist/tools/generate-tests/generators/event-test-generator.js +5 -4
- package/dist/tools/generate-tests/generators/game-tests-generator.js +2 -1
- package/dist/tools/generate-tests/generators/graphql-test-generator.js +11 -5
- package/dist/tools/generate-tests/generators/grpc-test-generator.js +2 -3
- package/dist/tools/generate-tests/generators/llm-security-test-generator.js +4 -3
- package/dist/tools/generate-tests/generators/local-first-test-generator.js +4 -3
- package/dist/tools/generate-tests/generators/mcp-tests-generator.js +11 -9
- package/dist/tools/generate-tests/generators/microservices/index.js +2 -3
- package/dist/tools/generate-tests/generators/otel-test-generator.js +6 -3
- package/dist/tools/generate-tests/generators/security/detectors.js +2 -5
- package/dist/tools/generate-tests/generators/security/index.js +2 -4
- package/dist/tools/generate-tests/generators/supply-chain-test-generator.js +2 -3
- package/dist/tools/generate-tests/generators/visual-regression-generator.js +14 -17
- package/dist/tools/generate-tests/generators/websocket-test-generator.js +2 -3
- package/dist/tools/generate-tests/test-helpers.js +11 -12
- package/dist/tools/generate-tests-content.js +4 -3
- package/dist/tools/generate-tests.js +7 -4
- package/dist/tools/git/git-helpers.d.ts +0 -2
- package/dist/tools/git/git-helpers.js +7 -7
- package/dist/tools/github-pr-handler.js +10 -3
- package/dist/tools/heal-spec-docs.js +6 -53
- package/dist/tools/hook-generator-handler.js +6 -6
- package/dist/tools/init-constitution/platform-principles.js +4 -2
- package/dist/tools/init-project/agents-md-writer.js +14 -5
- package/dist/tools/init-project/claude-md-generator.js +19 -12
- package/dist/tools/init-project/handler.js +165 -73
- package/dist/tools/init-project/host-assets-writer.d.ts +1 -1
- package/dist/tools/init-project/host-assets-writer.js +4 -2
- package/dist/tools/init-project/lifecycle-helpers.js +3 -5
- package/dist/tools/init-project/lint-scaffolder.js +6 -2
- package/dist/tools/init-project/migration-runner.d.ts +10 -1
- package/dist/tools/init-project/migration-runner.js +68 -3
- package/dist/tools/init-project/per-client-files-writer.js +14 -4
- package/dist/tools/init-project/rules-generator.js +10 -2
- package/dist/tools/init-project/scaffold-writer.d.ts +1 -1
- package/dist/tools/init-project/scaffold-writer.js +17 -15
- package/dist/tools/jobs/handlers.d.ts +15 -0
- package/dist/tools/jobs/handlers.js +126 -0
- package/dist/tools/list-specs.js +35 -34
- package/dist/tools/manage-plugins-handler.js +17 -9
- package/dist/tools/migrate-tech/advanced-handlers.js +3 -2
- package/dist/tools/migrate-tech/build-tool-handlers.js +3 -2
- package/dist/tools/migrate-tech/core-handlers.js +5 -2
- package/dist/tools/migrate-tech/data-handlers.js +6 -3
- package/dist/tools/migrate-tech-advanced/rollback-handlers.js +3 -2
- package/dist/tools/migrate-tech-advanced/service-handlers.js +5 -2
- package/dist/tools/oauth-handler.js +7 -1
- package/dist/tools/register-sdd-tools.d.ts +1 -1
- package/dist/tools/register-sdd-tools.js +5 -0
- package/dist/tools/register-spec-tools/core-spec-tools.js +31 -0
- package/dist/tools/registry/auth.js +13 -5
- package/dist/tools/registry/publish.js +7 -4
- package/dist/tools/resolve-project-path.d.ts +2 -2
- package/dist/tools/resolve-project-path.js +7 -7
- package/dist/tools/reverse-engineer/analyzer.js +14 -14
- package/dist/tools/rollback-release.js +3 -2
- package/dist/tools/safe-handler.js +295 -171
- package/dist/tools/schema-generator-handler.js +2 -1
- package/dist/tools/schemas/output-schemas.d.ts +88 -82
- package/dist/tools/schemas/output-schemas.js +12 -94
- package/dist/tools/schemas/plugins-schemas.js +0 -2
- package/dist/tools/schemas/registry.js +0 -2
- package/dist/tools/schemas/skill-registry-schemas.js +0 -2
- package/dist/tools/schemas/validate-output-schema.d.ts +256 -0
- package/dist/tools/schemas/validate-output-schema.js +212 -0
- package/dist/tools/sentry-handler.js +6 -1
- package/dist/tools/skill-bootstrap-handler.js +7 -4
- package/dist/tools/status-handler.js +4 -0
- package/dist/tools/storage-bundle-handler.d.ts +9 -0
- package/dist/tools/storage-bundle-handler.js +29 -0
- package/dist/tools/storage-paths-handler.d.ts +9 -0
- package/dist/tools/storage-paths-handler.js +17 -0
- package/dist/tools/suggest-mcp-server.js +11 -5
- package/dist/tools/suggest-mcps.js +29 -9
- package/dist/tools/suggest-tooling/advanced-testing-catalog.js +4 -5
- package/dist/tools/suggest-tooling/build-tool-catalog.js +2 -1
- package/dist/tools/suggest-tooling/css-framework-catalog.js +13 -7
- package/dist/tools/suggest-tooling/framework-catalog.js +3 -5
- package/dist/tools/suggest-tooling/frontend-perf-catalog.js +2 -6
- package/dist/tools/suggest-tooling/handler.js +10 -4
- package/dist/tools/suggest-tooling/hypermedia-catalog.js +11 -3
- package/dist/tools/suggest-tooling/linting-catalog.js +4 -7
- package/dist/tools/suggest-tooling/llm-security-catalog.js +2 -1
- package/dist/tools/suggest-tooling/local-first-catalog.js +7 -5
- package/dist/tools/suggest-tooling/observability-catalog.js +3 -4
- package/dist/tools/suggest-tooling/otel-catalog.js +4 -1
- package/dist/tools/suggest-tooling/resilience-catalog.js +16 -5
- package/dist/tools/suggest-tooling/skills-catalog.js +10 -9
- package/dist/tools/suggest-tooling/supply-chain-catalog.js +2 -3
- package/dist/tools/supabase-handler.js +2 -1
- package/dist/tools/token-intelligence-handler.js +2 -2
- package/dist/tools/token-recording.js +2 -2
- package/dist/tools/token-savings-handler.js +2 -2
- package/dist/tools/tool-registry/core-tools.js +131 -0
- package/dist/tools/tool-registry/group-infra.js +10 -12
- package/dist/tools/tool-registry/group-quality-compliance.js +5 -12
- package/dist/tools/update-status/approval-gates.d.ts +13 -0
- package/dist/tools/update-status/approval-gates.js +81 -0
- package/dist/tools/update-status/batch.js +4 -2
- package/dist/tools/update-status/dod-gates.d.ts +6 -24
- package/dist/tools/update-status/dod-gates.js +60 -135
- package/dist/tools/update-status/done-receipt-verifier.d.ts +15 -0
- package/dist/tools/update-status/done-receipt-verifier.js +145 -0
- package/dist/tools/update-status/evidence-gate.js +154 -2
- package/dist/tools/update-status/file-sync.js +23 -12
- package/dist/tools/update-status/gate-harness.d.ts +7 -0
- package/dist/tools/update-status/gate-harness.js +8 -0
- package/dist/tools/update-status/index.js +228 -325
- package/dist/tools/update-status/qa-gate.d.ts +1 -1
- package/dist/tools/update-status/qa-gate.js +2 -2
- package/dist/tools/update-status/side-effects.js +30 -37
- package/dist/tools/update-status/transition-guard.d.ts +4 -2
- package/dist/tools/update-status/transition-guard.js +57 -10
- package/dist/tools/update-status-convention-gate.js +24 -23
- package/dist/tools/update-status-reconcile.js +2 -2
- package/dist/tools/validate-api-contract-handler.js +3 -3
- package/dist/tools/validate-lint.js +20 -13
- package/dist/tools/validate.d.ts +3 -1
- package/dist/tools/validate.js +213 -5
- package/dist/transports/http-transport.js +84 -61
- package/dist/transports/middleware/with-telemetry.js +3 -2
- package/dist/types/abortable-process.d.ts +2 -0
- package/dist/types/advanced-framework.js +0 -2
- package/dist/types/atomic-upgrade.d.ts +71 -0
- package/dist/types/atomic-upgrade.js +2 -0
- package/dist/types/ci.js +0 -2
- package/dist/types/core-bridge.d.ts +78 -1
- package/dist/types/crash-shield-framework-rules.d.ts +24 -0
- package/dist/types/crash-shield-framework-rules.js +2 -0
- package/dist/types/data-gc.d.ts +16 -0
- package/dist/types/deploy.js +0 -2
- package/dist/types/durable-job.d.ts +78 -0
- package/dist/types/durable-job.js +2 -0
- package/dist/types/durable-validation.d.ts +60 -0
- package/dist/types/durable-validation.js +2 -0
- package/dist/types/estimation.d.ts +2 -0
- package/dist/types/evidence-gates.d.ts +9 -1
- package/dist/types/execution.d.ts +43 -0
- package/dist/types/handoff-artifacts.d.ts +2 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/infrastructure.js +0 -2
- package/dist/types/lifecycle.js +0 -2
- package/dist/types/migration/canonical-storage.d.ts +37 -0
- package/dist/types/migration/canonical-storage.js +2 -0
- package/dist/types/migration/index.d.ts +1 -1
- package/dist/types/native-worker.d.ts +48 -0
- package/dist/types/native-worker.js +2 -0
- package/dist/types/network-policy.d.ts +12 -0
- package/dist/types/network-policy.js +2 -0
- package/dist/types/oauth.js +0 -2
- package/dist/types/observability.d.ts +32 -0
- package/dist/types/outbox-worker.d.ts +35 -0
- package/dist/types/outbox-worker.js +11 -0
- package/dist/types/permissions-config.d.ts +0 -27
- package/dist/types/permissions-config.js +0 -2
- package/dist/types/plugin-install.d.ts +0 -11
- package/dist/types/plugin-install.js +0 -2
- package/dist/types/portal.d.ts +1 -0
- package/dist/types/product-public.d.ts +75 -0
- package/dist/types/product-public.js +2 -0
- package/dist/types/project/inputs.d.ts +2 -0
- package/dist/types/project/mfe-detection.js +0 -2
- package/dist/types/project/platform-mobile.js +0 -2
- package/dist/types/project/platform-specialty.js +0 -2
- package/dist/types/project-knowledge-graph.d.ts +7 -0
- package/dist/types/runtime-database.d.ts +10 -0
- package/dist/types/runtime-database.js +2 -0
- package/dist/types/runtime-policy.d.ts +40 -0
- package/dist/types/runtime-policy.js +2 -0
- package/dist/types/safety.d.ts +4 -5
- package/dist/types/schema-registry.d.ts +12 -0
- package/dist/types/schema-registry.js +2 -0
- package/dist/types/security.d.ts +52 -0
- package/dist/types/skill-registry.js +0 -2
- package/dist/types/spec/inputs.d.ts +2 -0
- package/dist/types/spec-lock-v2.d.ts +13 -7
- package/dist/types/spec-lock-v2.js +1 -1
- package/dist/types/spec-registry.js +0 -2
- package/dist/types/storage-bundle.d.ts +13 -0
- package/dist/types/storage-bundle.js +2 -0
- package/dist/types/storage-catalog.d.ts +18 -0
- package/dist/types/storage-catalog.js +2 -0
- package/dist/types/team-planner.js +0 -2
- package/dist/types/technology-registry.d.ts +35 -0
- package/dist/types/technology-registry.js +2 -0
- package/dist/types/technology-symbols.generated.d.ts +117 -0
- package/dist/types/technology-symbols.generated.js +2 -0
- package/dist/types/telemetry.d.ts +3 -3
- package/dist/types/transport.d.ts +2 -0
- package/dist/types/validate-worker.d.ts +44 -0
- package/dist/types/validate-worker.js +2 -0
- package/dist/types/validation-evidence.d.ts +1 -1
- package/dist/types/validation-receipt.d.ts +104 -0
- package/dist/types/validation-receipt.js +2 -0
- package/package.json +31 -20
- package/planu-native.json +1 -1
- package/planu-plugin.json +1 -1
- package/dist/engine/telemetry/geo-resolver.d.ts +0 -9
- package/dist/engine/telemetry/geo-resolver.js +0 -43
- package/dist/storage/data-dir-discovery.d.ts +0 -31
- package/dist/storage/data-dir-discovery.js +0 -140
- package/dist/storage/migrations/cwd-to-absolute.d.ts +0 -25
- package/dist/storage/migrations/cwd-to-absolute.js +0 -281
- package/dist/tools/create-spec/adapters/prior-decisions-hint.d.ts +0 -14
- package/dist/tools/create-spec/adapters/prior-decisions-hint.js +0 -30
- package/dist/tools/init-project/ancestor-data-detector.d.ts +0 -22
- package/dist/tools/init-project/ancestor-data-detector.js +0 -81
- package/dist/tools/update-status/force-done-audit.d.ts +0 -2
- package/dist/tools/update-status/force-done-audit.js +0 -23
- package/dist/types/migration/cwd-to-absolute.d.ts +0 -8
- package/dist/types/migration/cwd-to-absolute.js +0 -3
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
1
|
+
import { technologyValue } from '../../engine/technology-registry.js';
|
|
3
2
|
// tools/clarify-requirements/multiple-choice.ts — SPEC-337
|
|
4
3
|
// Structured multiple-choice options for clarify_requirements interview mode.
|
|
5
4
|
// Provides: per-question options[], stack detection, suggestedDescription builder.
|
|
@@ -7,23 +6,23 @@ import { readFile } from 'node:fs/promises';
|
|
|
7
6
|
import { join } from 'node:path';
|
|
8
7
|
const OPTIONS_CATALOG = {
|
|
9
8
|
stack_frontend: [
|
|
10
|
-
'
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'
|
|
9
|
+
technologyValue('technology-next-js-30b7f8'),
|
|
10
|
+
technologyValue('technology-remix-f84ed4'),
|
|
11
|
+
technologyValue('technology-nuxt-e88c87'),
|
|
12
|
+
technologyValue('technology-sveltekit-b62200'),
|
|
13
|
+
technologyValue('technology-astro-c490cc'),
|
|
15
14
|
'Vite + React',
|
|
16
|
-
'
|
|
15
|
+
technologyValue('technology-angular-e79052'),
|
|
17
16
|
'Other: ___',
|
|
18
17
|
],
|
|
19
18
|
stack_backend: [
|
|
20
|
-
'
|
|
21
|
-
'
|
|
22
|
-
'
|
|
19
|
+
technologyValue('technology-express-572a14'),
|
|
20
|
+
technologyValue('technology-fastify-ed8050'),
|
|
21
|
+
technologyValue('technology-nestjs-58b822'),
|
|
23
22
|
'Hono',
|
|
24
|
-
'
|
|
25
|
-
'
|
|
26
|
-
'
|
|
23
|
+
technologyValue('technology-fastapi-2dd9eb'),
|
|
24
|
+
technologyValue('technology-django-4445d9'),
|
|
25
|
+
technologyValue('technology-spring-boot-8d9a80'),
|
|
27
26
|
'Other: ___',
|
|
28
27
|
],
|
|
29
28
|
stack_database: [
|
|
@@ -31,12 +30,20 @@ const OPTIONS_CATALOG = {
|
|
|
31
30
|
'MySQL',
|
|
32
31
|
'SQLite',
|
|
33
32
|
'MongoDB',
|
|
34
|
-
'
|
|
35
|
-
'
|
|
33
|
+
technologyValue('technology-redis-a7f641'),
|
|
34
|
+
technologyValue('technology-supabase-fe7ceb'),
|
|
36
35
|
'PlanetScale',
|
|
37
36
|
'Other: ___',
|
|
38
37
|
],
|
|
39
|
-
stack_language: [
|
|
38
|
+
stack_language: [
|
|
39
|
+
technologyValue('technology-typescript-ed0504'),
|
|
40
|
+
'JavaScript',
|
|
41
|
+
'Python',
|
|
42
|
+
'Go',
|
|
43
|
+
'Java',
|
|
44
|
+
'Rust',
|
|
45
|
+
'Other: ___',
|
|
46
|
+
],
|
|
40
47
|
auth_method: [
|
|
41
48
|
'Email + password',
|
|
42
49
|
'Google OAuth',
|
|
@@ -101,35 +108,37 @@ export async function detectStack(projectPath) {
|
|
|
101
108
|
result.detectedLibs = libs;
|
|
102
109
|
// Framework detection
|
|
103
110
|
if (libs.includes('next')) {
|
|
104
|
-
result.framework = '
|
|
111
|
+
result.framework = technologyValue('technology-next-js-30b7f8');
|
|
105
112
|
}
|
|
106
113
|
else if (libs.includes('@remix-run/react') || libs.includes('@remix-run/node')) {
|
|
107
|
-
result.framework = '
|
|
114
|
+
result.framework = technologyValue('technology-remix-f84ed4');
|
|
108
115
|
}
|
|
109
|
-
else if (libs.includes('nuxt')) {
|
|
110
|
-
result.framework = '
|
|
116
|
+
else if (libs.includes(technologyValue('technology-nuxt-22c407'))) {
|
|
117
|
+
result.framework = technologyValue('technology-nuxt-e88c87');
|
|
111
118
|
}
|
|
112
119
|
else if (libs.includes('@sveltejs/kit')) {
|
|
113
|
-
result.framework = '
|
|
120
|
+
result.framework = technologyValue('technology-sveltekit-b62200');
|
|
114
121
|
}
|
|
115
|
-
else if (libs.includes('astro')) {
|
|
116
|
-
result.framework = '
|
|
122
|
+
else if (libs.includes(technologyValue('technology-astro-23661e'))) {
|
|
123
|
+
result.framework = technologyValue('technology-astro-c490cc');
|
|
117
124
|
}
|
|
118
|
-
else if (libs.includes('fastify')) {
|
|
119
|
-
result.framework = '
|
|
125
|
+
else if (libs.includes(technologyValue('technology-fastify-cbe57e'))) {
|
|
126
|
+
result.framework = technologyValue('technology-fastify-ed8050');
|
|
120
127
|
}
|
|
121
128
|
else if (libs.includes('@nestjs/core')) {
|
|
122
|
-
result.framework = '
|
|
129
|
+
result.framework = technologyValue('technology-nestjs-58b822');
|
|
123
130
|
}
|
|
124
|
-
else if (libs.includes('express')) {
|
|
125
|
-
result.framework = '
|
|
131
|
+
else if (libs.includes(technologyValue('technology-express-008231'))) {
|
|
132
|
+
result.framework = technologyValue('technology-express-572a14');
|
|
126
133
|
}
|
|
127
134
|
else if (libs.includes('hono')) {
|
|
128
135
|
result.framework = 'Hono';
|
|
129
136
|
}
|
|
130
137
|
// Language (TypeScript presence)
|
|
131
|
-
if (libs.includes(
|
|
132
|
-
|
|
138
|
+
if (libs.includes(technologyValue('technology-typescript-969545')) ||
|
|
139
|
+
libs.includes('ts-node') ||
|
|
140
|
+
libs.includes('tsx')) {
|
|
141
|
+
result.language = technologyValue('technology-typescript-ed0504');
|
|
133
142
|
}
|
|
134
143
|
else {
|
|
135
144
|
result.language = 'JavaScript';
|
|
@@ -144,14 +153,16 @@ export async function detectStack(projectPath) {
|
|
|
144
153
|
else if (libs.includes('better-sqlite3') || libs.includes('sqlite3')) {
|
|
145
154
|
result.database = 'SQLite';
|
|
146
155
|
}
|
|
147
|
-
else if (libs.includes('mongoose') ||
|
|
156
|
+
else if (libs.includes(technologyValue('technology-mongoose-4e1812')) ||
|
|
157
|
+
libs.includes('mongodb')) {
|
|
148
158
|
result.database = 'MongoDB';
|
|
149
159
|
}
|
|
150
160
|
else if (libs.includes('@supabase/supabase-js')) {
|
|
151
|
-
result.database = '
|
|
161
|
+
result.database = technologyValue('technology-supabase-fe7ceb');
|
|
152
162
|
}
|
|
153
|
-
else if (libs.includes('ioredis') ||
|
|
154
|
-
|
|
163
|
+
else if (libs.includes('ioredis') ||
|
|
164
|
+
libs.includes(technologyValue('technology-redis-34fb46'))) {
|
|
165
|
+
result.database = technologyValue('technology-redis-a7f641');
|
|
155
166
|
}
|
|
156
167
|
}
|
|
157
168
|
catch {
|
|
@@ -162,16 +173,17 @@ export async function detectStack(projectPath) {
|
|
|
162
173
|
.split('\n')
|
|
163
174
|
.map((l) => (l.split('=')[0] ?? l).split('>')[0]?.split('<')[0]?.trim().toLowerCase() ?? '');
|
|
164
175
|
result.detectedLibs = lines.filter(Boolean);
|
|
165
|
-
if (lines.includes(
|
|
166
|
-
|
|
176
|
+
if (lines.includes(technologyValue('technology-django-7d8a08')) ||
|
|
177
|
+
lines.includes('django-rest-framework')) {
|
|
178
|
+
result.framework = technologyValue('technology-django-4445d9');
|
|
167
179
|
result.language = 'Python';
|
|
168
180
|
}
|
|
169
|
-
else if (lines.includes('fastapi')) {
|
|
170
|
-
result.framework = '
|
|
181
|
+
else if (lines.includes(technologyValue('technology-fastapi-6aee0e'))) {
|
|
182
|
+
result.framework = technologyValue('technology-fastapi-2dd9eb');
|
|
171
183
|
result.language = 'Python';
|
|
172
184
|
}
|
|
173
|
-
else if (lines.includes('flask')) {
|
|
174
|
-
result.framework = '
|
|
185
|
+
else if (lines.includes(technologyValue('technology-flask-b87aa5'))) {
|
|
186
|
+
result.framework = technologyValue('technology-flask-c08622');
|
|
175
187
|
result.language = 'Python';
|
|
176
188
|
}
|
|
177
189
|
else {
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
// tools/comments-handler.ts — Spec Comments tool handlers (SPEC-282)
|
|
2
|
-
import { join } from 'node:path';
|
|
3
1
|
import { addComment, listComments, resolveComment, replyComment, } from '../storage/comments-store.js';
|
|
2
|
+
import { hashProjectPath, projectDataDir } from '../storage/base-store.js';
|
|
4
3
|
// ---------------------------------------------------------------------------
|
|
5
4
|
// Data directory helper
|
|
6
5
|
// ---------------------------------------------------------------------------
|
|
7
6
|
function getDataDir(projectPath) {
|
|
8
|
-
return
|
|
7
|
+
return projectDataDir(hashProjectPath(projectPath));
|
|
9
8
|
}
|
|
10
9
|
// ---------------------------------------------------------------------------
|
|
11
10
|
// add_comment handler
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { technologyValue } from '../engine/technology-registry.js';
|
|
2
2
|
import { generateComplianceTests } from '../engine/compliance-test-generator/index.js';
|
|
3
3
|
import { getControlsForFrameworks } from '../engine/compliance-test-generator/control-mapper.js';
|
|
4
4
|
import { specStore } from '../storage/index.js';
|
|
@@ -17,7 +17,7 @@ export async function handleGenerateComplianceTests(input) {
|
|
|
17
17
|
],
|
|
18
18
|
};
|
|
19
19
|
}
|
|
20
|
-
const outputFormat = input.outputFormat ?? 'jest';
|
|
20
|
+
const outputFormat = input.outputFormat ?? technologyValue('technology-jest-35e99f');
|
|
21
21
|
const result = await generateComplianceTests(spec.specPath, input.specId, input.frameworks, outputFormat);
|
|
22
22
|
const fileLines = result.generatedFiles.map((f) => ` ${f.path} (${f.content.split('\n').length} lines)`);
|
|
23
23
|
const coveredCount = result.coverageReport.filter((r) => r.covered).length;
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { readTelemetryConfig, writeTelemetryConfig,
|
|
1
|
+
import { readTelemetryConfig, writeTelemetryConfig, TELEMETRY_CONSENT_VERSION, } from '../engine/telemetry/index.js';
|
|
2
2
|
import { compactResult, compactError, formatKeyValue } from './output-formatter.js';
|
|
3
3
|
export async function handleConfigureTelemetry(input) {
|
|
4
4
|
try {
|
|
5
|
-
const installationId = await getOrCreateInstallationId();
|
|
6
5
|
const existing = await readTelemetryConfig();
|
|
6
|
+
const enabled = existing?.enabled === true && existing.consentVersion === TELEMETRY_CONSENT_VERSION;
|
|
7
7
|
if (input.action === 'status') {
|
|
8
8
|
const observatoryStatus = existing?.enableObservatory === true
|
|
9
9
|
? ' Observatory: ENABLED (cross-project insights active).'
|
|
10
10
|
: ' Observatory: DISABLED (use enableObservatory=true to opt in).';
|
|
11
11
|
const result = {
|
|
12
12
|
action: 'status',
|
|
13
|
-
enabled
|
|
14
|
-
|
|
15
|
-
message: (
|
|
13
|
+
enabled,
|
|
14
|
+
consentVersion: existing?.consentVersion,
|
|
15
|
+
message: (enabled
|
|
16
16
|
? 'Telemetry is ENABLED. Anonymous usage events are being sent to help improve Planu.'
|
|
17
17
|
: 'Telemetry is DISABLED. No data is being collected.') + observatoryStatus,
|
|
18
18
|
};
|
|
@@ -21,8 +21,8 @@ export async function handleConfigureTelemetry(input) {
|
|
|
21
21
|
if (input.action === 'enable') {
|
|
22
22
|
await writeTelemetryConfig({
|
|
23
23
|
enabled: true,
|
|
24
|
-
installationId,
|
|
25
24
|
promptedAt: existing?.promptedAt ?? new Date().toISOString(),
|
|
25
|
+
consentVersion: TELEMETRY_CONSENT_VERSION,
|
|
26
26
|
enableObservatory: input.enableObservatory ?? existing?.enableObservatory,
|
|
27
27
|
});
|
|
28
28
|
const observatoryNote = input.enableObservatory === true
|
|
@@ -31,10 +31,10 @@ export async function handleConfigureTelemetry(input) {
|
|
|
31
31
|
const result = {
|
|
32
32
|
action: 'enable',
|
|
33
33
|
enabled: true,
|
|
34
|
-
|
|
34
|
+
consentVersion: TELEMETRY_CONSENT_VERSION,
|
|
35
35
|
message: 'Telemetry ENABLED. Thank you! Only anonymous usage data is collected — ' +
|
|
36
|
-
'no paths, emails,
|
|
37
|
-
|
|
36
|
+
'no paths, emails, identifiers, source content, or raw errors. ' +
|
|
37
|
+
'Run configure_telemetry with action=disable to opt out anytime.' +
|
|
38
38
|
observatoryNote,
|
|
39
39
|
};
|
|
40
40
|
return compactResult(formatKeyValue(result));
|
|
@@ -42,14 +42,14 @@ export async function handleConfigureTelemetry(input) {
|
|
|
42
42
|
// disable
|
|
43
43
|
await writeTelemetryConfig({
|
|
44
44
|
enabled: false,
|
|
45
|
-
installationId,
|
|
46
45
|
promptedAt: existing?.promptedAt ?? new Date().toISOString(),
|
|
46
|
+
consentVersion: existing?.consentVersion,
|
|
47
47
|
enableObservatory: existing?.enableObservatory,
|
|
48
48
|
});
|
|
49
49
|
const result = {
|
|
50
50
|
action: 'disable',
|
|
51
51
|
enabled: false,
|
|
52
|
-
|
|
52
|
+
consentVersion: existing?.consentVersion,
|
|
53
53
|
message: 'Telemetry DISABLED. No usage data will be sent.',
|
|
54
54
|
};
|
|
55
55
|
return compactResult(formatKeyValue(result));
|
|
@@ -207,8 +207,17 @@ export async function runAutoPostCreatePipeline(specId, projectId, _projectPath)
|
|
|
207
207
|
const timeout = setTimeout(() => {
|
|
208
208
|
controller.abort(abortError(`Auto-pipeline timeout (${String(AUTO_PIPELINE_TIMEOUT_MS / 1000)}s)`));
|
|
209
209
|
}, AUTO_PIPELINE_TIMEOUT_MS);
|
|
210
|
+
let rejectOnAbort;
|
|
211
|
+
const aborted = new Promise((_resolve, reject) => {
|
|
212
|
+
rejectOnAbort = () => {
|
|
213
|
+
reject(controller.signal.reason instanceof Error
|
|
214
|
+
? controller.signal.reason
|
|
215
|
+
: abortError('Auto-pipeline aborted'));
|
|
216
|
+
};
|
|
217
|
+
controller.signal.addEventListener('abort', rejectOnAbort, { once: true });
|
|
218
|
+
});
|
|
210
219
|
try {
|
|
211
|
-
return await runPipelineInternal(specId, projectId, controller.signal);
|
|
220
|
+
return await Promise.race([runPipelineInternal(specId, projectId, controller.signal), aborted]);
|
|
212
221
|
}
|
|
213
222
|
catch (err) {
|
|
214
223
|
if (err instanceof Error && err.name === 'AbortError') {
|
|
@@ -229,6 +238,9 @@ export async function runAutoPostCreatePipeline(specId, projectId, _projectPath)
|
|
|
229
238
|
}
|
|
230
239
|
finally {
|
|
231
240
|
clearTimeout(timeout);
|
|
241
|
+
if (rejectOnAbort) {
|
|
242
|
+
controller.signal.removeEventListener('abort', rejectOnAbort);
|
|
243
|
+
}
|
|
232
244
|
}
|
|
233
245
|
}
|
|
234
246
|
//# sourceMappingURL=auto-pipeline.js.map
|
|
@@ -20,7 +20,7 @@ export declare function getEmptyAutopilotResult(): AutopilotAnalysis;
|
|
|
20
20
|
* Analyze the project to enrich a spec with real file paths and patterns.
|
|
21
21
|
* Runs automatically during create_spec — no user interaction needed.
|
|
22
22
|
*/
|
|
23
|
-
export declare function analyzeProjectForSpec(projectPath: string, description: string, title: string, _knowledge: ProjectKnowledge | null): Promise<AutopilotAnalysis>;
|
|
23
|
+
export declare function analyzeProjectForSpec(projectPath: string, description: string, title: string, _knowledge: ProjectKnowledge | null, signal?: AbortSignal): Promise<AutopilotAnalysis>;
|
|
24
24
|
/**
|
|
25
25
|
* SPEC-619 AC1: Detect broad-scope descriptions that mention 2+ major subsystems.
|
|
26
26
|
* When true, create_spec should ask clarifying questions before proceeding.
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// SPEC-597-EXEMPT: canonical mapping (npm-package↔framework, keyword catalogue)
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
3
1
|
// tools/create-spec/autopilot-analyzer.ts — SPEC-461 Phase 3: Autopilot analysis for create_spec
|
|
4
2
|
// Analyzes project code to suggest real files, detect patterns, and enrich specs automatically.
|
|
5
3
|
import { relative, extname } from 'node:path';
|
|
@@ -19,7 +17,7 @@ export function getEmptyAutopilotResult() {
|
|
|
19
17
|
* Analyze the project to enrich a spec with real file paths and patterns.
|
|
20
18
|
* Runs automatically during create_spec — no user interaction needed.
|
|
21
19
|
*/
|
|
22
|
-
export async function analyzeProjectForSpec(projectPath, description, title, _knowledge) {
|
|
20
|
+
export async function analyzeProjectForSpec(projectPath, description, title, _knowledge, signal) {
|
|
23
21
|
const result = {
|
|
24
22
|
suggestedFiles: { create: [], modify: [], test: [] },
|
|
25
23
|
detectedPatterns: [],
|
|
@@ -46,7 +44,7 @@ export async function analyzeProjectForSpec(projectPath, description, title, _kn
|
|
|
46
44
|
const keywords = extractKeywordsScorer(`${title} ${description}`);
|
|
47
45
|
// Scan project files to find semantically related ones
|
|
48
46
|
try {
|
|
49
|
-
const relatedFiles = await findRelevantFiles(projectPath, keywords, 10);
|
|
47
|
+
const relatedFiles = await findRelevantFiles(projectPath, keywords, 10, signal);
|
|
50
48
|
if (relatedFiles.length === 0) {
|
|
51
49
|
result.noRelatedFilesMessage =
|
|
52
50
|
'No related files detected — please populate ## Technical manually';
|
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
import type { ProjectKnowledge, ToolContract } from '../../types/index.js';
|
|
1
|
+
import type { ProjectKnowledge, ToolContract, MCPErrorCode } from '../../types/index.js';
|
|
2
2
|
export declare function isMcpToolContract(knowledge: ProjectKnowledge | null): boolean;
|
|
3
|
+
export interface McpToolContractOptions {
|
|
4
|
+
/** Explicit effects declared by the caller; descriptions are never treated as executable metadata. */
|
|
5
|
+
sideEffects?: readonly string[];
|
|
6
|
+
/** Explicit protocol errors beyond the safe default contract. */
|
|
7
|
+
errorCodes?: readonly MCPErrorCode[];
|
|
8
|
+
}
|
|
3
9
|
/**
|
|
4
10
|
* Generate a ToolContract for an MCP tool.
|
|
5
11
|
* Criterion 4: name, description, inputSchema (Zod), outputSchema, side effects, error codes, timeout.
|
|
6
12
|
*/
|
|
7
|
-
export declare function generateMcpToolContract(toolName: string, description: string, inputFields: string[]): ToolContract;
|
|
8
|
-
export declare function formatMcpToolContractAsMarkdown(tools: {
|
|
13
|
+
export declare function generateMcpToolContract(toolName: string, description: string, inputFields: string[], options?: McpToolContractOptions): ToolContract;
|
|
14
|
+
export declare function formatMcpToolContractAsMarkdown(tools: ({
|
|
9
15
|
name: string;
|
|
10
16
|
description: string;
|
|
11
17
|
fields: string[];
|
|
12
|
-
}[], knowledge: ProjectKnowledge): string;
|
|
18
|
+
} & McpToolContractOptions)[], knowledge: ProjectKnowledge): string;
|
|
13
19
|
//# sourceMappingURL=mcp-tool-contract.d.ts.map
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// SPEC-016b: Generates Tool Contracts for MCP tools.
|
|
3
3
|
// Criterion 4: define_ui_contract generates "Tool Contract" for MCP servers.
|
|
4
4
|
import { isMcpServerProject } from '../../engine/detectors/mcp-server-detector.js';
|
|
5
|
+
import { getRuntimePolicy } from '../../engine/runtime-policy.js';
|
|
5
6
|
// === Detection ===
|
|
6
7
|
export function isMcpToolContract(knowledge) {
|
|
7
8
|
if (!knowledge) {
|
|
@@ -10,42 +11,12 @@ export function isMcpToolContract(knowledge) {
|
|
|
10
11
|
return isMcpServerProject(knowledge);
|
|
11
12
|
}
|
|
12
13
|
// === Tool Contract builder ===
|
|
13
|
-
|
|
14
|
-
const codes = ['InvalidParams', 'InternalError'];
|
|
15
|
-
const lower = description.toLowerCase();
|
|
16
|
-
if (lower.includes('not found') ||
|
|
17
|
-
lower.includes('missing') ||
|
|
18
|
-
lower.includes(toolName.toLowerCase())) {
|
|
19
|
-
codes.push('MethodNotFound');
|
|
20
|
-
}
|
|
21
|
-
// Deduplicate
|
|
22
|
-
return [...new Set(codes)];
|
|
23
|
-
}
|
|
24
|
-
function buildSideEffects(description) {
|
|
25
|
-
const lower = description.toLowerCase();
|
|
26
|
-
const effects = [];
|
|
27
|
-
if (lower.includes('write') || lower.includes('create') || lower.includes('save')) {
|
|
28
|
-
effects.push('filesystem-write');
|
|
29
|
-
}
|
|
30
|
-
if (lower.includes('delete') || lower.includes('remove')) {
|
|
31
|
-
effects.push('filesystem-delete');
|
|
32
|
-
}
|
|
33
|
-
if (lower.includes('http') || lower.includes('fetch') || lower.includes('api')) {
|
|
34
|
-
effects.push('network-call');
|
|
35
|
-
}
|
|
36
|
-
if (lower.includes('database') || lower.includes('db') || lower.includes('query')) {
|
|
37
|
-
effects.push('database-read');
|
|
38
|
-
}
|
|
39
|
-
if (lower.includes('email') || lower.includes('notify') || lower.includes('send')) {
|
|
40
|
-
effects.push('external-service-call');
|
|
41
|
-
}
|
|
42
|
-
return effects;
|
|
43
|
-
}
|
|
14
|
+
const DEFAULT_ERROR_CODES = ['InvalidParams', 'InternalError'];
|
|
44
15
|
/**
|
|
45
16
|
* Generate a ToolContract for an MCP tool.
|
|
46
17
|
* Criterion 4: name, description, inputSchema (Zod), outputSchema, side effects, error codes, timeout.
|
|
47
18
|
*/
|
|
48
|
-
export function generateMcpToolContract(toolName, description, inputFields) {
|
|
19
|
+
export function generateMcpToolContract(toolName, description, inputFields, options = {}) {
|
|
49
20
|
const inputSchema = {};
|
|
50
21
|
for (const field of inputFields) {
|
|
51
22
|
inputSchema[field] = {
|
|
@@ -79,9 +50,9 @@ export function generateMcpToolContract(toolName, description, inputFields) {
|
|
|
79
50
|
},
|
|
80
51
|
required: ['content'],
|
|
81
52
|
},
|
|
82
|
-
sideEffects:
|
|
83
|
-
errorCodes:
|
|
84
|
-
timeoutMs:
|
|
53
|
+
sideEffects: [...new Set(options.sideEffects ?? [])],
|
|
54
|
+
errorCodes: [...new Set(options.errorCodes ?? DEFAULT_ERROR_CODES)],
|
|
55
|
+
timeoutMs: getRuntimePolicy().toolExecution.defaultTimeoutMs,
|
|
85
56
|
};
|
|
86
57
|
}
|
|
87
58
|
// === Formatted output for define_ui_contract ===
|
|
@@ -93,7 +64,7 @@ export function formatMcpToolContractAsMarkdown(tools, knowledge) {
|
|
|
93
64
|
'',
|
|
94
65
|
];
|
|
95
66
|
for (const tool of tools) {
|
|
96
|
-
const contract = generateMcpToolContract(tool.name, tool.description, tool.fields);
|
|
67
|
+
const contract = generateMcpToolContract(tool.name, tool.description, tool.fields, tool);
|
|
97
68
|
lines.push(`### Tool: \`${contract.name}\``);
|
|
98
69
|
lines.push('');
|
|
99
70
|
lines.push(`**Description**: ${contract.description}`);
|
|
@@ -20,5 +20,6 @@ export declare function formatPostCreationSuggestion(suggestion: PostCreationSug
|
|
|
20
20
|
* Writes results to Planu's external project data dir and appends an
|
|
21
21
|
* autopilot-log entry on completion. Never throws — fully best-effort.
|
|
22
22
|
*/
|
|
23
|
-
export declare function
|
|
23
|
+
export declare function runAutopilotAnalysis(specId: string, projectPath: string, description: string): Promise<void>;
|
|
24
|
+
export declare function runAutopilotAsync(specId: string, projectPath: string, description: string): void;
|
|
24
25
|
//# sourceMappingURL=post-creation.d.ts.map
|
|
@@ -1,19 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
3
|
-
// tools/create-spec/post-creation.ts — Git setup + contradiction detection + post-creation suggestions.
|
|
4
|
-
// Extracted from create-spec.ts to keep file sizes within limits.
|
|
1
|
+
import { technologyValue } from '../../engine/technology-registry.js';
|
|
5
2
|
import { specStore } from '../../storage/index.js';
|
|
6
3
|
import { detectContradictions } from '../../engine/contradiction-detector.js';
|
|
7
4
|
import { detectCiCd } from '../../engine/detectors/cicd-detector.js';
|
|
8
5
|
import { tryAutoSetupGit } from '../create-spec-helpers.js';
|
|
9
6
|
import { emitAutopilotEvent } from '../../engine/autopilot/event-bus.js';
|
|
10
7
|
import { incrementSpecCount } from '../../engine/autopilot/state-updater.js';
|
|
11
|
-
import {
|
|
12
|
-
import { join, dirname } from 'node:path';
|
|
8
|
+
import { join } from 'node:path';
|
|
13
9
|
import { hashProjectPath, projectDataDir } from '../../storage/base-store.js';
|
|
14
10
|
import { appendAutopilotLogEntry } from '../../storage/autopilot-log-store.js';
|
|
15
11
|
import { analyzeContextPreflight, buildTokenWasteReport, loadTokenWastePolicy, recommendRelevantTools, toolsFromPolicyGroups, } from '../../engine/token-optimizer/index.js';
|
|
16
|
-
import {
|
|
12
|
+
import { atomicWriteFile } from '../../engine/safety/atomic-write-file.js';
|
|
17
13
|
const ASYNC_ANALYSIS_HOOK = 'create-spec-async-analysis';
|
|
18
14
|
export function getAsyncAnalysisPath(projectPath, specId) {
|
|
19
15
|
const projectId = hashProjectPath(projectPath);
|
|
@@ -25,21 +21,15 @@ export async function buildInitialTokenWasteMetadata(specId, projectPath, descri
|
|
|
25
21
|
if (!policy.enabled) {
|
|
26
22
|
return null;
|
|
27
23
|
}
|
|
28
|
-
const graphSlice = await queryProjectGraphSlice({ projectPath, specId }).catch(() => null);
|
|
29
|
-
const graphCandidates = graphSlice?.nodes
|
|
30
|
-
.filter((node) => node.type === 'file' || node.type === 'test')
|
|
31
|
-
.slice(0, 12)
|
|
32
|
-
.map((node) => ({
|
|
33
|
-
path: node.label,
|
|
34
|
-
reason: 'Related by Project Knowledge Graph compact slice.',
|
|
35
|
-
})) ?? [];
|
|
36
24
|
const context = analyzeContextPreflight({
|
|
37
25
|
action: 'create_spec',
|
|
38
26
|
policy,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
// A just-created spec cannot exist in the previous graph snapshot. Asking
|
|
28
|
+
// for a slice by its new ID therefore produced no candidates while forcing
|
|
29
|
+
// a full graph freshness scan/rebuild after every mutation. Graph refresh
|
|
30
|
+
// belongs to the durable post-commit worker; the acknowledgement metadata
|
|
31
|
+
// starts with the canonical spec workspace only.
|
|
32
|
+
candidates: [{ path: 'planu/specs', reason: 'New spec workspace metadata.' }],
|
|
43
33
|
spec: { id: specId },
|
|
44
34
|
});
|
|
45
35
|
const tools = recommendRelevantTools({
|
|
@@ -156,7 +146,13 @@ function hasAffirmedPattern(description, pattern) {
|
|
|
156
146
|
});
|
|
157
147
|
}
|
|
158
148
|
// === Serverless platform detection ===
|
|
159
|
-
const SERVERLESS_PLATFORMS = [
|
|
149
|
+
const SERVERLESS_PLATFORMS = [
|
|
150
|
+
technologyValue('technology-vercel-9d3508'),
|
|
151
|
+
technologyValue('technology-netlify-58465a'),
|
|
152
|
+
'lambda',
|
|
153
|
+
'cloudflare-workers',
|
|
154
|
+
'deno-deploy',
|
|
155
|
+
];
|
|
160
156
|
function isServerlessKnowledge(knowledge) {
|
|
161
157
|
if (!knowledge) {
|
|
162
158
|
return false;
|
|
@@ -235,41 +231,47 @@ export function formatPostCreationSuggestion(suggestion) {
|
|
|
235
231
|
* Writes results to Planu's external project data dir and appends an
|
|
236
232
|
* autopilot-log entry on completion. Never throws — fully best-effort.
|
|
237
233
|
*/
|
|
238
|
-
export function
|
|
234
|
+
export async function runAutopilotAnalysis(specId, projectPath, description) {
|
|
239
235
|
const projectId = hashProjectPath(projectPath);
|
|
240
236
|
const start = Date.now();
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
237
|
+
try {
|
|
238
|
+
const analysisResult = {
|
|
239
|
+
specId,
|
|
240
|
+
completedAt: new Date().toISOString(),
|
|
241
|
+
pendingAnalysis: false,
|
|
242
|
+
tokenWasteAutopilot: await buildInitialTokenWasteMetadata(specId, projectPath, description),
|
|
243
|
+
};
|
|
244
|
+
const analysisPath = getAsyncAnalysisPath(projectPath, specId);
|
|
245
|
+
await atomicWriteFile(analysisPath, JSON.stringify(analysisResult, null, 2), {
|
|
246
|
+
encoding: 'utf-8',
|
|
247
|
+
});
|
|
248
|
+
await appendAutopilotLogEntry(projectId, {
|
|
249
|
+
specId,
|
|
250
|
+
hookName: ASYNC_ANALYSIS_HOOK,
|
|
251
|
+
result: 'pass',
|
|
252
|
+
timestamp: new Date().toISOString(),
|
|
253
|
+
durationMs: Date.now() - start,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
258
|
+
await appendAutopilotLogEntry(projectId, {
|
|
259
|
+
specId,
|
|
260
|
+
hookName: ASYNC_ANALYSIS_HOOK,
|
|
261
|
+
result: 'fail',
|
|
262
|
+
error,
|
|
263
|
+
timestamp: new Date().toISOString(),
|
|
264
|
+
durationMs: Date.now() - start,
|
|
265
|
+
}).catch(() => {
|
|
266
|
+
/* double best-effort */
|
|
267
|
+
});
|
|
268
|
+
throw err;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
export function runAutopilotAsync(specId, projectPath, description) {
|
|
272
|
+
void runAutopilotAnalysis(specId, projectPath, description).catch(() => {
|
|
273
|
+
// The durable outbox consumer uses the awaited entry point above. This wrapper
|
|
274
|
+
// remains for callers that have not yet migrated and always observes rejection.
|
|
275
|
+
});
|
|
274
276
|
}
|
|
275
277
|
//# sourceMappingURL=post-creation.js.map
|
|
@@ -14,5 +14,5 @@ export declare function scoreFile(filePath: string, keywords: Set<string>): Prom
|
|
|
14
14
|
* Scans `src/**\/\*.ts` and `tests/**\/\*.ts` under projectPath,
|
|
15
15
|
* scores each, drops score=0 entries, returns top-`limit` by descending score.
|
|
16
16
|
*/
|
|
17
|
-
export declare function findRelevantFiles(projectPath: string, keywords: Set<string>, limit?: number): Promise<string[]>;
|
|
17
|
+
export declare function findRelevantFiles(projectPath: string, keywords: Set<string>, limit?: number, signal?: AbortSignal): Promise<string[]>;
|
|
18
18
|
//# sourceMappingURL=relevance-scorer.d.ts.map
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
import { readFile } from 'node:fs/promises';
|
|
5
5
|
import { glob } from 'glob';
|
|
6
6
|
import { join } from 'node:path';
|
|
7
|
+
import { isNativeActive } from '../../engine/core-bridge.js';
|
|
8
|
+
import { runNativeWorkerOperation } from '../../engine/execution/native-worker-runtime.js';
|
|
9
|
+
import { hashProjectPath } from '../../storage/base-store.js';
|
|
7
10
|
/** Stop words to exclude from keyword extraction. */
|
|
8
11
|
const STOP_WORDS = new Set([
|
|
9
12
|
// English stop words
|
|
@@ -133,10 +136,23 @@ export async function scoreFile(filePath, keywords) {
|
|
|
133
136
|
* Scans `src/**\/\*.ts` and `tests/**\/\*.ts` under projectPath,
|
|
134
137
|
* scores each, drops score=0 entries, returns top-`limit` by descending score.
|
|
135
138
|
*/
|
|
136
|
-
export async function findRelevantFiles(projectPath, keywords, limit = 10) {
|
|
139
|
+
export async function findRelevantFiles(projectPath, keywords, limit = 10, signal) {
|
|
137
140
|
if (keywords.size === 0) {
|
|
138
141
|
return [];
|
|
139
142
|
}
|
|
143
|
+
if (isNativeActive()) {
|
|
144
|
+
const result = await runNativeWorkerOperation({
|
|
145
|
+
projectId: hashProjectPath(projectPath),
|
|
146
|
+
operation: 'find-relevant-files',
|
|
147
|
+
payload: { rootPath: projectPath, keywords: [...keywords], limit },
|
|
148
|
+
deadlineAt: Date.now() + 5_000,
|
|
149
|
+
signal,
|
|
150
|
+
});
|
|
151
|
+
if (!Array.isArray(result) || !result.every((filePath) => typeof filePath === 'string')) {
|
|
152
|
+
throw new Error('[Planu] Native relevance worker returned an invalid payload');
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
140
156
|
const patterns = [join(projectPath, 'src/**/*.ts'), join(projectPath, 'tests/**/*.ts')];
|
|
141
157
|
const candidates = [];
|
|
142
158
|
for (const pattern of patterns) {
|