@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,281 +0,0 @@
|
|
|
1
|
-
// cwd-to-absolute.ts — One-shot migration of legacy <cwd>/data/projects/{id}/
|
|
2
|
-
// trees into the new absolute home (~/.planu/data/projects/{id}/) introduced
|
|
3
|
-
// in v3.3.0 (SPEC-1007).
|
|
4
|
-
//
|
|
5
|
-
// Idempotent and safe to call before every read/write entry point. Uses three
|
|
6
|
-
// short-circuits in order:
|
|
7
|
-
// 1. In-memory Set<projectId> — same session, repeat calls return immediately.
|
|
8
|
-
// 2. Sentinel file `<absolute>/.migrated-from-cwd` — across sessions.
|
|
9
|
-
// 3. Walk-up of `cwd` ancestors (max 8) for `knowledge.json` anchor.
|
|
10
|
-
//
|
|
11
|
-
// On rename we attempt the atomic `fs.rename`. When the source and destination
|
|
12
|
-
// live on different filesystems (`EXDEV`), we fall back to `fs.cp` + verify +
|
|
13
|
-
// `rm -rf legacy`. Verify failures leave the legacy tree intact.
|
|
14
|
-
//
|
|
15
|
-
// Conflict semantics: if the absolute path already holds populated data and
|
|
16
|
-
// the legacy tree also has populated data, we never auto-merge — the legacy
|
|
17
|
-
// tree is renamed to `<legacy>.legacy-<ISO_TS>` and a warning is logged.
|
|
18
|
-
import { stat, mkdir, rename, cp, rm, writeFile, open } from 'node:fs/promises';
|
|
19
|
-
import { existsSync } from 'node:fs';
|
|
20
|
-
import { join, dirname, isAbsolute } from 'node:path';
|
|
21
|
-
import { projectDataDir } from '../base-store.js';
|
|
22
|
-
const SENTINEL_FILE = '.migrated-from-cwd';
|
|
23
|
-
// LOCK_FILE is appended to absolute path as a sibling (e.g. `${absolute}.migration.lock`)
|
|
24
|
-
// to avoid creating `absolute` itself before the rename can run.
|
|
25
|
-
const LOCK_FILE = '.migration.lock';
|
|
26
|
-
const MAX_WALK_DEPTH = 8;
|
|
27
|
-
const ANCHOR_FILE = 'knowledge.json';
|
|
28
|
-
const LEGACY_SUBPATH = 'data/projects';
|
|
29
|
-
/**
|
|
30
|
-
* Per-session set of projectIds already migrated. Cleared by tests via
|
|
31
|
-
* `clearMigratedThisSession()` so each test gets a fresh slate.
|
|
32
|
-
*/
|
|
33
|
-
const migratedThisSession = new Set();
|
|
34
|
-
/** Test-only: reset the in-memory short-circuit set. */
|
|
35
|
-
export function clearMigratedThisSession() {
|
|
36
|
-
migratedThisSession.clear();
|
|
37
|
-
}
|
|
38
|
-
async function pathExists(p) {
|
|
39
|
-
try {
|
|
40
|
-
await stat(p);
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
async function fileExists(p) {
|
|
48
|
-
try {
|
|
49
|
-
const s = await stat(p);
|
|
50
|
-
return s.isFile();
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return false;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Walk upward from `startDir` looking for `<dir>/data/projects/<id>/knowledge.json`.
|
|
58
|
-
* Returns the matched legacy data dir (`<dir>/data/projects/<id>`), or null.
|
|
59
|
-
*/
|
|
60
|
-
async function walkUpForLegacy(startDir, projectId) {
|
|
61
|
-
if (!isAbsolute(startDir)) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
let current = startDir;
|
|
65
|
-
for (let i = 0; i < MAX_WALK_DEPTH; i++) {
|
|
66
|
-
const candidate = join(current, LEGACY_SUBPATH, projectId);
|
|
67
|
-
if (await fileExists(join(candidate, ANCHOR_FILE))) {
|
|
68
|
-
return candidate;
|
|
69
|
-
}
|
|
70
|
-
const parent = dirname(current);
|
|
71
|
-
if (parent === current) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
current = parent;
|
|
75
|
-
}
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
async function writeSentinel(absolute) {
|
|
79
|
-
await mkdir(absolute, { recursive: true });
|
|
80
|
-
await writeFile(join(absolute, SENTINEL_FILE), new Date().toISOString(), 'utf-8');
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Acquire an exclusive lock by opening LOCK_FILE with O_CREAT|O_EXCL. The lock
|
|
84
|
-
* is a sibling file `<absolute>.migration.lock`, so we never create `<absolute>`
|
|
85
|
-
* itself prematurely (rename(legacy, absolute) must operate on a non-existing
|
|
86
|
-
* destination). Returns a release function. If the lock is already held, polls
|
|
87
|
-
* every 100ms up to 5s.
|
|
88
|
-
*/
|
|
89
|
-
async function acquireLock(absolute) {
|
|
90
|
-
const lockPath = `${absolute}${LOCK_FILE}`;
|
|
91
|
-
await mkdir(dirname(absolute), { recursive: true });
|
|
92
|
-
const deadline = Date.now() + 5000;
|
|
93
|
-
while (Date.now() < deadline) {
|
|
94
|
-
try {
|
|
95
|
-
const fh = await open(lockPath, 'wx');
|
|
96
|
-
await fh.close();
|
|
97
|
-
return async () => {
|
|
98
|
-
try {
|
|
99
|
-
await rm(lockPath, { force: true });
|
|
100
|
-
}
|
|
101
|
-
catch {
|
|
102
|
-
// Best-effort
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
if (err instanceof Error &&
|
|
108
|
-
'code' in err &&
|
|
109
|
-
err.code === 'EEXIST') {
|
|
110
|
-
await new Promise((r) => setTimeout(r, 100));
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
throw err;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// Timed out — assume the other writer crashed; force-release and retry once.
|
|
117
|
-
try {
|
|
118
|
-
await rm(lockPath, { force: true });
|
|
119
|
-
}
|
|
120
|
-
catch {
|
|
121
|
-
// ignore
|
|
122
|
-
}
|
|
123
|
-
const fh = await open(lockPath, 'wx');
|
|
124
|
-
await fh.close();
|
|
125
|
-
return async () => {
|
|
126
|
-
try {
|
|
127
|
-
await rm(lockPath, { force: true });
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
// ignore
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
function isExdevError(err) {
|
|
135
|
-
return err instanceof Error && 'code' in err && err.code === 'EXDEV';
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Move a legacy `<cwd>/data/projects/<id>/` tree into the absolute home for
|
|
139
|
-
* `projectId`. Idempotent across calls and processes.
|
|
140
|
-
*
|
|
141
|
-
* Test isolation: when PLANU_PROJECT_DATA_DIR is assigned to a fresh tmp dir
|
|
142
|
-
* (as in `tests/setup.ts`), this migration walks `cwd` from the test's
|
|
143
|
-
* directory and finds nothing — returns `noop` immediately.
|
|
144
|
-
*/
|
|
145
|
-
export async function migrateLegacyDataDir(projectId, cwd = process.cwd()) {
|
|
146
|
-
// Reject obviously invalid input — projectDataDir already validates, but we
|
|
147
|
-
// want a typed result rather than a thrown error reaching callers.
|
|
148
|
-
if (!projectId || projectId.includes('..') || projectId.includes('/')) {
|
|
149
|
-
return {
|
|
150
|
-
status: 'error',
|
|
151
|
-
legacyPath: null,
|
|
152
|
-
absolutePath: '',
|
|
153
|
-
reason: `Invalid projectId: "${projectId}"`,
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
const absolute = projectDataDir(projectId);
|
|
157
|
-
// 1. In-memory short-circuit.
|
|
158
|
-
if (migratedThisSession.has(projectId)) {
|
|
159
|
-
return { status: 'noop', legacyPath: null, absolutePath: absolute };
|
|
160
|
-
}
|
|
161
|
-
// 2. Sentinel short-circuit (cross-session).
|
|
162
|
-
if (existsSync(join(absolute, SENTINEL_FILE))) {
|
|
163
|
-
migratedThisSession.add(projectId);
|
|
164
|
-
return { status: 'noop', legacyPath: null, absolutePath: absolute };
|
|
165
|
-
}
|
|
166
|
-
// 3. Walk up from cwd looking for legacy.
|
|
167
|
-
let legacyPath;
|
|
168
|
-
try {
|
|
169
|
-
legacyPath = await walkUpForLegacy(cwd, projectId);
|
|
170
|
-
}
|
|
171
|
-
catch (err) {
|
|
172
|
-
return {
|
|
173
|
-
status: 'error',
|
|
174
|
-
legacyPath: null,
|
|
175
|
-
absolutePath: absolute,
|
|
176
|
-
reason: `Walk-up failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
// No legacy → first-time install. Mark with sentinel so we never re-walk.
|
|
180
|
-
if (legacyPath === null) {
|
|
181
|
-
try {
|
|
182
|
-
await writeSentinel(absolute);
|
|
183
|
-
}
|
|
184
|
-
catch {
|
|
185
|
-
// Best-effort: the absence of a sentinel just means we re-walk next call.
|
|
186
|
-
}
|
|
187
|
-
migratedThisSession.add(projectId);
|
|
188
|
-
return { status: 'noop', legacyPath: null, absolutePath: absolute };
|
|
189
|
-
}
|
|
190
|
-
// 4. Acquire lock and re-check sentinel inside the critical section.
|
|
191
|
-
let release;
|
|
192
|
-
try {
|
|
193
|
-
release = await acquireLock(absolute);
|
|
194
|
-
}
|
|
195
|
-
catch (err) {
|
|
196
|
-
return {
|
|
197
|
-
status: 'error',
|
|
198
|
-
legacyPath,
|
|
199
|
-
absolutePath: absolute,
|
|
200
|
-
reason: `Lock acquisition failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
try {
|
|
204
|
-
if (existsSync(join(absolute, SENTINEL_FILE))) {
|
|
205
|
-
migratedThisSession.add(projectId);
|
|
206
|
-
return { status: 'noop', legacyPath, absolutePath: absolute };
|
|
207
|
-
}
|
|
208
|
-
const absoluteHasContent = await fileExists(join(absolute, ANCHOR_FILE));
|
|
209
|
-
if (absoluteHasContent) {
|
|
210
|
-
return await runConflictBranch(projectId, legacyPath, absolute);
|
|
211
|
-
}
|
|
212
|
-
return await runHappyPath(projectId, legacyPath, absolute);
|
|
213
|
-
}
|
|
214
|
-
finally {
|
|
215
|
-
await release();
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
async function runConflictBranch(projectId, legacyPath, absolute) {
|
|
219
|
-
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
220
|
-
const renamed = `${legacyPath}.legacy-${ts}`;
|
|
221
|
-
try {
|
|
222
|
-
await rename(legacyPath, renamed);
|
|
223
|
-
}
|
|
224
|
-
catch (err) {
|
|
225
|
-
return {
|
|
226
|
-
status: 'error',
|
|
227
|
-
legacyPath,
|
|
228
|
-
absolutePath: absolute,
|
|
229
|
-
reason: `Conflict rename failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
230
|
-
};
|
|
231
|
-
}
|
|
232
|
-
console.warn(`[Planu] Migration conflict: legacy ${legacyPath} renamed to ${renamed}; absolute path retained as canonical.`);
|
|
233
|
-
await writeSentinel(absolute);
|
|
234
|
-
migratedThisSession.add(projectId);
|
|
235
|
-
return {
|
|
236
|
-
status: 'conflict',
|
|
237
|
-
legacyPath,
|
|
238
|
-
absolutePath: absolute,
|
|
239
|
-
reason: `Both legacy and absolute had populated content; legacy renamed to ${renamed}`,
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
async function runHappyPath(projectId, legacyPath, absolute) {
|
|
243
|
-
await mkdir(dirname(absolute), { recursive: true });
|
|
244
|
-
try {
|
|
245
|
-
await rename(legacyPath, absolute);
|
|
246
|
-
}
|
|
247
|
-
catch (err) {
|
|
248
|
-
if (!isExdevError(err)) {
|
|
249
|
-
return {
|
|
250
|
-
status: 'error',
|
|
251
|
-
legacyPath,
|
|
252
|
-
absolutePath: absolute,
|
|
253
|
-
reason: `Rename failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
await cp(legacyPath, absolute, { recursive: true, errorOnExist: false });
|
|
257
|
-
if (!(await fileExists(join(absolute, ANCHOR_FILE)))) {
|
|
258
|
-
return {
|
|
259
|
-
status: 'error',
|
|
260
|
-
legacyPath,
|
|
261
|
-
absolutePath: absolute,
|
|
262
|
-
reason: 'Cross-filesystem copy verification failed; legacy tree preserved',
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
await rm(legacyPath, { recursive: true, force: true });
|
|
266
|
-
}
|
|
267
|
-
await writeSentinel(absolute);
|
|
268
|
-
migratedThisSession.add(projectId);
|
|
269
|
-
return { status: 'migrated', legacyPath, absolutePath: absolute };
|
|
270
|
-
}
|
|
271
|
-
// Re-export constants used by callers and tests.
|
|
272
|
-
export const MIGRATION_INTERNALS = Object.freeze({
|
|
273
|
-
SENTINEL_FILE,
|
|
274
|
-
LOCK_FILE,
|
|
275
|
-
MAX_WALK_DEPTH,
|
|
276
|
-
ANCHOR_FILE,
|
|
277
|
-
LEGACY_SUBPATH,
|
|
278
|
-
});
|
|
279
|
-
// pathExists is an internal helper; export only when needed in tests.
|
|
280
|
-
export const __test = { pathExists };
|
|
281
|
-
//# sourceMappingURL=cwd-to-absolute.js.map
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { PriorDecisionLink } from '../../../types/prior-decisions.js';
|
|
2
|
-
/**
|
|
3
|
-
* Find prior decisions relevant to the new spec (AC1/AC2).
|
|
4
|
-
*
|
|
5
|
-
* Returns an empty array when:
|
|
6
|
-
* - No decisions have been logged (AC4 — omit when empty)
|
|
7
|
-
* - Any storage or search error occurs (best-effort, never blocks)
|
|
8
|
-
*
|
|
9
|
-
* @param projectId - hashed project identifier
|
|
10
|
-
* @param description - spec description + title (combined query text)
|
|
11
|
-
* @param tags - spec tags appended to the query for richer overlap
|
|
12
|
-
*/
|
|
13
|
-
export declare function runPriorDecisionsHint(projectId: string, description: string, tags: string[]): Promise<PriorDecisionLink[]>;
|
|
14
|
-
//# sourceMappingURL=prior-decisions-hint.d.ts.map
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// tools/create-spec/adapters/prior-decisions-hint.ts — SPEC-615
|
|
2
|
-
// Best-effort adapter: searches logged decisions for keyword overlap with the
|
|
3
|
-
// new spec and returns formatted prior-decision links (AC1/AC2/AC4).
|
|
4
|
-
import { getDecisions } from '../../../storage/decision-store.js';
|
|
5
|
-
import { searchPriorDecisions } from '../../../engine/prior-decisions/index.js';
|
|
6
|
-
/**
|
|
7
|
-
* Find prior decisions relevant to the new spec (AC1/AC2).
|
|
8
|
-
*
|
|
9
|
-
* Returns an empty array when:
|
|
10
|
-
* - No decisions have been logged (AC4 — omit when empty)
|
|
11
|
-
* - Any storage or search error occurs (best-effort, never blocks)
|
|
12
|
-
*
|
|
13
|
-
* @param projectId - hashed project identifier
|
|
14
|
-
* @param description - spec description + title (combined query text)
|
|
15
|
-
* @param tags - spec tags appended to the query for richer overlap
|
|
16
|
-
*/
|
|
17
|
-
export async function runPriorDecisionsHint(projectId, description, tags) {
|
|
18
|
-
try {
|
|
19
|
-
const decisions = await getDecisions(projectId);
|
|
20
|
-
if (decisions.length === 0) {
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
23
|
-
const query = tags.length > 0 ? `${description} ${tags.join(' ')}` : description;
|
|
24
|
-
return searchPriorDecisions(query, decisions);
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=prior-decisions-hint.js.map
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Locations where an ancestor `data/projects/<projectId>/` directory was
|
|
3
|
-
* found. Empty array means no ancestor data exists.
|
|
4
|
-
*/
|
|
5
|
-
export interface AncestorDataReport {
|
|
6
|
-
/** Hits found by walking up from the projectPath itself. */
|
|
7
|
-
fromProjectPath: string[];
|
|
8
|
-
/** Hits found by walking up from process.cwd(). */
|
|
9
|
-
fromCwd: string[];
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Scan for ancestor `data/projects/<projectId>/` dirs above projectPath and cwd.
|
|
13
|
-
* Returns deduplicated absolute paths (no double-counting when projectPath and
|
|
14
|
-
* cwd share an ancestor).
|
|
15
|
-
*/
|
|
16
|
-
export declare function detectAncestorDataDirs(projectPath: string, projectId: string, cwd?: string): Promise<AncestorDataReport>;
|
|
17
|
-
/**
|
|
18
|
-
* Build a single human-readable warning line summarizing every ancestor data
|
|
19
|
-
* dir hit. Returns null when no warning is needed.
|
|
20
|
-
*/
|
|
21
|
-
export declare function buildAncestorDataWarning(report: AncestorDataReport): string | null;
|
|
22
|
-
//# sourceMappingURL=ancestor-data-detector.d.ts.map
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
// tools/init-project/ancestor-data-detector.ts
|
|
2
|
-
//
|
|
3
|
-
// Detects existing `data/projects/<id>/` directories in ancestors of the
|
|
4
|
-
// projectPath and in ancestors of the current cwd. When such a dir exists,
|
|
5
|
-
// init_project would otherwise create a parallel, divergent data root in the
|
|
6
|
-
// new cwd-relative location — splitting the project state across two
|
|
7
|
-
// physical paths and confusing every downstream tool.
|
|
8
|
-
//
|
|
9
|
-
// This helper is read-only: it only reports findings. The handler decides
|
|
10
|
-
// whether to surface them as warnings or block.
|
|
11
|
-
import { stat } from 'node:fs/promises';
|
|
12
|
-
import { dirname, isAbsolute, join } from 'node:path';
|
|
13
|
-
const MAX_WALK_DEPTH = 8;
|
|
14
|
-
async function isExistingDir(p) {
|
|
15
|
-
try {
|
|
16
|
-
const s = await stat(p);
|
|
17
|
-
return s.isDirectory();
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
async function walkUpForDir(startDir, relative) {
|
|
24
|
-
if (!isAbsolute(startDir)) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
let current = startDir;
|
|
28
|
-
for (let i = 0; i < MAX_WALK_DEPTH; i++) {
|
|
29
|
-
const candidate = join(current, relative);
|
|
30
|
-
if (await isExistingDir(candidate)) {
|
|
31
|
-
return candidate;
|
|
32
|
-
}
|
|
33
|
-
const parent = dirname(current);
|
|
34
|
-
if (parent === current) {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
current = parent;
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Scan for ancestor `data/projects/<projectId>/` dirs above projectPath and cwd.
|
|
43
|
-
* Returns deduplicated absolute paths (no double-counting when projectPath and
|
|
44
|
-
* cwd share an ancestor).
|
|
45
|
-
*/
|
|
46
|
-
export async function detectAncestorDataDirs(projectPath, projectId, cwd = process.cwd()) {
|
|
47
|
-
const subPath = join('data', 'projects', projectId);
|
|
48
|
-
const seen = new Set();
|
|
49
|
-
const fromProjectPath = [];
|
|
50
|
-
const cursor = isAbsolute(projectPath) ? dirname(projectPath) : null;
|
|
51
|
-
if (cursor !== null) {
|
|
52
|
-
const hit = await walkUpForDir(cursor, subPath);
|
|
53
|
-
if (hit !== null && !seen.has(hit)) {
|
|
54
|
-
seen.add(hit);
|
|
55
|
-
fromProjectPath.push(hit);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
const fromCwd = [];
|
|
59
|
-
if (cwd !== projectPath) {
|
|
60
|
-
const hit = await walkUpForDir(cwd, subPath);
|
|
61
|
-
if (hit !== null && !seen.has(hit)) {
|
|
62
|
-
seen.add(hit);
|
|
63
|
-
fromCwd.push(hit);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return { fromProjectPath, fromCwd };
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Build a single human-readable warning line summarizing every ancestor data
|
|
70
|
-
* dir hit. Returns null when no warning is needed.
|
|
71
|
-
*/
|
|
72
|
-
export function buildAncestorDataWarning(report) {
|
|
73
|
-
const all = [...report.fromProjectPath, ...report.fromCwd];
|
|
74
|
-
if (all.length === 0) {
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
const list = all.map((p) => ` • ${p}`).join('\n');
|
|
78
|
-
return (`Existing Planu data found in ancestor directories — this project's state may be split across multiple locations:\n${list}\n` +
|
|
79
|
-
`If specs go missing, copy the contents into <projectPath>/data/projects/<id>/ and reopen Claude Code from the project root.`);
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=ancestor-data-detector.js.map
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { projectDataDir, readJson, writeJson } from '../../storage/base-store.js';
|
|
3
|
-
export async function recordForceDoneBypass(specId, projectId, reason, failingItems, warningItems) {
|
|
4
|
-
try {
|
|
5
|
-
const logPath = `${projectDataDir(projectId)}/force-bypass-log.json`;
|
|
6
|
-
const entries = await readJson(logPath, []);
|
|
7
|
-
entries.push({
|
|
8
|
-
id: randomUUID(),
|
|
9
|
-
timestamp: new Date().toISOString(),
|
|
10
|
-
action: 'force_done_bypass',
|
|
11
|
-
specId,
|
|
12
|
-
projectId,
|
|
13
|
-
reason,
|
|
14
|
-
failingItems,
|
|
15
|
-
warningItems,
|
|
16
|
-
});
|
|
17
|
-
await writeJson(logPath, entries);
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
// Best effort: audit storage failure must not hide the original gate result.
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=force-done-audit.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export type CwdMigrationStatus = 'noop' | 'migrated' | 'conflict' | 'error';
|
|
2
|
-
export interface CwdMigrationResult {
|
|
3
|
-
status: CwdMigrationStatus;
|
|
4
|
-
legacyPath: string | null;
|
|
5
|
-
absolutePath: string;
|
|
6
|
-
reason?: string;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=cwd-to-absolute.d.ts.map
|