@aquex/cmos-mcp 1.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 +99 -0
- package/LICENSE +15 -0
- package/README.md +250 -0
- package/cmos-seed/README.md +153 -0
- package/cmos-seed/context/master_context.json +27 -0
- package/cmos-seed/context/project_context.json +12 -0
- package/cmos-seed/db/schema.sql +334 -0
- package/cmos-seed/docs/README.md +128 -0
- package/cmos-seed/docs/agents-md-guide.md +253 -0
- package/cmos-seed/docs/build-session-prompt.md +137 -0
- package/cmos-seed/docs/getting-started.md +150 -0
- package/cmos-seed/docs/session-management-guide.md +163 -0
- package/cmos-seed/docs/sqlite-schema-reference.md +188 -0
- package/cmos-seed/foundational-docs/roadmap_template.md +365 -0
- package/cmos-seed/foundational-docs/tech_arch_template.md +331 -0
- package/cmos-seed/templates/PROJECT-README-template.md +110 -0
- package/cmos-seed/templates/agents.md +306 -0
- package/cmos-seed/tiers/build.md +110 -0
- package/cmos-seed/tiers/general.md +112 -0
- package/cmos-seed/tiers/managed.md +118 -0
- package/dist/.build-manifest.json +5 -0
- package/dist/auth/auth-state.d.ts +96 -0
- package/dist/auth/auth-state.d.ts.map +1 -0
- package/dist/auth/auth-state.js +115 -0
- package/dist/auth/auth-state.js.map +1 -0
- package/dist/auth/delivery-ack-cache.d.ts +27 -0
- package/dist/auth/delivery-ack-cache.d.ts.map +1 -0
- package/dist/auth/delivery-ack-cache.js +21 -0
- package/dist/auth/delivery-ack-cache.js.map +1 -0
- package/dist/auth/device-code.d.ts +136 -0
- package/dist/auth/device-code.d.ts.map +1 -0
- package/dist/auth/device-code.js +334 -0
- package/dist/auth/device-code.js.map +1 -0
- package/dist/auth/project-key-capture.d.ts +124 -0
- package/dist/auth/project-key-capture.d.ts.map +1 -0
- package/dist/auth/project-key-capture.js +218 -0
- package/dist/auth/project-key-capture.js.map +1 -0
- package/dist/combination/dependency-resolver.d.ts +69 -0
- package/dist/combination/dependency-resolver.d.ts.map +1 -0
- package/dist/combination/dependency-resolver.js +303 -0
- package/dist/combination/dependency-resolver.js.map +1 -0
- package/dist/combination/merge-strategies.d.ts +87 -0
- package/dist/combination/merge-strategies.d.ts.map +1 -0
- package/dist/combination/merge-strategies.js +210 -0
- package/dist/combination/merge-strategies.js.map +1 -0
- package/dist/combination/pack-combiner.d.ts +84 -0
- package/dist/combination/pack-combiner.d.ts.map +1 -0
- package/dist/combination/pack-combiner.js +288 -0
- package/dist/combination/pack-combiner.js.map +1 -0
- package/dist/combination/types.d.ts +112 -0
- package/dist/combination/types.d.ts.map +1 -0
- package/dist/combination/types.js +39 -0
- package/dist/combination/types.js.map +1 -0
- package/dist/domains/domain-pack-loader.d.ts +148 -0
- package/dist/domains/domain-pack-loader.d.ts.map +1 -0
- package/dist/domains/domain-pack-loader.js +501 -0
- package/dist/domains/domain-pack-loader.js.map +1 -0
- package/dist/domains/types.d.ts +64 -0
- package/dist/domains/types.d.ts.map +1 -0
- package/dist/domains/types.js +10 -0
- package/dist/domains/types.js.map +1 -0
- package/dist/errors/config-error.d.ts +13 -0
- package/dist/errors/config-error.d.ts.map +1 -0
- package/dist/errors/config-error.js +19 -0
- package/dist/errors/config-error.js.map +1 -0
- package/dist/errors/domain-error.d.ts +13 -0
- package/dist/errors/domain-error.d.ts.map +1 -0
- package/dist/errors/domain-error.js +19 -0
- package/dist/errors/domain-error.js.map +1 -0
- package/dist/errors/handler.d.ts +30 -0
- package/dist/errors/handler.d.ts.map +1 -0
- package/dist/errors/handler.js +63 -0
- package/dist/errors/handler.js.map +1 -0
- package/dist/errors/index.d.ts +9 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +25 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/io-error.d.ts +13 -0
- package/dist/errors/io-error.d.ts.map +1 -0
- package/dist/errors/io-error.js +19 -0
- package/dist/errors/io-error.js.map +1 -0
- package/dist/errors/logger.d.ts +21 -0
- package/dist/errors/logger.d.ts.map +1 -0
- package/dist/errors/logger.js +88 -0
- package/dist/errors/logger.js.map +1 -0
- package/dist/errors/mission-error.d.ts +27 -0
- package/dist/errors/mission-error.d.ts.map +1 -0
- package/dist/errors/mission-error.js +76 -0
- package/dist/errors/mission-error.js.map +1 -0
- package/dist/errors/types.d.ts +52 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/errors/types.js +3 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/errors/utils.d.ts +24 -0
- package/dist/errors/utils.d.ts.map +1 -0
- package/dist/errors/utils.js +64 -0
- package/dist/errors/utils.js.map +1 -0
- package/dist/errors/validation-error.d.ts +13 -0
- package/dist/errors/validation-error.d.ts.map +1 -0
- package/dist/errors/validation-error.js +19 -0
- package/dist/errors/validation-error.js.map +1 -0
- package/dist/extraction/template-extractor.d.ts +59 -0
- package/dist/extraction/template-extractor.d.ts.map +1 -0
- package/dist/extraction/template-extractor.js +553 -0
- package/dist/extraction/template-extractor.js.map +1 -0
- package/dist/extraction/types.d.ts +160 -0
- package/dist/extraction/types.d.ts.map +1 -0
- package/dist/extraction/types.js +7 -0
- package/dist/extraction/types.js.map +1 -0
- package/dist/http-server.d.ts +18 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +326 -0
- package/dist/http-server.js.map +1 -0
- package/dist/import-export/hybrid-template-parser.d.ts +44 -0
- package/dist/import-export/hybrid-template-parser.d.ts.map +1 -0
- package/dist/import-export/hybrid-template-parser.js +373 -0
- package/dist/import-export/hybrid-template-parser.js.map +1 -0
- package/dist/import-export/security-validator.d.ts +93 -0
- package/dist/import-export/security-validator.d.ts.map +1 -0
- package/dist/import-export/security-validator.js +441 -0
- package/dist/import-export/security-validator.js.map +1 -0
- package/dist/import-export/template-exporter.d.ts +106 -0
- package/dist/import-export/template-exporter.d.ts.map +1 -0
- package/dist/import-export/template-exporter.js +247 -0
- package/dist/import-export/template-exporter.js.map +1 -0
- package/dist/import-export/template-importer.d.ts +97 -0
- package/dist/import-export/template-importer.d.ts.map +1 -0
- package/dist/import-export/template-importer.js +308 -0
- package/dist/import-export/template-importer.js.map +1 -0
- package/dist/import-export/types.d.ts +118 -0
- package/dist/import-export/types.d.ts.map +1 -0
- package/dist/import-export/types.js +41 -0
- package/dist/import-export/types.js.map +1 -0
- package/dist/index.d.ts +157 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +972 -0
- package/dist/index.js.map +1 -0
- package/dist/intelligence/agentic-controller.d.ts +345 -0
- package/dist/intelligence/agentic-controller.d.ts.map +1 -0
- package/dist/intelligence/agentic-controller.js +1376 -0
- package/dist/intelligence/agentic-controller.js.map +1 -0
- package/dist/intelligence/agentic-observability.d.ts +43 -0
- package/dist/intelligence/agentic-observability.d.ts.map +1 -0
- package/dist/intelligence/agentic-observability.js +62 -0
- package/dist/intelligence/agentic-observability.js.map +1 -0
- package/dist/intelligence/agents-md-loader.d.ts +81 -0
- package/dist/intelligence/agents-md-loader.d.ts.map +1 -0
- package/dist/intelligence/agents-md-loader.js +298 -0
- package/dist/intelligence/agents-md-loader.js.map +1 -0
- package/dist/intelligence/attribution-verification.d.ts +58 -0
- package/dist/intelligence/attribution-verification.d.ts.map +1 -0
- package/dist/intelligence/attribution-verification.js +133 -0
- package/dist/intelligence/attribution-verification.js.map +1 -0
- package/dist/intelligence/boomerang-workflow.d.ts +87 -0
- package/dist/intelligence/boomerang-workflow.d.ts.map +1 -0
- package/dist/intelligence/boomerang-workflow.js +311 -0
- package/dist/intelligence/boomerang-workflow.js.map +1 -0
- package/dist/intelligence/cmos-detector.d.ts +42 -0
- package/dist/intelligence/cmos-detector.d.ts.map +1 -0
- package/dist/intelligence/cmos-detector.js +94 -0
- package/dist/intelligence/cmos-detector.js.map +1 -0
- package/dist/intelligence/cmos-sync.d.ts +101 -0
- package/dist/intelligence/cmos-sync.d.ts.map +1 -0
- package/dist/intelligence/cmos-sync.js +435 -0
- package/dist/intelligence/cmos-sync.js.map +1 -0
- package/dist/intelligence/complexity-scorer.d.ts +111 -0
- package/dist/intelligence/complexity-scorer.d.ts.map +1 -0
- package/dist/intelligence/complexity-scorer.js +299 -0
- package/dist/intelligence/complexity-scorer.js.map +1 -0
- package/dist/intelligence/compression-rules.d.ts +62 -0
- package/dist/intelligence/compression-rules.d.ts.map +1 -0
- package/dist/intelligence/compression-rules.js +303 -0
- package/dist/intelligence/compression-rules.js.map +1 -0
- package/dist/intelligence/content-sanitizer.d.ts +61 -0
- package/dist/intelligence/content-sanitizer.d.ts.map +1 -0
- package/dist/intelligence/content-sanitizer.js +170 -0
- package/dist/intelligence/content-sanitizer.js.map +1 -0
- package/dist/intelligence/context-propagator-v2.d.ts +23 -0
- package/dist/intelligence/context-propagator-v2.d.ts.map +1 -0
- package/dist/intelligence/context-propagator-v2.js +37 -0
- package/dist/intelligence/context-propagator-v2.js.map +1 -0
- package/dist/intelligence/context-propagator-v3.d.ts +46 -0
- package/dist/intelligence/context-propagator-v3.d.ts.map +1 -0
- package/dist/intelligence/context-propagator-v3.js +266 -0
- package/dist/intelligence/context-propagator-v3.js.map +1 -0
- package/dist/intelligence/context-propagator.d.ts +108 -0
- package/dist/intelligence/context-propagator.d.ts.map +1 -0
- package/dist/intelligence/context-propagator.js +283 -0
- package/dist/intelligence/context-propagator.js.map +1 -0
- package/dist/intelligence/context-windows.d.ts +5 -0
- package/dist/intelligence/context-windows.d.ts.map +1 -0
- package/dist/intelligence/context-windows.js +18 -0
- package/dist/intelligence/context-windows.js.map +1 -0
- package/dist/intelligence/credential-store.d.ts +145 -0
- package/dist/intelligence/credential-store.d.ts.map +1 -0
- package/dist/intelligence/credential-store.js +243 -0
- package/dist/intelligence/credential-store.js.map +1 -0
- package/dist/intelligence/dependency-analyzer.d.ts +117 -0
- package/dist/intelligence/dependency-analyzer.d.ts.map +1 -0
- package/dist/intelligence/dependency-analyzer.js +398 -0
- package/dist/intelligence/dependency-analyzer.js.map +1 -0
- package/dist/intelligence/dependency-inferrer.d.ts +68 -0
- package/dist/intelligence/dependency-inferrer.d.ts.map +1 -0
- package/dist/intelligence/dependency-inferrer.js +281 -0
- package/dist/intelligence/dependency-inferrer.js.map +1 -0
- package/dist/intelligence/enhanced-dependency-analyzer.d.ts +25 -0
- package/dist/intelligence/enhanced-dependency-analyzer.d.ts.map +1 -0
- package/dist/intelligence/enhanced-dependency-analyzer.js +207 -0
- package/dist/intelligence/enhanced-dependency-analyzer.js.map +1 -0
- package/dist/intelligence/graph-validator.d.ts +61 -0
- package/dist/intelligence/graph-validator.d.ts.map +1 -0
- package/dist/intelligence/graph-validator.js +212 -0
- package/dist/intelligence/graph-validator.js.map +1 -0
- package/dist/intelligence/lifecycle-analyzer.d.ts +64 -0
- package/dist/intelligence/lifecycle-analyzer.d.ts.map +1 -0
- package/dist/intelligence/lifecycle-analyzer.js +587 -0
- package/dist/intelligence/lifecycle-analyzer.js.map +1 -0
- package/dist/intelligence/mission-history.d.ts +56 -0
- package/dist/intelligence/mission-history.d.ts.map +1 -0
- package/dist/intelligence/mission-history.js +145 -0
- package/dist/intelligence/mission-history.js.map +1 -0
- package/dist/intelligence/mission-outcome-analytics.d.ts +84 -0
- package/dist/intelligence/mission-outcome-analytics.d.ts.map +1 -0
- package/dist/intelligence/mission-outcome-analytics.js +499 -0
- package/dist/intelligence/mission-outcome-analytics.js.map +1 -0
- package/dist/intelligence/mission-splitter.d.ts +148 -0
- package/dist/intelligence/mission-splitter.d.ts.map +1 -0
- package/dist/intelligence/mission-splitter.js +461 -0
- package/dist/intelligence/mission-splitter.js.map +1 -0
- package/dist/intelligence/model-transpilers.d.ts +59 -0
- package/dist/intelligence/model-transpilers.d.ts.map +1 -0
- package/dist/intelligence/model-transpilers.js +185 -0
- package/dist/intelligence/model-transpilers.js.map +1 -0
- package/dist/intelligence/project-registry.d.ts +265 -0
- package/dist/intelligence/project-registry.d.ts.map +1 -0
- package/dist/intelligence/project-registry.js +484 -0
- package/dist/intelligence/project-registry.js.map +1 -0
- package/dist/intelligence/rsip-loop.d.ts +52 -0
- package/dist/intelligence/rsip-loop.d.ts.map +1 -0
- package/dist/intelligence/rsip-loop.js +139 -0
- package/dist/intelligence/rsip-loop.js.map +1 -0
- package/dist/intelligence/sender-context.d.ts +114 -0
- package/dist/intelligence/sender-context.d.ts.map +1 -0
- package/dist/intelligence/sender-context.js +275 -0
- package/dist/intelligence/sender-context.js.map +1 -0
- package/dist/intelligence/sqlite-client.d.ts +144 -0
- package/dist/intelligence/sqlite-client.d.ts.map +1 -0
- package/dist/intelligence/sqlite-client.js +568 -0
- package/dist/intelligence/sqlite-client.js.map +1 -0
- package/dist/intelligence/telemetry.d.ts +44 -0
- package/dist/intelligence/telemetry.d.ts.map +1 -0
- package/dist/intelligence/telemetry.js +106 -0
- package/dist/intelligence/telemetry.js.map +1 -0
- package/dist/intelligence/token-counters.d.ts +69 -0
- package/dist/intelligence/token-counters.d.ts.map +1 -0
- package/dist/intelligence/token-counters.js +197 -0
- package/dist/intelligence/token-counters.js.map +1 -0
- package/dist/intelligence/token-optimizer.d.ts +52 -0
- package/dist/intelligence/token-optimizer.d.ts.map +1 -0
- package/dist/intelligence/token-optimizer.js +205 -0
- package/dist/intelligence/token-optimizer.js.map +1 -0
- package/dist/intelligence/tokenizer-bootstrap.d.ts +54 -0
- package/dist/intelligence/tokenizer-bootstrap.d.ts.map +1 -0
- package/dist/intelligence/tokenizer-bootstrap.js +238 -0
- package/dist/intelligence/tokenizer-bootstrap.js.map +1 -0
- package/dist/intelligence/types.d.ts +117 -0
- package/dist/intelligence/types.d.ts.map +1 -0
- package/dist/intelligence/types.js +8 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/intelligence/worker-manifest-loader.d.ts +70 -0
- package/dist/intelligence/worker-manifest-loader.d.ts.map +1 -0
- package/dist/intelligence/worker-manifest-loader.js +387 -0
- package/dist/intelligence/worker-manifest-loader.js.map +1 -0
- package/dist/loaders/yaml-loader.d.ts +99 -0
- package/dist/loaders/yaml-loader.d.ts.map +1 -0
- package/dist/loaders/yaml-loader.js +236 -0
- package/dist/loaders/yaml-loader.js.map +1 -0
- package/dist/merge/deep-merge.d.ts +93 -0
- package/dist/merge/deep-merge.d.ts.map +1 -0
- package/dist/merge/deep-merge.js +168 -0
- package/dist/merge/deep-merge.js.map +1 -0
- package/dist/quality/analyzers/ai-readiness-analyzer.d.ts +35 -0
- package/dist/quality/analyzers/ai-readiness-analyzer.d.ts.map +1 -0
- package/dist/quality/analyzers/ai-readiness-analyzer.js +357 -0
- package/dist/quality/analyzers/ai-readiness-analyzer.js.map +1 -0
- package/dist/quality/analyzers/clarity-analyzer.d.ts +52 -0
- package/dist/quality/analyzers/clarity-analyzer.d.ts.map +1 -0
- package/dist/quality/analyzers/clarity-analyzer.js +405 -0
- package/dist/quality/analyzers/clarity-analyzer.js.map +1 -0
- package/dist/quality/analyzers/completeness-analyzer.d.ts +45 -0
- package/dist/quality/analyzers/completeness-analyzer.d.ts.map +1 -0
- package/dist/quality/analyzers/completeness-analyzer.js +331 -0
- package/dist/quality/analyzers/completeness-analyzer.js.map +1 -0
- package/dist/quality/improvement-engine.d.ts +37 -0
- package/dist/quality/improvement-engine.d.ts.map +1 -0
- package/dist/quality/improvement-engine.js +260 -0
- package/dist/quality/improvement-engine.js.map +1 -0
- package/dist/quality/quality-scorer.d.ts +36 -0
- package/dist/quality/quality-scorer.d.ts.map +1 -0
- package/dist/quality/quality-scorer.js +95 -0
- package/dist/quality/quality-scorer.js.map +1 -0
- package/dist/quality/types.d.ts +92 -0
- package/dist/quality/types.d.ts.map +1 -0
- package/dist/quality/types.js +33 -0
- package/dist/quality/types.js.map +1 -0
- package/dist/registry/registry-parser.d.ts +59 -0
- package/dist/registry/registry-parser.d.ts.map +1 -0
- package/dist/registry/registry-parser.js +161 -0
- package/dist/registry/registry-parser.js.map +1 -0
- package/dist/registry/semver-validator.d.ts +48 -0
- package/dist/registry/semver-validator.d.ts.map +1 -0
- package/dist/registry/semver-validator.js +115 -0
- package/dist/registry/semver-validator.js.map +1 -0
- package/dist/schemas/generic-mission.d.ts +120 -0
- package/dist/schemas/generic-mission.d.ts.map +1 -0
- package/dist/schemas/generic-mission.js +118 -0
- package/dist/schemas/generic-mission.js.map +1 -0
- package/dist/security/workspace-guard.d.ts +10 -0
- package/dist/security/workspace-guard.d.ts.map +1 -0
- package/dist/security/workspace-guard.js +116 -0
- package/dist/security/workspace-guard.js.map +1 -0
- package/dist/server-health.d.ts +73 -0
- package/dist/server-health.d.ts.map +1 -0
- package/dist/server-health.js +181 -0
- package/dist/server-health.js.map +1 -0
- package/dist/tools/analyze-dependencies.d.ts +99 -0
- package/dist/tools/analyze-dependencies.d.ts.map +1 -0
- package/dist/tools/analyze-dependencies.js +329 -0
- package/dist/tools/analyze-dependencies.js.map +1 -0
- package/dist/tools/cmos/agent-feedback.d.ts +25 -0
- package/dist/tools/cmos/agent-feedback.d.ts.map +1 -0
- package/dist/tools/cmos/agent-feedback.js +50 -0
- package/dist/tools/cmos/agent-feedback.js.map +1 -0
- package/dist/tools/cmos/blob-migrations.d.ts +77 -0
- package/dist/tools/cmos/blob-migrations.d.ts.map +1 -0
- package/dist/tools/cmos/blob-migrations.js +210 -0
- package/dist/tools/cmos/blob-migrations.js.map +1 -0
- package/dist/tools/cmos/checkpoint-backfill.d.ts +33 -0
- package/dist/tools/cmos/checkpoint-backfill.d.ts.map +1 -0
- package/dist/tools/cmos/checkpoint-backfill.js +186 -0
- package/dist/tools/cmos/checkpoint-backfill.js.map +1 -0
- package/dist/tools/cmos/client.d.ts +293 -0
- package/dist/tools/cmos/client.d.ts.map +1 -0
- package/dist/tools/cmos/client.js +669 -0
- package/dist/tools/cmos/client.js.map +1 -0
- package/dist/tools/cmos/cmos-agent-onboard.d.ts +344 -0
- package/dist/tools/cmos/cmos-agent-onboard.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-agent-onboard.js +1533 -0
- package/dist/tools/cmos/cmos-agent-onboard.js.map +1 -0
- package/dist/tools/cmos/cmos-auth.d.ts +283 -0
- package/dist/tools/cmos/cmos-auth.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-auth.js +687 -0
- package/dist/tools/cmos/cmos-auth.js.map +1 -0
- package/dist/tools/cmos/cmos-backlog-export.d.ts +142 -0
- package/dist/tools/cmos/cmos-backlog-export.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-backlog-export.js +340 -0
- package/dist/tools/cmos/cmos-backlog-export.js.map +1 -0
- package/dist/tools/cmos/cmos-constraints.d.ts +58 -0
- package/dist/tools/cmos/cmos-constraints.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-constraints.js +227 -0
- package/dist/tools/cmos/cmos-constraints.js.map +1 -0
- package/dist/tools/cmos/cmos-context-condense.d.ts +129 -0
- package/dist/tools/cmos/cmos-context-condense.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-condense.js +649 -0
- package/dist/tools/cmos/cmos-context-condense.js.map +1 -0
- package/dist/tools/cmos/cmos-context-history.d.ts +145 -0
- package/dist/tools/cmos/cmos-context-history.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-history.js +235 -0
- package/dist/tools/cmos/cmos-context-history.js.map +1 -0
- package/dist/tools/cmos/cmos-context-project-identity.d.ts +34 -0
- package/dist/tools/cmos/cmos-context-project-identity.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-project-identity.js +145 -0
- package/dist/tools/cmos/cmos-context-project-identity.js.map +1 -0
- package/dist/tools/cmos/cmos-context-search.d.ts +44 -0
- package/dist/tools/cmos/cmos-context-search.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-search.js +79 -0
- package/dist/tools/cmos/cmos-context-search.js.map +1 -0
- package/dist/tools/cmos/cmos-context-snapshot.d.ts +105 -0
- package/dist/tools/cmos/cmos-context-snapshot.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-snapshot.js +213 -0
- package/dist/tools/cmos/cmos-context-snapshot.js.map +1 -0
- package/dist/tools/cmos/cmos-context-update.d.ts +193 -0
- package/dist/tools/cmos/cmos-context-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-update.js +710 -0
- package/dist/tools/cmos/cmos-context-update.js.map +1 -0
- package/dist/tools/cmos/cmos-context-view.d.ts +159 -0
- package/dist/tools/cmos/cmos-context-view.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context-view.js +531 -0
- package/dist/tools/cmos/cmos-context-view.js.map +1 -0
- package/dist/tools/cmos/cmos-context.d.ts +325 -0
- package/dist/tools/cmos/cmos-context.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-context.js +424 -0
- package/dist/tools/cmos/cmos-context.js.map +1 -0
- package/dist/tools/cmos/cmos-db-backfill.d.ts +119 -0
- package/dist/tools/cmos/cmos-db-backfill.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-db-backfill.js +889 -0
- package/dist/tools/cmos/cmos-db-backfill.js.map +1 -0
- package/dist/tools/cmos/cmos-db-health.d.ts +76 -0
- package/dist/tools/cmos/cmos-db-health.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-db-health.js +226 -0
- package/dist/tools/cmos/cmos-db-health.js.map +1 -0
- package/dist/tools/cmos/cmos-db-restore.d.ts +92 -0
- package/dist/tools/cmos/cmos-db-restore.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-db-restore.js +359 -0
- package/dist/tools/cmos/cmos-db-restore.js.map +1 -0
- package/dist/tools/cmos/cmos-db-snapshot.d.ts +108 -0
- package/dist/tools/cmos/cmos-db-snapshot.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-db-snapshot.js +359 -0
- package/dist/tools/cmos/cmos-db-snapshot.js.map +1 -0
- package/dist/tools/cmos/cmos-db.d.ts +103 -0
- package/dist/tools/cmos/cmos-db.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-db.js +182 -0
- package/dist/tools/cmos/cmos-db.js.map +1 -0
- package/dist/tools/cmos/cmos-decisions-batch-update.d.ts +34 -0
- package/dist/tools/cmos/cmos-decisions-batch-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-decisions-batch-update.js +90 -0
- package/dist/tools/cmos/cmos-decisions-batch-update.js.map +1 -0
- package/dist/tools/cmos/cmos-decisions-list.d.ts +134 -0
- package/dist/tools/cmos/cmos-decisions-list.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-decisions-list.js +153 -0
- package/dist/tools/cmos/cmos-decisions-list.js.map +1 -0
- package/dist/tools/cmos/cmos-decisions-review.d.ts +21 -0
- package/dist/tools/cmos/cmos-decisions-review.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-decisions-review.js +83 -0
- package/dist/tools/cmos/cmos-decisions-review.js.map +1 -0
- package/dist/tools/cmos/cmos-decisions-search.d.ts +119 -0
- package/dist/tools/cmos/cmos-decisions-search.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-decisions-search.js +219 -0
- package/dist/tools/cmos/cmos-decisions-search.js.map +1 -0
- package/dist/tools/cmos/cmos-decisions-update.d.ts +34 -0
- package/dist/tools/cmos/cmos-decisions-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-decisions-update.js +121 -0
- package/dist/tools/cmos/cmos-decisions-update.js.map +1 -0
- package/dist/tools/cmos/cmos-decisions.d.ts +156 -0
- package/dist/tools/cmos/cmos-decisions.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-decisions.js +223 -0
- package/dist/tools/cmos/cmos-decisions.js.map +1 -0
- package/dist/tools/cmos/cmos-feedback.d.ts +127 -0
- package/dist/tools/cmos/cmos-feedback.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-feedback.js +259 -0
- package/dist/tools/cmos/cmos-feedback.js.map +1 -0
- package/dist/tools/cmos/cmos-learnings-list.d.ts +81 -0
- package/dist/tools/cmos/cmos-learnings-list.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-learnings-list.js +120 -0
- package/dist/tools/cmos/cmos-learnings-list.js.map +1 -0
- package/dist/tools/cmos/cmos-learnings-reaffirm.d.ts +27 -0
- package/dist/tools/cmos/cmos-learnings-reaffirm.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-learnings-reaffirm.js +69 -0
- package/dist/tools/cmos/cmos-learnings-reaffirm.js.map +1 -0
- package/dist/tools/cmos/cmos-learnings-search.d.ts +69 -0
- package/dist/tools/cmos/cmos-learnings-search.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-learnings-search.js +130 -0
- package/dist/tools/cmos/cmos-learnings-search.js.map +1 -0
- package/dist/tools/cmos/cmos-learnings-update.d.ts +52 -0
- package/dist/tools/cmos/cmos-learnings-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-learnings-update.js +122 -0
- package/dist/tools/cmos/cmos-learnings-update.js.map +1 -0
- package/dist/tools/cmos/cmos-learnings.d.ts +137 -0
- package/dist/tools/cmos/cmos-learnings.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-learnings.js +197 -0
- package/dist/tools/cmos/cmos-learnings.js.map +1 -0
- package/dist/tools/cmos/cmos-message.d.ts +257 -0
- package/dist/tools/cmos/cmos-message.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-message.js +729 -0
- package/dist/tools/cmos/cmos-message.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-add.d.ts +186 -0
- package/dist/tools/cmos/cmos-mission-add.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-add.js +328 -0
- package/dist/tools/cmos/cmos-mission-add.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-block.d.ts +104 -0
- package/dist/tools/cmos/cmos-mission-block.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-block.js +248 -0
- package/dist/tools/cmos/cmos-mission-block.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-complete.d.ts +127 -0
- package/dist/tools/cmos/cmos-mission-complete.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-complete.js +529 -0
- package/dist/tools/cmos/cmos-mission-complete.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-defer.d.ts +41 -0
- package/dist/tools/cmos/cmos-mission-defer.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-defer.js +169 -0
- package/dist/tools/cmos/cmos-mission-defer.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-depends.d.ts +98 -0
- package/dist/tools/cmos/cmos-mission-depends.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-depends.js +221 -0
- package/dist/tools/cmos/cmos-mission-depends.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-drop.d.ts +36 -0
- package/dist/tools/cmos/cmos-mission-drop.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-drop.js +139 -0
- package/dist/tools/cmos/cmos-mission-drop.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-list.d.ts +127 -0
- package/dist/tools/cmos/cmos-mission-list.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-list.js +277 -0
- package/dist/tools/cmos/cmos-mission-list.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-show.d.ts +115 -0
- package/dist/tools/cmos/cmos-mission-show.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-show.js +278 -0
- package/dist/tools/cmos/cmos-mission-show.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-start.d.ts +94 -0
- package/dist/tools/cmos/cmos-mission-start.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-start.js +347 -0
- package/dist/tools/cmos/cmos-mission-start.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-status.d.ts +152 -0
- package/dist/tools/cmos/cmos-mission-status.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-status.js +420 -0
- package/dist/tools/cmos/cmos-mission-status.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-transition.d.ts +126 -0
- package/dist/tools/cmos/cmos-mission-transition.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-transition.js +222 -0
- package/dist/tools/cmos/cmos-mission-transition.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-unblock.d.ts +102 -0
- package/dist/tools/cmos/cmos-mission-unblock.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-unblock.js +242 -0
- package/dist/tools/cmos/cmos-mission-unblock.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-undepends.d.ts +39 -0
- package/dist/tools/cmos/cmos-mission-undepends.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-undepends.js +94 -0
- package/dist/tools/cmos/cmos-mission-undepends.js.map +1 -0
- package/dist/tools/cmos/cmos-mission-update.d.ts +225 -0
- package/dist/tools/cmos/cmos-mission-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission-update.js +350 -0
- package/dist/tools/cmos/cmos-mission-update.js.map +1 -0
- package/dist/tools/cmos/cmos-mission.d.ts +300 -0
- package/dist/tools/cmos/cmos-mission.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-mission.js +318 -0
- package/dist/tools/cmos/cmos-mission.js.map +1 -0
- package/dist/tools/cmos/cmos-next-steps.d.ts +57 -0
- package/dist/tools/cmos/cmos-next-steps.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-next-steps.js +154 -0
- package/dist/tools/cmos/cmos-next-steps.js.map +1 -0
- package/dist/tools/cmos/cmos-project-init.d.ts +283 -0
- package/dist/tools/cmos/cmos-project-init.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-init.js +502 -0
- package/dist/tools/cmos/cmos-project-init.js.map +1 -0
- package/dist/tools/cmos/cmos-project-list.d.ts +79 -0
- package/dist/tools/cmos/cmos-project-list.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-list.js +150 -0
- package/dist/tools/cmos/cmos-project-list.js.map +1 -0
- package/dist/tools/cmos/cmos-project-register.d.ts +90 -0
- package/dist/tools/cmos/cmos-project-register.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-register.js +199 -0
- package/dist/tools/cmos/cmos-project-register.js.map +1 -0
- package/dist/tools/cmos/cmos-project-sweep.d.ts +34 -0
- package/dist/tools/cmos/cmos-project-sweep.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-sweep.js +210 -0
- package/dist/tools/cmos/cmos-project-sweep.js.map +1 -0
- package/dist/tools/cmos/cmos-project-unregister.d.ts +66 -0
- package/dist/tools/cmos/cmos-project-unregister.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-unregister.js +108 -0
- package/dist/tools/cmos/cmos-project-unregister.js.map +1 -0
- package/dist/tools/cmos/cmos-project-update.d.ts +21 -0
- package/dist/tools/cmos/cmos-project-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-update.js +46 -0
- package/dist/tools/cmos/cmos-project-update.js.map +1 -0
- package/dist/tools/cmos/cmos-project-validate.d.ts +89 -0
- package/dist/tools/cmos/cmos-project-validate.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project-validate.js +155 -0
- package/dist/tools/cmos/cmos-project-validate.js.map +1 -0
- package/dist/tools/cmos/cmos-project.d.ts +225 -0
- package/dist/tools/cmos/cmos-project.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-project.js +255 -0
- package/dist/tools/cmos/cmos-project.js.map +1 -0
- package/dist/tools/cmos/cmos-resolve-references.d.ts +145 -0
- package/dist/tools/cmos/cmos-resolve-references.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-resolve-references.js +273 -0
- package/dist/tools/cmos/cmos-resolve-references.js.map +1 -0
- package/dist/tools/cmos/cmos-session-capture.d.ts +228 -0
- package/dist/tools/cmos/cmos-session-capture.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-session-capture.js +552 -0
- package/dist/tools/cmos/cmos-session-capture.js.map +1 -0
- package/dist/tools/cmos/cmos-session-complete.d.ts +201 -0
- package/dist/tools/cmos/cmos-session-complete.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-session-complete.js +816 -0
- package/dist/tools/cmos/cmos-session-complete.js.map +1 -0
- package/dist/tools/cmos/cmos-session-list.d.ts +150 -0
- package/dist/tools/cmos/cmos-session-list.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-session-list.js +234 -0
- package/dist/tools/cmos/cmos-session-list.js.map +1 -0
- package/dist/tools/cmos/cmos-session-search.d.ts +176 -0
- package/dist/tools/cmos/cmos-session-search.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-session-search.js +374 -0
- package/dist/tools/cmos/cmos-session-search.js.map +1 -0
- package/dist/tools/cmos/cmos-session-start.d.ts +136 -0
- package/dist/tools/cmos/cmos-session-start.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-session-start.js +305 -0
- package/dist/tools/cmos/cmos-session-start.js.map +1 -0
- package/dist/tools/cmos/cmos-session.d.ts +223 -0
- package/dist/tools/cmos/cmos-session.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-session.js +255 -0
- package/dist/tools/cmos/cmos-session.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-add.d.ts +114 -0
- package/dist/tools/cmos/cmos-sprint-add.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-add.js +164 -0
- package/dist/tools/cmos/cmos-sprint-add.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-analytics.d.ts +66 -0
- package/dist/tools/cmos/cmos-sprint-analytics.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-analytics.js +289 -0
- package/dist/tools/cmos/cmos-sprint-analytics.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-carry-forward.d.ts +55 -0
- package/dist/tools/cmos/cmos-sprint-carry-forward.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-carry-forward.js +271 -0
- package/dist/tools/cmos/cmos-sprint-carry-forward.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-complete.d.ts +155 -0
- package/dist/tools/cmos/cmos-sprint-complete.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-complete.js +768 -0
- package/dist/tools/cmos/cmos-sprint-complete.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-list.d.ts +115 -0
- package/dist/tools/cmos/cmos-sprint-list.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-list.js +225 -0
- package/dist/tools/cmos/cmos-sprint-list.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-retro.d.ts +114 -0
- package/dist/tools/cmos/cmos-sprint-retro.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-retro.js +331 -0
- package/dist/tools/cmos/cmos-sprint-retro.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-show.d.ts +109 -0
- package/dist/tools/cmos/cmos-sprint-show.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-show.js +238 -0
- package/dist/tools/cmos/cmos-sprint-show.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint-update.d.ts +150 -0
- package/dist/tools/cmos/cmos-sprint-update.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint-update.js +191 -0
- package/dist/tools/cmos/cmos-sprint-update.js.map +1 -0
- package/dist/tools/cmos/cmos-sprint.d.ts +219 -0
- package/dist/tools/cmos/cmos-sprint.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-sprint.js +304 -0
- package/dist/tools/cmos/cmos-sprint.js.map +1 -0
- package/dist/tools/cmos/cmos-status.d.ts +69 -0
- package/dist/tools/cmos/cmos-status.d.ts.map +1 -0
- package/dist/tools/cmos/cmos-status.js +136 -0
- package/dist/tools/cmos/cmos-status.js.map +1 -0
- package/dist/tools/cmos/context-freshness.d.ts +67 -0
- package/dist/tools/cmos/context-freshness.d.ts.map +1 -0
- package/dist/tools/cmos/context-freshness.js +352 -0
- package/dist/tools/cmos/context-freshness.js.map +1 -0
- package/dist/tools/cmos/context-retention.d.ts +58 -0
- package/dist/tools/cmos/context-retention.d.ts.map +1 -0
- package/dist/tools/cmos/context-retention.js +507 -0
- package/dist/tools/cmos/context-retention.js.map +1 -0
- package/dist/tools/cmos/dashboard-client.d.ts +513 -0
- package/dist/tools/cmos/dashboard-client.d.ts.map +1 -0
- package/dist/tools/cmos/dashboard-client.js +800 -0
- package/dist/tools/cmos/dashboard-client.js.map +1 -0
- package/dist/tools/cmos/decision-memory.d.ts +39 -0
- package/dist/tools/cmos/decision-memory.d.ts.map +1 -0
- package/dist/tools/cmos/decision-memory.js +263 -0
- package/dist/tools/cmos/decision-memory.js.map +1 -0
- package/dist/tools/cmos/errors.d.ts +113 -0
- package/dist/tools/cmos/errors.d.ts.map +1 -0
- package/dist/tools/cmos/errors.js +315 -0
- package/dist/tools/cmos/errors.js.map +1 -0
- package/dist/tools/cmos/fts5-retriever.d.ts +101 -0
- package/dist/tools/cmos/fts5-retriever.d.ts.map +1 -0
- package/dist/tools/cmos/fts5-retriever.js +210 -0
- package/dist/tools/cmos/fts5-retriever.js.map +1 -0
- package/dist/tools/cmos/index.d.ts +1238 -0
- package/dist/tools/cmos/index.d.ts.map +1 -0
- package/dist/tools/cmos/index.js +359 -0
- package/dist/tools/cmos/index.js.map +1 -0
- package/dist/tools/cmos/learning-reaffirm.d.ts +74 -0
- package/dist/tools/cmos/learning-reaffirm.d.ts.map +1 -0
- package/dist/tools/cmos/learning-reaffirm.js +145 -0
- package/dist/tools/cmos/learning-reaffirm.js.map +1 -0
- package/dist/tools/cmos/orphan-detection.d.ts +55 -0
- package/dist/tools/cmos/orphan-detection.d.ts.map +1 -0
- package/dist/tools/cmos/orphan-detection.js +139 -0
- package/dist/tools/cmos/orphan-detection.js.map +1 -0
- package/dist/tools/cmos/owner-resolution.d.ts +21 -0
- package/dist/tools/cmos/owner-resolution.d.ts.map +1 -0
- package/dist/tools/cmos/owner-resolution.js +162 -0
- package/dist/tools/cmos/owner-resolution.js.map +1 -0
- package/dist/tools/cmos/project-identity.d.ts +112 -0
- package/dist/tools/cmos/project-identity.d.ts.map +1 -0
- package/dist/tools/cmos/project-identity.js +261 -0
- package/dist/tools/cmos/project-identity.js.map +1 -0
- package/dist/tools/cmos/relevance-surfacing.d.ts +40 -0
- package/dist/tools/cmos/relevance-surfacing.d.ts.map +1 -0
- package/dist/tools/cmos/relevance-surfacing.js +153 -0
- package/dist/tools/cmos/relevance-surfacing.js.map +1 -0
- package/dist/tools/cmos/schema-migrations.d.ts +157 -0
- package/dist/tools/cmos/schema-migrations.d.ts.map +1 -0
- package/dist/tools/cmos/schema-migrations.js +678 -0
- package/dist/tools/cmos/schema-migrations.js.map +1 -0
- package/dist/tools/cmos/schema.d.ts +76 -0
- package/dist/tools/cmos/schema.d.ts.map +1 -0
- package/dist/tools/cmos/schema.js +462 -0
- package/dist/tools/cmos/schema.js.map +1 -0
- package/dist/tools/cmos/sender-identity.d.ts +87 -0
- package/dist/tools/cmos/sender-identity.d.ts.map +1 -0
- package/dist/tools/cmos/sender-identity.js +207 -0
- package/dist/tools/cmos/sender-identity.js.map +1 -0
- package/dist/tools/cmos/staleness-detection.d.ts +128 -0
- package/dist/tools/cmos/staleness-detection.d.ts.map +1 -0
- package/dist/tools/cmos/staleness-detection.js +381 -0
- package/dist/tools/cmos/staleness-detection.js.map +1 -0
- package/dist/tools/cmos/supersession-detection.d.ts +46 -0
- package/dist/tools/cmos/supersession-detection.d.ts.map +1 -0
- package/dist/tools/cmos/supersession-detection.js +235 -0
- package/dist/tools/cmos/supersession-detection.js.map +1 -0
- package/dist/tools/cmos/sync-event-payloads.d.ts +576 -0
- package/dist/tools/cmos/sync-event-payloads.d.ts.map +1 -0
- package/dist/tools/cmos/sync-event-payloads.js +521 -0
- package/dist/tools/cmos/sync-event-payloads.js.map +1 -0
- package/dist/tools/cmos/sync-health-check.d.ts +43 -0
- package/dist/tools/cmos/sync-health-check.d.ts.map +1 -0
- package/dist/tools/cmos/sync-health-check.js +93 -0
- package/dist/tools/cmos/sync-health-check.js.map +1 -0
- package/dist/tools/cmos/sync-hooks.d.ts +82 -0
- package/dist/tools/cmos/sync-hooks.d.ts.map +1 -0
- package/dist/tools/cmos/sync-hooks.js +162 -0
- package/dist/tools/cmos/sync-hooks.js.map +1 -0
- package/dist/tools/cmos/sync-pusher.d.ts +128 -0
- package/dist/tools/cmos/sync-pusher.d.ts.map +1 -0
- package/dist/tools/cmos/sync-pusher.js +248 -0
- package/dist/tools/cmos/sync-pusher.js.map +1 -0
- package/dist/tools/cmos/sync-queue.d.ts +87 -0
- package/dist/tools/cmos/sync-queue.d.ts.map +1 -0
- package/dist/tools/cmos/sync-queue.js +208 -0
- package/dist/tools/cmos/sync-queue.js.map +1 -0
- package/dist/tools/cmos/tier-config.d.ts +32 -0
- package/dist/tools/cmos/tier-config.d.ts.map +1 -0
- package/dist/tools/cmos/tier-config.js +123 -0
- package/dist/tools/cmos/tier-config.js.map +1 -0
- package/dist/tools/cmos/types.d.ts +164 -0
- package/dist/tools/cmos/types.d.ts.map +1 -0
- package/dist/tools/cmos/types.js +11 -0
- package/dist/tools/cmos/types.js.map +1 -0
- package/dist/tools/combine-packs.d.ts +194 -0
- package/dist/tools/combine-packs.d.ts.map +1 -0
- package/dist/tools/combine-packs.js +283 -0
- package/dist/tools/combine-packs.js.map +1 -0
- package/dist/tools/create-mission.d.ts +192 -0
- package/dist/tools/create-mission.d.ts.map +1 -0
- package/dist/tools/create-mission.js +453 -0
- package/dist/tools/create-mission.js.map +1 -0
- package/dist/tools/export-template.d.ts +175 -0
- package/dist/tools/export-template.d.ts.map +1 -0
- package/dist/tools/export-template.js +212 -0
- package/dist/tools/export-template.js.map +1 -0
- package/dist/tools/extract-template.d.ts +106 -0
- package/dist/tools/extract-template.d.ts.map +1 -0
- package/dist/tools/extract-template.js +322 -0
- package/dist/tools/extract-template.js.map +1 -0
- package/dist/tools/formatters/mission-protocol-json.d.ts +122 -0
- package/dist/tools/formatters/mission-protocol-json.d.ts.map +1 -0
- package/dist/tools/formatters/mission-protocol-json.js +155 -0
- package/dist/tools/formatters/mission-protocol-json.js.map +1 -0
- package/dist/tools/import-template.d.ts +170 -0
- package/dist/tools/import-template.d.ts.map +1 -0
- package/dist/tools/import-template.js +203 -0
- package/dist/tools/import-template.js.map +1 -0
- package/dist/tools/list-domains.d.ts +70 -0
- package/dist/tools/list-domains.d.ts.map +1 -0
- package/dist/tools/list-domains.js +110 -0
- package/dist/tools/list-domains.js.map +1 -0
- package/dist/tools/optimize-tokens.d.ts +190 -0
- package/dist/tools/optimize-tokens.d.ts.map +1 -0
- package/dist/tools/optimize-tokens.js +193 -0
- package/dist/tools/optimize-tokens.js.map +1 -0
- package/dist/tools/score-quality.d.ts +76 -0
- package/dist/tools/score-quality.d.ts.map +1 -0
- package/dist/tools/score-quality.js +191 -0
- package/dist/tools/score-quality.js.map +1 -0
- package/dist/tools/split-mission.d.ts +181 -0
- package/dist/tools/split-mission.d.ts.map +1 -0
- package/dist/tools/split-mission.js +416 -0
- package/dist/tools/split-mission.js.map +1 -0
- package/dist/tools/suggest-splits.d.ts +162 -0
- package/dist/tools/suggest-splits.d.ts.map +1 -0
- package/dist/tools/suggest-splits.js +344 -0
- package/dist/tools/suggest-splits.js.map +1 -0
- package/dist/tools/tool-execution.d.ts +4 -0
- package/dist/tools/tool-execution.d.ts.map +1 -0
- package/dist/tools/tool-execution.js +3 -0
- package/dist/tools/tool-execution.js.map +1 -0
- package/dist/tools/version-template.d.ts +515 -0
- package/dist/tools/version-template.d.ts.map +1 -0
- package/dist/tools/version-template.js +338 -0
- package/dist/tools/version-template.js.map +1 -0
- package/dist/types/errors.d.ts +19 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +52 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/mission-types.d.ts +8 -0
- package/dist/types/mission-types.d.ts.map +1 -0
- package/dist/types/mission-types.js +12 -0
- package/dist/types/mission-types.js.map +1 -0
- package/dist/types/registry.d.ts +55 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/registry.js +10 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/schemas.d.ts +25 -0
- package/dist/types/schemas.d.ts.map +1 -0
- package/dist/types/schemas.js +6 -0
- package/dist/types/schemas.js.map +1 -0
- package/dist/types/tools.d.ts +22 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +10 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/abort.d.ts +16 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +89 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/fs.d.ts +14 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +114 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/workspace-io.d.ts +18 -0
- package/dist/utils/workspace-io.d.ts.map +1 -0
- package/dist/utils/workspace-io.js +40 -0
- package/dist/utils/workspace-io.js.map +1 -0
- package/dist/validation/common.d.ts +21 -0
- package/dist/validation/common.d.ts.map +1 -0
- package/dist/validation/common.js +241 -0
- package/dist/validation/common.js.map +1 -0
- package/dist/validation/errors.d.ts +21 -0
- package/dist/validation/errors.d.ts.map +1 -0
- package/dist/validation/errors.js +122 -0
- package/dist/validation/errors.js.map +1 -0
- package/dist/validation/middleware.d.ts +6 -0
- package/dist/validation/middleware.d.ts.map +1 -0
- package/dist/validation/middleware.js +26 -0
- package/dist/validation/middleware.js.map +1 -0
- package/dist/validation/schemas/config-schema.d.ts +25 -0
- package/dist/validation/schemas/config-schema.d.ts.map +1 -0
- package/dist/validation/schemas/config-schema.js +22 -0
- package/dist/validation/schemas/config-schema.js.map +1 -0
- package/dist/validation/schemas/domain-schema.d.ts +129 -0
- package/dist/validation/schemas/domain-schema.d.ts.map +1 -0
- package/dist/validation/schemas/domain-schema.js +28 -0
- package/dist/validation/schemas/domain-schema.js.map +1 -0
- package/dist/validation/schemas/file-path-schema.d.ts +10 -0
- package/dist/validation/schemas/file-path-schema.d.ts.map +1 -0
- package/dist/validation/schemas/file-path-schema.js +29 -0
- package/dist/validation/schemas/file-path-schema.js.map +1 -0
- package/dist/validation/schemas/mission-schema.d.ts +65 -0
- package/dist/validation/schemas/mission-schema.d.ts.map +1 -0
- package/dist/validation/schemas/mission-schema.js +24 -0
- package/dist/validation/schemas/mission-schema.js.map +1 -0
- package/dist/validation/schemas/template-schema.d.ts +364 -0
- package/dist/validation/schemas/template-schema.d.ts.map +1 -0
- package/dist/validation/schemas/template-schema.js +64 -0
- package/dist/validation/schemas/template-schema.js.map +1 -0
- package/dist/versioning/migration-engine.d.ts +82 -0
- package/dist/versioning/migration-engine.d.ts.map +1 -0
- package/dist/versioning/migration-engine.js +352 -0
- package/dist/versioning/migration-engine.js.map +1 -0
- package/dist/versioning/types.d.ts +236 -0
- package/dist/versioning/types.d.ts.map +1 -0
- package/dist/versioning/types.js +57 -0
- package/dist/versioning/types.js.map +1 -0
- package/dist/versioning/version-manager.d.ts +76 -0
- package/dist/versioning/version-manager.d.ts.map +1 -0
- package/dist/versioning/version-manager.js +386 -0
- package/dist/versioning/version-manager.js.map +1 -0
- package/package.json +117 -0
|
@@ -0,0 +1,768 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* cmos_sprint_complete Tool
|
|
4
|
+
*
|
|
5
|
+
* MCP tool for closing out a sprint in one operation. It validates readiness,
|
|
6
|
+
* snapshots both contexts, clears stale sprint-linked next steps, optionally
|
|
7
|
+
* runs condensation, and returns a closeout receipt with size telemetry.
|
|
8
|
+
*
|
|
9
|
+
* @module tools/cmos/cmos-sprint-complete
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.cmosSprintCompleteToolDefinition = exports.cmosSprintCompleteSchema = void 0;
|
|
46
|
+
exports.cmosSprintComplete = cmosSprintComplete;
|
|
47
|
+
exports.formatSprintCompleteForLLM = formatSprintCompleteForLLM;
|
|
48
|
+
const crypto = __importStar(require("crypto"));
|
|
49
|
+
const zod_1 = require("zod");
|
|
50
|
+
const client_1 = require("./client");
|
|
51
|
+
const errors_1 = require("./errors");
|
|
52
|
+
const context_retention_1 = require("./context-retention");
|
|
53
|
+
const cmos_context_condense_1 = require("./cmos-context-condense");
|
|
54
|
+
const cmos_db_snapshot_1 = require("./cmos-db-snapshot");
|
|
55
|
+
const schema_migrations_1 = require("./schema-migrations");
|
|
56
|
+
/**
|
|
57
|
+
* Input parameters schema for cmos_sprint_complete.
|
|
58
|
+
*/
|
|
59
|
+
exports.cmosSprintCompleteSchema = zod_1.z.object({
|
|
60
|
+
sprintId: zod_1.z.string().min(1).describe('The sprint ID to close out (e.g., "sprint-22")'),
|
|
61
|
+
summary: zod_1.z
|
|
62
|
+
.string()
|
|
63
|
+
.min(1)
|
|
64
|
+
.max(2000)
|
|
65
|
+
.describe('Short closeout summary describing what the sprint delivered'),
|
|
66
|
+
condensation: zod_1.z
|
|
67
|
+
.enum(['none', 'conservative', 'auto', 'aggressive'])
|
|
68
|
+
.default('none')
|
|
69
|
+
.optional()
|
|
70
|
+
.describe('Optional context condensation strategy to run after snapshots and next-step cleanup'),
|
|
71
|
+
targetSizePercent: zod_1.z
|
|
72
|
+
.number()
|
|
73
|
+
.min(1)
|
|
74
|
+
.max(100)
|
|
75
|
+
.default(60)
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Target percentage of the context size limit when condensation is requested'),
|
|
78
|
+
projectRoot: zod_1.z
|
|
79
|
+
.string()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('Project root directory to search for CMOS database (defaults to cwd)'),
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* MCP Tool Definition for cmos_sprint_complete.
|
|
85
|
+
*/
|
|
86
|
+
exports.cmosSprintCompleteToolDefinition = {
|
|
87
|
+
name: 'cmos_sprint_complete',
|
|
88
|
+
description: 'Close out a sprint in one operation. Validates sprint readiness, marks the sprint Completed with endDate, snapshots both contexts, clears stale sprint-linked next steps, and optionally runs context condensation.',
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: {
|
|
92
|
+
sprintId: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
description: 'The sprint ID to close out (e.g., "sprint-22")',
|
|
95
|
+
},
|
|
96
|
+
summary: {
|
|
97
|
+
type: 'string',
|
|
98
|
+
description: 'Short closeout summary describing what the sprint delivered',
|
|
99
|
+
minLength: 1,
|
|
100
|
+
maxLength: 2000,
|
|
101
|
+
},
|
|
102
|
+
condensation: {
|
|
103
|
+
type: 'string',
|
|
104
|
+
enum: ['none', 'conservative', 'auto', 'aggressive'],
|
|
105
|
+
default: 'none',
|
|
106
|
+
description: 'Optional context condensation strategy to run after snapshots and next-step cleanup',
|
|
107
|
+
},
|
|
108
|
+
targetSizePercent: {
|
|
109
|
+
type: 'number',
|
|
110
|
+
minimum: 1,
|
|
111
|
+
maximum: 100,
|
|
112
|
+
default: 60,
|
|
113
|
+
description: 'Target percentage of the context size limit when condensation is requested',
|
|
114
|
+
},
|
|
115
|
+
projectRoot: {
|
|
116
|
+
type: 'string',
|
|
117
|
+
description: 'Project root directory to search for CMOS database (defaults to cwd)',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
required: ['sprintId', 'summary'],
|
|
121
|
+
additionalProperties: false,
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Execute the cmos_sprint_complete tool.
|
|
126
|
+
*/
|
|
127
|
+
async function cmosSprintComplete(params) {
|
|
128
|
+
if (!params.sprintId || params.sprintId.trim() === '') {
|
|
129
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.missingParameter('sprintId'));
|
|
130
|
+
}
|
|
131
|
+
if (!params.summary || params.summary.trim() === '') {
|
|
132
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.missingParameter('summary'));
|
|
133
|
+
}
|
|
134
|
+
const sprintId = params.sprintId.trim();
|
|
135
|
+
const summary = params.summary.trim();
|
|
136
|
+
const condensation = params.condensation ?? 'none';
|
|
137
|
+
const targetSizePercent = params.targetSizePercent ?? 60;
|
|
138
|
+
return (0, client_1.withClientAsync)(async (client) => {
|
|
139
|
+
const warnings = [];
|
|
140
|
+
const beginResult = client.execute('BEGIN IMMEDIATE', []);
|
|
141
|
+
if (!beginResult.success) {
|
|
142
|
+
return (0, errors_1.createError)(beginResult.error ?? {
|
|
143
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
144
|
+
message: `Failed to begin sprint closeout for '${sprintId}'`,
|
|
145
|
+
suggestion: 'Retry once the database becomes available.',
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
let transactionOpen = true;
|
|
149
|
+
const rollback = () => {
|
|
150
|
+
if (!transactionOpen) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
client.execute('ROLLBACK', []);
|
|
154
|
+
transactionOpen = false;
|
|
155
|
+
};
|
|
156
|
+
const fail = (error) => {
|
|
157
|
+
rollback();
|
|
158
|
+
return (0, errors_1.createError)(error);
|
|
159
|
+
};
|
|
160
|
+
const sprintResult = client.getOne('SELECT id, title, focus, status, start_date, end_date, total_missions, completed_missions FROM sprints WHERE id = ?', [sprintId]);
|
|
161
|
+
if (!sprintResult.success) {
|
|
162
|
+
return fail(sprintResult.error ?? {
|
|
163
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
164
|
+
message: `Failed to query sprint '${sprintId}'`,
|
|
165
|
+
suggestion: 'Check database connectivity and schema.',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
if (!sprintResult.data) {
|
|
169
|
+
return fail(errors_1.CmosErrors.sprintNotFound(sprintId));
|
|
170
|
+
}
|
|
171
|
+
const sprint = sprintResult.data;
|
|
172
|
+
if (sprint.status === 'Completed') {
|
|
173
|
+
return fail({
|
|
174
|
+
code: errors_1.CMOS_ERROR_CODES.SPRINT_ALREADY_COMPLETED,
|
|
175
|
+
message: `Sprint '${sprintId}' is already Completed`,
|
|
176
|
+
currentState: sprint.status,
|
|
177
|
+
suggestion: 'Use cmos_sprint with action="show" to review the closed sprint. No further closeout is needed.',
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const missionsResult = client.getMany('SELECT id, status, notes FROM missions WHERE sprint_id = ? ORDER BY id ASC', [sprintId]);
|
|
181
|
+
if (!missionsResult.success) {
|
|
182
|
+
return fail(missionsResult.error ?? {
|
|
183
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
184
|
+
message: `Failed to query missions for sprint '${sprintId}'`,
|
|
185
|
+
suggestion: 'Check database connectivity and schema.',
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
const readiness = summarizeSprintReadiness(missionsResult.data ?? []);
|
|
189
|
+
if (readiness.openMissionIds.length > 0) {
|
|
190
|
+
return fail({
|
|
191
|
+
code: errors_1.CMOS_ERROR_CODES.SPRINT_NOT_READY,
|
|
192
|
+
message: `Sprint '${sprintId}' still has non-terminal missions: ${readiness.openMissionIds.join(', ')}`,
|
|
193
|
+
currentState: sprint.status ?? undefined,
|
|
194
|
+
suggestion: 'Complete, block, drop, or defer the remaining Queued/Current/In Progress missions before closing the sprint.',
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
if (readiness.blockedMissionIds.length > 0) {
|
|
198
|
+
warnings.push(`Sprint '${sprintId}' closed with blocked missions: ${readiness.blockedMissionIds.join(', ')}.`);
|
|
199
|
+
}
|
|
200
|
+
if (readiness.skippedMissionIds.length > 0) {
|
|
201
|
+
warnings.push(`Sprint '${sprintId}' includes skipped missions recorded in notes: ${readiness.skippedMissionIds.join(', ')}.`);
|
|
202
|
+
}
|
|
203
|
+
const masterContext = loadCloseoutContext(client, 'master_context');
|
|
204
|
+
if (!masterContext.success || !masterContext.data) {
|
|
205
|
+
return fail(masterContext.error ?? {
|
|
206
|
+
code: errors_1.CMOS_ERROR_CODES.CONTEXT_NOT_FOUND,
|
|
207
|
+
message: 'master_context is required for sprint closeout',
|
|
208
|
+
suggestion: 'Repair or recreate master_context before retrying sprint closeout.',
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const projectContext = loadCloseoutContext(client, 'project_context');
|
|
212
|
+
if (!projectContext.success || !projectContext.data) {
|
|
213
|
+
return fail(projectContext.error ?? {
|
|
214
|
+
code: errors_1.CMOS_ERROR_CODES.CONTEXT_NOT_FOUND,
|
|
215
|
+
message: 'project_context is required for sprint closeout',
|
|
216
|
+
suggestion: 'Repair or recreate project_context before retrying sprint closeout.',
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
const completedAt = new Date().toISOString();
|
|
220
|
+
const snapshotSource = `sprint_complete:${sprintId}`;
|
|
221
|
+
const masterSnapshotId = createSnapshot(client, 'master_context', masterContext.data.rawContent, snapshotSource);
|
|
222
|
+
if (!masterSnapshotId.success) {
|
|
223
|
+
return fail({
|
|
224
|
+
code: errors_1.CMOS_ERROR_CODES.SNAPSHOT_CREATION_FAILED,
|
|
225
|
+
message: `Failed to snapshot master_context for sprint '${sprintId}'`,
|
|
226
|
+
suggestion: 'Check context_snapshots table integrity and retry closeout.',
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const projectSnapshotId = createSnapshot(client, 'project_context', projectContext.data.rawContent, snapshotSource);
|
|
230
|
+
if (!projectSnapshotId.success) {
|
|
231
|
+
return fail({
|
|
232
|
+
code: errors_1.CMOS_ERROR_CODES.SNAPSHOT_CREATION_FAILED,
|
|
233
|
+
message: `Failed to snapshot project_context for sprint '${sprintId}'`,
|
|
234
|
+
suggestion: 'Check context_snapshots table integrity and retry closeout.',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const masterCleared = clearSprintLinkedNextSteps(masterContext.data.parsedContent, sprintId, readiness.completedMissionIds, readiness.blockedMissionIds);
|
|
238
|
+
const projectCleared = clearSprintLinkedNextSteps(projectContext.data.parsedContent, sprintId, readiness.completedMissionIds, readiness.blockedMissionIds);
|
|
239
|
+
// --- Lifecycle Trigger: Archive sprint-scoped decisions/learnings ---
|
|
240
|
+
const archiveResult = archiveSprintDecisionsAndLearnings(client, sprintId);
|
|
241
|
+
if (!archiveResult.success) {
|
|
242
|
+
warnings.push(`Decision/learning archival partially failed: ${archiveResult.error ?? 'unknown'}`);
|
|
243
|
+
}
|
|
244
|
+
// --- Lifecycle Trigger: Compute sprint KPIs ---
|
|
245
|
+
const kpis = computeSprintKPIs(client, sprintId, readiness);
|
|
246
|
+
// --- Lifecycle Trigger: Update project_context working_memory & current_sprint ---
|
|
247
|
+
clearProjectContextWorkingMemory(projectContext.data.parsedContent, sprintId);
|
|
248
|
+
const masterPersist = persistCloseoutContext(client, masterContext.data, completedAt);
|
|
249
|
+
if (!masterPersist.success || !masterPersist.data) {
|
|
250
|
+
return fail(masterPersist.error ?? {
|
|
251
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
252
|
+
message: 'Failed to persist master_context sprint cleanup',
|
|
253
|
+
suggestion: 'Check database permissions and retry closeout.',
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
const projectPersist = persistCloseoutContext(client, projectContext.data, completedAt);
|
|
257
|
+
if (!projectPersist.success || !projectPersist.data) {
|
|
258
|
+
return fail(projectPersist.error ?? {
|
|
259
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
260
|
+
message: 'Failed to persist project_context sprint cleanup',
|
|
261
|
+
suggestion: 'Check database permissions and retry closeout.',
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
const sprintUpdateResult = completeSprintRecord(client, sprintId, completedAt);
|
|
265
|
+
if (!sprintUpdateResult.success) {
|
|
266
|
+
return fail(sprintUpdateResult.error ?? {
|
|
267
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
268
|
+
message: `Failed to update sprint '${sprintId}'`,
|
|
269
|
+
suggestion: 'Check database permissions and retry closeout.',
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
const commitResult = client.execute('COMMIT', []);
|
|
273
|
+
if (!commitResult.success) {
|
|
274
|
+
rollback();
|
|
275
|
+
return (0, errors_1.createError)(commitResult.error ?? {
|
|
276
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
277
|
+
message: `Failed to commit sprint closeout for '${sprintId}'`,
|
|
278
|
+
suggestion: 'Retry once the database can commit the closeout transaction.',
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
transactionOpen = false;
|
|
282
|
+
const eventResult = client.execute(`INSERT INTO session_events (ts, agent, mission, action, status, summary, raw_event)
|
|
283
|
+
VALUES (?, 'mcp-tool', ?, 'sprint_complete', 'Completed', ?, ?)`, [
|
|
284
|
+
completedAt,
|
|
285
|
+
sprintId,
|
|
286
|
+
summary,
|
|
287
|
+
JSON.stringify({
|
|
288
|
+
tool: 'cmos_sprint_complete',
|
|
289
|
+
sprintId,
|
|
290
|
+
previousStatus: sprint.status,
|
|
291
|
+
summary,
|
|
292
|
+
condensation,
|
|
293
|
+
targetSizePercent,
|
|
294
|
+
}),
|
|
295
|
+
]);
|
|
296
|
+
if (!eventResult.success) {
|
|
297
|
+
warnings.push('Sprint closeout event logging failed.');
|
|
298
|
+
}
|
|
299
|
+
// --- Lifecycle Trigger: Auto-snapshot the full database (non-critical) ---
|
|
300
|
+
let dbSnapshotId = null;
|
|
301
|
+
try {
|
|
302
|
+
const snapshotResult = await (0, cmos_db_snapshot_1.cmosDbSnapshot)({ projectRoot: params.projectRoot });
|
|
303
|
+
if (snapshotResult.success && snapshotResult.data?.createdSnapshot) {
|
|
304
|
+
dbSnapshotId = snapshotResult.data.createdSnapshot.id;
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
warnings.push('Auto database snapshot after sprint completion failed.');
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
warnings.push('Auto database snapshot after sprint completion failed.');
|
|
312
|
+
}
|
|
313
|
+
const lifecycle = {
|
|
314
|
+
decisionsArchived: archiveResult.success ? archiveResult.decisionsArchived : 0,
|
|
315
|
+
learningsArchived: archiveResult.success ? archiveResult.learningsArchived : 0,
|
|
316
|
+
kpis,
|
|
317
|
+
dbSnapshotId,
|
|
318
|
+
};
|
|
319
|
+
const result = {
|
|
320
|
+
sprintId,
|
|
321
|
+
previousStatus: sprint.status,
|
|
322
|
+
currentStatus: 'Completed',
|
|
323
|
+
summary,
|
|
324
|
+
completedAt,
|
|
325
|
+
readiness,
|
|
326
|
+
contexts: {
|
|
327
|
+
masterContext: {
|
|
328
|
+
snapshotId: masterSnapshotId.snapshotId ?? null,
|
|
329
|
+
beforeSize: masterContext.data.beforeSize,
|
|
330
|
+
afterSize: masterPersist.data.afterSize,
|
|
331
|
+
nextStepsCleared: masterCleared,
|
|
332
|
+
},
|
|
333
|
+
projectContext: {
|
|
334
|
+
snapshotId: projectSnapshotId.snapshotId ?? null,
|
|
335
|
+
beforeSize: projectContext.data.beforeSize,
|
|
336
|
+
afterSize: projectPersist.data.afterSize,
|
|
337
|
+
nextStepsCleared: projectCleared,
|
|
338
|
+
},
|
|
339
|
+
totalBeforeSizeKb: roundNumber(masterContext.data.beforeSize.sizeKb + projectContext.data.beforeSize.sizeKb),
|
|
340
|
+
totalAfterSizeKb: roundNumber(masterPersist.data.afterSize.sizeKb + projectPersist.data.afterSize.sizeKb),
|
|
341
|
+
},
|
|
342
|
+
lifecycle,
|
|
343
|
+
message: buildCloseoutMessage(sprintId, condensation, readiness),
|
|
344
|
+
};
|
|
345
|
+
if (condensation !== 'none') {
|
|
346
|
+
await applyOptionalCondensation({
|
|
347
|
+
projectRoot: params.projectRoot,
|
|
348
|
+
strategy: condensation,
|
|
349
|
+
targetSizePercent,
|
|
350
|
+
warnings,
|
|
351
|
+
contexts: result.contexts,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
result.contexts.totalAfterSizeKb = roundNumber(result.contexts.masterContext.afterSize.sizeKb +
|
|
355
|
+
result.contexts.projectContext.afterSize.sizeKb);
|
|
356
|
+
return (0, errors_1.createSuccess)(result, warnings);
|
|
357
|
+
}, { projectRoot: params.projectRoot });
|
|
358
|
+
}
|
|
359
|
+
function summarizeSprintReadiness(missions) {
|
|
360
|
+
const completedMissionIds = missions
|
|
361
|
+
.filter((mission) => mission.status === 'Completed')
|
|
362
|
+
.map((mission) => mission.id);
|
|
363
|
+
const blockedMissionIds = missions
|
|
364
|
+
.filter((mission) => mission.status === 'Blocked')
|
|
365
|
+
.map((mission) => mission.id);
|
|
366
|
+
const skippedMissionIds = missions
|
|
367
|
+
.filter((mission) => mission.status === 'Completed' && isSkippedMission(mission.notes))
|
|
368
|
+
.map((mission) => mission.id);
|
|
369
|
+
// Terminal states for sprint close: Completed, Blocked, Dropped, Deferred.
|
|
370
|
+
// Dropped = soft-parked and intentionally removed — sprint can close.
|
|
371
|
+
// Deferred = temporarily parked — sprint can close; mission carries to next sprint.
|
|
372
|
+
// Only Queued / Current / In Progress missions are truly blocking.
|
|
373
|
+
const TERMINAL_FOR_SPRINT_CLOSE = new Set(['Completed', 'Blocked', 'Dropped', 'Deferred']);
|
|
374
|
+
const openMissionIds = missions
|
|
375
|
+
.filter((mission) => !TERMINAL_FOR_SPRINT_CLOSE.has(mission.status))
|
|
376
|
+
.map((mission) => mission.id);
|
|
377
|
+
return {
|
|
378
|
+
totalMissions: missions.length,
|
|
379
|
+
completedMissions: completedMissionIds.length,
|
|
380
|
+
blockedMissions: blockedMissionIds.length,
|
|
381
|
+
skippedMissions: skippedMissionIds.length,
|
|
382
|
+
openMissions: openMissionIds.length,
|
|
383
|
+
completedMissionIds,
|
|
384
|
+
blockedMissionIds,
|
|
385
|
+
skippedMissionIds,
|
|
386
|
+
openMissionIds,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
function isSkippedMission(notes) {
|
|
390
|
+
if (typeof notes !== 'string') {
|
|
391
|
+
return false;
|
|
392
|
+
}
|
|
393
|
+
return notes
|
|
394
|
+
.split(/\r?\n|\|/)
|
|
395
|
+
.map((segment) => segment.trim())
|
|
396
|
+
.some((segment) => /^\[(?:skip|skipped)\](?:\s|$)/i.test(segment) ||
|
|
397
|
+
/^skip(?:ped)?\s*[:-]/i.test(segment) ||
|
|
398
|
+
/^status\s*:\s*skipped\b/i.test(segment));
|
|
399
|
+
}
|
|
400
|
+
function loadCloseoutContext(client, contextType) {
|
|
401
|
+
const result = client.getOne('SELECT id, source_path, content, updated_at FROM contexts WHERE id = ?', [contextType]);
|
|
402
|
+
if (!result.success) {
|
|
403
|
+
return (0, errors_1.createError)(result.error ?? {
|
|
404
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
405
|
+
message: `Failed to load ${contextType}`,
|
|
406
|
+
suggestion: 'Check database connectivity and schema.',
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
if (!result.data) {
|
|
410
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.contextNotFound(contextType));
|
|
411
|
+
}
|
|
412
|
+
try {
|
|
413
|
+
const parsed = JSON.parse(result.data.content);
|
|
414
|
+
if (!isPlainObject(parsed)) {
|
|
415
|
+
return (0, errors_1.createError)({
|
|
416
|
+
code: errors_1.CMOS_ERROR_CODES.CONTEXT_PARSE_ERROR,
|
|
417
|
+
message: `${contextType} content must be a JSON object`,
|
|
418
|
+
suggestion: 'Repair the stored context JSON before retrying sprint closeout.',
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
const sizeSettings = (0, context_retention_1.resolveContextSizeSettings)(parsed);
|
|
422
|
+
return (0, errors_1.createSuccess)({
|
|
423
|
+
contextType,
|
|
424
|
+
rawContent: result.data.content,
|
|
425
|
+
parsedContent: parsed,
|
|
426
|
+
beforeSize: (0, context_retention_1.calculateContextSizeMetrics)(result.data.content, sizeSettings),
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
catch {
|
|
430
|
+
return (0, errors_1.createError)({
|
|
431
|
+
code: errors_1.CMOS_ERROR_CODES.CONTEXT_PARSE_ERROR,
|
|
432
|
+
message: `${contextType} content is not valid JSON`,
|
|
433
|
+
suggestion: 'Repair the stored context JSON before retrying sprint closeout.',
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
function createSnapshot(client, contextType, content, source) {
|
|
438
|
+
const contentHash = crypto.createHash('sha256').update(content).digest('hex').substring(0, 16);
|
|
439
|
+
const existing = client.getOne('SELECT id FROM context_snapshots WHERE context_id = ? AND content_hash = ?', [contextType, contentHash]);
|
|
440
|
+
if (existing.success && existing.data) {
|
|
441
|
+
return { success: true, snapshotId: existing.data.id };
|
|
442
|
+
}
|
|
443
|
+
const now = new Date().toISOString();
|
|
444
|
+
const insertResult = client.execute(`INSERT INTO context_snapshots (context_id, source, content_hash, content, created_at)
|
|
445
|
+
VALUES (?, ?, ?, ?, ?)`, [contextType, source, contentHash, content, now]);
|
|
446
|
+
if (!insertResult.success) {
|
|
447
|
+
return { success: false };
|
|
448
|
+
}
|
|
449
|
+
return { success: true, snapshotId: Number(insertResult.data?.lastInsertRowid) };
|
|
450
|
+
}
|
|
451
|
+
function clearSprintLinkedNextSteps(content, sprintId, completedMissionIds, blockedMissionIds) {
|
|
452
|
+
const paths = [
|
|
453
|
+
['working_memory', 'next_steps'],
|
|
454
|
+
['next_session_context', 'when_we_resume'],
|
|
455
|
+
['next_steps'],
|
|
456
|
+
];
|
|
457
|
+
let removed = 0;
|
|
458
|
+
for (const path of paths) {
|
|
459
|
+
removed += pruneStringArrayAtPath(content, [...path], (step) => shouldClearStep(step, sprintId, completedMissionIds, blockedMissionIds));
|
|
460
|
+
}
|
|
461
|
+
return removed;
|
|
462
|
+
}
|
|
463
|
+
function pruneStringArrayAtPath(content, path, shouldRemove) {
|
|
464
|
+
const parent = getParentObject(content, path.slice(0, -1));
|
|
465
|
+
const key = path[path.length - 1];
|
|
466
|
+
if (!parent || !Array.isArray(parent[key])) {
|
|
467
|
+
return 0;
|
|
468
|
+
}
|
|
469
|
+
let removed = 0;
|
|
470
|
+
parent[key] = parent[key].filter((entry) => {
|
|
471
|
+
if (typeof entry === 'string' && shouldRemove(entry)) {
|
|
472
|
+
removed += 1;
|
|
473
|
+
return false;
|
|
474
|
+
}
|
|
475
|
+
return true;
|
|
476
|
+
});
|
|
477
|
+
return removed;
|
|
478
|
+
}
|
|
479
|
+
function shouldClearStep(step, sprintId, completedMissionIds, blockedMissionIds) {
|
|
480
|
+
const normalized = step.toLowerCase();
|
|
481
|
+
if (blockedMissionIds.some((missionId) => normalized.includes(missionId.toLowerCase()))) {
|
|
482
|
+
return false;
|
|
483
|
+
}
|
|
484
|
+
if (completedMissionIds.some((missionId) => normalized.includes(missionId.toLowerCase()))) {
|
|
485
|
+
return true;
|
|
486
|
+
}
|
|
487
|
+
return buildSprintTokens(sprintId).some((token) => normalized.includes(token));
|
|
488
|
+
}
|
|
489
|
+
function buildSprintTokens(sprintId) {
|
|
490
|
+
const normalizedSprintId = sprintId.toLowerCase();
|
|
491
|
+
const tokens = [normalizedSprintId, normalizedSprintId.replace(/-/g, ' ')];
|
|
492
|
+
const numericMatch = normalizedSprintId.match(/^sprint-(\d+)$/);
|
|
493
|
+
if (numericMatch) {
|
|
494
|
+
const sprintNumber = String(Number.parseInt(numericMatch[1], 10));
|
|
495
|
+
tokens.push(`sprint ${sprintNumber}`);
|
|
496
|
+
tokens.push(`sprint-${numericMatch[1]}`);
|
|
497
|
+
}
|
|
498
|
+
return tokens;
|
|
499
|
+
}
|
|
500
|
+
function getParentObject(content, path) {
|
|
501
|
+
let current = content;
|
|
502
|
+
for (const segment of path) {
|
|
503
|
+
const next = current[segment];
|
|
504
|
+
if (!isPlainObject(next)) {
|
|
505
|
+
return null;
|
|
506
|
+
}
|
|
507
|
+
current = next;
|
|
508
|
+
}
|
|
509
|
+
return current;
|
|
510
|
+
}
|
|
511
|
+
function persistCloseoutContext(client, context, updatedAt) {
|
|
512
|
+
const serialized = JSON.stringify(context.parsedContent);
|
|
513
|
+
const afterSize = (0, context_retention_1.calculateContextSizeMetrics)(serialized, (0, context_retention_1.resolveContextSizeSettings)(context.parsedContent));
|
|
514
|
+
if (serialized === context.rawContent) {
|
|
515
|
+
return (0, errors_1.createSuccess)({ afterSize });
|
|
516
|
+
}
|
|
517
|
+
const updateResult = client.execute('UPDATE contexts SET content = ?, updated_at = ? WHERE id = ?', [serialized, updatedAt, context.contextType]);
|
|
518
|
+
if (!updateResult.success) {
|
|
519
|
+
return (0, errors_1.createError)(updateResult.error ?? {
|
|
520
|
+
code: errors_1.CMOS_ERROR_CODES.DB_QUERY_FAILED,
|
|
521
|
+
message: `Failed to update ${context.contextType}`,
|
|
522
|
+
suggestion: 'Check database permissions and retry sprint closeout.',
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
return (0, errors_1.createSuccess)({ afterSize });
|
|
526
|
+
}
|
|
527
|
+
function completeSprintRecord(client, sprintId, completedAt) {
|
|
528
|
+
const updateWithEndDate = client.execute(`UPDATE sprints
|
|
529
|
+
SET status = 'Completed',
|
|
530
|
+
end_date = COALESCE(end_date, ?)
|
|
531
|
+
WHERE id = ?`, [completedAt, sprintId]);
|
|
532
|
+
if (updateWithEndDate.success ||
|
|
533
|
+
updateWithEndDate.error?.code !== errors_1.CMOS_ERROR_CODES.DB_SCHEMA_MISMATCH ||
|
|
534
|
+
!updateWithEndDate.error?.message.includes('end_date')) {
|
|
535
|
+
return updateWithEndDate;
|
|
536
|
+
}
|
|
537
|
+
return client.execute(`UPDATE sprints SET status = 'Completed' WHERE id = ?`, [sprintId]);
|
|
538
|
+
}
|
|
539
|
+
async function applyOptionalCondensation(params) {
|
|
540
|
+
const mappings = [
|
|
541
|
+
['masterContext', 'master_context'],
|
|
542
|
+
['projectContext', 'project_context'],
|
|
543
|
+
];
|
|
544
|
+
for (const [resultKey, contextType] of mappings) {
|
|
545
|
+
const condenseResult = await (0, cmos_context_condense_1.cmosContextCondense)({
|
|
546
|
+
contextType,
|
|
547
|
+
strategy: params.strategy,
|
|
548
|
+
targetSizePercent: params.targetSizePercent,
|
|
549
|
+
dryRun: false,
|
|
550
|
+
projectRoot: params.projectRoot,
|
|
551
|
+
});
|
|
552
|
+
if (!condenseResult.success || !condenseResult.data) {
|
|
553
|
+
params.warnings.push(`Optional ${contextType} condensation failed: ${condenseResult.error?.message ?? 'Unknown error'}.`);
|
|
554
|
+
continue;
|
|
555
|
+
}
|
|
556
|
+
params.contexts[resultKey].afterSize = condenseResult.data.afterSize;
|
|
557
|
+
params.contexts[resultKey].condensation = {
|
|
558
|
+
strategy: params.strategy,
|
|
559
|
+
snapshotId: condenseResult.data.snapshotId,
|
|
560
|
+
reductionPercent: condenseResult.data.reductionPercent,
|
|
561
|
+
targetMet: condenseResult.data.targetMet,
|
|
562
|
+
message: condenseResult.data.message,
|
|
563
|
+
};
|
|
564
|
+
for (const warning of condenseResult.warnings ?? []) {
|
|
565
|
+
params.warnings.push(`${contextType}: ${warning}`);
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Archive sprint-scoped decisions and learnings.
|
|
571
|
+
* Sets status='archived' for all active decisions/learnings linked to the sprint
|
|
572
|
+
* (directly via sprint_id, or indirectly via mission/session sprint linkage).
|
|
573
|
+
* Decisions/learnings with status other than 'active' are left untouched.
|
|
574
|
+
*/
|
|
575
|
+
function archiveSprintDecisionsAndLearnings(client, sprintId) {
|
|
576
|
+
let decisionsArchived = 0;
|
|
577
|
+
let learningsArchived = 0;
|
|
578
|
+
// Sprint 52 m04: older DBs seeded before session_id was added will fail the archival
|
|
579
|
+
// UPDATE with `no such column: session_id`. Ensure the column exists first so the
|
|
580
|
+
// cross-session archival path actually runs instead of silently archiving zero rows.
|
|
581
|
+
(0, schema_migrations_1.ensureArchivalColumns)(client);
|
|
582
|
+
const decisionsSql = `UPDATE strategic_decisions SET status = 'archived'
|
|
583
|
+
WHERE status = 'active'
|
|
584
|
+
AND (sprint_id = ?
|
|
585
|
+
OR mission_id IN (SELECT id FROM missions WHERE sprint_id = ?)
|
|
586
|
+
OR session_id IN (SELECT id FROM sessions WHERE sprint_id = ?))`;
|
|
587
|
+
const decisionResult = client.execute(decisionsSql, [sprintId, sprintId, sprintId]);
|
|
588
|
+
if (decisionResult.success) {
|
|
589
|
+
decisionsArchived = decisionResult.data?.changes ?? 0;
|
|
590
|
+
}
|
|
591
|
+
else {
|
|
592
|
+
const msg = decisionResult.error?.message ?? 'Failed to archive decisions';
|
|
593
|
+
return {
|
|
594
|
+
success: false,
|
|
595
|
+
decisionsArchived: 0,
|
|
596
|
+
learningsArchived: 0,
|
|
597
|
+
error: `strategic_decisions: ${msg} — SQL: ${decisionsSql.replace(/\s+/g, ' ')}`,
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
const learningsSql = `UPDATE learnings SET status = 'archived'
|
|
601
|
+
WHERE status = 'active'
|
|
602
|
+
AND (sprint_id = ?
|
|
603
|
+
OR mission_id IN (SELECT id FROM missions WHERE sprint_id = ?)
|
|
604
|
+
OR session_id IN (SELECT id FROM sessions WHERE sprint_id = ?))`;
|
|
605
|
+
const learningResult = client.execute(learningsSql, [sprintId, sprintId, sprintId]);
|
|
606
|
+
if (learningResult.success) {
|
|
607
|
+
learningsArchived = learningResult.data?.changes ?? 0;
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
const msg = learningResult.error?.message ?? 'Failed to archive learnings';
|
|
611
|
+
return {
|
|
612
|
+
success: false,
|
|
613
|
+
decisionsArchived,
|
|
614
|
+
learningsArchived: 0,
|
|
615
|
+
error: `learnings: ${msg} — SQL: ${learningsSql.replace(/\s+/g, ' ')}`,
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
return { success: true, decisionsArchived, learningsArchived };
|
|
619
|
+
}
|
|
620
|
+
/**
|
|
621
|
+
* Compute sprint summary KPIs from mission and decision data.
|
|
622
|
+
*/
|
|
623
|
+
function computeSprintKPIs(client, sprintId, readiness) {
|
|
624
|
+
const completionRate = readiness.totalMissions > 0
|
|
625
|
+
? roundNumber(readiness.completedMissions / readiness.totalMissions)
|
|
626
|
+
: 0;
|
|
627
|
+
// Compute average cycle time from missions with both started_at and completed_at
|
|
628
|
+
let avgCycleTimeDays = null;
|
|
629
|
+
const missionRows = client.getMany('SELECT id, status, started_at, completed_at FROM missions WHERE sprint_id = ? AND status = ? AND started_at IS NOT NULL AND completed_at IS NOT NULL', [sprintId, 'Completed']);
|
|
630
|
+
if (missionRows.success && missionRows.data && missionRows.data.length > 0) {
|
|
631
|
+
let totalMs = 0;
|
|
632
|
+
let count = 0;
|
|
633
|
+
for (const row of missionRows.data) {
|
|
634
|
+
if (row.started_at && row.completed_at) {
|
|
635
|
+
const started = Date.parse(row.started_at);
|
|
636
|
+
const completed = Date.parse(row.completed_at);
|
|
637
|
+
if (!Number.isNaN(started) && !Number.isNaN(completed) && completed >= started) {
|
|
638
|
+
totalMs += completed - started;
|
|
639
|
+
count += 1;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
if (count > 0) {
|
|
644
|
+
avgCycleTimeDays = roundNumber(totalMs / count / (1000 * 60 * 60 * 24));
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
// Count decisions for this sprint
|
|
648
|
+
let decisionCount = 0;
|
|
649
|
+
const decisionCountResult = client.getOne(`SELECT COUNT(*) AS count FROM strategic_decisions
|
|
650
|
+
WHERE sprint_id = ?
|
|
651
|
+
OR mission_id IN (SELECT id FROM missions WHERE sprint_id = ?)
|
|
652
|
+
OR session_id IN (SELECT id FROM sessions WHERE sprint_id = ?)`, [sprintId, sprintId, sprintId]);
|
|
653
|
+
if (decisionCountResult.success && decisionCountResult.data) {
|
|
654
|
+
decisionCount = decisionCountResult.data.count;
|
|
655
|
+
}
|
|
656
|
+
// Count learnings for this sprint
|
|
657
|
+
let learningCount = 0;
|
|
658
|
+
const learningCountResult = client.getOne(`SELECT COUNT(*) AS count FROM learnings
|
|
659
|
+
WHERE sprint_id = ?
|
|
660
|
+
OR mission_id IN (SELECT id FROM missions WHERE sprint_id = ?)
|
|
661
|
+
OR session_id IN (SELECT id FROM sessions WHERE sprint_id = ?)`, [sprintId, sprintId, sprintId]);
|
|
662
|
+
if (learningCountResult.success && learningCountResult.data) {
|
|
663
|
+
learningCount = learningCountResult.data.count;
|
|
664
|
+
}
|
|
665
|
+
return {
|
|
666
|
+
completionRate,
|
|
667
|
+
avgCycleTimeDays,
|
|
668
|
+
decisionCount,
|
|
669
|
+
learningCount,
|
|
670
|
+
blockedCount: readiness.blockedMissions,
|
|
671
|
+
};
|
|
672
|
+
}
|
|
673
|
+
/**
|
|
674
|
+
* Clear project_context sprint-specific working_memory fields and update current_sprint.
|
|
675
|
+
* Clears session_history and recent_sessions arrays (sprint-scoped ephemeral data).
|
|
676
|
+
* Does NOT clear next_steps — that's handled by clearSprintLinkedNextSteps which is selective.
|
|
677
|
+
* Mutates the parsed content in-place for subsequent persistence.
|
|
678
|
+
*/
|
|
679
|
+
function clearProjectContextWorkingMemory(content, _sprintId) {
|
|
680
|
+
if (isPlainObject(content.working_memory)) {
|
|
681
|
+
const wm = content.working_memory;
|
|
682
|
+
// Clear sprint-scoped ephemeral arrays but NOT next_steps (handled separately)
|
|
683
|
+
const ephemeralKeys = ['session_history', 'recent_sessions'];
|
|
684
|
+
for (const key of ephemeralKeys) {
|
|
685
|
+
if (Array.isArray(wm[key])) {
|
|
686
|
+
wm[key] = [];
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
// Set current_sprint to null to signal the sprint is closed
|
|
691
|
+
if ('current_sprint' in content) {
|
|
692
|
+
content.current_sprint = null;
|
|
693
|
+
}
|
|
694
|
+
// Also clear active_mission if present
|
|
695
|
+
if ('active_mission' in content) {
|
|
696
|
+
content.active_mission = null;
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
function buildCloseoutMessage(sprintId, condensation, readiness) {
|
|
700
|
+
const parts = [`Sprint '${sprintId}' closed successfully`];
|
|
701
|
+
if (readiness.blockedMissions > 0) {
|
|
702
|
+
parts.push(`with ${readiness.blockedMissions} blocked mission${readiness.blockedMissions === 1 ? '' : 's'} left as carryover`);
|
|
703
|
+
}
|
|
704
|
+
if (condensation !== 'none') {
|
|
705
|
+
parts.push(`using ${condensation} context condensation`);
|
|
706
|
+
}
|
|
707
|
+
return parts.join(' ');
|
|
708
|
+
}
|
|
709
|
+
function roundNumber(value) {
|
|
710
|
+
return Math.round(value * 100) / 100;
|
|
711
|
+
}
|
|
712
|
+
function isPlainObject(value) {
|
|
713
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Format sprint closeout results for LLM readability.
|
|
717
|
+
*/
|
|
718
|
+
function formatSprintCompleteForLLM(result) {
|
|
719
|
+
if (!result.success || !result.data) {
|
|
720
|
+
const error = result.error;
|
|
721
|
+
const lines = [
|
|
722
|
+
'❌ Failed to complete sprint',
|
|
723
|
+
'',
|
|
724
|
+
`Error: ${error?.message ?? 'Unknown error'}`,
|
|
725
|
+
];
|
|
726
|
+
if (error?.suggestion) {
|
|
727
|
+
lines.push('');
|
|
728
|
+
lines.push(`Suggestion: ${error.suggestion}`);
|
|
729
|
+
}
|
|
730
|
+
return lines.join('\n');
|
|
731
|
+
}
|
|
732
|
+
const data = result.data;
|
|
733
|
+
const lines = [
|
|
734
|
+
`✓ Sprint '${data.sprintId}' completed`,
|
|
735
|
+
'',
|
|
736
|
+
`Status: ${data.previousStatus ?? 'Unknown'} → ${data.currentStatus}`,
|
|
737
|
+
`Completed at: ${data.completedAt}`,
|
|
738
|
+
`Summary: ${data.summary}`,
|
|
739
|
+
'',
|
|
740
|
+
`Readiness: ${data.readiness.completedMissions}/${data.readiness.totalMissions} completed, ${data.readiness.blockedMissions} blocked, ${data.readiness.openMissions} open`,
|
|
741
|
+
'',
|
|
742
|
+
`KPIs: completion rate ${(data.lifecycle.kpis.completionRate * 100).toFixed(0)}%, avg cycle time ${data.lifecycle.kpis.avgCycleTimeDays !== null ? `${data.lifecycle.kpis.avgCycleTimeDays}d` : 'N/A'}, ${data.lifecycle.kpis.decisionCount} decisions, ${data.lifecycle.kpis.learningCount} learnings`,
|
|
743
|
+
`Archived: ${data.lifecycle.decisionsArchived} decisions, ${data.lifecycle.learningsArchived} learnings`,
|
|
744
|
+
`DB snapshot: ${data.lifecycle.dbSnapshotId ?? 'failed'}`,
|
|
745
|
+
'',
|
|
746
|
+
`master_context: ${data.contexts.masterContext.beforeSize.sizeKb.toFixed(2)}KB → ${data.contexts.masterContext.afterSize.sizeKb.toFixed(2)}KB, cleared ${data.contexts.masterContext.nextStepsCleared} next step(s)`,
|
|
747
|
+
`project_context: ${data.contexts.projectContext.beforeSize.sizeKb.toFixed(2)}KB → ${data.contexts.projectContext.afterSize.sizeKb.toFixed(2)}KB, cleared ${data.contexts.projectContext.nextStepsCleared} next step(s)`,
|
|
748
|
+
`Total context size: ${data.contexts.totalBeforeSizeKb.toFixed(2)}KB → ${data.contexts.totalAfterSizeKb.toFixed(2)}KB`,
|
|
749
|
+
];
|
|
750
|
+
if (data.contexts.masterContext.condensation || data.contexts.projectContext.condensation) {
|
|
751
|
+
lines.push('');
|
|
752
|
+
if (data.contexts.masterContext.condensation) {
|
|
753
|
+
lines.push(`master_context condensation: ${data.contexts.masterContext.condensation.message}`);
|
|
754
|
+
}
|
|
755
|
+
if (data.contexts.projectContext.condensation) {
|
|
756
|
+
lines.push(`project_context condensation: ${data.contexts.projectContext.condensation.message}`);
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
if (result.warnings && result.warnings.length > 0) {
|
|
760
|
+
lines.push('');
|
|
761
|
+
lines.push('Warnings:');
|
|
762
|
+
for (const warning of result.warnings) {
|
|
763
|
+
lines.push(`- ${warning}`);
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
return lines.join('\n');
|
|
767
|
+
}
|
|
768
|
+
//# sourceMappingURL=cmos-sprint-complete.js.map
|