@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,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
3
|
-
// engine/execution-plan/desktop-distribution.ts — SPEC-014b
|
|
4
|
-
// Distribution phase generator for desktop release specs (Electron, Tauri, .NET).
|
|
5
|
-
// SRP: single responsibility — desktop app release pipeline steps.
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
6
2
|
/**
|
|
7
3
|
* Returns true if the spec is a desktop release spec (based on tags, title, or type).
|
|
8
4
|
*/
|
|
@@ -11,7 +7,7 @@ export function isDesktopReleaseSpec(spec) {
|
|
|
11
7
|
return (lower.includes('release') ||
|
|
12
8
|
lower.includes('distribut') ||
|
|
13
9
|
lower.includes('publish') ||
|
|
14
|
-
lower.includes('electron') ||
|
|
10
|
+
lower.includes(technologyValue('technology-electron-88b1de')) ||
|
|
15
11
|
lower.includes('tauri') ||
|
|
16
12
|
lower.includes('dotnet') ||
|
|
17
13
|
spec.type === 'infra');
|
|
@@ -24,7 +20,7 @@ export function generateDesktopDistributionPhase(spec, startOrder) {
|
|
|
24
20
|
const steps = [];
|
|
25
21
|
let order = startOrder;
|
|
26
22
|
const lower = `${spec.title} ${spec.tags.join(' ')}`.toLowerCase();
|
|
27
|
-
const isElectron = lower.includes('electron');
|
|
23
|
+
const isElectron = lower.includes(technologyValue('technology-electron-88b1de'));
|
|
28
24
|
const isTauri = lower.includes('tauri');
|
|
29
25
|
const isDotNet = lower.includes('dotnet') || lower.includes('.net');
|
|
30
26
|
// Step 1: Platform-specific build
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
3
|
-
// engine/execution-plan/mobile-distribution.ts — SPEC-013
|
|
4
|
-
// Distribution phase orchestrator for iOS/Android/Flutter/ReactNative/Expo release specs.
|
|
5
|
-
// SRP: detects platform + delegates step generation to platform-specific modules.
|
|
6
|
-
// OCP: new platforms add a new file in mobile-dist/ — no changes to this file.
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
7
2
|
import { generateNativeDistributionPhase } from './mobile-dist/native-steps.js';
|
|
8
3
|
import { generateFlutterDistributionPhase } from './mobile-dist/flutter-steps.js';
|
|
9
4
|
import { generateExpoDistributionPhase } from './mobile-dist/expo-steps.js';
|
|
@@ -15,8 +10,8 @@ import { generateReactNativeDistributionPhase } from './mobile-dist/rn-steps.js'
|
|
|
15
10
|
*/
|
|
16
11
|
export function detectCrossPlatformKind(spec) {
|
|
17
12
|
const lower = `${spec.title} ${spec.tags.join(' ')}`.toLowerCase();
|
|
18
|
-
if (lower.includes('flutter')) {
|
|
19
|
-
return 'flutter';
|
|
13
|
+
if (lower.includes(technologyValue('technology-flutter-be1396'))) {
|
|
14
|
+
return technologyValue('technology-flutter-be1396');
|
|
20
15
|
}
|
|
21
16
|
if (lower.includes('expo')) {
|
|
22
17
|
return 'expo';
|
|
@@ -43,7 +38,7 @@ export function isMobileDistributionSpec(spec) {
|
|
|
43
38
|
*/
|
|
44
39
|
export function generateMobileDistributionPhase(spec, startOrder) {
|
|
45
40
|
const crossPlatform = detectCrossPlatformKind(spec);
|
|
46
|
-
if (crossPlatform === 'flutter') {
|
|
41
|
+
if (crossPlatform === technologyValue('technology-flutter-be1396')) {
|
|
47
42
|
return generateFlutterDistributionPhase(startOrder);
|
|
48
43
|
}
|
|
49
44
|
if (crossPlatform === 'expo') {
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// SRP: each function generates steps for one phase of the implementation plan.
|
|
3
|
-
// OCP: new phases can be added without modifying the dispatcher in generate-execution-plan.ts.
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
4
2
|
import { inferDataLayerFiles, inferServiceFiles, inferApiFiles, inferPageFiles, inferComponentFiles, } from './plan-utils.js';
|
|
5
3
|
export { generateTestingPhase, generateIntegrationPhase } from './phases-b.js';
|
|
6
4
|
export function generateSetupPhase(spec, knowledge, startOrder) {
|
|
@@ -16,7 +14,8 @@ export function generateSetupPhase(spec, knowledge, startOrder) {
|
|
|
16
14
|
estimatedMinutes: 2,
|
|
17
15
|
canRollback: true,
|
|
18
16
|
});
|
|
19
|
-
if (knowledge.language === 'typescript' ||
|
|
17
|
+
if (knowledge.language === technologyValue('technology-typescript-969545') ||
|
|
18
|
+
knowledge.language === 'javascript') {
|
|
20
19
|
steps.push({
|
|
21
20
|
order: order++,
|
|
22
21
|
title: 'Define types and interfaces',
|
|
@@ -156,7 +155,7 @@ export function generateUIPhase(spec, knowledge, content, startOrder) {
|
|
|
156
155
|
const steps = [];
|
|
157
156
|
let order = startOrder;
|
|
158
157
|
const lower = content.toLowerCase();
|
|
159
|
-
const framework = knowledge.framework ?? 'react';
|
|
158
|
+
const framework = knowledge.framework ?? technologyValue('technology-react-275976');
|
|
160
159
|
steps.push({
|
|
161
160
|
order: order++,
|
|
162
161
|
title: 'Create page layout and routing',
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
3
2
|
// engine/execution-plan/plan-utils.ts — Utilities for execution plan generation
|
|
4
3
|
// Critical path analysis, parallelization detection, and file inference helpers.
|
|
5
4
|
import { readFile } from 'node:fs/promises';
|
|
@@ -48,7 +47,7 @@ export function inferServiceFiles(spec, knowledge) {
|
|
|
48
47
|
export function inferApiFiles(spec, knowledge) {
|
|
49
48
|
const firstContract = knowledge.apiContracts[0];
|
|
50
49
|
const apiType = firstContract ? firstContract.type : 'rest';
|
|
51
|
-
const base = apiType === 'trpc' ? 'src/server/routers' : 'src/routes';
|
|
50
|
+
const base = apiType === technologyValue('technology-trpc-7a75ed') ? 'src/server/routers' : 'src/routes';
|
|
52
51
|
return [`${base}/${spec.slug}.ts`];
|
|
53
52
|
}
|
|
54
53
|
export function inferPageFiles(spec, knowledge) {
|
|
@@ -56,13 +55,17 @@ export function inferPageFiles(spec, knowledge) {
|
|
|
56
55
|
if (framework.includes('next')) {
|
|
57
56
|
return [`app/${spec.slug}/page.tsx`];
|
|
58
57
|
}
|
|
59
|
-
if (framework.includes('nuxt')) {
|
|
58
|
+
if (framework.includes(technologyValue('technology-nuxt-22c407'))) {
|
|
60
59
|
return [`pages/${spec.slug}.vue`];
|
|
61
60
|
}
|
|
62
61
|
return [`src/pages/${spec.slug}.tsx`];
|
|
63
62
|
}
|
|
64
63
|
export function inferComponentFiles(spec, knowledge) {
|
|
65
|
-
const ext = (knowledge.framework ?? '')
|
|
64
|
+
const ext = (knowledge.framework ?? '')
|
|
65
|
+
.toLowerCase()
|
|
66
|
+
.includes(technologyValue('technology-vue-564382'))
|
|
67
|
+
? technologyValue('technology-vue-564382')
|
|
68
|
+
: 'tsx';
|
|
66
69
|
return [`src/components/${spec.slug}/${spec.slug}.${ext}`];
|
|
67
70
|
}
|
|
68
71
|
// --- Spec content reader ---
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// engine/facilitate/context-loader.ts — SPEC-264 Loads project context from disk
|
|
3
3
|
import { readdir, readFile } from 'node:fs/promises';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import {
|
|
5
|
+
import { hashProjectPath, projectDataDir } from '../../storage/base-store.js';
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
// Internal helpers
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
@@ -39,12 +39,6 @@ function parseFrontmatter(content) {
|
|
|
39
39
|
}
|
|
40
40
|
return result;
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
43
|
-
* Compute project hash the same way base-store does (SHA-256, first 16 chars).
|
|
44
|
-
*/
|
|
45
|
-
function hashProjectPath(projectPath) {
|
|
46
|
-
return createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
|
|
47
|
-
}
|
|
48
42
|
/**
|
|
49
43
|
* Check if two sets of keywords overlap (case-insensitive).
|
|
50
44
|
*/
|
|
@@ -90,8 +84,8 @@ async function loadCheckpoint(checkpointFile) {
|
|
|
90
84
|
*/
|
|
91
85
|
export async function loadContext(projectPath, keywords) {
|
|
92
86
|
const projectId = hashProjectPath(projectPath);
|
|
93
|
-
const specsFile = join(
|
|
94
|
-
const checkpointFile = join(
|
|
87
|
+
const specsFile = join(projectDataDir(projectId), 'specs.json');
|
|
88
|
+
const checkpointFile = join(projectDataDir(projectId), 'session-state.json');
|
|
95
89
|
const specs = await loadSpecsFromFile(specsFile);
|
|
96
90
|
const lastCheckpoint = await loadCheckpoint(checkpointFile);
|
|
97
91
|
const activeSpecs = specs.filter((s) => ACTIVE_STATUSES.has(s.status));
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
3
2
|
// engine/figma/code-connect-fetcher.ts — Figma Code Connect / Dev Resources (SPEC-426)
|
|
4
3
|
const FIGMA_API_BASE = 'https://api.figma.com/v1';
|
|
5
4
|
// ---------------------------------------------------------------------------
|
|
@@ -7,14 +6,16 @@ const FIGMA_API_BASE = 'https://api.figma.com/v1';
|
|
|
7
6
|
// ---------------------------------------------------------------------------
|
|
8
7
|
function inferFramework(url) {
|
|
9
8
|
const lower = url.toLowerCase();
|
|
10
|
-
if (lower.includes('react')
|
|
11
|
-
|
|
9
|
+
if (lower.includes(technologyValue('technology-react-275976')) ||
|
|
10
|
+
lower.includes('jsx') ||
|
|
11
|
+
lower.includes('tsx')) {
|
|
12
|
+
return technologyValue('technology-react-275976');
|
|
12
13
|
}
|
|
13
|
-
if (lower.includes('vue')) {
|
|
14
|
-
return 'vue';
|
|
14
|
+
if (lower.includes(technologyValue('technology-vue-564382'))) {
|
|
15
|
+
return technologyValue('technology-vue-564382');
|
|
15
16
|
}
|
|
16
|
-
if (lower.includes('angular')) {
|
|
17
|
-
return 'angular';
|
|
17
|
+
if (lower.includes(technologyValue('technology-angular-a39f89'))) {
|
|
18
|
+
return technologyValue('technology-angular-a39f89');
|
|
18
19
|
}
|
|
19
20
|
if (lower.includes('swift') || lower.includes('ios')) {
|
|
20
21
|
return 'ios';
|
|
@@ -4,13 +4,13 @@ import type { FsHookConfig, FsHooksConfig, FsHookTriggerEvent, FsHookResult } fr
|
|
|
4
4
|
*/
|
|
5
5
|
export declare function getDefaultHooksConfig(): FsHooksConfig;
|
|
6
6
|
/**
|
|
7
|
-
* Loads the hooks configuration from
|
|
7
|
+
* Loads the hooks configuration from `planu/hooks.json` in the given project path.
|
|
8
8
|
* Returns the default config if the file does not exist.
|
|
9
9
|
*/
|
|
10
10
|
export declare function loadHooksConfig(projectPath: string): Promise<FsHooksConfig>;
|
|
11
11
|
/**
|
|
12
|
-
* Saves the hooks configuration to
|
|
13
|
-
* Creates the
|
|
12
|
+
* Saves the hooks configuration to `planu/hooks.json` in the given project path.
|
|
13
|
+
* Creates the `planu` directory if it does not exist.
|
|
14
14
|
*/
|
|
15
15
|
export declare function saveHooksConfig(projectPath: string, config: FsHooksConfig): Promise<void>;
|
|
16
16
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// engine/filesystem-watcher/index.ts — SPEC-329: Filesystem watcher engine
|
|
3
3
|
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
const HOOKS_FILE = '
|
|
5
|
+
const HOOKS_FILE = 'planu/hooks.json';
|
|
6
6
|
/**
|
|
7
7
|
* Returns the default hooks configuration (disabled with no hooks).
|
|
8
8
|
*/
|
|
@@ -10,7 +10,7 @@ export function getDefaultHooksConfig() {
|
|
|
10
10
|
return { enabled: false, hooks: [] };
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Loads the hooks configuration from
|
|
13
|
+
* Loads the hooks configuration from `planu/hooks.json` in the given project path.
|
|
14
14
|
* Returns the default config if the file does not exist.
|
|
15
15
|
*/
|
|
16
16
|
export async function loadHooksConfig(projectPath) {
|
|
@@ -24,11 +24,11 @@ export async function loadHooksConfig(projectPath) {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Saves the hooks configuration to
|
|
28
|
-
* Creates the
|
|
27
|
+
* Saves the hooks configuration to `planu/hooks.json` in the given project path.
|
|
28
|
+
* Creates the `planu` directory if it does not exist.
|
|
29
29
|
*/
|
|
30
30
|
export async function saveHooksConfig(projectPath, config) {
|
|
31
|
-
const dir = join(projectPath, '
|
|
31
|
+
const dir = join(projectPath, 'planu');
|
|
32
32
|
await mkdir(dir, { recursive: true });
|
|
33
33
|
const filePath = join(projectPath, HOOKS_FILE);
|
|
34
34
|
await writeFile(filePath, JSON.stringify(config, null, 2), 'utf-8');
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
1
|
+
import { technologyValue } from './technology-registry.js';
|
|
3
2
|
// Planu — Framework, ORM, and database detection
|
|
4
3
|
import { join } from 'node:path';
|
|
5
4
|
import { fileExists, hasAnyFile, collectDependencies, readJsonFile } from './detection-utils.js';
|
|
@@ -79,12 +78,12 @@ export async function detectDatabase(projectPath, signatures) {
|
|
|
79
78
|
}
|
|
80
79
|
const KNOWN_ENGINES = new Set([
|
|
81
80
|
'postgresql',
|
|
82
|
-
'supabase',
|
|
81
|
+
technologyValue('technology-supabase-4d7594'),
|
|
83
82
|
'mysql',
|
|
84
83
|
'sqlite',
|
|
85
84
|
'mongodb',
|
|
86
85
|
'firebase',
|
|
87
|
-
'redis',
|
|
86
|
+
technologyValue('technology-redis-34fb46'),
|
|
88
87
|
'memcached',
|
|
89
88
|
'valkey',
|
|
90
89
|
'elasticsearch',
|
|
@@ -129,24 +128,24 @@ function isKnownEngine(engine) {
|
|
|
129
128
|
export async function detectOrm(projectPath) {
|
|
130
129
|
const deps = await collectDependencies(projectPath);
|
|
131
130
|
const ormMap = {
|
|
132
|
-
prisma: ['@prisma/client', 'prisma'],
|
|
131
|
+
prisma: ['@prisma/client', technologyValue('technology-prisma-99497c')],
|
|
133
132
|
drizzle: ['drizzle-orm'],
|
|
134
|
-
typeorm: ['typeorm'],
|
|
135
|
-
sequelize: ['sequelize'],
|
|
136
|
-
mongoose: ['mongoose'],
|
|
133
|
+
typeorm: [technologyValue('technology-typeorm-527d4d')],
|
|
134
|
+
sequelize: [technologyValue('technology-sequelize-d18291')],
|
|
135
|
+
mongoose: [technologyValue('technology-mongoose-4e1812')],
|
|
137
136
|
mikro: ['@mikro-orm/core'],
|
|
138
137
|
objection: ['objection'],
|
|
139
138
|
knex: ['knex'],
|
|
140
|
-
sqlalchemy: ['sqlalchemy'],
|
|
141
|
-
'django-orm': ['django'],
|
|
139
|
+
sqlalchemy: [technologyValue('technology-sqlalchemy-37f268')],
|
|
140
|
+
'django-orm': [technologyValue('technology-django-7d8a08')],
|
|
142
141
|
tortoise: ['tortoise-orm'],
|
|
143
142
|
peewee: ['peewee'],
|
|
144
143
|
gorm: ['gorm.io/gorm'],
|
|
145
144
|
ent: ['entgo.io/ent'],
|
|
146
|
-
diesel: ['diesel'],
|
|
145
|
+
diesel: [technologyValue('technology-diesel-f83cff')],
|
|
147
146
|
'sea-orm': ['sea-orm'],
|
|
148
147
|
ecto: ['ecto'],
|
|
149
|
-
'active-record': ['activerecord'],
|
|
148
|
+
'active-record': [technologyValue('technology-activerecord-97a448')],
|
|
150
149
|
eloquent: ['illuminate/database'],
|
|
151
150
|
};
|
|
152
151
|
for (const [orm, packages] of Object.entries(ormMap)) {
|
|
@@ -158,11 +157,11 @@ export async function detectOrm(projectPath) {
|
|
|
158
157
|
}
|
|
159
158
|
// Check for Prisma schema file
|
|
160
159
|
if (await hasAnyFile(projectPath, ['prisma/schema.prisma'])) {
|
|
161
|
-
return 'prisma';
|
|
160
|
+
return technologyValue('technology-prisma-99497c');
|
|
162
161
|
}
|
|
163
162
|
// Check for Drizzle config
|
|
164
163
|
if (await hasAnyFile(projectPath, ['drizzle.config.ts', 'drizzle.config.js'])) {
|
|
165
|
-
return 'drizzle';
|
|
164
|
+
return technologyValue('technology-drizzle-424f22');
|
|
166
165
|
}
|
|
167
166
|
return null;
|
|
168
167
|
}
|
|
@@ -218,7 +217,7 @@ export async function detectTestCommand(projectPath, packageManager) {
|
|
|
218
217
|
}
|
|
219
218
|
if ((await fileExists(projectPath, 'pytest.ini')) ||
|
|
220
219
|
(await fileExists(projectPath, 'pyproject.toml'))) {
|
|
221
|
-
return 'pytest';
|
|
220
|
+
return technologyValue('technology-pytest-2b0121');
|
|
222
221
|
}
|
|
223
222
|
return null;
|
|
224
223
|
}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
// engine/git/planu-autocommit.ts — Idempotent git commit helper for staged planu/ docs
|
|
2
|
-
import { execFile as execFileCb } from 'node:child_process';
|
|
3
|
-
import { promisify } from 'node:util';
|
|
4
2
|
import { access } from 'node:fs/promises';
|
|
5
3
|
import { join } from 'node:path';
|
|
6
|
-
|
|
4
|
+
import { runAbortableProcess } from '../abortable-process-runner.js';
|
|
7
5
|
export function isPlanuAutocommitEnabled() {
|
|
8
6
|
return process.env.PLANU_ENABLE_AUTOCOMMIT === 'true';
|
|
9
7
|
}
|
|
10
|
-
/** Run git
|
|
8
|
+
/** Run git through the request-aware process-group supervisor. */
|
|
11
9
|
async function runGit(cwd, args) {
|
|
12
|
-
const result = await
|
|
10
|
+
const result = await runAbortableProcess('git', args, {
|
|
13
11
|
cwd,
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
maxBufferBytes: 1024 * 1024,
|
|
13
|
+
timeoutMs: 15_000,
|
|
16
14
|
});
|
|
15
|
+
if (result.status !== 0 || result.error) {
|
|
16
|
+
throw result.error ?? new Error(result.stderr || `git exited with ${String(result.status)}`);
|
|
17
|
+
}
|
|
17
18
|
return { stdout: result.stdout, stderr: result.stderr };
|
|
18
19
|
}
|
|
19
20
|
/** Build commit message based on reason and optional specId. */
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/** O(1) probe that supports both normal repositories and worktree `.git` files. */
|
|
4
|
+
export async function hasGitMetadata(projectPath) {
|
|
5
|
+
try {
|
|
6
|
+
const metadata = await stat(join(projectPath, '.git'));
|
|
7
|
+
return metadata.isDirectory() || metadata.isFile();
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=repository-probe.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// engine/global-rules-manager.ts — Global Steering Rules manager (SPEC-351)
|
|
2
2
|
import { readFile, writeFile, readdir, unlink, mkdir } from 'node:fs/promises';
|
|
3
|
-
import { homedir } from 'node:os';
|
|
4
3
|
import { join, dirname } from 'node:path';
|
|
4
|
+
import { resolveStorageLayout } from '../storage/storage-layout.js';
|
|
5
5
|
// ---------------------------------------------------------------------------
|
|
6
6
|
// Paths
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
export function globalRulesDir() {
|
|
9
|
-
return join(
|
|
9
|
+
return join(resolveStorageLayout().config, 'global-rules');
|
|
10
10
|
}
|
|
11
11
|
function ruleFile(slug) {
|
|
12
12
|
return join(globalRulesDir(), `${slug}.md`);
|
|
@@ -50,9 +50,8 @@ function eventTypeForKind(kind) {
|
|
|
50
50
|
export async function appendArtifact(input) {
|
|
51
51
|
const { projectId, specId, kind, payload } = input;
|
|
52
52
|
const lockKey = `${projectId}:${specId}:${kind}`;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const lockHandle = await acquireLock('.', lockKey, { reason: `handoff.${kind}` });
|
|
53
|
+
const lockResourceId = `__handoff-${createHash('sha256').update(lockKey).digest('hex')}`;
|
|
54
|
+
const lockHandle = await acquireLock(projectId, lockResourceId, { reason: `handoff.${kind}` });
|
|
56
55
|
if (lockHandle === null) {
|
|
57
56
|
throw new Error(`[handoff-artifacts] Could not acquire lock for ${lockKey}`);
|
|
58
57
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { technologyValue } from '../../technology-registry.js';
|
|
1
2
|
// engine/handoff-artifacts/schemas/red-tests-handoff.ts — SPEC-750
|
|
2
3
|
// Zod schema for the red-tests handoff artifact produced by TestArchitect.
|
|
3
4
|
import { z } from 'zod';
|
|
@@ -6,7 +7,13 @@ export const RedTestsHandoffSchema = z.object({
|
|
|
6
7
|
version: z.literal(1),
|
|
7
8
|
specId: z.string().min(1),
|
|
8
9
|
testFiles: z.array(z.string()).min(1),
|
|
9
|
-
testFramework: z.enum([
|
|
10
|
+
testFramework: z.enum([
|
|
11
|
+
technologyValue('technology-vitest-a9127f'),
|
|
12
|
+
technologyValue('technology-jest-35e99f'),
|
|
13
|
+
technologyValue('technology-playwright-7827e8'),
|
|
14
|
+
technologyValue('technology-pytest-2b0121'),
|
|
15
|
+
'rspec',
|
|
16
|
+
]),
|
|
10
17
|
expectedFailures: z.array(z.string()).min(1),
|
|
11
18
|
authoredBy: z.string().min(1),
|
|
12
19
|
authoredAt: z.string().min(1),
|
|
@@ -61,6 +61,8 @@ export declare const ImplementationReportV1Schema: z.ZodObject<{
|
|
|
61
61
|
testsRun: z.ZodNumber;
|
|
62
62
|
testsPassed: z.ZodNumber;
|
|
63
63
|
completedAt: z.ZodISODateTime;
|
|
64
|
+
receiptId: z.ZodOptional<z.ZodString>;
|
|
65
|
+
receiptKey: z.ZodOptional<z.ZodString>;
|
|
64
66
|
}, z.core.$strip>;
|
|
65
67
|
export declare const ValidationReportV1Schema: z.ZodObject<{
|
|
66
68
|
schema_version: z.ZodString;
|
|
@@ -215,6 +217,8 @@ export declare const ARTIFACT_SCHEMAS: {
|
|
|
215
217
|
testsRun: z.ZodNumber;
|
|
216
218
|
testsPassed: z.ZodNumber;
|
|
217
219
|
completedAt: z.ZodISODateTime;
|
|
220
|
+
receiptId: z.ZodOptional<z.ZodString>;
|
|
221
|
+
receiptKey: z.ZodOptional<z.ZodString>;
|
|
218
222
|
}, z.core.$strip>;
|
|
219
223
|
readonly 'validation-report': z.ZodObject<{
|
|
220
224
|
schema_version: z.ZodString;
|
|
@@ -47,6 +47,11 @@ export const ImplementationReportV1Schema = z.object({
|
|
|
47
47
|
testsRun: z.number().int().min(0),
|
|
48
48
|
testsPassed: z.number().int().min(0),
|
|
49
49
|
completedAt: z.iso.datetime(),
|
|
50
|
+
receiptId: z
|
|
51
|
+
.string()
|
|
52
|
+
.regex(/^sha256:[a-f0-9]{64}$/u)
|
|
53
|
+
.optional(),
|
|
54
|
+
receiptKey: z.string().min(1).optional(),
|
|
50
55
|
});
|
|
51
56
|
export const ValidationReportV1Schema = z.object({
|
|
52
57
|
schema_version: SchemaVersion,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
2
2
|
// ---------------------------------------------------------------------------
|
|
3
3
|
// Marker helpers — used by hook-merger for idempotent injection
|
|
4
4
|
// ---------------------------------------------------------------------------
|
|
@@ -16,7 +16,7 @@ export const STACK_HOOK_TEMPLATES = {
|
|
|
16
16
|
{
|
|
17
17
|
id: 'typescript-typecheck',
|
|
18
18
|
phase: 'pre-commit',
|
|
19
|
-
stack: 'typescript',
|
|
19
|
+
stack: technologyValue('technology-typescript-969545'),
|
|
20
20
|
content: 'pnpm typecheck || exit 1',
|
|
21
21
|
description: 'TypeScript type checking',
|
|
22
22
|
},
|
|
@@ -43,7 +43,7 @@ export const STACK_HOOK_TEMPLATES = {
|
|
|
43
43
|
{
|
|
44
44
|
id: 'vitest-coverage',
|
|
45
45
|
phase: 'pre-push',
|
|
46
|
-
stack: 'vitest',
|
|
46
|
+
stack: technologyValue('technology-vitest-a9127f'),
|
|
47
47
|
content: 'pnpm test:coverage || exit 1',
|
|
48
48
|
description: 'Vitest coverage threshold check',
|
|
49
49
|
},
|
|
@@ -52,7 +52,7 @@ export const STACK_HOOK_TEMPLATES = {
|
|
|
52
52
|
{
|
|
53
53
|
id: 'jest-coverage',
|
|
54
54
|
phase: 'pre-push',
|
|
55
|
-
stack: 'jest',
|
|
55
|
+
stack: technologyValue('technology-jest-35e99f'),
|
|
56
56
|
content: 'pnpm test --coverage || exit 1',
|
|
57
57
|
description: 'Jest coverage check',
|
|
58
58
|
},
|
|
@@ -25,7 +25,7 @@ const fileHookConfigSchema = z.object({
|
|
|
25
25
|
// ---------------------------------------------------------------------------
|
|
26
26
|
// Config file paths
|
|
27
27
|
// ---------------------------------------------------------------------------
|
|
28
|
-
const HOOKS_JSON = '
|
|
28
|
+
const HOOKS_JSON = 'planu/hooks.json';
|
|
29
29
|
const PLANU_JSON = 'planu.json';
|
|
30
30
|
// ---------------------------------------------------------------------------
|
|
31
31
|
// ConfigLoader
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// engine/hooks/context-injector.ts — Reads project data and writes .planu/plan-context.md (SPEC-262)
|
|
3
3
|
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import {
|
|
5
|
+
import { hashProjectPath, projectDataDir } from '../../storage/base-store.js';
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
// Constants
|
|
8
8
|
// ---------------------------------------------------------------------------
|
|
@@ -12,16 +12,13 @@ const MAX_RECENT_DECISIONS = 5;
|
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
// Internal helpers
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
|
-
function hashProjectPath(projectPath) {
|
|
16
|
-
return createHash('sha256').update(projectPath).digest('hex').slice(0, 16);
|
|
17
|
-
}
|
|
18
15
|
/** Safely extract a string from an unknown value — returns '' when not a string */
|
|
19
16
|
function str(val) {
|
|
20
17
|
return typeof val === 'string' ? val : '';
|
|
21
18
|
}
|
|
22
19
|
async function loadSpecs(projectPath) {
|
|
23
20
|
const projectId = hashProjectPath(projectPath);
|
|
24
|
-
const specsFile = join(
|
|
21
|
+
const specsFile = join(projectDataDir(projectId), 'specs.json');
|
|
25
22
|
try {
|
|
26
23
|
const raw = await readFile(specsFile, 'utf-8');
|
|
27
24
|
return JSON.parse(raw);
|
|
@@ -32,7 +29,7 @@ async function loadSpecs(projectPath) {
|
|
|
32
29
|
}
|
|
33
30
|
async function loadDecisions(projectPath) {
|
|
34
31
|
const projectId = hashProjectPath(projectPath);
|
|
35
|
-
const decisionsFile = join(
|
|
32
|
+
const decisionsFile = join(projectDataDir(projectId), 'decisions.json');
|
|
36
33
|
try {
|
|
37
34
|
const raw = await readFile(decisionsFile, 'utf-8');
|
|
38
35
|
const data = JSON.parse(raw);
|
|
@@ -73,7 +70,7 @@ function formatDecisionSummary(d) {
|
|
|
73
70
|
*/
|
|
74
71
|
export async function injectPlanContext(projectPath, taskDescription) {
|
|
75
72
|
const md = await buildContextMarkdown(projectPath, taskDescription);
|
|
76
|
-
const planuDir = join(projectPath, '
|
|
73
|
+
const planuDir = join(projectPath, 'planu');
|
|
77
74
|
await mkdir(planuDir, { recursive: true });
|
|
78
75
|
await writeFile(join(planuDir, 'plan-context.md'), md, 'utf-8');
|
|
79
76
|
}
|
|
@@ -81,7 +81,6 @@ function maxTypeScriptWatchers() {
|
|
|
81
81
|
// ---------------------------------------------------------------------------
|
|
82
82
|
// FileWatcher
|
|
83
83
|
// ---------------------------------------------------------------------------
|
|
84
|
-
import { isNativeActive, startNativeWatcher } from '../core-bridge.js';
|
|
85
84
|
export class FileWatcher extends EventEmitter {
|
|
86
85
|
watcher = null;
|
|
87
86
|
watchers = new Set();
|
|
@@ -107,19 +106,7 @@ export class FileWatcher extends EventEmitter {
|
|
|
107
106
|
return;
|
|
108
107
|
}
|
|
109
108
|
try {
|
|
110
|
-
|
|
111
|
-
console.error('[Planu-RS] Starting high-performance Rust file watcher');
|
|
112
|
-
startNativeWatcher(this.rootDir, (err, filename) => {
|
|
113
|
-
if (err || !filename || this.closed) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
const relPath = filename.replace(this.rootDir, '').replace(/^\/+/, '');
|
|
117
|
-
void this.handleFsEvent(relPath);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this.startTypeScriptWatcher();
|
|
122
|
-
}
|
|
109
|
+
this.startTypeScriptWatcher();
|
|
123
110
|
}
|
|
124
111
|
catch (err) {
|
|
125
112
|
this.emitWatcherError(err);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { technologyValue } from './technology-registry.js';
|
|
1
2
|
// engine/hooks-reconciler.ts — Detect drift between CI/quality pipeline and git hooks.
|
|
2
3
|
// Read-only analysis by default; patchHooks() writes fixes when autoFix is enabled.
|
|
3
4
|
import { readFileSync, existsSync, readdirSync, writeFileSync } from 'node:fs';
|
|
@@ -44,15 +45,15 @@ function detectCapabilities(projectPath, pkg) {
|
|
|
44
45
|
? pkg.devDependencies
|
|
45
46
|
: {}),
|
|
46
47
|
};
|
|
47
|
-
const hasTypeScript = 'typescript' in allDeps ||
|
|
48
|
+
const hasTypeScript = technologyValue('technology-typescript-969545') in allDeps ||
|
|
48
49
|
existsSync(join(projectPath, 'tsconfig.json')) ||
|
|
49
50
|
existsSync(join(projectPath, 'tsconfig.build.json'));
|
|
50
51
|
const hasEsLint = 'eslint' in allDeps ||
|
|
51
52
|
existsSync(join(projectPath, 'eslint.config.js')) ||
|
|
52
53
|
existsSync(join(projectPath, '.eslintrc.js')) ||
|
|
53
54
|
existsSync(join(projectPath, '.eslintrc.json'));
|
|
54
|
-
const hasTestRunner = 'vitest' in allDeps ||
|
|
55
|
-
'jest' in allDeps ||
|
|
55
|
+
const hasTestRunner = technologyValue('technology-vitest-a9127f') in allDeps ||
|
|
56
|
+
technologyValue('technology-jest-35e99f') in allDeps ||
|
|
56
57
|
'mocha' in allDeps ||
|
|
57
58
|
existsSync(join(projectPath, 'vitest.config.ts')) ||
|
|
58
59
|
existsSync(join(projectPath, 'jest.config.js'));
|
|
@@ -206,7 +207,8 @@ function buildPatchCandidates(missingChecks, pkg) {
|
|
|
206
207
|
const prettierCoveredByLintStaged = lintStagedCoversPrettier(pkg);
|
|
207
208
|
const eslintCoveredByLintStaged = lintStagedCoversEslint(pkg);
|
|
208
209
|
for (const check of missingChecks) {
|
|
209
|
-
if (check.includes(
|
|
210
|
+
if (check.includes(technologyValue('technology-typescript-ed0504')) &&
|
|
211
|
+
check.includes('pre-commit')) {
|
|
210
212
|
candidates.push({ hook: 'pre-commit', line: 'pnpm typecheck', description: check });
|
|
211
213
|
}
|
|
212
214
|
else if (check.includes('ESLint') && check.includes('pre-commit')) {
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
// — must enumerate framework names by design; no detection logic to migrate.
|
|
3
|
-
// engine/infrastructure/component-mapper.ts — Map InfraSignals to InfraComponents (SPEC-171)
|
|
1
|
+
import { technologyValue } from '../technology-registry.js';
|
|
4
2
|
import { getTerraformVersion } from '../../config/version-defaults.js';
|
|
5
3
|
/** Normalize environment string to a valid key: 'dev' | 'staging' | 'prod'. Defaults to 'dev'. */
|
|
6
4
|
export function resolveEnvironment(environment) {
|
|
@@ -38,9 +36,9 @@ function resolveDatabase(technology) {
|
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
38
|
function resolveCache(technology) {
|
|
41
|
-
if (technology === 'redis') {
|
|
39
|
+
if (technology === technologyValue('technology-redis-34fb46')) {
|
|
42
40
|
return {
|
|
43
|
-
kind: 'redis',
|
|
41
|
+
kind: technologyValue('technology-redis-34fb46'),
|
|
44
42
|
name: 'redis-cache',
|
|
45
43
|
sizeByEnv: { dev: 'cache.t3.micro', staging: 'cache.t3.small', prod: 'cache.t3.medium' },
|
|
46
44
|
};
|
|
@@ -112,13 +110,13 @@ function signalToSpec(signal) {
|
|
|
112
110
|
return resolveStorage(signal.technology);
|
|
113
111
|
case 'api':
|
|
114
112
|
return resolveApi(signal.technology);
|
|
115
|
-
case 'kubernetes':
|
|
113
|
+
case technologyValue('technology-kubernetes-94abcb'):
|
|
116
114
|
return {
|
|
117
115
|
kind: 'k8s-deployment',
|
|
118
116
|
name: 'app-deployment',
|
|
119
117
|
sizeByEnv: { dev: 'small', staging: 'medium', prod: 'large' },
|
|
120
118
|
};
|
|
121
|
-
case 'railway':
|
|
119
|
+
case technologyValue('technology-railway-e34d1c'):
|
|
122
120
|
return {
|
|
123
121
|
kind: 'railway-service',
|
|
124
122
|
name: 'railway-app',
|