@planu/cli 5.3.68 → 5.3.69
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 +68 -0
- package/dist/.planu-build.json +1 -1
- package/dist/cli/commands/install.d.ts +2 -15
- package/dist/core/shared/fs.d.ts +11 -0
- package/dist/core/shared/fs.js +90 -0
- package/dist/core/shared/strings.d.ts +3 -0
- package/dist/core/shared/strings.js +13 -0
- package/dist/engine/actuals/git-analyzer.js +1 -1
- package/dist/engine/actuals/progress-parser.js +1 -3
- package/dist/engine/agent-handoff-store.js +1 -0
- package/dist/engine/agent-squad/dispatcher.js +1 -0
- package/dist/engine/agent-telemetry.js +1 -0
- package/dist/engine/auth/config.js +1 -0
- package/dist/engine/auto-updater/atomic-upgrade.js +1 -0
- package/dist/engine/auto-updater/index.js +1 -0
- package/dist/engine/autopilot/action-registry.js +20 -0
- package/dist/engine/autopilot/audit-logger.js +1 -0
- package/dist/engine/autopilot/bootstrap.js +9 -2
- package/dist/engine/autopilot/complete-loop.js +4 -0
- package/dist/engine/autopilot/crash-shield-rate-limiter.js +1 -0
- package/dist/engine/autopilot/event-bus.js +1 -0
- package/dist/engine/autopilot/state-updater.js +6 -0
- package/dist/engine/browser-validator.js +1 -3
- package/dist/engine/build-tool-detector.js +1 -8
- package/dist/engine/bundle-installer.js +2 -10
- package/dist/engine/cascade-hooks/core/append-releases.js +1 -0
- package/dist/engine/cascade-hooks/core/write-session-json.js +2 -2
- package/dist/engine/cascade-hooks/hooks/dispatch-hook-event.hook.d.ts +3 -1
- package/dist/engine/cascade-hooks/hooks/dispatch-hook-event.hook.js +12 -3
- package/dist/engine/cascade-hooks/hooks/estimate-calibration.hook.js +1 -0
- package/dist/engine/cascade-hooks/hooks/housekeeping-on-done.hook.js +2 -0
- package/dist/engine/cascade-hooks/hooks/implementing-kickoff.hook.js +5 -1
- package/dist/engine/cascade-hooks/hooks/lesson-drift.hook.js +1 -0
- package/dist/engine/cascade-hooks/hooks/orchestration-plan.hook.js +1 -0
- package/dist/engine/cascade-hooks/hooks/session-context.hook.js +4 -2
- package/dist/engine/cascade-hooks/hooks/slack-notify.hook.js +1 -0
- package/dist/engine/cascade-hooks/hooks/status-json.hook.js +2 -0
- package/dist/engine/cascade-hooks/hooks/velocity-profile.hook.js +2 -0
- package/dist/engine/cascade-hooks/runner.js +2 -0
- package/dist/engine/cascade-hooks/state-drift-detector.js +2 -0
- package/dist/engine/checkpoint/checkpoint-manager.js +2 -0
- package/dist/engine/checkpoint/policy-engine.js +1 -0
- package/dist/engine/ci-generator/stack-detector.js +2 -10
- package/dist/engine/clarification-gate/token-store.js +1 -0
- package/dist/engine/claude-config-auditor/claudemd-auditor.js +2 -10
- package/dist/engine/claude-config-auditor/settings-auditor.js +2 -10
- package/dist/engine/client-detection.js +2 -10
- package/dist/engine/compliance/auto-remediator.js +1 -0
- package/dist/engine/compliance/evidence-builder.d.ts +2 -2
- package/dist/engine/compliance/framework-catalog.d.ts +6 -6
- package/dist/engine/compliance/gap-analyzer.d.ts +2 -2
- package/dist/engine/config-health/build-tool-checker.js +1 -9
- package/dist/engine/config-health/ci-commands-collector.d.ts +2 -1
- package/dist/engine/config-health/ci-commands-collector.js +2 -9
- package/dist/engine/config-health/go-checker.js +1 -9
- package/dist/engine/config-health/mcp-config-checker.js +2 -10
- package/dist/engine/config-health/python-checker.js +1 -9
- package/dist/engine/config-health/rust-checker.js +1 -9
- package/dist/engine/config-health/ts-checker-scripts.js +1 -9
- package/dist/engine/config-health/ts-checker.js +1 -9
- package/dist/engine/context-artifacts/store.js +1 -0
- package/dist/engine/context-md-generator.js +1 -0
- package/dist/engine/context-orchestrator/index.js +2 -0
- package/dist/engine/convention-scanner/convention-parser.js +2 -9
- package/dist/engine/cost-guardrails.js +1 -0
- package/dist/engine/cost-tracking/ledger.js +1 -0
- package/dist/engine/criterion-identity.js +1 -1
- package/dist/engine/dashboard/data-loader.js +1 -0
- package/dist/engine/dashboard/drift-score.js +2 -0
- package/dist/engine/dashboard/spec-updater.d.ts +3 -1
- package/dist/engine/dashboard/spec-updater.js +9 -2
- package/dist/engine/dashboard/templates-layout.d.ts +2 -2
- package/dist/engine/dashboard/templates-layout.js +2 -9
- package/dist/engine/data-projects-gc/gc-runner.js +2 -4
- package/dist/engine/deleter/audit-logger.js +1 -0
- package/dist/engine/deleter/core.js +6 -0
- package/dist/engine/deleter/trash-manager.js +1 -0
- package/dist/engine/desktop-detector.js +1 -9
- package/dist/engine/detection-utils.d.ts +2 -1
- package/dist/engine/detection-utils.js +3 -10
- package/dist/engine/detectors/advanced-framework-detector/helpers.d.ts +3 -2
- package/dist/engine/detectors/advanced-framework-detector/helpers.js +3 -17
- package/dist/engine/detectors/cicd-detector.js +2 -10
- package/dist/engine/detectors/css-framework-detector.js +2 -10
- package/dist/engine/detectors/deployment-detector.js +3 -12
- package/dist/engine/detectors/frontend-perf-detector.js +2 -10
- package/dist/engine/detectors/gitops-detector.js +3 -11
- package/dist/engine/detectors/idp-detector.js +1 -3
- package/dist/engine/detectors/k3s-detector.js +3 -11
- package/dist/engine/detectors/llm-detector/file-readers.d.ts +2 -1
- package/dist/engine/detectors/llm-detector/file-readers.js +2 -9
- package/dist/engine/detectors/mfe-detector.js +5 -13
- package/dist/engine/detectors/monitoring-detector.js +2 -11
- package/dist/engine/detectors/monorepo-detector.d.ts +1 -0
- package/dist/engine/detectors/monorepo-detector.js +1 -10
- package/dist/engine/detectors/nomad-detector.js +3 -11
- package/dist/engine/detectors/otel-ecosystem-detectors.d.ts +2 -1
- package/dist/engine/detectors/otel-ecosystem-detectors.js +2 -10
- package/dist/engine/doc-generator/executive-summary/html-template.js +1 -7
- package/dist/engine/doc-generator/executive-summary/section-builders.js +1 -7
- package/dist/engine/doc-generator/per-spec-report/mermaid-renderer.js +1 -7
- package/dist/engine/doc-generator/per-spec-report/spec-section-builders.js +1 -7
- package/dist/engine/doc-generator/per-spec-report/technical-report.js +1 -7
- package/dist/engine/doc-generator/portal/analytics-page.js +1 -7
- package/dist/engine/doc-generator/portal/architecture-page.js +1 -7
- package/dist/engine/doc-generator/portal/changelog-page.js +1 -7
- package/dist/engine/doc-generator/portal/decision-page.js +1 -7
- package/dist/engine/doc-generator/portal/decision-timeline-builder.js +1 -7
- package/dist/engine/doc-generator/portal/kanban-view-builder.js +1 -7
- package/dist/engine/doc-generator/portal/portal-breadcrumbs.js +1 -7
- package/dist/engine/doc-generator/portal/portal-landing-cards.js +1 -7
- package/dist/engine/doc-generator/portal/portal-navbar.js +1 -7
- package/dist/engine/doc-generator/portal/portal-page-detector.d.ts +3 -0
- package/dist/engine/doc-generator/portal/portal-page-detector.js +1 -10
- package/dist/engine/doc-generator/portal/portal-regenerator.js +2 -0
- package/dist/engine/doc-generator/portal/risk-matrix-svg.js +1 -7
- package/dist/engine/doc-generator/portal/risk-page.js +1 -7
- package/dist/engine/doc-generator/portal/roadmap-page.js +1 -7
- package/dist/engine/doc-generator/proposal/proposal-gantt-builder.js +1 -7
- package/dist/engine/doc-generator/proposal/proposal-kpi-builder.js +1 -7
- package/dist/engine/doc-generator/proposal/proposal-section-builders-advanced.js +2 -8
- package/dist/engine/doc-generator/proposal/proposal-section-builders.js +1 -7
- package/dist/engine/docs-site-generator/html-templates.js +1 -7
- package/dist/engine/docs-site-generator/markdown-renderer.js +1 -7
- package/dist/engine/drift/violation-resolver.js +2 -0
- package/dist/engine/dynamic-knowledge/knowledge-cache.js +1 -0
- package/dist/engine/ecosystem-absorber/knowledge-cache.js +1 -0
- package/dist/engine/edge-db-detector.js +1 -10
- package/dist/engine/escalator/retry-counter.js +1 -0
- package/dist/engine/evidence-gates/artifact-reader.js +1 -0
- package/dist/engine/evidence-gates/evidence-autofill.js +1 -0
- package/dist/engine/evidence-gates/evidence-skeletons.js +1 -0
- package/dist/engine/evidence-gates/reconciliation-freshness.js +1 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.js +1 -0
- package/dist/engine/execution/job-runtime.js +2 -0
- package/dist/engine/execution/validate-job-executor.d.ts +1 -1
- package/dist/engine/execution/validate-job-executor.js +3 -0
- package/dist/engine/execution/validate-job-payload.js +1 -0
- package/dist/engine/execution/validate-worker-thread.js +1 -0
- package/dist/engine/facilitate/context-loader.js +1 -0
- package/dist/engine/figma/change-detector.d.ts +1 -8
- package/dist/engine/figma/code-connect-fetcher.d.ts +1 -7
- package/dist/engine/figma/design-enricher.d.ts +1 -17
- package/dist/engine/figma/design-enricher.js +0 -1
- package/dist/engine/figma/e2e-generator.d.ts +1 -23
- package/dist/engine/figma/flow-analyzer.d.ts +1 -11
- package/dist/engine/figma/frame-extractor.d.ts +1 -11
- package/dist/engine/figma/frame-extractor.js +3 -0
- package/dist/engine/figma/multi-file-manager.d.ts +1 -6
- package/dist/engine/figma/spec-generator.js +2 -0
- package/dist/engine/figma/thumbnail-fetcher.d.ts +1 -1
- package/dist/engine/figma/token-extractor.d.ts +1 -6
- package/dist/engine/figma/token-extractor.js +0 -1
- package/dist/engine/figma/version-tracker.d.ts +1 -7
- package/dist/engine/figma/version-tracker.js +0 -1
- package/dist/engine/figma/visual-qa.d.ts +5 -19
- package/dist/engine/figma/visual-qa.js +1 -2
- package/dist/engine/figma/webhook-manager.d.ts +1 -7
- package/dist/engine/frontmatter-sha/reseal.js +1 -0
- package/dist/engine/frontmatter-sha/verify-terminal.js +1 -0
- package/dist/engine/git-hook-injector.js +2 -10
- package/dist/engine/github/quality-dimensions.js +1 -3
- package/dist/engine/global-rules-manager.js +2 -3
- package/dist/engine/handoff-artifacts/implementation-review-reader.js +1 -0
- package/dist/engine/handoff-artifacts/io.js +2 -0
- package/dist/engine/handoff-packager.js +2 -1
- package/dist/engine/health/auto-fixer.js +1 -0
- package/dist/engine/hooks/context-injector.js +1 -0
- package/dist/engine/hooks-reconciler.js +1 -8
- package/dist/engine/impact-detector/index.js +2 -9
- package/dist/engine/implementation-contract/common.js +1 -3
- package/dist/engine/implementation-contract/evaluator.js +1 -3
- package/dist/engine/keyword-matcher/boundary.d.ts +2 -7
- package/dist/engine/keyword-matcher/boundary.js +2 -14
- package/dist/engine/lifecycle-reconciliation-io.js +1 -0
- package/dist/engine/lifecycle-reconciliation.js +3 -0
- package/dist/engine/local-first/detector.js +1 -9
- package/dist/engine/marketplace-fetcher/cache.js +2 -0
- package/dist/engine/marketplace-fetcher/index.js +1 -0
- package/dist/engine/mcp-config/mcp-config-writer.js +2 -10
- package/dist/engine/migrations/remove-commercial-state.js +2 -0
- package/dist/engine/mobile-detector-shared.d.ts +1 -1
- package/dist/engine/mobile-detector-shared.js +2 -9
- package/dist/engine/multi-channel-notifier.js +1 -0
- package/dist/engine/multi-teammate-review/disagreement-counter.js +1 -0
- package/dist/engine/multi-teammate-review/panel-orchestrator.js +1 -0
- package/dist/engine/onboarding-engine.js +1 -9
- package/dist/engine/permissions-merger/stack-detectors.js +2 -10
- package/dist/engine/pii-detector/core.js +1 -3
- package/dist/engine/platform-engineering/dx-analyzer.js +1 -10
- package/dist/engine/platform-engineering/idp-detector.js +2 -10
- package/dist/engine/project-dna/ai-tool-detector.js +2 -10
- package/dist/engine/project-dna/stack-detector.js +2 -10
- package/dist/engine/project-graph/builder.js +11 -2
- package/dist/engine/project-graph/cache.d.ts +5 -2
- package/dist/engine/project-graph/cache.js +174 -34
- package/dist/engine/project-graph/extractors/decision-store-extractor.js +1 -0
- package/dist/engine/project-graph/freshness-projection.js +3 -0
- package/dist/engine/project-graph/query.js +14 -11
- package/dist/engine/project-health-checker.js +2 -6
- package/dist/engine/provider-adapters/shared/spec-loader.js +1 -0
- package/dist/engine/quality-gates/gate-evaluator.js +1 -3
- package/dist/engine/react-detector.js +6 -14
- package/dist/engine/reconcile/apply-changes.js +1 -3
- package/dist/engine/registry/core.js +1 -0
- package/dist/engine/registry/loader.js +2 -0
- package/dist/engine/release/postmortem-generator.js +1 -0
- package/dist/engine/release/rollback-runner.d.ts +2 -2
- package/dist/engine/release/stuck-spec-detector.js +7 -0
- package/dist/engine/release-pipeline/release-spec-closer.js +3 -0
- package/dist/engine/rules-reconciler.d.ts +1 -1
- package/dist/engine/rules-reconciler.js +2 -9
- package/dist/engine/safety/atomic-writer.js +1 -0
- package/dist/engine/safety/cross-process-lock.js +2 -0
- package/dist/engine/safety/file-mutex.js +1 -0
- package/dist/engine/safety/lock-lease-store.js +1 -0
- package/dist/engine/safety/lock-scavenger.js +2 -0
- package/dist/engine/saga/transition-cascade.js +3 -0
- package/dist/engine/scan-project/index.js +1 -0
- package/dist/engine/scan-project/module-discoverer.js +1 -9
- package/dist/engine/schema-parity-auditor/handler-checker.js +1 -3
- package/dist/engine/schema-parity-auditor/index.js +1 -3
- package/dist/engine/schema-parity-auditor/type-checker.js +1 -3
- package/dist/engine/self-healing/strategies/coverage-fix.js +2 -10
- package/dist/engine/session-context-generator.d.ts +8 -0
- package/dist/engine/session-context-generator.js +33 -23
- package/dist/engine/session-state/session-artifact-refresher.d.ts +7 -0
- package/dist/engine/session-state/session-artifact-refresher.js +140 -0
- package/dist/engine/session-state/writer.d.ts +3 -0
- package/dist/engine/session-state/writer.js +35 -17
- package/dist/engine/shared-agent-memory.js +1 -0
- package/dist/engine/skill-adapter/index.js +3 -0
- package/dist/engine/skill-bootstrap/registry-fetcher.js +1 -0
- package/dist/engine/skill-bootstrap/skill-writer.js +2 -9
- package/dist/engine/skill-bootstrap/stack-matcher.js +1 -9
- package/dist/engine/skill-discovery/multi-agent-writer.d.ts +1 -0
- package/dist/engine/skill-discovery/multi-agent-writer.js +1 -9
- package/dist/engine/skill-generator/workflow-skill-generator.js +1 -0
- package/dist/engine/skill-registry/ttl-refresh.js +2 -0
- package/dist/engine/spec-audit/index.js +2 -0
- package/dist/engine/spec-audit/report-writer.js +1 -0
- package/dist/engine/spec-coverage/core.js +1 -0
- package/dist/engine/spec-decomposer/analyzer.js +1 -11
- package/dist/engine/spec-dependency-graph/dot-exporter.d.ts +1 -1
- package/dist/engine/spec-dependency-graph/graph-builder.d.ts +1 -20
- package/dist/engine/spec-dependency-graph/superseded-set.d.ts +1 -1
- package/dist/engine/spec-diff-engine.js +1 -7
- package/dist/engine/spec-format/read-technical-section.js +1 -3
- package/dist/engine/spec-format/replace-section.js +1 -3
- package/dist/engine/spec-format/spec-id.d.ts +9 -1
- package/dist/engine/spec-format/spec-id.js +24 -3
- package/dist/engine/spec-format/unified-spec-builder.js +1 -3
- package/dist/engine/spec-migrator/canonical-deduplicator.js +2 -0
- package/dist/engine/spec-observability/tracker.js +1 -0
- package/dist/engine/spec-registry/adapter.js +2 -10
- package/dist/engine/spec-registry/validator.d.ts +1 -0
- package/dist/engine/spec-registry/validator.js +1 -9
- package/dist/engine/spec-state-machine/transition-spec.js +1 -0
- package/dist/engine/spec-templates/custom-loader.js +1 -0
- package/dist/engine/stack-auditor/build-tool-auditor.js +1 -9
- package/dist/engine/staleness/stale-implementing.js +5 -14
- package/dist/engine/status-reconciler/index.js +4 -1
- package/dist/engine/structural-memory/helpers.js +1 -0
- package/dist/engine/supply-chain/slsa-checker.js +1 -9
- package/dist/engine/tdd-enforcer/stub-artifact-path.js +1 -0
- package/dist/engine/telemetry/health-checker.js +1 -0
- package/dist/engine/telemetry/telemetry-store.js +1 -0
- package/dist/engine/token-optimizer/response-cache.js +1 -3
- package/dist/engine/tool-groups/group-manager.js +2 -0
- package/dist/engine/update-notifier.js +1 -0
- package/dist/engine/validation/approved-spec-portability.js +1 -0
- package/dist/engine/validation/durable-validation.js +1 -0
- package/dist/engine/validation/validation-freshness.js +2 -0
- package/dist/engine/validation/validation-receipt.js +1 -0
- package/dist/engine/validation/validation-submission.d.ts +1 -1
- package/dist/engine/validation-evidence-ledger.js +1 -0
- package/dist/engine/validator/deep-code-checker.js +1 -3
- package/dist/engine/validator/executable-evidence.d.ts +1 -14
- package/dist/engine/validator/scope-resolver.d.ts +2 -2
- package/dist/engine/validator/spec-compliance-runner.d.ts +1 -31
- package/dist/engine/validator/validation-report-writer.js +1 -1
- package/dist/engine/validator.d.ts +1 -1
- package/dist/engine/validator.js +1 -0
- package/dist/engine/velocity/measure-velocity.js +2 -0
- package/dist/engine/version-resolver.js +1 -0
- package/dist/engine/workers/handlers/auto-drift.js +3 -0
- package/dist/engine/workspace-manager.js +4 -0
- package/dist/hosts/gemini/config-scaffold.js +2 -10
- package/dist/storage/approval-operation-lock.js +1 -0
- package/dist/storage/auto-promoter-config-store.js +1 -0
- package/dist/storage/autopilot-log-store.js +1 -0
- package/dist/storage/base-store.js +1 -0
- package/dist/storage/checkpoint-store.js +1 -0
- package/dist/storage/feedback-remote.js +1 -0
- package/dist/storage/gaps-log.js +1 -0
- package/dist/storage/global-projects-store.js +1 -0
- package/dist/storage/global-store.js +1 -0
- package/dist/storage/knowledge-store/sessions.js +2 -0
- package/dist/storage/migrations/canonical-storage.js +42 -18
- package/dist/storage/project-drift-store.js +1 -0
- package/dist/storage/project-identity.js +1 -0
- package/dist/storage/project-resolver.js +1 -17
- package/dist/storage/runtime-db.d.ts +2 -20
- package/dist/storage/runtime-db.js +2 -9
- package/dist/storage/semantic-index-store.js +1 -0
- package/dist/storage/sentry-store.js +1 -0
- package/dist/storage/session-state-store.js +1 -0
- package/dist/storage/spec-store.d.ts +7 -0
- package/dist/storage/spec-store.js +21 -1
- package/dist/storage/status-store/atomic-status-write.js +1 -0
- package/dist/storage/status-store/file-lock.js +1 -0
- package/dist/storage/status-store/self-healing.js +1 -0
- package/dist/storage/storage-bundle.d.ts +12 -2
- package/dist/storage/supabase-store.js +1 -0
- package/dist/storage/technology-selection-store.js +1 -0
- package/dist/storage/trash-store.d.ts +2 -4
- package/dist/storage/trash-store.js +2 -15
- package/dist/storage/vector-store/json-fallback.js +1 -0
- package/dist/storage/vector-store/migrator.js +1 -0
- package/dist/storage/vector-store/sqlite-adapter.js +1 -0
- package/dist/tools/audit-claude-config.js +1 -10
- package/dist/tools/check-readiness.js +104 -30
- package/dist/tools/clarify-requirements/multiple-choice.d.ts +3 -3
- package/dist/tools/configure-oauth-handler.js +1 -0
- package/dist/tools/create-spec-helpers.d.ts +1 -3
- package/dist/tools/create-spec-helpers.js +1 -8
- package/dist/tools/create-spec.js +1 -13
- package/dist/tools/dashboard.js +5 -0
- package/dist/tools/github-pr-handler.js +1 -0
- package/dist/tools/github-release-handler.d.ts +1 -0
- package/dist/tools/github-release-handler.js +4 -3
- package/dist/tools/graph-specs.d.ts +1 -1
- package/dist/tools/heal-spec-docs.js +1 -3
- package/dist/tools/init-project/git-setup.d.ts +2 -2
- package/dist/tools/init-project/host-assets-writer.js +2 -10
- package/dist/tools/init-project/lifecycle-helpers.d.ts +2 -2
- package/dist/tools/init-project/lint-scaffolder.js +2 -10
- package/dist/tools/init-project/stack-detector.d.ts +2 -2
- package/dist/tools/reconcile-interactive-question-hooks.d.ts +2 -2
- package/dist/tools/register-sdd-tools.js +1 -0
- package/dist/tools/safe-handler.js +1 -0
- package/dist/tools/schemas/spec-id.d.ts +1 -6
- package/dist/tools/schemas/spec-id.js +1 -16
- package/dist/tools/tool-entry.d.ts +2 -2
- package/dist/tools/tool-entry.js +1 -1
- package/dist/tools/tool-registry/core-tools.d.ts +2 -2
- package/dist/tools/tool-registry/deprecated-stubs.d.ts +3 -3
- package/dist/tools/tool-registry/deprecated-stubs.js +1 -1
- package/dist/tools/triage-request.d.ts +2 -2
- package/dist/tools/update-status/approval-gates.d.ts +2 -2
- package/dist/tools/update-status/approval-gates.js +1 -0
- package/dist/tools/update-status/dod-gates.d.ts +1 -1
- package/dist/tools/update-status/done-receipt-verifier.d.ts +1 -1
- package/dist/tools/update-status/side-effects.js +5 -0
- package/dist/tools/update-status-actions.js +28 -40
- package/dist/tools/validate-graph-coverage.js +14 -2
- package/dist/tools/validate.js +2 -0
- package/dist/transports/middleware/types.d.ts +3 -3
- package/dist/types/atomic-upgrade.d.ts +1 -1
- package/dist/types/cascade-hooks.d.ts +3 -0
- package/dist/types/dashboard.d.ts +4 -1
- package/dist/types/durable-job.d.ts +20 -0
- package/dist/types/durable-job.js +9 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/installation.d.ts +16 -0
- package/dist/types/installation.js +2 -0
- package/dist/types/project-knowledge-graph.d.ts +11 -0
- package/dist/types/session-checkpoint.d.ts +16 -0
- package/dist/types/spec-dependency-graph.d.ts +21 -0
- package/dist/types/spec-dependency-graph.js +2 -0
- package/dist/types/validation-evidence.d.ts +45 -0
- package/package.json +1 -1
- package/planu-plugin.json +1 -1
- package/dist/types/storage-bundle.d.ts +0 -13
- package/dist/types/storage-bundle.js +0 -2
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { specStore } from '../../storage/index.js';
|
|
2
2
|
import { runCascade } from '../../engine/cascade-hooks/runner.js';
|
|
3
|
+
import { setDispatchHookEventHandler } from '../../engine/cascade-hooks/hooks/dispatch-hook-event.hook.js';
|
|
3
4
|
import { appendAutopilotLogEntry } from '../../storage/autopilot-log-store.js';
|
|
4
5
|
import { redactFailureMessage, reportClassifiedDegradation, } from '../../errors/classified-degradation.js';
|
|
5
6
|
import { getRuntimePolicy } from '../../engine/runtime-policy.js';
|
|
6
7
|
import { createExecutionScope } from '../../engine/execution/context.js';
|
|
8
|
+
import { dispatchHookEvent } from '../manage-hooks.js';
|
|
9
|
+
// Wire the tools-layer hook dispatcher into the engine's cascade hook
|
|
10
|
+
// (see engine/cascade-hooks/hooks/dispatch-hook-event.hook.ts — engine must not import tools/ directly).
|
|
11
|
+
setDispatchHookEventHandler(dispatchHookEvent);
|
|
7
12
|
const queuedTransitions = new Map();
|
|
8
13
|
const CASCADE_ISOLATED_SCOPE_MS = 30_000;
|
|
9
14
|
const pendingPostCommitWork = new Set();
|
|
@@ -78,12 +78,18 @@ export async function runImplementingSideEffects(projectId, specId, transitionPr
|
|
|
78
78
|
try {
|
|
79
79
|
const spec = foundSpec ?? (await specStore.getSpec(projectId, specId));
|
|
80
80
|
const results = await Promise.allSettled([
|
|
81
|
-
// SPEC-633: Write session state when spec moves to implementing
|
|
81
|
+
// SPEC-633: Write session state when spec moves to implementing, then refresh
|
|
82
|
+
// the paired session artifacts from the resulting store state.
|
|
82
83
|
(async () => {
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
try {
|
|
85
|
+
const { writeSpecSessionState } = await import('../engine/session-state/writer.js');
|
|
86
|
+
await writeSpecSessionState(projectPath, specId, spec?.title ?? specId, 'moved to implementing');
|
|
87
|
+
const { refreshSessionArtifacts } = await import('../engine/session-state/session-artifact-refresher.js');
|
|
88
|
+
await refreshSessionArtifacts(projectPath, projectId);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
85
91
|
/* best-effort */
|
|
86
|
-
}
|
|
92
|
+
}
|
|
87
93
|
})(),
|
|
88
94
|
// SPEC-635: Regenerate context.md
|
|
89
95
|
(async () => {
|
|
@@ -92,19 +98,6 @@ export async function runImplementingSideEffects(projectId, specId, transitionPr
|
|
|
92
98
|
/* best-effort */
|
|
93
99
|
});
|
|
94
100
|
})(),
|
|
95
|
-
// SPEC-656: Recalculate epicProgress when spec moves to implementing
|
|
96
|
-
(async () => {
|
|
97
|
-
try {
|
|
98
|
-
const { updateEpicProgressInSession } = await import('../engine/session-state/writer.js');
|
|
99
|
-
const allSpecs = await specStore.listSpecs(projectId);
|
|
100
|
-
await updateEpicProgressInSession(projectPath, allSpecs).catch(() => {
|
|
101
|
-
/* best-effort */
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
/* best-effort */
|
|
106
|
-
}
|
|
107
|
-
})(),
|
|
108
101
|
// recommend_model — suggest haiku/sonnet/opus based on spec complexity
|
|
109
102
|
(async () => {
|
|
110
103
|
try {
|
|
@@ -166,13 +159,6 @@ export async function runDoneActions(projectId, specId, gitBranch, options = {})
|
|
|
166
159
|
try {
|
|
167
160
|
const { resolveProjectPath, git: gitCmd } = await import('./git/git-helpers.js');
|
|
168
161
|
const projectPath = suppliedProjectPath(options.projectPath) ?? (await resolveProjectPath(projectId));
|
|
169
|
-
if (process.env.PLANU_ENABLE_AUTOCOMMIT === 'true') {
|
|
170
|
-
await gitCmd(projectPath, ['add', 'planu/']);
|
|
171
|
-
const { planuAutoCommit } = await import('../engine/git/planu-autocommit.js');
|
|
172
|
-
void planuAutoCommit({ projectPath, specId, reason: 'mark-done' }).catch((err) => {
|
|
173
|
-
console.error('[update-status] planuAutoCommit failed:', err instanceof Error ? err.message : String(err));
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
162
|
const { stdout } = await gitCmd(projectPath, ['status', '--porcelain']);
|
|
177
163
|
const nonPlanuLines = stdout
|
|
178
164
|
.trim()
|
|
@@ -243,15 +229,6 @@ export async function runDoneSideEffects(projectId, specId, gitBranch, transitio
|
|
|
243
229
|
const { cleanupSpecOnDone } = await import('./git/cleanup-ops.js');
|
|
244
230
|
return withAudit(projectPath, 'update_status(done)', 'cleanupSpecOnDone', () => cleanupSpecOnDone(projectPath, specId, gitBranch));
|
|
245
231
|
})(),
|
|
246
|
-
(async () => {
|
|
247
|
-
const { removeSpecFromSession } = await import('../engine/session-state/writer.js');
|
|
248
|
-
await removeSpecFromSession(projectPath, specId);
|
|
249
|
-
})(),
|
|
250
|
-
(async () => {
|
|
251
|
-
const { updateEpicProgressInSession } = await import('../engine/session-state/writer.js');
|
|
252
|
-
const allSpecs = await specStore.listSpecs(projectId);
|
|
253
|
-
await updateEpicProgressInSession(projectPath, allSpecs);
|
|
254
|
-
})(),
|
|
255
232
|
(async () => {
|
|
256
233
|
const { generateContextMd } = await import('../engine/context-md-generator.js');
|
|
257
234
|
await generateContextMd(projectPath, projectId);
|
|
@@ -266,26 +243,37 @@ export async function runDoneSideEffects(projectId, specId, gitBranch, transitio
|
|
|
266
243
|
return runHousekeepingSweep({ projectPath });
|
|
267
244
|
})(),
|
|
268
245
|
(async () => {
|
|
269
|
-
if (hasPending(specId, '
|
|
246
|
+
if (hasPending(specId, 'refreshSessionArtifacts')) {
|
|
270
247
|
return;
|
|
271
248
|
}
|
|
272
|
-
markPending(specId, '
|
|
249
|
+
markPending(specId, 'refreshSessionArtifacts');
|
|
273
250
|
try {
|
|
274
|
-
const {
|
|
275
|
-
await
|
|
251
|
+
const { refreshSessionArtifacts } = await import('../engine/session-state/session-artifact-refresher.js');
|
|
252
|
+
await refreshSessionArtifacts(projectPath, projectId);
|
|
276
253
|
}
|
|
277
254
|
finally {
|
|
278
|
-
clearPending(specId, '
|
|
255
|
+
clearPending(specId, 'refreshSessionArtifacts');
|
|
279
256
|
}
|
|
280
257
|
})(),
|
|
281
258
|
]);
|
|
259
|
+
if (process.env.PLANU_ENABLE_AUTOCOMMIT === 'true') {
|
|
260
|
+
try {
|
|
261
|
+
const { git: gitCmd } = await import('./git/git-helpers.js');
|
|
262
|
+
await gitCmd(projectPath, ['add', 'planu/']);
|
|
263
|
+
const { planuAutoCommit } = await import('../engine/git/planu-autocommit.js');
|
|
264
|
+
await planuAutoCommit({ projectPath, specId, reason: 'mark-done' });
|
|
265
|
+
}
|
|
266
|
+
catch (err) {
|
|
267
|
+
console.error('[update-status] planuAutoCommit failed:', err instanceof Error ? err.message : String(err));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
282
270
|
const failures = results.filter((result) => result.status === 'rejected');
|
|
283
271
|
if (failures.length > 0) {
|
|
284
272
|
throw new AggregateError(normalizeRejectedReasons(failures), `${String(failures.length)} done side effect(s) failed`);
|
|
285
273
|
}
|
|
286
274
|
const cleanup = results[0].status === 'fulfilled' ? results[0].value : null;
|
|
287
|
-
const planuCleanup = results[
|
|
288
|
-
const housekeeping = results[
|
|
275
|
+
const planuCleanup = results[2].status === 'fulfilled' ? results[2].value : null;
|
|
276
|
+
const housekeeping = results[3].status === 'fulfilled' ? results[3].value : null;
|
|
289
277
|
return {
|
|
290
278
|
cleanupProposals: cleanup?.proposals ?? [],
|
|
291
279
|
housekeepingProposal: housekeeping ?? {
|
|
@@ -11,6 +11,9 @@ function graphCoverageGaps(slice) {
|
|
|
11
11
|
.map((criterion) => criterion.label)
|
|
12
12
|
.slice(0, 10);
|
|
13
13
|
}
|
|
14
|
+
function graphCoverageWarnings(slice) {
|
|
15
|
+
return slice.oversizedSources.map((record) => `oversized source: ${record.path} (${record.kind}, ${record.action})`);
|
|
16
|
+
}
|
|
14
17
|
export async function buildGraphCoverageReport(args) {
|
|
15
18
|
let graphSlice;
|
|
16
19
|
try {
|
|
@@ -21,7 +24,13 @@ export async function buildGraphCoverageReport(args) {
|
|
|
21
24
|
graphSlice = null;
|
|
22
25
|
}
|
|
23
26
|
if (graphSlice === null) {
|
|
24
|
-
return {
|
|
27
|
+
return {
|
|
28
|
+
availability: 'unavailable',
|
|
29
|
+
gaps: [],
|
|
30
|
+
compactNodes: 0,
|
|
31
|
+
compactEdges: 0,
|
|
32
|
+
warnings: [],
|
|
33
|
+
};
|
|
25
34
|
}
|
|
26
35
|
return {
|
|
27
36
|
availability: 'available',
|
|
@@ -29,14 +38,17 @@ export async function buildGraphCoverageReport(args) {
|
|
|
29
38
|
gaps: graphCoverageGaps(graphSlice),
|
|
30
39
|
compactNodes: graphSlice.nodes.length,
|
|
31
40
|
compactEdges: graphSlice.edges.length,
|
|
41
|
+
warnings: graphCoverageWarnings(graphSlice),
|
|
32
42
|
};
|
|
33
43
|
}
|
|
34
44
|
export function formatGraphCoverageText(report) {
|
|
35
45
|
if (report.availability === 'unavailable') {
|
|
36
46
|
return '\nGRAPH unavailable (project graph unreadable)';
|
|
37
47
|
}
|
|
38
|
-
|
|
48
|
+
const gapLine = report.gaps.length > 0
|
|
39
49
|
? `\nGRAPH ${String(report.gaps.length)} graph-backed coverage gap(s)`
|
|
40
50
|
: '';
|
|
51
|
+
const warningLines = report.warnings.map((warning) => `\nGRAPH ${warning}`).join('');
|
|
52
|
+
return gapLine + warningLines;
|
|
41
53
|
}
|
|
42
54
|
//# sourceMappingURL=validate-graph-coverage.js.map
|
package/dist/tools/validate.js
CHANGED
|
@@ -867,6 +867,8 @@ function buildValidateStructuredContent(args) {
|
|
|
867
867
|
availability: args.graphCoverage.availability,
|
|
868
868
|
gapsCount: args.graphCoverage.gaps.length,
|
|
869
869
|
gapsTop5: args.graphCoverage.gaps.slice(0, 5),
|
|
870
|
+
warningsCount: args.graphCoverage.warnings.length,
|
|
871
|
+
warningsTop5: args.graphCoverage.warnings.slice(0, 5),
|
|
870
872
|
freshness: args.graphCoverage.freshness,
|
|
871
873
|
},
|
|
872
874
|
suggestionsTop5: args.suggestions.slice(0, 5),
|
|
@@ -11,9 +11,9 @@ export interface ToolContext {
|
|
|
11
11
|
/**
|
|
12
12
|
* A tool handler function signature.
|
|
13
13
|
*/
|
|
14
|
-
export type
|
|
14
|
+
export type MiddlewareToolHandler = (input: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
|
|
15
15
|
/**
|
|
16
|
-
* A middleware is a higher-order function that wraps a
|
|
16
|
+
* A middleware is a higher-order function that wraps a MiddlewareToolHandler.
|
|
17
17
|
*/
|
|
18
|
-
export type Middleware = (handler:
|
|
18
|
+
export type Middleware = (handler: MiddlewareToolHandler) => MiddlewareToolHandler;
|
|
19
19
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { SpawnSyncReturns } from 'node:child_process';
|
|
2
|
-
import type { InstallationManifest, InstallationRecord } from '
|
|
2
|
+
import type { InstallationManifest, InstallationRecord } from './installation.js';
|
|
3
3
|
export type UpgradePhase = 'after-runtime-verification' | 'before-adapter-switch' | 'after-adapter-switch' | 'before-manifest-switch' | 'after-manifest-switch' | 'after-trust-switch';
|
|
4
4
|
export type UpgradeJournalState = 'prepared' | 'switching' | 'trust-switched' | 'committed';
|
|
5
5
|
export interface UpgradeJournal {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Spec } from './spec/core.js';
|
|
2
2
|
import type { SpecStatus } from './common/primitives.js';
|
|
3
|
+
import type { HookEventPayload } from './hooks.js';
|
|
4
|
+
/** Port through which the dispatch-hook-event hook reaches the tools-layer hook dispatcher. */
|
|
5
|
+
export type DispatchHookEventFn = (projectId: string, payload: HookEventPayload) => Promise<void>;
|
|
3
6
|
export interface CascadeContext {
|
|
4
7
|
specId: string;
|
|
5
8
|
spec: Spec;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { Difficulty, RiskLevel, SpecStatus } from './common/index.js';
|
|
1
|
+
import type { Difficulty, RiskLevel, SpecStatus, ToolResult } from './common/index.js';
|
|
2
|
+
import type { UpdateStatusInput } from './spec/inputs.js';
|
|
2
3
|
/** State of the dashboard HTTP server (singleton in memory) */
|
|
3
4
|
export interface DashboardServerState {
|
|
4
5
|
port: number;
|
|
@@ -69,6 +70,8 @@ export interface SpecStatusUpdateResult {
|
|
|
69
70
|
newStatus: string;
|
|
70
71
|
error?: string;
|
|
71
72
|
}
|
|
73
|
+
/** Port through which the dashboard status route reaches the tools-layer status gate. */
|
|
74
|
+
export type UpdateStatusHandler = (input: UpdateStatusInput) => Promise<ToolResult>;
|
|
72
75
|
/** Project health score with weighted components */
|
|
73
76
|
export interface ProjectHealthScore {
|
|
74
77
|
overall: number;
|
|
@@ -35,4 +35,24 @@ export interface ValidateDurableJobPayload {
|
|
|
35
35
|
readonly freshnessLease?: ValidationFreshnessLease;
|
|
36
36
|
readonly specPath: string;
|
|
37
37
|
}
|
|
38
|
+
export declare const DURABLE_JOB_STATES: readonly ['accepted', 'running', 'checkpointed', 'cancelled', 'failed', 'dead-letter', 'completed'];
|
|
39
|
+
export type DurableJobState = (typeof DURABLE_JOB_STATES)[number];
|
|
40
|
+
export interface DurableJobRecord {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly projectId: string;
|
|
43
|
+
readonly workspaceId: string;
|
|
44
|
+
readonly state: DurableJobState;
|
|
45
|
+
readonly payload: unknown;
|
|
46
|
+
readonly checkpoint?: unknown;
|
|
47
|
+
readonly result?: unknown;
|
|
48
|
+
readonly error?: string;
|
|
49
|
+
readonly attempts: number;
|
|
50
|
+
readonly maxAttempts: number;
|
|
51
|
+
readonly cancelRequested: boolean;
|
|
52
|
+
readonly leaseOwner?: string;
|
|
53
|
+
readonly leaseExpiresAt?: string;
|
|
54
|
+
readonly fencingToken: number;
|
|
55
|
+
readonly createdAt: string;
|
|
56
|
+
readonly updatedAt: string;
|
|
57
|
+
}
|
|
38
58
|
//# sourceMappingURL=durable-job.d.ts.map
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export * from './agent-roles.js';
|
|
2
|
+
export * from './installation.js';
|
|
2
3
|
export * from './cost-ledger.js';
|
|
3
4
|
export * from './autopilot-summary.js';
|
|
4
5
|
export * from './common/index.js';
|
|
@@ -264,6 +265,7 @@ export * from './agent-memory.js';
|
|
|
264
265
|
export * from './agent-spawner.js';
|
|
265
266
|
export * from './qa-gate.js';
|
|
266
267
|
export * from './validation-evidence.js';
|
|
268
|
+
export * from './spec-dependency-graph.js';
|
|
267
269
|
export * from './project-drift.js';
|
|
268
270
|
export * from './technical-enrichment.js';
|
|
269
271
|
export * from './agent-team.js';
|
package/dist/types/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// Planu — SDD MCP Server Types (barrel re-export)
|
|
2
2
|
export * from './agent-roles.js';
|
|
3
|
+
export * from './installation.js';
|
|
3
4
|
export * from './cost-ledger.js';
|
|
4
5
|
export * from './autopilot-summary.js';
|
|
5
6
|
export * from './common/index.js';
|
|
@@ -261,6 +262,7 @@ export * from './agent-memory.js';
|
|
|
261
262
|
export * from './agent-spawner.js';
|
|
262
263
|
export * from './qa-gate.js';
|
|
263
264
|
export * from './validation-evidence.js';
|
|
265
|
+
export * from './spec-dependency-graph.js';
|
|
264
266
|
export * from './project-drift.js';
|
|
265
267
|
export * from './technical-enrichment.js';
|
|
266
268
|
export * from './agent-team.js';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface InstallationRecord {
|
|
2
|
+
host: string;
|
|
3
|
+
configPath: string;
|
|
4
|
+
format: 'standard' | 'zed';
|
|
5
|
+
scope: 'user' | 'project';
|
|
6
|
+
package: string;
|
|
7
|
+
version: string;
|
|
8
|
+
offline: boolean;
|
|
9
|
+
installedAt: string;
|
|
10
|
+
}
|
|
11
|
+
export interface InstallationManifest {
|
|
12
|
+
schemaVersion: 1;
|
|
13
|
+
updatedAt: string;
|
|
14
|
+
installations: InstallationRecord[];
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=installation.d.ts.map
|
|
@@ -95,6 +95,14 @@ export interface ProjectKnowledgeGraph {
|
|
|
95
95
|
};
|
|
96
96
|
nodes: ProjectGraphNode[];
|
|
97
97
|
edges: ProjectGraphEdge[];
|
|
98
|
+
oversizedSources: OversizedSourceRecord[];
|
|
99
|
+
}
|
|
100
|
+
export interface OversizedSourceRecord {
|
|
101
|
+
path: string;
|
|
102
|
+
kind: string;
|
|
103
|
+
bytes: number;
|
|
104
|
+
threshold: number;
|
|
105
|
+
action: 'tail' | 'skip';
|
|
98
106
|
}
|
|
99
107
|
export interface ProjectGraphSource {
|
|
100
108
|
id: string;
|
|
@@ -148,6 +156,7 @@ export interface ProjectGraphBuildResult {
|
|
|
148
156
|
removedSources: string[];
|
|
149
157
|
skippedSources: string[];
|
|
150
158
|
usedCache: boolean;
|
|
159
|
+
oversizedSources: OversizedSourceRecord[];
|
|
151
160
|
}
|
|
152
161
|
export interface ProjectGraphFreshness {
|
|
153
162
|
exists: boolean;
|
|
@@ -170,6 +179,7 @@ export interface ProjectGraphSlice {
|
|
|
170
179
|
freshness: ProjectGraphFreshness;
|
|
171
180
|
nodes: ProjectGraphNode[];
|
|
172
181
|
edges: ProjectGraphEdge[];
|
|
182
|
+
oversizedSources: OversizedSourceRecord[];
|
|
173
183
|
summary: {
|
|
174
184
|
specs: number;
|
|
175
185
|
criteria: number;
|
|
@@ -203,6 +213,7 @@ export interface GraphCoverageReport {
|
|
|
203
213
|
gaps: string[];
|
|
204
214
|
compactNodes: number;
|
|
205
215
|
compactEdges: number;
|
|
216
|
+
warnings: string[];
|
|
206
217
|
}
|
|
207
218
|
export interface NativeProjectGraphRuntime {
|
|
208
219
|
nativeActive: boolean;
|
|
@@ -58,6 +58,22 @@ export interface SessionIndex {
|
|
|
58
58
|
planVersion?: number;
|
|
59
59
|
updatedAt: string;
|
|
60
60
|
}
|
|
61
|
+
/** SPEC-1320: Sanitized failure codes for the paired session-artifact refresher. */
|
|
62
|
+
export type SessionArtifactRefreshFailureCode = 'STAGE_WRITE_FAILED' | 'COMMIT_FAILED' | 'UNEXPECTED_FAILURE';
|
|
63
|
+
/** SPEC-1320: Outcome of a paired refresh of session.json and session-context.md. */
|
|
64
|
+
export interface RefreshSessionArtifactsResult {
|
|
65
|
+
activeSpecIds: string[];
|
|
66
|
+
sessionJsonWritten: boolean;
|
|
67
|
+
sessionContextWritten: boolean;
|
|
68
|
+
}
|
|
69
|
+
/** SPEC-1320: A staged-but-not-yet-committed artifact write in the paired refresh. */
|
|
70
|
+
export interface PreparedSessionArtifact {
|
|
71
|
+
finalPath: string;
|
|
72
|
+
content: string;
|
|
73
|
+
tmpPath: string;
|
|
74
|
+
changed: boolean;
|
|
75
|
+
previous: string | null;
|
|
76
|
+
}
|
|
61
77
|
/** SPEC-639: Status of a single agent worker in the handoff.json protocol. */
|
|
62
78
|
export type AgentHandoffStatus = 'pending' | 'done' | 'failed';
|
|
63
79
|
/** SPEC-639: Entry written by a worker agent when it completes its work. */
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type EdgeKind = 'dependency' | 'supersedes' | 'depends_on';
|
|
2
|
+
export interface GraphNode {
|
|
3
|
+
id: string;
|
|
4
|
+
status: string;
|
|
5
|
+
supersededBy?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface GraphEdge {
|
|
8
|
+
from: string;
|
|
9
|
+
to: string;
|
|
10
|
+
kind: EdgeKind;
|
|
11
|
+
}
|
|
12
|
+
export interface SupersedesCycleDiagnostic {
|
|
13
|
+
code: 'SUPERSEDES_CYCLE';
|
|
14
|
+
cycle: string[];
|
|
15
|
+
}
|
|
16
|
+
export interface SpecGraph {
|
|
17
|
+
nodes: GraphNode[];
|
|
18
|
+
edges: GraphEdge[];
|
|
19
|
+
diagnostics: SupersedesCycleDiagnostic[];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=spec-dependency-graph.d.ts.map
|
|
@@ -59,4 +59,49 @@ export interface ValidationImpactPlan {
|
|
|
59
59
|
reason: string;
|
|
60
60
|
changedPaths: string[];
|
|
61
61
|
}
|
|
62
|
+
export type ScenarioVerdict = 'pass' | 'fail' | 'missing';
|
|
63
|
+
export interface ScenarioTestLink {
|
|
64
|
+
path: string;
|
|
65
|
+
line?: number;
|
|
66
|
+
runner?: string;
|
|
67
|
+
config?: string;
|
|
68
|
+
description?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface ScenarioStep {
|
|
71
|
+
keyword: string;
|
|
72
|
+
text: string;
|
|
73
|
+
}
|
|
74
|
+
export interface FrontmatterScenario {
|
|
75
|
+
title: string;
|
|
76
|
+
done: boolean;
|
|
77
|
+
tests?: ScenarioTestLink[];
|
|
78
|
+
steps?: ScenarioStep[];
|
|
79
|
+
}
|
|
80
|
+
export interface PerScenarioResult {
|
|
81
|
+
title: string;
|
|
82
|
+
verdict: ScenarioVerdict;
|
|
83
|
+
evidence: string[];
|
|
84
|
+
unverifiable?: true;
|
|
85
|
+
}
|
|
86
|
+
export interface SpecComplianceResult {
|
|
87
|
+
dimensionScore: number;
|
|
88
|
+
perScenario: PerScenarioResult[];
|
|
89
|
+
command: string;
|
|
90
|
+
evidenceSource?: 'frontmatter' | 'criteria' | 'none';
|
|
91
|
+
ignoredCriteriaTitles?: string[];
|
|
92
|
+
}
|
|
93
|
+
export interface EvidenceTestLink {
|
|
94
|
+
path: string;
|
|
95
|
+
}
|
|
96
|
+
export interface EvidenceScenario {
|
|
97
|
+
title: string;
|
|
98
|
+
tests: EvidenceTestLink[];
|
|
99
|
+
}
|
|
100
|
+
export type ExecutableEvidenceSource = 'frontmatter' | 'criteria' | 'none';
|
|
101
|
+
export interface ExecutableEvidence {
|
|
102
|
+
source: ExecutableEvidenceSource;
|
|
103
|
+
scenarios: EvidenceScenario[];
|
|
104
|
+
unmappedCriteria: string[];
|
|
105
|
+
ignoredCriteriaTitles: string[];
|
|
106
|
+
}
|
|
62
107
|
//# sourceMappingURL=validation-evidence.d.ts.map
|
package/package.json
CHANGED
package/planu-plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "dev.planu.cli",
|
|
3
3
|
"displayName": "Planu — Spec Driven Development",
|
|
4
4
|
"description": "Manage software specs, estimations, and autonomous SDD workflows. Language-agnostic MCP server for Claude Code.",
|
|
5
|
-
"version": "5.3.
|
|
5
|
+
"version": "5.3.69",
|
|
6
6
|
"icon": "assets/plugin/icon.svg",
|
|
7
7
|
"command": ["npx", "@planu/cli@latest"],
|
|
8
8
|
"packageName": "@planu/cli",
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { RuntimeDatabase, RuntimeProjectBundle } from '../storage/runtime-db.js';
|
|
2
|
-
export interface StorageBundle {
|
|
3
|
-
readonly schemaVersion: 1;
|
|
4
|
-
readonly createdAt: string;
|
|
5
|
-
readonly runtimeSchemaVersion: number;
|
|
6
|
-
readonly projectId: string;
|
|
7
|
-
readonly payload: RuntimeProjectBundle;
|
|
8
|
-
readonly checksum: string;
|
|
9
|
-
}
|
|
10
|
-
export interface StorageBundleOptions {
|
|
11
|
-
readonly database?: RuntimeDatabase;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=storage-bundle.d.ts.map
|