@planu/cli 4.14.1 → 5.0.0
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 -1
- package/LICENSE +55 -12
- package/README.md +10 -2
- package/dist/cli/commands/install.d.ts +1 -12
- package/dist/cli/commands/install.js +9 -65
- package/dist/cli/commands/job.js +4 -3
- package/dist/cli/commands/spec.js +2 -2
- package/dist/cli/commands/validate.js +2 -2
- package/dist/cli/router.js +1 -3
- package/dist/config/environment-schema.json +1 -3
- package/dist/config/official-sdd-tools.d.ts +4 -0
- package/dist/config/official-sdd-tools.js +35 -0
- package/dist/config/product-public.d.ts +139 -3
- package/dist/config/product-public.js +8 -1
- package/dist/config/product-public.json +7 -36
- package/dist/config/registries/hosts/codex.json +20 -363
- package/dist/config/release-policy.json +84 -2
- package/dist/config/runtime-policy.json +12 -1
- package/dist/config/skill-templates/planu-resume-work.md +2 -2
- package/dist/core/index.d.ts +1 -1
- package/dist/core/spec-validator.d.ts +4 -4
- package/dist/core/spec-validator.js +1 -1
- package/dist/engine/abortable-process-runner.d.ts +20 -2
- package/dist/engine/abortable-process-runner.js +243 -74
- package/dist/engine/ambiguity-scorer.js +4 -26
- package/dist/engine/auth/scope-mapper.js +1 -7
- package/dist/engine/autopilot/state-updater.js +4 -4
- package/dist/engine/cascade-hooks/hooks/review-enricher.hook.js +9 -6
- package/dist/engine/cascade-hooks/state-drift-detector.d.ts +3 -3
- package/dist/engine/cascade-hooks/state-drift-detector.js +1 -1
- package/dist/engine/ci-generator/planu-config.js +1 -7
- package/dist/engine/clarification-gate/gate.d.ts +3 -3
- package/dist/engine/code-scanner/layer-scanner.js +6 -22
- package/dist/engine/core-bridge.d.ts +3 -3
- package/dist/engine/cost-guardrails.d.ts +1 -1
- package/dist/engine/cost-guardrails.js +1 -1
- package/dist/engine/criterion-identity.d.ts +1 -0
- package/dist/engine/criterion-identity.js +7 -0
- package/dist/engine/dashboard/data-loader.js +2 -7
- package/dist/engine/dashboard/templates-layout.js +0 -3
- package/dist/engine/dashboard/templates-project.js +1 -13
- package/dist/engine/docs-site-generator/data-collector.d.ts +1 -1
- package/dist/engine/docs-site-generator/data-collector.js +7 -28
- package/dist/engine/docs-site-generator/tools-renderer.js +3 -10
- package/dist/engine/evidence-gates/artifact-reader.d.ts +10 -1
- package/dist/engine/evidence-gates/artifact-reader.js +115 -2
- package/dist/engine/evidence-gates/lifecycle-gate.js +4 -3
- package/dist/engine/evidence-gates/reconciliation-freshness.d.ts +11 -0
- package/dist/engine/evidence-gates/reconciliation-freshness.js +72 -0
- package/dist/engine/evidence-index/done-drift.d.ts +1 -1
- package/dist/engine/evidence-index/done-drift.js +40 -18
- package/dist/engine/execution/context.js +3 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.d.ts +4 -0
- package/dist/engine/execution/durable-job-heartbeat-runtime.js +400 -0
- package/dist/engine/execution/job-runtime.d.ts +30 -0
- package/dist/engine/execution/job-runtime.js +114 -6
- package/dist/engine/execution/public-job-sanitizer.d.ts +4 -0
- package/dist/engine/execution/public-job-sanitizer.js +31 -0
- package/dist/engine/execution/validate-job-executor.d.ts +12 -1
- package/dist/engine/execution/validate-job-executor.js +549 -86
- package/dist/engine/execution/validate-job-payload.js +107 -50
- package/dist/engine/execution/validate-job-recovery.js +1 -1
- package/dist/engine/execution/validate-worker-runtime.d.ts +5 -0
- package/dist/engine/execution/validate-worker-runtime.js +90 -2
- package/dist/engine/execution/validate-worker-thread.js +17 -24
- package/dist/engine/handoff-artifacts/schemas.d.ts +2 -1
- package/dist/engine/handoff-artifacts/schemas.js +33 -0
- package/dist/engine/handoff-packager.d.ts +19 -0
- package/dist/engine/handoff-packager.js +415 -13
- package/dist/engine/hooks/effort-configurator.js +1 -1
- package/dist/engine/impact-detector/test-break-predictor.js +3 -3
- package/dist/engine/impact-detector/tool-registration.js +1 -1
- package/dist/engine/implementation-contract/renderer.js +23 -8
- package/dist/engine/lifecycle-reconciliation-io.d.ts +11 -0
- package/dist/engine/lifecycle-reconciliation-io.js +180 -0
- package/dist/engine/lifecycle-reconciliation.d.ts +16 -0
- package/dist/engine/lifecycle-reconciliation.js +406 -0
- package/dist/engine/local-first/tool-classification.js +2 -0
- package/dist/engine/macos-keychain-native-port.d.ts +5 -0
- package/dist/engine/macos-keychain-native-port.js +19 -7
- package/dist/engine/migrations/remove-commercial-state.d.ts +3 -0
- package/dist/engine/migrations/remove-commercial-state.js +343 -0
- package/dist/engine/network-policy.js +1 -0
- package/dist/engine/planu-core.darwin-arm64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-arm64.node.sbom.json +10 -10
- package/dist/engine/planu-core.darwin-x64.node.manifest.json +7 -7
- package/dist/engine/planu-core.darwin-x64.node.sbom.json +10 -10
- package/dist/engine/planu-core.linux-arm64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-gnu.node.sbom.json +10 -10
- package/dist/engine/planu-core.linux-arm64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-arm64-musl.node.sbom.json +10 -10
- package/dist/engine/planu-core.linux-x64-gnu.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-gnu.node.sbom.json +10 -10
- package/dist/engine/planu-core.linux-x64-musl.node.manifest.json +7 -7
- package/dist/engine/planu-core.linux-x64-musl.node.sbom.json +10 -10
- package/dist/engine/planu-core.win32-arm64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-arm64-msvc.node.sbom.json +10 -10
- package/dist/engine/planu-core.win32-x64-msvc.node.manifest.json +7 -7
- package/dist/engine/planu-core.win32-x64-msvc.node.sbom.json +10 -10
- package/dist/engine/readiness-checker.d.ts +1 -16
- package/dist/engine/readiness-checker.js +27 -88
- package/dist/engine/runtime-policy.d.ts +2 -0
- package/dist/engine/runtime-policy.js +42 -5
- package/dist/engine/runtime-security/rate-limiter.js +0 -1
- package/dist/engine/safety/contained-project-file.d.ts +3 -0
- package/dist/engine/safety/contained-project-file.js +23 -0
- package/dist/engine/scope-boundaries/contradiction-checker.js +63 -1
- package/dist/engine/scope-boundaries/scope-validator.js +45 -7
- package/dist/engine/session/checkpoint-writer.js +0 -9
- package/dist/engine/spec-format/acceptance-criteria.d.ts +6 -2
- package/dist/engine/spec-format/acceptance-criteria.js +77 -18
- package/dist/engine/spec-format/markdown-sections.d.ts +14 -0
- package/dist/engine/spec-format/markdown-sections.js +105 -0
- package/dist/engine/spec-format/read-technical-section.js +33 -5
- package/dist/engine/spec-format/technical-md-populator.js +3 -2
- package/dist/engine/spec-format/unified-spec-builder.d.ts +7 -0
- package/dist/engine/spec-format/unified-spec-builder.js +202 -0
- package/dist/engine/spec-migrator/canonical-deduplicator.d.ts +18 -0
- package/dist/engine/spec-migrator/canonical-deduplicator.js +479 -0
- package/dist/engine/spec-migrator/filesystem-import.d.ts +4 -8
- package/dist/engine/spec-migrator/filesystem-import.js +121 -14
- package/dist/engine/spec-migrator/frontmatter-parser.js +32 -15
- package/dist/engine/spec-migrator/index.d.ts +1 -0
- package/dist/engine/spec-migrator/index.js +1 -0
- package/dist/engine/spec-state-machine/transition-spec.d.ts +6 -1
- package/dist/engine/spec-state-machine/transition-spec.js +10 -1
- package/dist/engine/technical-enricher/index.js +16 -8
- package/dist/engine/technical-enricher/render-enriched.d.ts +1 -0
- package/dist/engine/technical-enricher/render-enriched.js +42 -14
- package/dist/engine/telemetry/health-checker.js +53 -17
- package/dist/engine/telemetry/telemetry-client.js +26 -8
- package/dist/engine/text-signal-boundaries.d.ts +2 -0
- package/dist/engine/text-signal-boundaries.js +25 -2
- package/dist/engine/time/relative-date.d.ts +3 -0
- package/dist/engine/time/relative-date.js +16 -0
- package/dist/engine/timing/budget.d.ts +11 -0
- package/dist/engine/timing/budget.js +27 -9
- package/dist/engine/token-optimizer/analytics.d.ts +1 -1
- package/dist/engine/token-optimizer/analytics.js +5 -6
- package/dist/engine/usage-tracker/core.d.ts +2 -2
- package/dist/engine/usage-tracker/core.js +1 -2
- package/dist/engine/usage-tracker/index.d.ts +0 -3
- package/dist/engine/usage-tracker/index.js +0 -3
- package/dist/engine/usage-tracker/stats.d.ts +2 -2
- package/dist/engine/usage-tracker/stats.js +1 -28
- package/dist/engine/validation/durable-validation.d.ts +1 -1
- package/dist/engine/validation/durable-validation.js +3 -82
- package/dist/engine/validation/validation-freshness.d.ts +11 -1
- package/dist/engine/validation/validation-freshness.js +231 -91
- package/dist/engine/validation/validation-receipt.d.ts +9 -6
- package/dist/engine/validation/validation-receipt.js +84 -24
- package/dist/engine/validation/validation-source-digest.d.ts +2 -0
- package/dist/engine/validation/validation-source-digest.js +86 -0
- package/dist/engine/validation/validation-submission.d.ts +5 -4
- package/dist/engine/validation/validation-submission.js +25 -11
- package/dist/engine/validation/validation-worktree.d.ts +21 -0
- package/dist/engine/validation/validation-worktree.js +260 -0
- package/dist/engine/validation-impact-planner.d.ts +14 -2
- package/dist/engine/validation-impact-planner.js +0 -3
- package/dist/engine/validator/dor-dod.d.ts +1 -0
- package/dist/engine/validator/dor-dod.js +5 -3
- package/dist/engine/validator/extractors.d.ts +1 -5
- package/dist/engine/validator/extractors.js +24 -69
- package/dist/engine/validator/spec-compliance-runner.d.ts +12 -24
- package/dist/engine/validator/spec-compliance-runner.js +429 -211
- package/dist/engine/validator.js +35 -22
- package/dist/index.js +4 -16
- package/dist/resources/usage-stats-resource.js +2 -18
- package/dist/security/adapters/linux-secret-service.js +7 -3
- package/dist/security/adapters/windows-credential-manager.js +6 -4
- package/dist/server/routes/specs.js +10 -0
- package/dist/storage/base-store.d.ts +1 -1
- package/dist/storage/base-store.js +1 -1
- package/dist/storage/feedback-remote.d.ts +2 -3
- package/dist/storage/feedback-remote.js +45 -31
- package/dist/storage/global-store.d.ts +1 -17
- package/dist/storage/global-store.js +1 -42
- package/dist/storage/index.d.ts +0 -2
- package/dist/storage/index.js +0 -2
- package/dist/storage/migrations/canonical-storage.js +124 -11
- package/dist/storage/runtime-db.d.ts +9 -0
- package/dist/storage/runtime-db.js +64 -8
- package/dist/storage/spec-store.d.ts +14 -2
- package/dist/storage/spec-store.js +104 -14
- package/dist/storage/status-store/atomic-status-write.d.ts +5 -0
- package/dist/storage/status-store/atomic-status-write.js +57 -0
- package/dist/storage/status-store/file-lock.js +30 -11
- package/dist/storage/status-store/self-healing.js +3 -3
- package/dist/storage/status-store/version-sync.d.ts +2 -1
- package/dist/storage/status-store/version-sync.js +35 -40
- package/dist/storage/usage-store.d.ts +1 -5
- package/dist/storage/usage-store.js +0 -35
- package/dist/tools/auto-update-handler.d.ts +3 -3
- package/dist/tools/auto-update-handler.js +3 -3
- package/dist/tools/challenge-spec/resilience-challenge-scenarios.d.ts +2 -1
- package/dist/tools/challenge-spec/resilience-challenge-scenarios.js +10 -7
- package/dist/tools/challenge-spec/scenario-collector.js +1 -1
- package/dist/tools/challenge-spec/scenarios-data.js +1 -1
- package/dist/tools/challenge-spec/scenarios-utils.d.ts +1 -1
- package/dist/tools/challenge-spec/scenarios-utils.js +35 -11
- package/dist/tools/challenge-spec.js +5 -5
- package/dist/tools/check-readiness.js +1 -1
- package/dist/tools/configure-telemetry.js +30 -2
- package/dist/tools/create-spec/spec-builder.js +0 -11
- package/dist/tools/create-spec.d.ts +1 -0
- package/dist/tools/create-spec.js +444 -239
- package/dist/tools/git/branch-ops.d.ts +1 -1
- package/dist/tools/git/branch-ops.js +3 -2
- package/dist/tools/init-project/handler.js +10 -12
- package/dist/tools/init-project/host-assets-writer.js +26 -1
- package/dist/tools/init-project/lint-scaffolder.d.ts +3 -3
- package/dist/tools/init-project/migration-runner.d.ts +2 -4
- package/dist/tools/init-project/migration-runner.js +3 -2
- package/dist/tools/init-project/portable-index-reconciler.d.ts +4 -0
- package/dist/tools/init-project/portable-index-reconciler.js +14 -0
- package/dist/tools/init-project/result-builder.js +1 -3
- package/dist/tools/jobs/handlers.js +38 -6
- package/dist/tools/list-specs.js +5 -26
- package/dist/tools/merge-risk-handler.js +2 -2
- package/dist/tools/package-handoff.js +2 -0
- package/dist/tools/reconcile-spec.js +0 -27
- package/dist/tools/register-agent-squad-tools.js +2 -2
- package/dist/tools/register-platform-tools/design-stack-tools.js +11 -11
- package/dist/tools/register-platform-tools/lifecycle-infra-tools.js +7 -7
- package/dist/tools/register-sdd-tools.d.ts +1 -1
- package/dist/tools/register-sdd-tools.js +2 -29
- package/dist/tools/register-spec-tools/analysis-tools.js +8 -8
- package/dist/tools/register-spec-tools/core-spec-tools.js +17 -8
- package/dist/tools/safe-handler.d.ts +5 -13
- package/dist/tools/safe-handler.js +7 -23
- package/dist/tools/schemas/index.d.ts +1 -1
- package/dist/tools/schemas/index.js +1 -1
- package/dist/tools/schemas/output-schemas.d.ts +0 -23
- package/dist/tools/schemas/output-schemas.js +0 -28
- package/dist/tools/schemas/spec.d.ts +4 -0
- package/dist/tools/schemas/spec.js +3 -0
- package/dist/tools/schemas/validate-output-schema.d.ts +11 -0
- package/dist/tools/schemas/validate-output-schema.js +7 -0
- package/dist/tools/spec-prompt-handler.js +3 -3
- package/dist/tools/sync-spec-state-handler.d.ts +1 -1
- package/dist/tools/sync-spec-state-handler.js +1 -1
- package/dist/tools/tool-entry.d.ts +4 -4
- package/dist/tools/tool-entry.js +3 -3
- package/dist/tools/tool-registry/core-tools.js +31 -15
- package/dist/tools/tool-registry/group-infra.js +27 -110
- package/dist/tools/tool-registry/group-quality-compliance.js +26 -26
- package/dist/tools/tool-registry/inventory.d.ts +2 -0
- package/dist/tools/tool-registry/inventory.js +2 -0
- package/dist/tools/tool-registry-helpers.d.ts +3 -3
- package/dist/tools/tool-registry-helpers.js +3 -3
- package/dist/tools/tool-usage-report/registered-tools.d.ts +1 -1
- package/dist/tools/tool-usage-report/registered-tools.js +3 -15
- package/dist/tools/update-status/approval-gates.js +3 -0
- package/dist/tools/update-status/done-receipt-verifier.js +40 -27
- package/dist/tools/update-status/evidence-gate.js +36 -1
- package/dist/tools/update-status/file-sync.d.ts +2 -1
- package/dist/tools/update-status/file-sync.js +57 -6
- package/dist/tools/update-status/index.d.ts +2 -0
- package/dist/tools/update-status/index.js +95 -58
- package/dist/tools/update-status/response-builder.js +3 -3
- package/dist/tools/update-status/side-effects.d.ts +2 -0
- package/dist/tools/update-status/side-effects.js +2 -2
- package/dist/tools/update-status/transition-guard.js +32 -15
- package/dist/tools/update-status-actions.d.ts +4 -2
- package/dist/tools/update-status-actions.js +16 -14
- package/dist/tools/usage-report.js +1 -16
- package/dist/tools/usage-stats.js +1 -18
- package/dist/tools/usage-tracking.d.ts +4 -0
- package/dist/tools/usage-tracking.js +20 -0
- package/dist/tools/validate-lint.d.ts +1 -0
- package/dist/tools/validate-lint.js +1 -1
- package/dist/tools/validate.d.ts +2 -1
- package/dist/tools/validate.js +114 -34
- package/dist/transports/http-transport.js +6 -8
- package/dist/transports/mcp-types.d.ts +0 -2
- package/dist/transports/session-context.js +1 -1
- package/dist/types/cascade-hooks.d.ts +1 -1
- package/dist/types/ci.d.ts +0 -4
- package/dist/types/clarification-token.d.ts +1 -1
- package/dist/types/claude-code-runtime.d.ts +0 -27
- package/dist/types/commercial-migration.d.ts +17 -0
- package/dist/types/commercial-migration.js +2 -0
- package/dist/types/common/primitives.d.ts +0 -2
- package/dist/types/core-bridge.d.ts +4 -10
- package/dist/types/dashboard.d.ts +3 -7
- package/dist/types/docs.d.ts +0 -1
- package/dist/types/durable-job.d.ts +4 -4
- package/dist/types/durable-validation.d.ts +100 -2
- package/dist/types/durable-validation.js +165 -1
- package/dist/types/errors/structured-error.d.ts +3 -3
- package/dist/types/estimation.d.ts +2 -0
- package/dist/types/evidence-gates.d.ts +9 -1
- package/dist/types/execution.d.ts +2 -0
- package/dist/types/gemini-integration.d.ts +0 -11
- package/dist/types/handoff-artifacts.d.ts +41 -0
- package/dist/types/hooks-advanced.d.ts +0 -13
- package/dist/types/impact-detection.d.ts +2 -2
- package/dist/types/index.d.ts +2 -6
- package/dist/types/index.js +1 -5
- package/dist/types/kiro-integration.d.ts +0 -6
- package/dist/types/network-policy.d.ts +1 -1
- package/dist/types/project/lint-scaffolder.d.ts +1 -1
- package/dist/types/runtime-policy.d.ts +11 -0
- package/dist/types/session-safeguard.d.ts +0 -31
- package/dist/types/spec/canonical-repair.d.ts +81 -0
- package/dist/types/spec/canonical-repair.js +2 -0
- package/dist/types/spec/core.d.ts +14 -0
- package/dist/types/spec/index.d.ts +1 -0
- package/dist/types/spec/index.js +1 -0
- package/dist/types/spec/inputs.d.ts +29 -0
- package/dist/types/spec-format.d.ts +24 -0
- package/dist/types/telemetry.d.ts +4 -1
- package/dist/types/transport.d.ts +0 -2
- package/dist/types/usage.d.ts +1 -36
- package/dist/types/usage.js +1 -1
- package/dist/types/validate-worker.d.ts +6 -0
- package/dist/types/validation-receipt.d.ts +1 -1
- package/dist/types/validation.d.ts +2 -2
- package/package.json +16 -12
- package/planu-native.json +1 -1
- package/planu-plugin.json +23 -40
- package/scripts/lib/pending-release-file.mjs +93 -0
- package/src/i18n/messages/en.json +0 -41
- package/src/i18n/messages/es.json +0 -41
- package/src/i18n/messages/pt.json +0 -41
- package/dist/cli/commands/activate.d.ts +0 -14
- package/dist/cli/commands/activate.js +0 -174
- package/dist/config/license-plans.json +0 -251
- package/dist/config/product-public.ts +0 -148
- package/dist/config/server-instructions.ts +0 -121
- package/dist/config/version-defaults.ts +0 -76
- package/dist/config/version.ts +0 -21
- package/dist/engine/ai-integration/gemini/settings-generator.d.ts +0 -4
- package/dist/engine/ai-integration/gemini/settings-generator.js +0 -195
- package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +0 -6
- package/dist/engine/ai-integration/kiro/hooks-generator.js +0 -75
- package/dist/engine/hooks/full-spectrum-generator.d.ts +0 -32
- package/dist/engine/hooks/full-spectrum-generator.js +0 -117
- package/dist/engine/license-validator/config-loader.d.ts +0 -5
- package/dist/engine/license-validator/config-loader.js +0 -16
- package/dist/engine/license-validator/core.d.ts +0 -15
- package/dist/engine/license-validator/core.js +0 -151
- package/dist/engine/license-validator/fingerprint.d.ts +0 -3
- package/dist/engine/license-validator/fingerprint.js +0 -17
- package/dist/engine/license-validator/lemon-squeezy.d.ts +0 -5
- package/dist/engine/license-validator/lemon-squeezy.js +0 -55
- package/dist/engine/license-validator.d.ts +0 -5
- package/dist/engine/license-validator.js +0 -6
- package/dist/engine/product-intelligence/index.d.ts +0 -7
- package/dist/engine/product-intelligence/index.js +0 -211
- package/dist/engine/session/auto-save.d.ts +0 -18
- package/dist/engine/session/auto-save.js +0 -98
- package/dist/engine/session/context-snapshot.d.ts +0 -8
- package/dist/engine/session/context-snapshot.js +0 -49
- package/dist/engine/session/memory-sync.d.ts +0 -12
- package/dist/engine/session/memory-sync.js +0 -34
- package/dist/engine/session/session-diff.d.ts +0 -11
- package/dist/engine/session/session-diff.js +0 -42
- package/dist/engine/session/session-merge.d.ts +0 -12
- package/dist/engine/session/session-merge.js +0 -55
- package/dist/engine/session-safeguard/checkpoint-runner.d.ts +0 -4
- package/dist/engine/session-safeguard/checkpoint-runner.js +0 -70
- package/dist/engine/session-safeguard/learnings-buffer.d.ts +0 -15
- package/dist/engine/session-safeguard/learnings-buffer.js +0 -91
- package/dist/engine/session-safeguard/precompaction-drain.d.ts +0 -10
- package/dist/engine/session-safeguard/precompaction-drain.js +0 -82
- package/dist/engine/session-safeguard/unpushed-detector.d.ts +0 -7
- package/dist/engine/session-safeguard/unpushed-detector.js +0 -59
- package/dist/engine/spec-changelog/core.d.ts +0 -16
- package/dist/engine/spec-changelog/core.js +0 -176
- package/dist/engine/spec-changelog/diff.d.ts +0 -18
- package/dist/engine/spec-changelog/diff.js +0 -121
- package/dist/engine/spec-changelog/index.d.ts +0 -3
- package/dist/engine/spec-changelog/index.js +0 -4
- package/dist/engine/trial-engine.d.ts +0 -5
- package/dist/engine/trial-engine.js +0 -14
- package/dist/engine/usage-tracker/rate-check.d.ts +0 -7
- package/dist/engine/usage-tracker/rate-check.js +0 -18
- package/dist/engine/usage-tracker/rate-limiter.d.ts +0 -14
- package/dist/engine/usage-tracker/rate-limiter.js +0 -73
- package/dist/engine/usage-tracker/trial.d.ts +0 -27
- package/dist/engine/usage-tracker/trial.js +0 -49
- package/dist/engine/webhook/event-handlers.d.ts +0 -25
- package/dist/engine/webhook/event-handlers.js +0 -89
- package/dist/engine/webhook/index.d.ts +0 -4
- package/dist/engine/webhook/index.js +0 -5
- package/dist/engine/webhook/server.d.ts +0 -12
- package/dist/engine/webhook/server.js +0 -249
- package/dist/engine/webhook/signature.d.ts +0 -16
- package/dist/engine/webhook/signature.js +0 -49
- package/dist/storage/license-store.d.ts +0 -6
- package/dist/storage/license-store.js +0 -63
- package/dist/storage/session-store.d.ts +0 -20
- package/dist/storage/session-store.js +0 -136
- package/dist/tools/activate-license.d.ts +0 -6
- package/dist/tools/activate-license.js +0 -132
- package/dist/tools/checkpoint-handler.d.ts +0 -3
- package/dist/tools/checkpoint-handler.js +0 -130
- package/dist/tools/export-session.d.ts +0 -3
- package/dist/tools/export-session.js +0 -90
- package/dist/tools/license-gate.d.ts +0 -18
- package/dist/tools/license-gate.js +0 -222
- package/dist/tools/license-status.d.ts +0 -3
- package/dist/tools/license-status.js +0 -93
- package/dist/tools/list-sessions.d.ts +0 -3
- package/dist/tools/list-sessions.js +0 -46
- package/dist/tools/planu-session-checkpoint.d.ts +0 -6
- package/dist/tools/planu-session-checkpoint.js +0 -42
- package/dist/tools/restore-session.d.ts +0 -3
- package/dist/tools/restore-session.js +0 -71
- package/dist/tools/spec-history.d.ts +0 -3
- package/dist/tools/spec-history.js +0 -59
- package/dist/tools/webhook.d.ts +0 -6
- package/dist/tools/webhook.js +0 -150
- package/dist/types/changelog.d.ts +0 -49
- package/dist/types/changelog.js +0 -3
- package/dist/types/licensing.d.ts +0 -109
- package/dist/types/licensing.js +0 -4
- package/dist/types/product-intelligence.d.ts +0 -60
- package/dist/types/product-intelligence.js +0 -3
- package/dist/types/session.d.ts +0 -84
- package/dist/types/session.js +0 -3
- package/dist/types/webhook.d.ts +0 -62
- package/dist/types/webhook.js +0 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
-
export
|
|
2
|
+
export { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
|
|
3
3
|
export declare function registerSddTools(server: McpServer): void;
|
|
4
4
|
//# sourceMappingURL=register-sdd-tools.d.ts.map
|
|
@@ -12,35 +12,8 @@ import { handleCreateRule } from './create-rule.js';
|
|
|
12
12
|
import { handleCreateSkill } from './create-skill.js';
|
|
13
13
|
import { handleReconcileUniversalRules } from './reconcile-universal-rules.js';
|
|
14
14
|
import { registerPrompts } from '../prompts/index.js';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
'facilitate',
|
|
18
|
-
'init_project',
|
|
19
|
-
'clarify_requirements',
|
|
20
|
-
'create_spec',
|
|
21
|
-
'list_specs',
|
|
22
|
-
'challenge_spec',
|
|
23
|
-
'check_readiness',
|
|
24
|
-
'update_status',
|
|
25
|
-
'update_status_batch',
|
|
26
|
-
'package_handoff',
|
|
27
|
-
'validate',
|
|
28
|
-
'get_job',
|
|
29
|
-
'watch_job',
|
|
30
|
-
'cancel_job',
|
|
31
|
-
'restart_job',
|
|
32
|
-
'reconcile_spec',
|
|
33
|
-
'create_rule',
|
|
34
|
-
'create_skill',
|
|
35
|
-
'skill_search',
|
|
36
|
-
'configure_code_graph',
|
|
37
|
-
'code_graph_status',
|
|
38
|
-
'submit_feedback',
|
|
39
|
-
'triage_feedback',
|
|
40
|
-
'resolve_feedback',
|
|
41
|
-
'sync_feedback',
|
|
42
|
-
'feedback_status',
|
|
43
|
-
];
|
|
15
|
+
import { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
|
|
16
|
+
export { OFFICIAL_SDD_TOOL_NAMES } from './tool-registry/inventory.js';
|
|
44
17
|
const OFFICIAL_SDD_TOOL_SET = new Set(OFFICIAL_SDD_TOOL_NAMES);
|
|
45
18
|
const noop = () => undefined;
|
|
46
19
|
const DUMMY_TOOL_SLOT = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { t } from '../../i18n/index.js';
|
|
3
|
-
import { safeTracked,
|
|
3
|
+
import { safeTracked, safeGoverned } from '../safe-handler.js';
|
|
4
4
|
import { ChecklistFocusEnum, AuditCategoryEnum, SpecIdSchema } from '../schemas/index.js';
|
|
5
5
|
import { resolveProjectId, missingProjectIdError } from '../resolve-project-id.js';
|
|
6
6
|
import { handleDetectDrift } from '../detect-drift.js';
|
|
@@ -92,7 +92,7 @@ export function registerAnalysisTools(server) {
|
|
|
92
92
|
.optional()
|
|
93
93
|
.describe('Focus areas for the checklist'),
|
|
94
94
|
},
|
|
95
|
-
},
|
|
95
|
+
}, safeGoverned('generate_checklist', async (args) => {
|
|
96
96
|
const pid = resolveProjectId(args);
|
|
97
97
|
if (!pid) {
|
|
98
98
|
return missingProjectIdError;
|
|
@@ -130,7 +130,7 @@ export function registerAnalysisTools(server) {
|
|
|
130
130
|
.optional()
|
|
131
131
|
.describe('Manual changes to apply'),
|
|
132
132
|
},
|
|
133
|
-
},
|
|
133
|
+
}, safeGoverned('reconcile_spec', async (args) => {
|
|
134
134
|
const pid = resolveProjectId(args);
|
|
135
135
|
if (!pid) {
|
|
136
136
|
return missingProjectIdError;
|
|
@@ -178,7 +178,7 @@ export function registerAnalysisTools(server) {
|
|
|
178
178
|
.describe('Audit categories to check'),
|
|
179
179
|
specId: SpecIdSchema.optional().describe('Spec ID to audit against'),
|
|
180
180
|
},
|
|
181
|
-
},
|
|
181
|
+
}, safeGoverned('audit', async (args) => {
|
|
182
182
|
const pid = resolveProjectId(args);
|
|
183
183
|
if (!pid) {
|
|
184
184
|
return missingProjectIdError;
|
|
@@ -220,7 +220,7 @@ export function registerAnalysisTools(server) {
|
|
|
220
220
|
.describe('Path to MCP config file (auto-detected if omitted)'),
|
|
221
221
|
projectId: z.string().max(500).optional().describe('Project ID'),
|
|
222
222
|
},
|
|
223
|
-
},
|
|
223
|
+
}, safeGoverned('discover_mcps', async (args) => handleDiscoverMcps(args)));
|
|
224
224
|
// 19. suggest_mcps
|
|
225
225
|
server.registerTool('suggest_mcps', {
|
|
226
226
|
description: t('tools.suggest_mcps.description'),
|
|
@@ -233,7 +233,7 @@ export function registerAnalysisTools(server) {
|
|
|
233
233
|
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
234
234
|
specId: SpecIdSchema.optional().describe('Spec ID for context-specific suggestions'),
|
|
235
235
|
},
|
|
236
|
-
},
|
|
236
|
+
}, safeGoverned('suggest_mcps', async (args) => {
|
|
237
237
|
const pid = resolveProjectId(args);
|
|
238
238
|
if (!pid) {
|
|
239
239
|
return missingProjectIdError;
|
|
@@ -252,7 +252,7 @@ export function registerAnalysisTools(server) {
|
|
|
252
252
|
.optional()
|
|
253
253
|
.describe('Absolute path to project root. Derives projectId automatically.'),
|
|
254
254
|
},
|
|
255
|
-
},
|
|
255
|
+
}, safeGoverned('suggest_mcp_server', async (args) => {
|
|
256
256
|
const pid = resolveProjectId(args);
|
|
257
257
|
if (!pid) {
|
|
258
258
|
return missingProjectIdError;
|
|
@@ -321,6 +321,6 @@ export function registerAnalysisTools(server) {
|
|
|
321
321
|
.describe('When false (default), done-status specs are skipped (respects SPEC-747 freeze). ' +
|
|
322
322
|
'Set true to migrate done specs (writes backup to planu/backups/ first).'),
|
|
323
323
|
},
|
|
324
|
-
},
|
|
324
|
+
}, safeGoverned('ssr_back_migration', async (args) => handleSsrBackMigration(args)));
|
|
325
325
|
}
|
|
326
326
|
//# sourceMappingURL=analysis-tools.js.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { t } from '../../i18n/index.js';
|
|
3
|
-
import { safeTracked,
|
|
4
|
-
import { SupportedLocaleEnum, SpecStatusEnum,
|
|
3
|
+
import { safeTracked, safeGoverned } from '../safe-handler.js';
|
|
4
|
+
import { SupportedLocaleEnum, SpecStatusEnum, ExperienceLevelEnum, WorkModeEnum, ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, SpecIdSchema, } from '../schemas/index.js';
|
|
5
|
+
import { SpecAcFormatEnum, SpecScopeEnum, SpecTargetEnum, SpecTypeEnum } from '../schemas/spec.js';
|
|
5
6
|
import { handleSetLocale } from '../set-locale.js';
|
|
6
7
|
import { handleInitProject } from '../init-project.js';
|
|
7
8
|
import { handleSetWorkMode } from '../set-work-mode-handler.js';
|
|
@@ -15,6 +16,7 @@ import { handleEstimate } from '../estimate.js';
|
|
|
15
16
|
import { handleReverseEngineer } from '../reverse-engineer.js';
|
|
16
17
|
import { handleValidate } from '../validate.js';
|
|
17
18
|
import { handleTypeSafetyGate } from '../type-safety-gate.js';
|
|
19
|
+
import { runWithTrustedLocalMcpContext } from '../../engine/lifecycle-reconciliation.js';
|
|
18
20
|
/** init_project inputSchema — extracted to keep registerCoreSpecTools within line budget. */
|
|
19
21
|
const INIT_PROJECT_INPUT_SCHEMA = {
|
|
20
22
|
projectPath: z.string().max(4096).describe('Absolute path to the project root'),
|
|
@@ -216,10 +218,7 @@ export function registerCoreSpecTools(server) {
|
|
|
216
218
|
.max(500)
|
|
217
219
|
.optional()
|
|
218
220
|
.describe('Feature group tag (e.g. "Authentication", "Billing"). Added to tags for categorization. Flat structure — no subdirectories created.'),
|
|
219
|
-
acFormat:
|
|
220
|
-
.enum(['bdd', 'checkbox'])
|
|
221
|
-
.optional()
|
|
222
|
-
.describe('SPEC-224: Format for acceptance criteria in spec.md. ' +
|
|
221
|
+
acFormat: SpecAcFormatEnum.optional().describe('SPEC-224: Format for acceptance criteria in spec.md. ' +
|
|
223
222
|
'checkbox (default) — markdown checkboxes (- [ ] criterion). ' +
|
|
224
223
|
'bdd — Gherkin Given-When-Then scenarios for BDD workflows.'),
|
|
225
224
|
clarificationAnswers: z
|
|
@@ -399,12 +398,22 @@ export function registerCoreSpecTools(server) {
|
|
|
399
398
|
.max(2000)
|
|
400
399
|
.optional()
|
|
401
400
|
.describe('SPEC-733: Required for reverse transitions (done→implementing, discarded→draft). Must be ≥30 chars explaining why the spec is being reopened.'),
|
|
401
|
+
reconciliationRequestId: z
|
|
402
|
+
.string()
|
|
403
|
+
.regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u)
|
|
404
|
+
.optional()
|
|
405
|
+
.describe('Trusted local MCP only: lowercase UUID idempotency key for implementing to review reconciliation.'),
|
|
406
|
+
expectedImplementingTransitionId: z.string().max(500).optional(),
|
|
407
|
+
implementationReviewDigest: z
|
|
408
|
+
.string()
|
|
409
|
+
.regex(/^sha256:[a-f0-9]{64}$/u)
|
|
410
|
+
.optional(),
|
|
402
411
|
forceApprove: z
|
|
403
412
|
.boolean()
|
|
404
413
|
.optional()
|
|
405
414
|
.describe('SPEC-769: Force-approve a spec that scored below 70 on the readiness gate. Warnings are stored in spec.md frontmatter. Use when the LLM has explicitly confirmed the spec is ready despite a low readiness score.'),
|
|
406
415
|
},
|
|
407
|
-
}, safeTracked('update_status', async (args) => handleUpdateStatus(args)));
|
|
416
|
+
}, safeTracked('update_status', async (args) => runWithTrustedLocalMcpContext(() => handleUpdateStatus(args))));
|
|
408
417
|
server.registerTool('update_status_batch', {
|
|
409
418
|
description: 'Batch update many specs to the same status in one MCP execution. Uses the same transition rules as update_status and reports updated/skipped/failed per spec.',
|
|
410
419
|
inputSchema: {
|
|
@@ -444,7 +453,7 @@ export function registerCoreSpecTools(server) {
|
|
|
444
453
|
.optional()
|
|
445
454
|
.describe('Analysis depth: shallow (fast scan), deep (full file scan), deep-v2 (full scan + test coverage, dependency graph, API detection, complexity metrics, config analysis). Default: shallow'),
|
|
446
455
|
},
|
|
447
|
-
},
|
|
456
|
+
}, safeGoverned('reverse_engineer', async (args) => handleReverseEngineer(args)));
|
|
448
457
|
// 10. validate
|
|
449
458
|
server.registerTool('validate', {
|
|
450
459
|
description: t('tools.validate.description'),
|
|
@@ -30,27 +30,19 @@ export declare function withToolTimeout<T>(p: Promise<T>, ms: number, fallback:
|
|
|
30
30
|
* graceful MCP error response, preventing server crashes. Also enforces a
|
|
31
31
|
* configurable execution timeout (default 55s, env PLANU_TOOL_TIMEOUT_MS).
|
|
32
32
|
*
|
|
33
|
-
* Usage —
|
|
33
|
+
* Usage — for infrastructure tools that do not need usage recording:
|
|
34
34
|
* server.registerTool('my_tool', schema, safe(async (args) => { ... }));
|
|
35
35
|
*/
|
|
36
36
|
export declare function safe<T>(handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
|
|
37
37
|
/**
|
|
38
|
-
* Composable wrapper: usage tracking + error boundary.
|
|
39
|
-
* Use for free-tier tools that need rate limiting and usage recording.
|
|
38
|
+
* Composable wrapper: neutral local usage tracking + error boundary.
|
|
40
39
|
*
|
|
41
40
|
* Usage:
|
|
42
|
-
* server.registerTool('
|
|
41
|
+
* server.registerTool('tracked_tool', schema, safeTracked('tracked_tool', async (args) => { ... }));
|
|
43
42
|
*/
|
|
44
43
|
export declare function safeTracked<T>(toolName: string, handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
|
|
45
44
|
/**
|
|
46
|
-
*
|
|
47
|
-
* Use for tools that require a paid plan.
|
|
48
|
-
*
|
|
49
|
-
* Trial bypass: if the 30-day free trial is active, skips the license gate
|
|
50
|
-
* entirely and routes to safeTracked (usage tracking without restriction).
|
|
51
|
-
*
|
|
52
|
-
* Usage:
|
|
53
|
-
* server.registerTool('pro_tool', schema, safeLicensed('pro_tool', async (args) => { ... }));
|
|
45
|
+
* Neutral governed wrapper: engineering budget + local usage + error boundary.
|
|
54
46
|
*/
|
|
55
|
-
export declare function
|
|
47
|
+
export declare function safeGoverned<T>(toolName: string, handler: (args: T, extra?: unknown) => Promise<ToolResult>): (args: T, extra?: unknown) => Promise<ToolResult>;
|
|
56
48
|
//# sourceMappingURL=safe-handler.d.ts.map
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
// tools/safe-handler.ts — Generic error-boundary wrapper for MCP tool handlers.
|
|
2
2
|
// Catches any unhandled error and returns a graceful MCP error response
|
|
3
3
|
// instead of crashing the server. Includes cancellation-aware execution deadlines.
|
|
4
|
-
import {
|
|
5
|
-
import { isTrialActive } from '../engine/trial-engine.js';
|
|
4
|
+
import { withUsageTracking } from './usage-tracking.js';
|
|
6
5
|
import { sanitizePath } from './sanitize-path.js';
|
|
7
6
|
import { ensureHooksStarted } from './start-hooks.js';
|
|
8
7
|
import { ensureWorkersStarted } from '../engine/workers/index.js';
|
|
@@ -388,7 +387,7 @@ export function withToolTimeout(p, ms, fallback) {
|
|
|
388
387
|
* graceful MCP error response, preventing server crashes. Also enforces a
|
|
389
388
|
* configurable execution timeout (default 55s, env PLANU_TOOL_TIMEOUT_MS).
|
|
390
389
|
*
|
|
391
|
-
* Usage —
|
|
390
|
+
* Usage — for infrastructure tools that do not need usage recording:
|
|
392
391
|
* server.registerTool('my_tool', schema, safe(async (args) => { ... }));
|
|
393
392
|
*/
|
|
394
393
|
export function safe(handler) {
|
|
@@ -616,26 +615,18 @@ function safeWithTelemetry(toolName, handler) {
|
|
|
616
615
|
};
|
|
617
616
|
}
|
|
618
617
|
/**
|
|
619
|
-
* Composable wrapper: usage tracking + error boundary.
|
|
620
|
-
* Use for free-tier tools that need rate limiting and usage recording.
|
|
618
|
+
* Composable wrapper: neutral local usage tracking + error boundary.
|
|
621
619
|
*
|
|
622
620
|
* Usage:
|
|
623
|
-
* server.registerTool('
|
|
621
|
+
* server.registerTool('tracked_tool', schema, safeTracked('tracked_tool', async (args) => { ... }));
|
|
624
622
|
*/
|
|
625
623
|
export function safeTracked(toolName, handler) {
|
|
626
624
|
return safeWithTelemetry(toolName, withUsageTracking(toolName, handler));
|
|
627
625
|
}
|
|
628
626
|
/**
|
|
629
|
-
*
|
|
630
|
-
* Use for tools that require a paid plan.
|
|
631
|
-
*
|
|
632
|
-
* Trial bypass: if the 30-day free trial is active, skips the license gate
|
|
633
|
-
* entirely and routes to safeTracked (usage tracking without restriction).
|
|
634
|
-
*
|
|
635
|
-
* Usage:
|
|
636
|
-
* server.registerTool('pro_tool', schema, safeLicensed('pro_tool', async (args) => { ... }));
|
|
627
|
+
* Neutral governed wrapper: engineering budget + local usage + error boundary.
|
|
637
628
|
*/
|
|
638
|
-
export function
|
|
629
|
+
export function safeGoverned(toolName, handler) {
|
|
639
630
|
return safeWithTelemetry(toolName, async (args, extra) => {
|
|
640
631
|
// Enforce spec budget limit when specId is present in args (opt-in enforcement)
|
|
641
632
|
if (args !== null && typeof args === 'object') {
|
|
@@ -646,14 +637,7 @@ export function safeLicensed(toolName, handler) {
|
|
|
646
637
|
await checkBudgetEnforcement(specId, projectPath);
|
|
647
638
|
}
|
|
648
639
|
}
|
|
649
|
-
|
|
650
|
-
if (process.env.PLANU_SKIP_TRIAL !== 'true') {
|
|
651
|
-
const trialActive = isTrialActive(); // always false — trial tools removed
|
|
652
|
-
if (trialActive) {
|
|
653
|
-
return withUsageTracking(toolName, handler)(args, extra);
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
return withUsageTracking(toolName, withLicenseGate(toolName, handler))(args, extra);
|
|
640
|
+
return withUsageTracking(toolName, handler)(args, extra);
|
|
657
641
|
});
|
|
658
642
|
}
|
|
659
643
|
//# sourceMappingURL=safe-handler.js.map
|
|
@@ -16,7 +16,7 @@ export { TokenIntelligencePeriodEnum, TokenIntelligenceGroupByEnum, TokenIntelli
|
|
|
16
16
|
export { ProjectGraphActionEnum, ProjectGraphQueryKindEnum } from './project-graph.js';
|
|
17
17
|
export { ConfigureLLMProvidersActionEnum, LoadBalancingStrategyEnum, } from './llm-provider-schemas.js';
|
|
18
18
|
export { PluginActionEnum } from './plugins-schemas.js';
|
|
19
|
-
export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema,
|
|
19
|
+
export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema, } from './output-schemas.js';
|
|
20
20
|
export { CreatePRFromSpecSchema, PRStatusSchema, ReviewPRSchema, CreateReleaseSchema, GenerateChangelogSchema, } from './github.js';
|
|
21
21
|
export { SkillSearchInputSchema, SkillInstallInputSchema } from './skill-registry-schemas.js';
|
|
22
22
|
export { EcosystemStatusInputSchema } from './ecosystem-schemas.js';
|
|
@@ -17,7 +17,7 @@ export { TokenIntelligencePeriodEnum, TokenIntelligenceGroupByEnum, TokenIntelli
|
|
|
17
17
|
export { ProjectGraphActionEnum, ProjectGraphQueryKindEnum } from './project-graph.js';
|
|
18
18
|
export { ConfigureLLMProvidersActionEnum, LoadBalancingStrategyEnum, } from './llm-provider-schemas.js';
|
|
19
19
|
export { PluginActionEnum } from './plugins-schemas.js';
|
|
20
|
-
export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema,
|
|
20
|
+
export { ListSpecsOutputSchema, EstimateOutputSchema, ValidateOutputSchema, CheckReadinessOutputSchema, } from './output-schemas.js';
|
|
21
21
|
export { CreatePRFromSpecSchema, PRStatusSchema, ReviewPRSchema, CreateReleaseSchema, GenerateChangelogSchema, } from './github.js';
|
|
22
22
|
export { SkillSearchInputSchema, SkillInstallInputSchema } from './skill-registry-schemas.js';
|
|
23
23
|
export { EcosystemStatusInputSchema } from './ecosystem-schemas.js';
|
|
@@ -216,27 +216,4 @@ export declare const CheckReadinessOutputSchema: {
|
|
|
216
216
|
}, z.core.$strip>>;
|
|
217
217
|
humanSummary: z.ZodOptional<z.ZodString>;
|
|
218
218
|
};
|
|
219
|
-
export declare const LicenseStatusOutputSchema: {
|
|
220
|
-
version: z.ZodString;
|
|
221
|
-
plan: z.ZodString;
|
|
222
|
-
toolsAvailable: z.ZodNumber;
|
|
223
|
-
toolsTotal: z.ZodNumber;
|
|
224
|
-
limits: z.ZodObject<{
|
|
225
|
-
maxProjects: z.ZodNumber;
|
|
226
|
-
currentProjects: z.ZodNumber;
|
|
227
|
-
maxActiveSpecs: z.ZodNumber;
|
|
228
|
-
}, z.core.$strip>;
|
|
229
|
-
customer: z.ZodOptional<z.ZodObject<{
|
|
230
|
-
name: z.ZodString;
|
|
231
|
-
email: z.ZodString;
|
|
232
|
-
variant: z.ZodString;
|
|
233
|
-
activatedAt: z.ZodString;
|
|
234
|
-
lastValidatedAt: z.ZodString;
|
|
235
|
-
}, z.core.$strip>>;
|
|
236
|
-
activationSlots: z.ZodOptional<z.ZodObject<{
|
|
237
|
-
used: z.ZodNumber;
|
|
238
|
-
total: z.ZodNumber;
|
|
239
|
-
}, z.core.$strip>>;
|
|
240
|
-
upgradeUrl: z.ZodOptional<z.ZodString>;
|
|
241
|
-
};
|
|
242
219
|
//# sourceMappingURL=output-schemas.d.ts.map
|
|
@@ -159,32 +159,4 @@ export const CheckReadinessOutputSchema = {
|
|
|
159
159
|
.optional(),
|
|
160
160
|
humanSummary: z.string().optional(),
|
|
161
161
|
};
|
|
162
|
-
// ── license_status ──────────────────────────────────────────────────────────
|
|
163
|
-
export const LicenseStatusOutputSchema = {
|
|
164
|
-
version: z.string(),
|
|
165
|
-
plan: z.string(),
|
|
166
|
-
toolsAvailable: z.number(),
|
|
167
|
-
toolsTotal: z.number(),
|
|
168
|
-
limits: z.object({
|
|
169
|
-
maxProjects: z.number(),
|
|
170
|
-
currentProjects: z.number(),
|
|
171
|
-
maxActiveSpecs: z.number(),
|
|
172
|
-
}),
|
|
173
|
-
customer: z
|
|
174
|
-
.object({
|
|
175
|
-
name: z.string(),
|
|
176
|
-
email: z.string(),
|
|
177
|
-
variant: z.string(),
|
|
178
|
-
activatedAt: z.string(),
|
|
179
|
-
lastValidatedAt: z.string(),
|
|
180
|
-
})
|
|
181
|
-
.optional(),
|
|
182
|
-
activationSlots: z
|
|
183
|
-
.object({
|
|
184
|
-
used: z.number(),
|
|
185
|
-
total: z.number(),
|
|
186
|
-
})
|
|
187
|
-
.optional(),
|
|
188
|
-
upgradeUrl: z.string().optional(),
|
|
189
|
-
};
|
|
190
162
|
//# sourceMappingURL=output-schemas.js.map
|
|
@@ -38,6 +38,10 @@ export declare const SpecTargetEnum: z.ZodEnum<{
|
|
|
38
38
|
ios: "ios";
|
|
39
39
|
shared: "shared";
|
|
40
40
|
}>;
|
|
41
|
+
export declare const SpecAcFormatEnum: z.ZodEnum<{
|
|
42
|
+
bdd: "bdd";
|
|
43
|
+
checkbox: "checkbox";
|
|
44
|
+
}>;
|
|
41
45
|
export declare const ExperienceLevelEnum: z.ZodEnum<{
|
|
42
46
|
beginner: "beginner";
|
|
43
47
|
expert: "expert";
|
|
@@ -31,6 +31,9 @@ export const SpecTargetEnum = z
|
|
|
31
31
|
'android',
|
|
32
32
|
])
|
|
33
33
|
.describe('Target area: frontend | backend | shared | fullstack | infrastructure | database | ios | android');
|
|
34
|
+
export const SpecAcFormatEnum = z
|
|
35
|
+
.enum(['bdd', 'checkbox'])
|
|
36
|
+
.describe('Acceptance criteria format: bdd | checkbox');
|
|
34
37
|
export const ExperienceLevelEnum = z
|
|
35
38
|
.enum(['beginner', 'intermediate', 'expert'])
|
|
36
39
|
.describe('Experience level: beginner, intermediate, or expert');
|
|
@@ -244,6 +244,17 @@ export declare const ValidateOutputSchema: {
|
|
|
244
244
|
}>;
|
|
245
245
|
submittedAt: z.ZodISODateTime;
|
|
246
246
|
cursor: z.ZodString;
|
|
247
|
+
queue: z.ZodObject<{
|
|
248
|
+
status: z.ZodEnum<{
|
|
249
|
+
active: "active";
|
|
250
|
+
queued: "queued";
|
|
251
|
+
terminal: "terminal";
|
|
252
|
+
}>;
|
|
253
|
+
position: z.ZodNullable<z.ZodNumber>;
|
|
254
|
+
aheadCount: z.ZodNumber;
|
|
255
|
+
capacity: z.ZodNumber;
|
|
256
|
+
remainingBudgetMs: z.ZodNumber;
|
|
257
|
+
}, z.core.$strip>;
|
|
247
258
|
terminalStates: z.ZodTuple<[z.ZodLiteral<"completed">, z.ZodLiteral<"failed">, z.ZodLiteral<"cancelled">, z.ZodLiteral<"dead-letter">], null>;
|
|
248
259
|
resultSchema: z.ZodLiteral<"validate-completion/v1">;
|
|
249
260
|
observation: z.ZodObject<{
|
|
@@ -195,6 +195,13 @@ export const ValidateOutputSchema = {
|
|
|
195
195
|
state: z.enum(['accepted', 'running', 'checkpointed']),
|
|
196
196
|
submittedAt: z.iso.datetime(),
|
|
197
197
|
cursor: z.string().regex(/^[a-f0-9]{64}$/),
|
|
198
|
+
queue: z.object({
|
|
199
|
+
status: z.enum(['active', 'queued', 'terminal']),
|
|
200
|
+
position: z.number().int().positive().nullable(),
|
|
201
|
+
aheadCount: z.number().int().nonnegative(),
|
|
202
|
+
capacity: z.number().int().positive(),
|
|
203
|
+
remainingBudgetMs: z.number().int().nonnegative(),
|
|
204
|
+
}),
|
|
198
205
|
terminalStates: z.tuple([
|
|
199
206
|
z.literal('completed'),
|
|
200
207
|
z.literal('failed'),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { safeGoverned } from './safe-handler.js';
|
|
3
3
|
import { getSpec } from '../storage/spec-store.js';
|
|
4
4
|
import { hashProjectPath } from '../storage/base-store.js';
|
|
5
5
|
import { generatePromptFromSpec } from '../engine/spec-prompt-generator.js';
|
|
@@ -109,7 +109,7 @@ export function registerSpecPromptHandlers(server) {
|
|
|
109
109
|
destructiveHint: false,
|
|
110
110
|
openWorldHint: false,
|
|
111
111
|
},
|
|
112
|
-
},
|
|
112
|
+
}, safeGoverned('expose_spec_as_prompt', async (args) => handleExposeSpecAsPrompt(args, server)));
|
|
113
113
|
server.registerTool('list_spec_prompts', {
|
|
114
114
|
description: 'List all Planu spec prompts registered in the current session. ' +
|
|
115
115
|
'Returns prompt names, spec IDs, and titles.',
|
|
@@ -120,6 +120,6 @@ export function registerSpecPromptHandlers(server) {
|
|
|
120
120
|
destructiveHint: false,
|
|
121
121
|
openWorldHint: false,
|
|
122
122
|
},
|
|
123
|
-
},
|
|
123
|
+
}, safeGoverned('list_spec_prompts', (args) => Promise.resolve(handleListSpecPrompts(args))));
|
|
124
124
|
}
|
|
125
125
|
//# sourceMappingURL=spec-prompt-handler.js.map
|
|
@@ -12,7 +12,7 @@ export declare function syncSpecState(projectPath: string, projectId: string): P
|
|
|
12
12
|
export declare function startupSync(): Promise<void>;
|
|
13
13
|
/**
|
|
14
14
|
* Registers the sync_spec_state tool on the MCP server (SPEC-334).
|
|
15
|
-
* Always-on (free) tool — registered directly without
|
|
15
|
+
* Always-on (free) tool — registered directly without safeGoverned.
|
|
16
16
|
*/
|
|
17
17
|
export declare function registerSyncSpecStateTool(server: McpServer): void;
|
|
18
18
|
//# sourceMappingURL=sync-spec-state-handler.d.ts.map
|
|
@@ -196,7 +196,7 @@ function formatReport(report, label) {
|
|
|
196
196
|
// ---------------------------------------------------------------------------
|
|
197
197
|
/**
|
|
198
198
|
* Registers the sync_spec_state tool on the MCP server (SPEC-334).
|
|
199
|
-
* Always-on (free) tool — registered directly without
|
|
199
|
+
* Always-on (free) tool — registered directly without safeGoverned.
|
|
200
200
|
*/
|
|
201
201
|
export function registerSyncSpecStateTool(server) {
|
|
202
202
|
server.registerTool('sync_spec_state', {
|
|
@@ -29,12 +29,12 @@ export interface ToolEntry {
|
|
|
29
29
|
annotations?: Record<string, unknown>;
|
|
30
30
|
/**
|
|
31
31
|
* Which safe-handler wrapper to apply.
|
|
32
|
-
* - 'tracked' → safeTracked (
|
|
33
|
-
* - '
|
|
34
|
-
* - 'safe' → safe (no
|
|
32
|
+
* - 'tracked' → safeTracked (local usage tracking) [default]
|
|
33
|
+
* - 'governed' → safeGoverned (engineering budget + local usage)
|
|
34
|
+
* - 'safe' → safe (no usage tracking — for infra/admin tools)
|
|
35
35
|
* - 'none' → raw handler with no wrapper (rare — test only)
|
|
36
36
|
*/
|
|
37
|
-
wrap?: 'tracked' | '
|
|
37
|
+
wrap?: 'tracked' | 'governed' | 'safe' | 'none';
|
|
38
38
|
/**
|
|
39
39
|
* Optional Zod output schema for MCP outputSchema validation.
|
|
40
40
|
* When provided, passed as `outputSchema` to server.registerTool().
|
package/dist/tools/tool-entry.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Phase 1 (refactor/declarative-registry): replaces the register-*-tools.ts boilerplate pattern:
|
|
4
4
|
// server.registerTool(name, { description, inputSchema, annotations }, safeXxx(name, handler))
|
|
5
5
|
// with a plain data array that registerFromEntries() consumes.
|
|
6
|
-
import { safe,
|
|
6
|
+
import { safe, safeGoverned, safeTracked } from './safe-handler.js';
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
// Registration helper
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
@@ -21,8 +21,8 @@ export function registerFromEntries(server, entries) {
|
|
|
21
21
|
if (wrap === 'none') {
|
|
22
22
|
wrappedHandler = handler;
|
|
23
23
|
}
|
|
24
|
-
else if (wrap === '
|
|
25
|
-
wrappedHandler =
|
|
24
|
+
else if (wrap === 'governed') {
|
|
25
|
+
wrappedHandler = safeGoverned(name, handler);
|
|
26
26
|
}
|
|
27
27
|
else if (wrap === 'safe') {
|
|
28
28
|
wrappedHandler = safe(handler);
|