@planu/cli 4.13.0 → 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 +29 -0
- package/README.md +24 -24
- 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
|
@@ -18,9 +18,16 @@ alwaysApply: true
|
|
|
18
18
|
\`\`\`
|
|
19
19
|
facilitate("what to build") → create_spec → challenge_spec → check_readiness
|
|
20
20
|
→ update_status(review) → approve → update_status(approved) → implement
|
|
21
|
-
→ validate → update_status(done)
|
|
21
|
+
→ validate (ack) → watch_job (completed) → inspect job.result → update_status(done)
|
|
22
22
|
\`\`\`
|
|
23
23
|
|
|
24
|
+
## Durable Validation Gate
|
|
25
|
+
|
|
26
|
+
1. Call \`validate\` and capture \`operationId\`, \`projectId\`, \`workspaceId\`, and \`cursor\`
|
|
27
|
+
2. Call \`watch_job\` with the latest cursor until terminal
|
|
28
|
+
3. Require \`completed\` and inspect \`job.result.structuredContent\`; stop on \`failed\`, \`dead-letter\`, or \`cancelled\`
|
|
29
|
+
4. Mark done only when the completed result reports \`ready: true\`, \`status: "passing"\`, and passing quality gates
|
|
30
|
+
|
|
24
31
|
## Session Start
|
|
25
32
|
|
|
26
33
|
1. Call \`planu_status\` to see active specs
|
|
@@ -47,7 +54,7 @@ Planu enforces Spec Driven Development — spec first, then implement, then vali
|
|
|
47
54
|
|
|
48
55
|
- Starting a new feature: use \`facilitate()\` or \`create_spec()\`
|
|
49
56
|
- Resuming work: use \`planu_status\` to see what's in progress
|
|
50
|
-
- Finishing work:
|
|
57
|
+
- Finishing work: submit \`validate()\`, await \`watch_job()\`, inspect \`job.result.structuredContent\`, then use \`update_status(done)\`
|
|
51
58
|
|
|
52
59
|
## Mandatory Workflow
|
|
53
60
|
|
|
@@ -56,13 +63,16 @@ Planu enforces Spec Driven Development — spec first, then implement, then vali
|
|
|
56
63
|
3. \`check_readiness(specId)\` — verify criteria are complete
|
|
57
64
|
4. \`update_status(specId, "approved")\` — lock the spec
|
|
58
65
|
5. Implement the code
|
|
59
|
-
6. \`validate(specId)\` —
|
|
60
|
-
7. \`
|
|
66
|
+
6. \`validate(specId)\` — submit validation and capture the durable job acknowledgement
|
|
67
|
+
7. \`watch_job(operationId, projectId, workspaceId, cursor)\` — repeat until terminal
|
|
68
|
+
8. Require \`completed\` and inspect \`job.result.structuredContent\`
|
|
69
|
+
9. \`update_status(specId, "done")\` — mark complete only after a completed passing result
|
|
61
70
|
|
|
62
71
|
## Rules
|
|
63
72
|
|
|
64
73
|
- NEVER write production code before spec is \`approved\`
|
|
65
74
|
- NEVER skip \`validate\` after implementation
|
|
75
|
+
- NEVER treat the \`validate\` acknowledgement as validation success
|
|
66
76
|
- Specs stay \`spec.md\`-only. Do not recreate standalone \`technical.md\` or \`progress.md\`.
|
|
67
77
|
`;
|
|
68
78
|
const CODEX_NATIVE_SKILL_CONTENT = `# planu-native — Planu Lightweight Native Surface
|
|
@@ -18,7 +18,14 @@ Auto-generated by \`init_project\`. Do not edit manually.
|
|
|
18
18
|
| implementing | work in progress |
|
|
19
19
|
| done | implemented + validated |
|
|
20
20
|
|
|
21
|
-
Flow: \`facilitate → create_spec → challenge_spec → check_readiness → approve → implement → validate → done\`
|
|
21
|
+
Flow: \`facilitate → create_spec → challenge_spec → check_readiness → approve → implement → validate (ack) → watch_job (completed) → inspect job.result → done\`
|
|
22
|
+
|
|
23
|
+
## Durable Validation Gate
|
|
24
|
+
|
|
25
|
+
1. Call \`validate\` and capture \`operationId\`, \`projectId\`, \`workspaceId\`, and \`cursor\` from the acknowledgement.
|
|
26
|
+
2. Call \`watch_job\` with those identifiers and the latest cursor. Repeat while state is non-terminal.
|
|
27
|
+
3. Require state \`completed\`, then inspect \`job.result.structuredContent\`. Stop and report \`failed\`, \`dead-letter\`, or \`cancelled\`.
|
|
28
|
+
4. Call \`update_status(done)\` only after the completed result reports \`ready: true\`, \`status: "passing"\`, and passing quality gates.
|
|
22
29
|
|
|
23
30
|
## Evidence Gates
|
|
24
31
|
|
|
@@ -45,7 +52,7 @@ Any new feature, bug fix, refactor, integration, or task > 5 min.
|
|
|
45
52
|
## Session End
|
|
46
53
|
|
|
47
54
|
- \`session_checkpoint\` — persist context for the next session
|
|
48
|
-
- \`update_status(done)\` —
|
|
55
|
+
- \`update_status(done)\` — only after a completed passing validation job
|
|
49
56
|
|
|
50
57
|
## Quick Reference
|
|
51
58
|
|
|
@@ -63,6 +70,7 @@ Any new feature, bug fix, refactor, integration, or task > 5 min.
|
|
|
63
70
|
|
|
64
71
|
- NEVER write code before spec is \`approved\`
|
|
65
72
|
- NEVER skip \`validate\` after implementation
|
|
73
|
+
- NEVER treat the initial \`validate\` acknowledgement as a passing result
|
|
66
74
|
- NEVER create design docs outside \`planu/specs/\`
|
|
67
75
|
- NEVER recreate legacy \`technical.md\`, \`progress.md\`, or \`HU.md\` files for new specs
|
|
68
76
|
|
|
@@ -62,5 +62,5 @@ export interface ScaffoldWriteResult {
|
|
|
62
62
|
* - ESLint/Prettier config
|
|
63
63
|
* - Architecture rules
|
|
64
64
|
*/
|
|
65
|
-
export declare function runScaffoldWriter(projectPath: string, projectId: string, knowledge: ProjectKnowledge, recommendedSkills: RecommendedSkill[], permissionsMode?: PermissionsMode, pluginsMode?: PluginInstallMode): Promise<ScaffoldWriteResult>;
|
|
65
|
+
export declare function runScaffoldWriter(projectPath: string, projectId: string, knowledge: ProjectKnowledge, recommendedSkills: RecommendedSkill[], permissionsMode?: PermissionsMode, pluginsMode?: PluginInstallMode, installSkills?: boolean): Promise<ScaffoldWriteResult>;
|
|
66
66
|
//# sourceMappingURL=scaffold-writer.d.ts.map
|
|
@@ -28,7 +28,7 @@ import { generateWorkflowSkills } from '../../engine/skill-generator/workflow-sk
|
|
|
28
28
|
* - Architecture rules
|
|
29
29
|
*/
|
|
30
30
|
// eslint-disable-next-line complexity
|
|
31
|
-
export async function runScaffoldWriter(projectPath, projectId, knowledge, recommendedSkills, permissionsMode, pluginsMode) {
|
|
31
|
+
export async function runScaffoldWriter(projectPath, projectId, knowledge, recommendedSkills, permissionsMode, pluginsMode, installSkills = true) {
|
|
32
32
|
// Generate and write AI rules files
|
|
33
33
|
const rulesResult = await runRulesWriter(projectPath, projectId, knowledge, recommendedSkills);
|
|
34
34
|
// Git setup: hooks, flow detection, .gitignore (SPEC-001)
|
|
@@ -51,7 +51,7 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
51
51
|
let opencodeConfigScaffolded = false;
|
|
52
52
|
try {
|
|
53
53
|
const { installInitHostAssets } = await import('./host-assets-writer.js');
|
|
54
|
-
const hostAssets = await installInitHostAssets(projectPath, knowledge);
|
|
54
|
+
const hostAssets = await installInitHostAssets(projectPath, knowledge, installSkills);
|
|
55
55
|
detectedAssetHosts = hostAssets.detectedHosts;
|
|
56
56
|
hostRulesWritten = hostAssets.rulesInstalled.length;
|
|
57
57
|
hostSkillsWritten = hostAssets.skillsInstalled.length;
|
|
@@ -152,7 +152,7 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
152
152
|
}
|
|
153
153
|
// SPEC-519: Write .claude/skills/compact.md if missing (best-effort)
|
|
154
154
|
let compactSkillWritten = false;
|
|
155
|
-
if (shouldWriteClaudeAssets) {
|
|
155
|
+
if (shouldWriteClaudeAssets && installSkills) {
|
|
156
156
|
try {
|
|
157
157
|
compactSkillWritten = await generateCompactSkillIfMissing(projectPath);
|
|
158
158
|
}
|
|
@@ -161,7 +161,7 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
// SPEC-655: Write .claude/skills/find-skills.md if missing (best-effort, idempotent)
|
|
164
|
-
if (shouldWriteClaudeAssets) {
|
|
164
|
+
if (shouldWriteClaudeAssets && installSkills) {
|
|
165
165
|
try {
|
|
166
166
|
await generateFindSkillsIfMissing(projectPath);
|
|
167
167
|
}
|
|
@@ -193,12 +193,14 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
193
193
|
/* best-effort */
|
|
194
194
|
}
|
|
195
195
|
// SPEC-648: Generate per-client files (Cursor MDC, Codex skill) based on detected client
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
196
|
+
if (installSkills) {
|
|
197
|
+
try {
|
|
198
|
+
const { generatePerClientFiles } = await import('./per-client-files-writer.js');
|
|
199
|
+
await generatePerClientFiles(projectPath);
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
/* best-effort */
|
|
203
|
+
}
|
|
202
204
|
}
|
|
203
205
|
// SPEC-530: Generate .claude/rules/conventions.md (best-effort, idempotent)
|
|
204
206
|
let conventionsMdWritten = false;
|
|
@@ -225,7 +227,7 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
225
227
|
}
|
|
226
228
|
// SPEC-593: Write .claude/skills/planu-multi-teammate-review.md if missing (best-effort, idempotent)
|
|
227
229
|
let multiTeammateReviewSkillWritten = false;
|
|
228
|
-
if (shouldWriteClaudeAssets) {
|
|
230
|
+
if (shouldWriteClaudeAssets && installSkills) {
|
|
229
231
|
try {
|
|
230
232
|
multiTeammateReviewSkillWritten =
|
|
231
233
|
await generateMultiTeammateReviewSkillIfMissing(projectPath);
|
|
@@ -253,7 +255,7 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
253
255
|
// (idempotent — skips files already up-to-date; best-effort, no-op elsewhere)
|
|
254
256
|
let planuSubagentsScaffolded = false;
|
|
255
257
|
let planuUxSkillsScaffolded = 0;
|
|
256
|
-
if (shouldWriteClaudeAssets) {
|
|
258
|
+
if (shouldWriteClaudeAssets && installSkills) {
|
|
257
259
|
try {
|
|
258
260
|
const { scaffoldPlanuSubagents, scaffoldPlanuSkills } = await import('../../hosts/claude-code/ux/index.js');
|
|
259
261
|
const [subagentResult, skillResult] = await Promise.all([
|
|
@@ -302,11 +304,11 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
302
304
|
/* best-effort — never fail init_project due to missing claude CLI */
|
|
303
305
|
}
|
|
304
306
|
}
|
|
305
|
-
// SPEC-680: Create
|
|
307
|
+
// SPEC-680: Create planu/skill-registry.json if it does not exist (idempotent, best-effort)
|
|
306
308
|
try {
|
|
307
309
|
const { readFile: readFileFn } = await import('node:fs/promises');
|
|
308
310
|
const { join: joinFn } = await import('node:path');
|
|
309
|
-
const registryFilePath = joinFn(projectPath, '
|
|
311
|
+
const registryFilePath = joinFn(projectPath, 'planu', 'skill-registry.json');
|
|
310
312
|
const existing = await readFileFn(registryFilePath, 'utf-8').catch(() => null);
|
|
311
313
|
if (existing === null) {
|
|
312
314
|
const now = new Date().toISOString();
|
|
@@ -324,7 +326,7 @@ export async function runScaffoldWriter(projectPath, projectId, knowledge, recom
|
|
|
324
326
|
}
|
|
325
327
|
// SPEC-685: Generate all 22 workflow skill files (idempotent, best-effort)
|
|
326
328
|
let workflowSkillsWritten = 0;
|
|
327
|
-
if (shouldWriteClaudeAssets) {
|
|
329
|
+
if (shouldWriteClaudeAssets && installSkills) {
|
|
328
330
|
try {
|
|
329
331
|
const skillResult = await generateWorkflowSkills(projectPath, knowledge);
|
|
330
332
|
workflowSkillsWritten = skillResult.written.length;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ToolResult } from '../../types/index.js';
|
|
2
|
+
export interface JobToolIdentityInput {
|
|
3
|
+
operationId: string;
|
|
4
|
+
projectId: string;
|
|
5
|
+
workspaceId?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WatchJobToolInput extends JobToolIdentityInput {
|
|
8
|
+
afterCursor?: string;
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function handleGetJob(input: JobToolIdentityInput): Promise<ToolResult>;
|
|
12
|
+
export declare function handleWatchJob(input: WatchJobToolInput): Promise<ToolResult>;
|
|
13
|
+
export declare function handleCancelJob(input: JobToolIdentityInput): Promise<ToolResult>;
|
|
14
|
+
export declare function handleRestartJob(input: JobToolIdentityInput): Promise<ToolResult>;
|
|
15
|
+
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
|
|
2
|
+
if (value !== null && value !== void 0) {
|
|
3
|
+
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
|
|
4
|
+
var dispose, inner;
|
|
5
|
+
if (async) {
|
|
6
|
+
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
|
|
7
|
+
dispose = value[Symbol.asyncDispose];
|
|
8
|
+
}
|
|
9
|
+
if (dispose === void 0) {
|
|
10
|
+
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
|
|
11
|
+
dispose = value[Symbol.dispose];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
|
|
15
|
+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
|
|
16
|
+
env.stack.push({ value: value, dispose: dispose, async: async });
|
|
17
|
+
}
|
|
18
|
+
else if (async) {
|
|
19
|
+
env.stack.push({ async: true });
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
};
|
|
23
|
+
var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
|
|
24
|
+
return function (env) {
|
|
25
|
+
function fail(e) {
|
|
26
|
+
env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
|
|
27
|
+
env.hasError = true;
|
|
28
|
+
}
|
|
29
|
+
var r, s = 0;
|
|
30
|
+
function next() {
|
|
31
|
+
while (r = env.stack.pop()) {
|
|
32
|
+
try {
|
|
33
|
+
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
|
|
34
|
+
if (r.dispose) {
|
|
35
|
+
var result = r.dispose.call(r.value);
|
|
36
|
+
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
|
|
37
|
+
}
|
|
38
|
+
else s |= 1;
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
fail(e);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
|
|
45
|
+
if (env.hasError) throw env.error;
|
|
46
|
+
}
|
|
47
|
+
return next();
|
|
48
|
+
};
|
|
49
|
+
})(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
50
|
+
var e = new Error(message);
|
|
51
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
52
|
+
});
|
|
53
|
+
import { durableJobCursor, DurableJobRuntime } from '../../engine/execution/job-runtime.js';
|
|
54
|
+
import { scheduleValidateJobExecution } from '../../engine/execution/validate-job-executor.js';
|
|
55
|
+
function result(payload) {
|
|
56
|
+
return {
|
|
57
|
+
content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }],
|
|
58
|
+
structuredContent: payload,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export function handleGetJob(input) {
|
|
62
|
+
const env_1 = { stack: [], error: void 0, hasError: false };
|
|
63
|
+
try {
|
|
64
|
+
const runtime = __addDisposableResource(env_1, new DurableJobRuntime(), false);
|
|
65
|
+
const job = runtime.get(input);
|
|
66
|
+
return Promise.resolve(result({ schemaVersion: 1, job, cursor: durableJobCursor(job) }));
|
|
67
|
+
}
|
|
68
|
+
catch (e_1) {
|
|
69
|
+
env_1.error = e_1;
|
|
70
|
+
env_1.hasError = true;
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
__disposeResources(env_1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
export async function handleWatchJob(input) {
|
|
77
|
+
const env_2 = { stack: [], error: void 0, hasError: false };
|
|
78
|
+
try {
|
|
79
|
+
const runtime = __addDisposableResource(env_2, new DurableJobRuntime(), false);
|
|
80
|
+
const job = await runtime.watch(input);
|
|
81
|
+
return result({ schemaVersion: 1, job, cursor: durableJobCursor(job) });
|
|
82
|
+
}
|
|
83
|
+
catch (e_2) {
|
|
84
|
+
env_2.error = e_2;
|
|
85
|
+
env_2.hasError = true;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
__disposeResources(env_2);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function handleCancelJob(input) {
|
|
92
|
+
const env_3 = { stack: [], error: void 0, hasError: false };
|
|
93
|
+
try {
|
|
94
|
+
const runtime = __addDisposableResource(env_3, new DurableJobRuntime(), false);
|
|
95
|
+
const job = runtime.cancel(input);
|
|
96
|
+
return Promise.resolve(result({ schemaVersion: 1, job, cursor: durableJobCursor(job) }));
|
|
97
|
+
}
|
|
98
|
+
catch (e_3) {
|
|
99
|
+
env_3.error = e_3;
|
|
100
|
+
env_3.hasError = true;
|
|
101
|
+
}
|
|
102
|
+
finally {
|
|
103
|
+
__disposeResources(env_3);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export function handleRestartJob(input) {
|
|
107
|
+
const env_4 = { stack: [], error: void 0, hasError: false };
|
|
108
|
+
try {
|
|
109
|
+
const runtime = __addDisposableResource(env_4, new DurableJobRuntime(), false);
|
|
110
|
+
const job = runtime.restart(input);
|
|
111
|
+
if (job.payload &&
|
|
112
|
+
typeof job.payload === 'object' &&
|
|
113
|
+
job.payload.kind === 'validate') {
|
|
114
|
+
scheduleValidateJobExecution(job.projectId, job.workspaceId);
|
|
115
|
+
}
|
|
116
|
+
return Promise.resolve(result({ schemaVersion: 1, job, cursor: durableJobCursor(job) }));
|
|
117
|
+
}
|
|
118
|
+
catch (e_4) {
|
|
119
|
+
env_4.error = e_4;
|
|
120
|
+
env_4.hasError = true;
|
|
121
|
+
}
|
|
122
|
+
finally {
|
|
123
|
+
__disposeResources(env_4);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=handlers.js.map
|
package/dist/tools/list-specs.js
CHANGED
|
@@ -67,7 +67,7 @@ export async function handleListSpecs(params) {
|
|
|
67
67
|
const projectId = resolved.projectId;
|
|
68
68
|
const collector = new AutopilotSummaryCollector();
|
|
69
69
|
// SPEC-756: lazy version check — fire-and-forget, non-blocking
|
|
70
|
-
if (params.projectPath) {
|
|
70
|
+
if (detail === 'full' && params.projectPath) {
|
|
71
71
|
checkBundledVersionGap(2000)
|
|
72
72
|
.then(() => undefined)
|
|
73
73
|
.catch(() => {
|
|
@@ -96,12 +96,12 @@ export async function handleListSpecs(params) {
|
|
|
96
96
|
}
|
|
97
97
|
// ─── Native optimized scan (SPEC-1004) ──────────────────────────────────
|
|
98
98
|
let nativeBriefs = null;
|
|
99
|
-
if (isNativeActive() && knowledge.projectPath) {
|
|
99
|
+
if (detail === 'full' && isNativeActive() && knowledge.projectPath) {
|
|
100
100
|
nativeBriefs = fastScanSpecs(knowledge.projectPath);
|
|
101
101
|
}
|
|
102
102
|
// Read-only project signals only. Mutating discovery/migration/repair belongs
|
|
103
103
|
// to init, validate, housekeeping, or explicit migration tools.
|
|
104
|
-
if (knowledge.projectPath) {
|
|
104
|
+
if (detail === 'full' && knowledge.projectPath) {
|
|
105
105
|
await collectReadOnlyProjectSignals(projectId, knowledge.projectPath, collector);
|
|
106
106
|
}
|
|
107
107
|
// Get all specs
|
|
@@ -233,7 +233,7 @@ export async function handleListSpecs(params) {
|
|
|
233
233
|
const humanSummary = buildListSpecsSummary(allSpecs.length, statusCounts);
|
|
234
234
|
// SPEC-467: Detect branches and include info for LLM branch-awareness
|
|
235
235
|
let branchInfo = null;
|
|
236
|
-
if (knowledge.projectPath) {
|
|
236
|
+
if (detail === 'full' && knowledge.projectPath) {
|
|
237
237
|
try {
|
|
238
238
|
const { detectBranches } = await import('../engine/git/branch-detector.js');
|
|
239
239
|
branchInfo = detectBranches(knowledge.projectPath);
|
|
@@ -244,7 +244,7 @@ export async function handleListSpecs(params) {
|
|
|
244
244
|
}
|
|
245
245
|
// SPEC-487: Scan for ambiguous criteria — ask-then-act via InteractiveQuestion
|
|
246
246
|
let migrationIssues = null;
|
|
247
|
-
if (knowledge.projectPath) {
|
|
247
|
+
if (detail === 'full' && knowledge.projectPath) {
|
|
248
248
|
try {
|
|
249
249
|
const ambiguous = await scanForAmbiguousCriteria(knowledge.projectPath);
|
|
250
250
|
if (ambiguous.length > 0) {
|
|
@@ -276,7 +276,7 @@ export async function handleListSpecs(params) {
|
|
|
276
276
|
: null;
|
|
277
277
|
// SPEC-1012: Detect specs released but still in non-terminal status (best-effort, non-blocking)
|
|
278
278
|
let staleStatusWarnings = [];
|
|
279
|
-
if (knowledge.projectPath) {
|
|
279
|
+
if (detail === 'full' && knowledge.projectPath) {
|
|
280
280
|
try {
|
|
281
281
|
const { detectReleaseStatusDrift } = await import('../engine/drift-detection/release-status-drift.js');
|
|
282
282
|
staleStatusWarnings = await detectReleaseStatusDrift(knowledge.projectPath);
|
|
@@ -285,6 +285,34 @@ export async function handleListSpecs(params) {
|
|
|
285
285
|
/* best-effort — never block list_specs */
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
+
const structuredContent = {
|
|
289
|
+
projectId,
|
|
290
|
+
filters: {
|
|
291
|
+
status: status ?? 'all',
|
|
292
|
+
type: type ?? 'all',
|
|
293
|
+
},
|
|
294
|
+
count: specs.length,
|
|
295
|
+
totalCount: allSpecs.length,
|
|
296
|
+
specs: structuredSpecs,
|
|
297
|
+
summary: {
|
|
298
|
+
byStatus: statusCounts,
|
|
299
|
+
byType: typeCounts,
|
|
300
|
+
totalDevHours: Math.round(totalDevHours * 10) / 10,
|
|
301
|
+
totalReviewHours: Math.round(totalReviewHours * 10) / 10,
|
|
302
|
+
totalCostUsd: Math.round(totalCostUsd * 100) / 100,
|
|
303
|
+
},
|
|
304
|
+
teamSuggestion: teamSuggestion ?? null,
|
|
305
|
+
message: ti('tools.list_specs.success', { count: String(specs.length) }),
|
|
306
|
+
teamDistributionHint: approvedSpecs.length >= 3
|
|
307
|
+
? `${String(approvedSpecs.length)} specs approved — run plan_team_distribution for parallel assignment`
|
|
308
|
+
: undefined,
|
|
309
|
+
humanSummary,
|
|
310
|
+
branchInfo: branchInfo && branchInfo.count > 1 ? branchInfo : undefined,
|
|
311
|
+
autopilotSummary: collector.hasEntries() ? collector.getMessages() : undefined,
|
|
312
|
+
migrationIssues: migrationIssues ?? undefined,
|
|
313
|
+
interactiveQuestions: interactiveQuestions ?? undefined,
|
|
314
|
+
staleStatusWarnings: staleStatusWarnings.length > 0 ? staleStatusWarnings : undefined,
|
|
315
|
+
};
|
|
288
316
|
return {
|
|
289
317
|
content: [
|
|
290
318
|
{ type: 'text', text: textContent },
|
|
@@ -298,34 +326,7 @@ export async function handleListSpecs(params) {
|
|
|
298
326
|
]
|
|
299
327
|
: []),
|
|
300
328
|
],
|
|
301
|
-
structuredContent
|
|
302
|
-
projectId,
|
|
303
|
-
filters: {
|
|
304
|
-
status: status ?? 'all',
|
|
305
|
-
type: type ?? 'all',
|
|
306
|
-
},
|
|
307
|
-
count: specs.length,
|
|
308
|
-
totalCount: allSpecs.length,
|
|
309
|
-
specs: specsData,
|
|
310
|
-
summary: {
|
|
311
|
-
byStatus: statusCounts,
|
|
312
|
-
byType: typeCounts,
|
|
313
|
-
totalDevHours: Math.round(totalDevHours * 10) / 10,
|
|
314
|
-
totalReviewHours: Math.round(totalReviewHours * 10) / 10,
|
|
315
|
-
totalCostUsd: Math.round(totalCostUsd * 100) / 100,
|
|
316
|
-
},
|
|
317
|
-
teamSuggestion: teamSuggestion ?? null,
|
|
318
|
-
message: ti('tools.list_specs.success', { count: String(specs.length) }),
|
|
319
|
-
teamDistributionHint: approvedSpecs.length >= 3
|
|
320
|
-
? `${String(approvedSpecs.length)} specs approved — run plan_team_distribution for parallel assignment`
|
|
321
|
-
: undefined,
|
|
322
|
-
humanSummary,
|
|
323
|
-
branchInfo: branchInfo && branchInfo.count > 1 ? branchInfo : undefined,
|
|
324
|
-
autopilotSummary: collector.hasEntries() ? collector.getMessages() : undefined,
|
|
325
|
-
migrationIssues: migrationIssues ?? undefined,
|
|
326
|
-
interactiveQuestions: interactiveQuestions ?? undefined,
|
|
327
|
-
staleStatusWarnings: staleStatusWarnings.length > 0 ? staleStatusWarnings : undefined,
|
|
328
|
-
},
|
|
329
|
+
structuredContent,
|
|
329
330
|
};
|
|
330
331
|
}
|
|
331
332
|
catch (error) {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// tools/manage-plugins-handler.ts — Handler for manage_plugins tool (SPEC-085 AC-09, SPEC-603, SPEC-604)
|
|
2
|
+
import { dirname } from 'node:path';
|
|
2
3
|
import { t, ti } from '../i18n/index.js';
|
|
3
4
|
import { searchPlugins } from '../engine/plugin-installer/plugin-catalog.js';
|
|
4
5
|
import { cleanupPluginArtifacts } from '../engine/plugin-installer/artifact-scanner.js';
|
|
5
6
|
import { discoverPlugins, installPlugin, activatePlugin, deactivatePlugin, uninstallPlugin, readPluginState, loadPluginModule, generatePluginDocs, getPluginToolCount, getPluginWorkerCount, getPluginAnalyzerCount, getPluginTemplateCount, } from '../engine/plugins/index.js';
|
|
7
|
+
import { storageCatalogById } from '../storage/storage-catalog.js';
|
|
6
8
|
function text(content) {
|
|
7
9
|
return { content: [{ type: 'text', text: content }] };
|
|
8
10
|
}
|
|
@@ -10,11 +12,17 @@ function resolveProjectPath(input) {
|
|
|
10
12
|
/* v8 ignore next -- process.cwd() fallback never reached when projectPath is always provided */
|
|
11
13
|
return input.projectPath ?? process.cwd();
|
|
12
14
|
}
|
|
13
|
-
|
|
15
|
+
function pluginStateDataRoot() {
|
|
16
|
+
const statePath = storageCatalogById('plugin-state').resolvedPath;
|
|
17
|
+
if (statePath === undefined) {
|
|
18
|
+
throw new Error('[Planu] Plugin state catalog entry has no resolved path');
|
|
19
|
+
}
|
|
20
|
+
return dirname(dirname(statePath));
|
|
21
|
+
}
|
|
14
22
|
async function handleList(input) {
|
|
15
23
|
const projectPath = resolveProjectPath(input);
|
|
16
24
|
const plugins = await discoverPlugins(projectPath);
|
|
17
|
-
const state = await readPluginState(
|
|
25
|
+
const state = await readPluginState(pluginStateDataRoot());
|
|
18
26
|
const items = plugins.map((p) => {
|
|
19
27
|
const persisted = state.plugins.find((s) => s.manifest.id === p.manifest.id);
|
|
20
28
|
const currentState = persisted?.state ?? p.state;
|
|
@@ -42,7 +50,7 @@ async function handleInstall(input) {
|
|
|
42
50
|
};
|
|
43
51
|
}
|
|
44
52
|
const projectPath = resolveProjectPath(input);
|
|
45
|
-
const reg = await installPlugin(input.pluginPath, projectPath,
|
|
53
|
+
const reg = await installPlugin(input.pluginPath, projectPath, pluginStateDataRoot());
|
|
46
54
|
return text(ti('tools.manage_plugins.installSuccess', {
|
|
47
55
|
name: reg.manifest.name,
|
|
48
56
|
id: reg.manifest.id,
|
|
@@ -60,7 +68,7 @@ async function handleActivate(input) {
|
|
|
60
68
|
}
|
|
61
69
|
const projectPath = resolveProjectPath(input);
|
|
62
70
|
const builtInTools = new Set(); // Would be populated from server
|
|
63
|
-
const reg = await activatePlugin(input.pluginId, projectPath,
|
|
71
|
+
const reg = await activatePlugin(input.pluginId, projectPath, pluginStateDataRoot(), builtInTools);
|
|
64
72
|
if (reg.state === 'error') {
|
|
65
73
|
return {
|
|
66
74
|
content: [
|
|
@@ -86,7 +94,7 @@ async function handleDeactivate(input) {
|
|
|
86
94
|
isError: true,
|
|
87
95
|
};
|
|
88
96
|
}
|
|
89
|
-
const reg = await deactivatePlugin(input.pluginId,
|
|
97
|
+
const reg = await deactivatePlugin(input.pluginId, pluginStateDataRoot());
|
|
90
98
|
return text(ti('tools.manage_plugins.deactivateSuccess', { name: reg.manifest.name }));
|
|
91
99
|
}
|
|
92
100
|
async function handleUninstall(input) {
|
|
@@ -102,7 +110,7 @@ async function handleUninstall(input) {
|
|
|
102
110
|
};
|
|
103
111
|
}
|
|
104
112
|
const projectPath = resolveProjectPath(input);
|
|
105
|
-
await uninstallPlugin(input.pluginId, projectPath,
|
|
113
|
+
await uninstallPlugin(input.pluginId, projectPath, pluginStateDataRoot());
|
|
106
114
|
// SPEC-604: cleanup plugin artifacts from .claude/rules/, .claude/skills/, .claude/hooks/
|
|
107
115
|
const cleaned = await cleanupPluginArtifacts(input.pluginId, projectPath);
|
|
108
116
|
const baseMsg = ti('tools.manage_plugins.uninstallSuccess', { id: input.pluginId });
|
|
@@ -120,7 +128,7 @@ async function handleInfo(input) {
|
|
|
120
128
|
isError: true,
|
|
121
129
|
};
|
|
122
130
|
}
|
|
123
|
-
const state = await readPluginState(
|
|
131
|
+
const state = await readPluginState(pluginStateDataRoot());
|
|
124
132
|
const reg = state.plugins.find((p) => p.manifest.id === input.pluginId);
|
|
125
133
|
if (!reg) {
|
|
126
134
|
return {
|
|
@@ -176,9 +184,9 @@ async function handleUpdate(input) {
|
|
|
176
184
|
}
|
|
177
185
|
const projectPath = resolveProjectPath(input);
|
|
178
186
|
// Update strategy: uninstall (with artifact cleanup) then reinstall
|
|
179
|
-
await uninstallPlugin(input.pluginId, projectPath,
|
|
187
|
+
await uninstallPlugin(input.pluginId, projectPath, pluginStateDataRoot());
|
|
180
188
|
await cleanupPluginArtifacts(input.pluginId, projectPath);
|
|
181
|
-
const reg = await installPlugin(input.pluginPath, projectPath,
|
|
189
|
+
const reg = await installPlugin(input.pluginPath, projectPath, pluginStateDataRoot());
|
|
182
190
|
return text(`Plugin "${reg.manifest.name}" updated successfully to version ${reg.manifest.version}.`);
|
|
183
191
|
}
|
|
184
192
|
/**
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// feature-flags | status
|
|
3
3
|
import { t } from '../../i18n/index.js';
|
|
4
4
|
import { scoreMigratableComponents, generateMigrationPlan, generateRollbackPlan, createMigrationCheckpoint, buildRollbackExecutionPlan, generateFeatureFlagSpec, buildMigrationStatusReport, } from '../../engine/migration/index.js';
|
|
5
|
+
import { projectDataDir } from '../../storage/base-store.js';
|
|
5
6
|
export function handleRollbackPlan(args) {
|
|
6
7
|
const components = scoreMigratableComponents([
|
|
7
8
|
{
|
|
@@ -56,7 +57,7 @@ export function handleRollbackPlan(args) {
|
|
|
56
57
|
data,
|
|
57
58
|
message: t('tools.migrate_tech.rollbackPlanSuccess'),
|
|
58
59
|
warnings,
|
|
59
|
-
savedTo: args.projectId ?
|
|
60
|
+
savedTo: args.projectId ? `${projectDataDir(args.projectId)}/rollback-plan.json` : undefined,
|
|
60
61
|
};
|
|
61
62
|
}
|
|
62
63
|
export function handleCheckpoint(args) {
|
|
@@ -73,7 +74,7 @@ export function handleCheckpoint(args) {
|
|
|
73
74
|
message: t('tools.migrate_tech.checkpointSuccess'),
|
|
74
75
|
warnings: [],
|
|
75
76
|
savedTo: args.projectId
|
|
76
|
-
?
|
|
77
|
+
? `${projectDataDir(args.projectId)}/migration-checkpoints.json`
|
|
77
78
|
: undefined,
|
|
78
79
|
};
|
|
79
80
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// C10: webpack-to-vite → structured migration plan from catalog
|
|
4
4
|
// C11: vite6-to-vite7 → structured migration plan from catalog
|
|
5
5
|
import { readFile } from 'node:fs/promises';
|
|
6
|
+
import { projectDataDir } from '../../storage/base-store.js';
|
|
6
7
|
// ---------------------------------------------------------------------------
|
|
7
8
|
// Cache
|
|
8
9
|
// ---------------------------------------------------------------------------
|
|
@@ -60,7 +61,7 @@ export async function handleWebpackToVite(args) {
|
|
|
60
61
|
message: `Webpack to Vite migration plan generated — ${migration.phases.length} phases, ${migration.postMigrationChecklist.length} post-migration checks.`,
|
|
61
62
|
warnings,
|
|
62
63
|
savedTo: args.projectId
|
|
63
|
-
?
|
|
64
|
+
? `${projectDataDir(args.projectId)}/webpack-to-vite-plan.json`
|
|
64
65
|
: undefined,
|
|
65
66
|
};
|
|
66
67
|
}
|
|
@@ -85,7 +86,7 @@ export async function handleVite6ToVite7(args) {
|
|
|
85
86
|
message: `Vite 6 → Vite 7 migration plan generated — ${migration.breakingChanges.length} breaking changes documented.`,
|
|
86
87
|
warnings,
|
|
87
88
|
savedTo: args.projectId
|
|
88
|
-
?
|
|
89
|
+
? `${projectDataDir(args.projectId)}/vite6-to-vite7-plan.json`
|
|
89
90
|
: undefined,
|
|
90
91
|
};
|
|
91
92
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// tools/migrate-tech/core-handlers.ts — Handlers: analyze | map | plan | strategy | validate
|
|
2
2
|
import { t } from '../../i18n/index.js';
|
|
3
3
|
import { buildStackAnalysis, buildEquivalenceMap, generateMigrationPlan, recommendMigrationStrategy, generateParityValidation, } from '../../engine/migration/index.js';
|
|
4
|
+
import { projectDataDir } from '../../storage/base-store.js';
|
|
4
5
|
export function handleAnalyze(args) {
|
|
5
6
|
const data = buildStackAnalysis({
|
|
6
7
|
language: args.sourceStack ?? 'unknown',
|
|
@@ -20,7 +21,9 @@ export function handleAnalyze(args) {
|
|
|
20
21
|
data,
|
|
21
22
|
message: t('tools.migrate_tech.analyzeSuccess'),
|
|
22
23
|
warnings,
|
|
23
|
-
savedTo: args.projectId
|
|
24
|
+
savedTo: args.projectId
|
|
25
|
+
? `${projectDataDir(args.projectId)}/migration-analysis.json`
|
|
26
|
+
: undefined,
|
|
24
27
|
};
|
|
25
28
|
}
|
|
26
29
|
export function handleMap(args) {
|
|
@@ -35,7 +38,7 @@ export function handleMap(args) {
|
|
|
35
38
|
data,
|
|
36
39
|
message: t('tools.migrate_tech.mapSuccess'),
|
|
37
40
|
warnings,
|
|
38
|
-
savedTo: args.projectId ?
|
|
41
|
+
savedTo: args.projectId ? `${projectDataDir(args.projectId)}/migration-map.json` : undefined,
|
|
39
42
|
};
|
|
40
43
|
}
|
|
41
44
|
export function handlePlan(args) {
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// analyze-services | map-services | plan-services | validate-service
|
|
3
3
|
import { t } from '../../i18n/index.js';
|
|
4
4
|
import { analyzeDbSchema, buildDbMigrationMap, buildDbMigrationPlan, analyzeExternalServices, buildServiceEquivalenceMap, planServicesMigration, generateServiceValidationChecklist, } from '../../engine/migration/index.js';
|
|
5
|
+
import { projectDataDir } from '../../storage/base-store.js';
|
|
5
6
|
export function handleAnalyzeDb(args) {
|
|
6
7
|
const data = analyzeDbSchema({
|
|
7
8
|
engine: args.sourceDbEngine ?? 'postgresql',
|
|
@@ -33,7 +34,7 @@ export function handleMapDb(args) {
|
|
|
33
34
|
data,
|
|
34
35
|
message: t('tools.migrate_tech.mapDbSuccess'),
|
|
35
36
|
warnings,
|
|
36
|
-
savedTo: args.projectId ?
|
|
37
|
+
savedTo: args.projectId ? `${projectDataDir(args.projectId)}/db-migration-map.json` : undefined,
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
40
|
export function handlePlanDb(args) {
|
|
@@ -75,7 +76,9 @@ export function handleAnalyzeServices(args) {
|
|
|
75
76
|
data,
|
|
76
77
|
message: t('tools.migrate_tech.analyzeServicesSuccess'),
|
|
77
78
|
warnings,
|
|
78
|
-
savedTo: args.projectId
|
|
79
|
+
savedTo: args.projectId
|
|
80
|
+
? `${projectDataDir(args.projectId)}/services-analysis.json`
|
|
81
|
+
: undefined,
|
|
79
82
|
};
|
|
80
83
|
}
|
|
81
84
|
export function handleMapServices(args) {
|
|
@@ -93,7 +96,7 @@ export function handleMapServices(args) {
|
|
|
93
96
|
data,
|
|
94
97
|
message: t('tools.migrate_tech.mapServicesSuccess'),
|
|
95
98
|
warnings,
|
|
96
|
-
savedTo: args.projectId ?
|
|
99
|
+
savedTo: args.projectId ? `${projectDataDir(args.projectId)}/services-map.json` : undefined,
|
|
97
100
|
};
|
|
98
101
|
}
|
|
99
102
|
export function handlePlanServices(args) {
|