@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,687 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ABOUTME: Agent-callable key lifecycle — cmos_auth(action=rotate|revoke|list|reissue|login|login_init|login_complete|logout).
|
|
3
|
+
// ABOUTME: Thin dispatcher over DashboardClient + CredentialStore so agents can self-heal credentials.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.cmosAuthToolDefinition = exports.cmosAuthSchema = exports.CMOS_AUTH_ACTIONS = void 0;
|
|
6
|
+
exports.cmosAuth = cmosAuth;
|
|
7
|
+
exports.formatAuthForLLM = formatAuthForLLM;
|
|
8
|
+
/**
|
|
9
|
+
* `cmos_auth` consolidated tool — Sprint 57 m03 + Sprint 58 m01 + Sprint 59 m02/m03/m04.
|
|
10
|
+
*
|
|
11
|
+
* Gives agents self-service credential actions:
|
|
12
|
+
* - `rotate` — mint a new project-scoped key, keep the old one in a
|
|
13
|
+
* local `pendingRevoke` slot until the dashboard-scheduled
|
|
14
|
+
* `revokeAt` timestamp so in-flight requests don't 401.
|
|
15
|
+
* - `revoke` — hard-revoke a specific `keyId` (or the current project
|
|
16
|
+
* key for `projectRoot`). Dashboard invalidates immediately;
|
|
17
|
+
* local row is removed.
|
|
18
|
+
* - `list` — return the dashboard's `GET /api/keys` tree, optionally
|
|
19
|
+
* filtered to "mine only" (keys spawned by a user-scoped
|
|
20
|
+
* credential currently in this MCP's local store).
|
|
21
|
+
* - `reissue` — manual lost-key recovery. Wraps `recoverProjectKey`
|
|
22
|
+
* (same endpoint, exposed as an explicit agent action).
|
|
23
|
+
* - `login` — RFC 8628 device-code bootstrap as a single blocking call.
|
|
24
|
+
* NOTE: The prompt is invisible in IDE MCP hosts (VSCode,
|
|
25
|
+
* Cursor, Claude Desktop) because the tool blocks polling
|
|
26
|
+
* for the full `expiresIn` window and captured-to-response
|
|
27
|
+
* fields only render on tool return. Prefer `login_init`
|
|
28
|
+
* + `login_complete` for agent-driven auth in chat. Kept
|
|
29
|
+
* for terminal callers where stderr is visible, and for
|
|
30
|
+
* scripts/bootstrap-device-code.ts parity.
|
|
31
|
+
* - `login_init` — Sprint 59 m04: first leg of the IDE-safe two-call flow.
|
|
32
|
+
* Calls `/api/auth/device/code`, returns
|
|
33
|
+
* `{deviceCode, userCode, verificationUri, expiresIn,
|
|
34
|
+
* interval}` immediately (no blocking) so the agent can
|
|
35
|
+
* render the prompt to the user before the code expires.
|
|
36
|
+
* - `login_complete` — Sprint 59 m04: second leg. Polls `/api/auth/device/token`
|
|
37
|
+
* within a bounded `maxWaitSeconds` window and returns
|
|
38
|
+
* `{status: 'approved'|'pending'|'expired'|'denied', ...}`.
|
|
39
|
+
* Agent calls this after the user approves in browser
|
|
40
|
+
* (or repeatedly until terminal). On `approved`, persists
|
|
41
|
+
* the minted user-scoped key via CredentialStore.
|
|
42
|
+
* - `logout` — Sprint 59 m03: symmetric counterpart to login. Revokes
|
|
43
|
+
* the current user-scoped key on the dashboard via the
|
|
44
|
+
* unified `revokeKey(keyId)` (m02) and removes the local
|
|
45
|
+
* row. Auto-picks the keyId when exactly one user-scoped
|
|
46
|
+
* key is in the store; requires an explicit `keyId` when
|
|
47
|
+
* there are multiple. Project-scoped children are left
|
|
48
|
+
* alone — they remain valid standalone cmk_ bearers
|
|
49
|
+
* server-side and their local rows stay intact.
|
|
50
|
+
*
|
|
51
|
+
* All return structured results so agents don't need to parse error strings.
|
|
52
|
+
* `rotate` / `revoke` / `reissue` / `login` / `login_complete` are write
|
|
53
|
+
* surfaces — they always persist (or explicitly report why they didn't) before
|
|
54
|
+
* returning success.
|
|
55
|
+
*
|
|
56
|
+
* @module tools/cmos/cmos-auth
|
|
57
|
+
*/
|
|
58
|
+
const zod_1 = require("zod");
|
|
59
|
+
const errors_1 = require("./errors");
|
|
60
|
+
const credential_store_1 = require("../../intelligence/credential-store");
|
|
61
|
+
const dashboard_client_1 = require("./dashboard-client");
|
|
62
|
+
const client_1 = require("./client");
|
|
63
|
+
const project_key_capture_1 = require("../../auth/project-key-capture");
|
|
64
|
+
const device_code_1 = require("../../auth/device-code");
|
|
65
|
+
exports.CMOS_AUTH_ACTIONS = [
|
|
66
|
+
'rotate',
|
|
67
|
+
'revoke',
|
|
68
|
+
'list',
|
|
69
|
+
'reissue',
|
|
70
|
+
'login',
|
|
71
|
+
'login_init',
|
|
72
|
+
'login_complete',
|
|
73
|
+
'logout',
|
|
74
|
+
];
|
|
75
|
+
const DEFAULT_LOGIN_COMPLETE_MAX_WAIT_SECONDS = 30;
|
|
76
|
+
const DEFAULT_LOGIN_COMPLETE_INTERVAL_SECONDS = 2;
|
|
77
|
+
exports.cmosAuthSchema = zod_1.z
|
|
78
|
+
.object({
|
|
79
|
+
action: zod_1.z
|
|
80
|
+
.enum(exports.CMOS_AUTH_ACTIONS)
|
|
81
|
+
.describe('Credential action: rotate | revoke | list | reissue | login | login_init | login_complete | logout'),
|
|
82
|
+
projectRoot: zod_1.z
|
|
83
|
+
.string()
|
|
84
|
+
.optional()
|
|
85
|
+
.describe('Project root for rotate/revoke/reissue. Defaults to the caller context when absent.'),
|
|
86
|
+
keyId: zod_1.z
|
|
87
|
+
.string()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe('Specific dashboard-side keyId. revoke: omit to revoke the current project key for projectRoot. logout: omit when there is exactly one user-scoped key in the local store; required when there are multiple.'),
|
|
90
|
+
graceSeconds: zod_1.z
|
|
91
|
+
.number()
|
|
92
|
+
.int()
|
|
93
|
+
.positive()
|
|
94
|
+
.max(86400)
|
|
95
|
+
.optional()
|
|
96
|
+
.describe('Grace window for rotate (default: dashboard-side 300s). Keeps old key live while in-flight requests complete.'),
|
|
97
|
+
mineOnly: zod_1.z
|
|
98
|
+
.boolean()
|
|
99
|
+
.optional()
|
|
100
|
+
.describe('list only: when true (default), filter to keys spawned by a user-scoped key currently in this MCP store.'),
|
|
101
|
+
deviceCode: zod_1.z
|
|
102
|
+
.string()
|
|
103
|
+
.optional()
|
|
104
|
+
.describe('login_complete only: deviceCode from a prior login_init call. The dashboard-side opaque handle for the pending approval.'),
|
|
105
|
+
maxWaitSeconds: zod_1.z
|
|
106
|
+
.number()
|
|
107
|
+
.int()
|
|
108
|
+
.positive()
|
|
109
|
+
.max(600)
|
|
110
|
+
.optional()
|
|
111
|
+
.describe('login_complete only: bound the poll window before returning status=pending (default 30s). Agent can re-call login_complete to keep polling.'),
|
|
112
|
+
pollIntervalSeconds: zod_1.z
|
|
113
|
+
.number()
|
|
114
|
+
.int()
|
|
115
|
+
.positive()
|
|
116
|
+
.max(60)
|
|
117
|
+
.optional()
|
|
118
|
+
.describe('login_complete only: base poll interval (default 2s). Pass the interval from login_init for best behavior; dashboard slow_down responses bump this internally.'),
|
|
119
|
+
})
|
|
120
|
+
.strict();
|
|
121
|
+
exports.cmosAuthToolDefinition = {
|
|
122
|
+
name: 'cmos_auth',
|
|
123
|
+
description: 'Agent-callable credential lifecycle. Actions: login_init (non-blocking — starts RFC 8628 ' +
|
|
124
|
+
'device-code flow, returns userCode + verificationUri immediately; agent renders them for ' +
|
|
125
|
+
'user approval) + login_complete (polls within a bounded window; returns status ' +
|
|
126
|
+
"'approved'|'pending'|'expired'|'denied'). Prefer login_init + login_complete for " +
|
|
127
|
+
'agent-driven auth in chat — a single blocking login is invisible in IDE MCP hosts. ' +
|
|
128
|
+
'login (legacy single-call blocking flow; kept for terminal callers where stderr is visible). ' +
|
|
129
|
+
'logout (symmetric to login — revokes the current user-scoped key on the dashboard + clears the local row). ' +
|
|
130
|
+
'rotate (mint new project key with grace window), revoke (hard-revoke a keyId), ' +
|
|
131
|
+
'list (view credential tree, mine-only by default), reissue (recover a lost project key). ' +
|
|
132
|
+
'All writes persist atomically to the local credential store; agents can call these ' +
|
|
133
|
+
'directly without human intervention.',
|
|
134
|
+
inputSchema: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
action: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
enum: [...exports.CMOS_AUTH_ACTIONS],
|
|
140
|
+
description: 'Credential action: rotate | revoke | list | reissue | login | login_init | login_complete | logout',
|
|
141
|
+
},
|
|
142
|
+
projectRoot: {
|
|
143
|
+
type: 'string',
|
|
144
|
+
description: 'Project root for rotate/revoke/reissue. Defaults to caller context.',
|
|
145
|
+
},
|
|
146
|
+
keyId: {
|
|
147
|
+
type: 'string',
|
|
148
|
+
description: 'Specific dashboard keyId to revoke. Omit to revoke the current project key for projectRoot.',
|
|
149
|
+
},
|
|
150
|
+
graceSeconds: {
|
|
151
|
+
type: 'number',
|
|
152
|
+
minimum: 1,
|
|
153
|
+
maximum: 86400,
|
|
154
|
+
description: 'Rotate grace window (default: 300s dashboard-side).',
|
|
155
|
+
},
|
|
156
|
+
mineOnly: {
|
|
157
|
+
type: 'boolean',
|
|
158
|
+
description: 'list only: default true. When true, filter to keys spawned by a local user-scoped credential.',
|
|
159
|
+
},
|
|
160
|
+
deviceCode: {
|
|
161
|
+
type: 'string',
|
|
162
|
+
description: 'login_complete only: deviceCode from a prior login_init call. Opaque dashboard-side handle.',
|
|
163
|
+
},
|
|
164
|
+
maxWaitSeconds: {
|
|
165
|
+
type: 'number',
|
|
166
|
+
minimum: 1,
|
|
167
|
+
maximum: 600,
|
|
168
|
+
description: 'login_complete only: bound the poll window before returning status=pending (default 30s).',
|
|
169
|
+
},
|
|
170
|
+
pollIntervalSeconds: {
|
|
171
|
+
type: 'number',
|
|
172
|
+
minimum: 1,
|
|
173
|
+
maximum: 60,
|
|
174
|
+
description: 'login_complete only: base poll interval (default 2s). Use the interval from login_init for best behavior.',
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
required: ['action'],
|
|
178
|
+
additionalProperties: false,
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
const defaultDashboardClientResolver = async (projectRoot) => {
|
|
182
|
+
const result = await dashboard_client_1.DashboardClient.fromEnvForProject(projectRoot);
|
|
183
|
+
if (!result.success || !result.data)
|
|
184
|
+
return null;
|
|
185
|
+
return result.data.client;
|
|
186
|
+
};
|
|
187
|
+
const defaultDashboardProjectIdReader = async (projectRoot) => {
|
|
188
|
+
try {
|
|
189
|
+
const result = await (0, client_1.withClientAsync)(async (client) => {
|
|
190
|
+
const row = client.getOne(`SELECT value FROM metadata WHERE key = 'dashboard_project_id'`);
|
|
191
|
+
const registered = client.getOne(`SELECT value FROM metadata WHERE key = 'dashboard_registered'`);
|
|
192
|
+
const isRegistered = registered.success && registered.data?.value === 'true';
|
|
193
|
+
const id = (row.success && row.data?.value) || null;
|
|
194
|
+
return { success: true, data: isRegistered ? id : null };
|
|
195
|
+
}, { projectRoot });
|
|
196
|
+
if (!result.success)
|
|
197
|
+
return null;
|
|
198
|
+
return result.data ?? null;
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
// ─── Handler ─────────────────────────────────────────────────────────────────
|
|
205
|
+
function isAction(value) {
|
|
206
|
+
return exports.CMOS_AUTH_ACTIONS.includes(value);
|
|
207
|
+
}
|
|
208
|
+
async function cmosAuth(params, deps = {}) {
|
|
209
|
+
const actionValue = typeof params.action === 'string' ? params.action : '';
|
|
210
|
+
if (!isAction(actionValue)) {
|
|
211
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.invalidAction('cmos_auth', actionValue, exports.CMOS_AUTH_ACTIONS));
|
|
212
|
+
}
|
|
213
|
+
const store = deps.store ?? (await credential_store_1.CredentialStore.create());
|
|
214
|
+
const clientResolver = deps.clientResolver ?? defaultDashboardClientResolver;
|
|
215
|
+
const projectIdReader = deps.projectIdReader ?? defaultDashboardProjectIdReader;
|
|
216
|
+
const deviceCodeFlow = deps.deviceCodeFlow ?? device_code_1.runDeviceCodeFlow;
|
|
217
|
+
const deviceCodeRequester = deps.deviceCodeRequester ?? (({ baseUrl, userAgent }) => (0, device_code_1.requestDeviceCode)(baseUrl, userAgent));
|
|
218
|
+
const tokenPoller = deps.tokenPoller ?? device_code_1.pollForTokenBounded;
|
|
219
|
+
const dashboardBaseUrl = deps.dashboardBaseUrl !== undefined
|
|
220
|
+
? deps.dashboardBaseUrl
|
|
221
|
+
: process.env[dashboard_client_1.CMOS_DASHBOARD_URL_ENV];
|
|
222
|
+
switch (actionValue) {
|
|
223
|
+
case 'rotate':
|
|
224
|
+
return handleRotate(params, store, clientResolver, projectIdReader);
|
|
225
|
+
case 'revoke':
|
|
226
|
+
return handleRevoke(params, store, clientResolver);
|
|
227
|
+
case 'list':
|
|
228
|
+
return handleList(params, store, clientResolver);
|
|
229
|
+
case 'reissue':
|
|
230
|
+
return handleReissue(params, store, clientResolver, projectIdReader);
|
|
231
|
+
case 'login':
|
|
232
|
+
return handleLogin(store, deviceCodeFlow, dashboardBaseUrl);
|
|
233
|
+
case 'login_init':
|
|
234
|
+
return handleLoginInit(deviceCodeRequester, dashboardBaseUrl);
|
|
235
|
+
case 'login_complete':
|
|
236
|
+
return handleLoginComplete(params, store, tokenPoller, dashboardBaseUrl);
|
|
237
|
+
case 'logout':
|
|
238
|
+
return handleLogout(params, store, clientResolver);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
async function handleRotate(params, store, clientResolver, projectIdReader) {
|
|
242
|
+
if (!params.projectRoot) {
|
|
243
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.missingParameter('projectRoot'));
|
|
244
|
+
}
|
|
245
|
+
const existing = await store.getProjectKey(params.projectRoot);
|
|
246
|
+
if (!existing) {
|
|
247
|
+
return (0, errors_1.createError)({
|
|
248
|
+
code: 'CREDENTIAL_NOT_FOUND',
|
|
249
|
+
message: `No project-scoped key found locally for ${params.projectRoot}`,
|
|
250
|
+
suggestion: 'Run registration or cmos_auth(action=reissue) to populate the local project key first.',
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
const projectId = await projectIdReader(params.projectRoot);
|
|
254
|
+
if (!projectId) {
|
|
255
|
+
return (0, errors_1.createError)({
|
|
256
|
+
code: 'PROJECT_NOT_REGISTERED',
|
|
257
|
+
message: `No dashboard_project_id recorded for ${params.projectRoot}`,
|
|
258
|
+
suggestion: 'The project must be registered with the dashboard before keys can be rotated.',
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
const client = await clientResolver(params.projectRoot);
|
|
262
|
+
if (!client) {
|
|
263
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
264
|
+
}
|
|
265
|
+
const rotate = await client.rotateProjectKey(projectId, params.graceSeconds !== undefined ? { graceSeconds: params.graceSeconds } : {});
|
|
266
|
+
if (!rotate.success || !rotate.data) {
|
|
267
|
+
return (0, errors_1.createError)(rotate.error ?? errors_1.CmosErrors.dashboardError('rotate returned no data'));
|
|
268
|
+
}
|
|
269
|
+
const now = new Date().toISOString();
|
|
270
|
+
const next = {
|
|
271
|
+
key: rotate.data.newKey,
|
|
272
|
+
keyId: rotate.data.newKeyId,
|
|
273
|
+
parentKeyId: existing.parentKeyId,
|
|
274
|
+
label: rotate.data.label ?? existing.label,
|
|
275
|
+
issuedAt: now,
|
|
276
|
+
lastUsedAt: now,
|
|
277
|
+
};
|
|
278
|
+
await store.swapProjectKey(params.projectRoot, next, {
|
|
279
|
+
key: existing.key,
|
|
280
|
+
keyId: rotate.data.oldKeyId,
|
|
281
|
+
revokeAt: rotate.data.revokeAt,
|
|
282
|
+
});
|
|
283
|
+
return (0, errors_1.createSuccess)({
|
|
284
|
+
action: 'rotate',
|
|
285
|
+
projectId,
|
|
286
|
+
newKeyId: rotate.data.newKeyId,
|
|
287
|
+
oldKeyId: rotate.data.oldKeyId,
|
|
288
|
+
revokeAt: rotate.data.revokeAt,
|
|
289
|
+
graceSeconds: params.graceSeconds ?? null,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
async function handleRevoke(params, store, clientResolver) {
|
|
293
|
+
// Sprint 59 m02 — unified scope-aware revoke. Accepts either an explicit
|
|
294
|
+
// keyId or a projectRoot (to derive the keyId from the local project key).
|
|
295
|
+
// The dashboard infers scope from the key row and enforces ownership, so
|
|
296
|
+
// the tool no longer needs `projectId` to build the URL.
|
|
297
|
+
let targetKeyId = params.keyId;
|
|
298
|
+
if (!targetKeyId) {
|
|
299
|
+
if (!params.projectRoot) {
|
|
300
|
+
return (0, errors_1.createError)({
|
|
301
|
+
code: 'MISSING_PARAMETER',
|
|
302
|
+
message: 'revoke requires either keyId or projectRoot.',
|
|
303
|
+
suggestion: 'Pass keyId to revoke a specific key, or projectRoot to revoke that project’s local project-scoped key.',
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
const existing = await store.getProjectKey(params.projectRoot);
|
|
307
|
+
if (!existing) {
|
|
308
|
+
return (0, errors_1.createError)({
|
|
309
|
+
code: 'CREDENTIAL_NOT_FOUND',
|
|
310
|
+
message: `No project-scoped key found locally for ${params.projectRoot}, and no explicit keyId was supplied.`,
|
|
311
|
+
suggestion: 'Pass keyId to revoke a specific dashboard key.',
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
targetKeyId = existing.keyId;
|
|
315
|
+
}
|
|
316
|
+
// Determine scope locally from credential store BEFORE calling revoke.
|
|
317
|
+
// Dashboard message 335c3a34 (2026-04-23) confirmed the shipped response
|
|
318
|
+
// envelope is {keyId, revokedAt} — scope is inferred server-side but NOT
|
|
319
|
+
// echoed back. Local inference drives cleanup routing.
|
|
320
|
+
const userScopedKeys = await store.listUserScopedKeys();
|
|
321
|
+
const allProjects = await store.listProjectKeys();
|
|
322
|
+
let scope;
|
|
323
|
+
if (userScopedKeys[targetKeyId]) {
|
|
324
|
+
scope = 'user';
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
const hasProjectMatch = Object.values(allProjects).some((record) => record.keyId === targetKeyId || record.pendingRevoke?.keyId === targetKeyId);
|
|
328
|
+
scope = hasProjectMatch ? 'project' : 'unknown';
|
|
329
|
+
}
|
|
330
|
+
const client = await clientResolver(params.projectRoot);
|
|
331
|
+
if (!client) {
|
|
332
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
333
|
+
}
|
|
334
|
+
const result = await client.revokeKey(targetKeyId);
|
|
335
|
+
if (!result.success || !result.data) {
|
|
336
|
+
return (0, errors_1.createError)(result.error ?? errors_1.CmosErrors.dashboardError('revoke returned no data'));
|
|
337
|
+
}
|
|
338
|
+
// Local cleanup per inferred scope. 'unknown' → no local row to clean.
|
|
339
|
+
if (scope === 'user') {
|
|
340
|
+
await store.removeUserScopedKey(targetKeyId);
|
|
341
|
+
}
|
|
342
|
+
else if (scope === 'project') {
|
|
343
|
+
for (const [projectRoot, record] of Object.entries(allProjects)) {
|
|
344
|
+
if (record.keyId === targetKeyId) {
|
|
345
|
+
await store.removeProjectKey(projectRoot);
|
|
346
|
+
}
|
|
347
|
+
else if (record.pendingRevoke?.keyId === targetKeyId) {
|
|
348
|
+
await store.clearPendingRevoke(projectRoot);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return (0, errors_1.createSuccess)({
|
|
353
|
+
action: 'revoke',
|
|
354
|
+
keyId: targetKeyId,
|
|
355
|
+
scope,
|
|
356
|
+
revokedAt: result.data.revokedAt,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
async function handleList(params, store, clientResolver) {
|
|
360
|
+
const client = await clientResolver(params.projectRoot);
|
|
361
|
+
if (!client) {
|
|
362
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
363
|
+
}
|
|
364
|
+
const listResult = await client.listKeys();
|
|
365
|
+
if (!listResult.success || !listResult.data) {
|
|
366
|
+
return (0, errors_1.createError)(listResult.error ?? errors_1.CmosErrors.dashboardError('list returned no data'));
|
|
367
|
+
}
|
|
368
|
+
const mineOnly = params.mineOnly !== false; // default true
|
|
369
|
+
const localUserScopedKeys = await store.listUserScopedKeys();
|
|
370
|
+
const mineKeyIds = new Set(Object.keys(localUserScopedKeys));
|
|
371
|
+
const userScoped = [];
|
|
372
|
+
const projectScoped = [];
|
|
373
|
+
let filteredOut = 0;
|
|
374
|
+
for (const key of listResult.data.keys) {
|
|
375
|
+
const isUserScoped = !key.projectId;
|
|
376
|
+
if (mineOnly) {
|
|
377
|
+
const belongsToMe = isUserScoped
|
|
378
|
+
? mineKeyIds.has(key.id)
|
|
379
|
+
: key.parentKeyId !== null && mineKeyIds.has(key.parentKeyId);
|
|
380
|
+
if (!belongsToMe) {
|
|
381
|
+
filteredOut += 1;
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (isUserScoped) {
|
|
386
|
+
userScoped.push(key);
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
projectScoped.push(key);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return (0, errors_1.createSuccess)({
|
|
393
|
+
action: 'list',
|
|
394
|
+
mineOnly,
|
|
395
|
+
userScoped,
|
|
396
|
+
projectScoped,
|
|
397
|
+
filteredOut,
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
async function handleReissue(params, store, clientResolver, projectIdReader) {
|
|
401
|
+
if (!params.projectRoot) {
|
|
402
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.missingParameter('projectRoot'));
|
|
403
|
+
}
|
|
404
|
+
const projectId = await projectIdReader(params.projectRoot);
|
|
405
|
+
if (!projectId) {
|
|
406
|
+
return (0, errors_1.createError)({
|
|
407
|
+
code: 'PROJECT_NOT_REGISTERED',
|
|
408
|
+
message: `No dashboard_project_id recorded for ${params.projectRoot}`,
|
|
409
|
+
suggestion: 'Project must be registered before a key can be reissued.',
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
const client = await clientResolver(params.projectRoot);
|
|
413
|
+
if (!client) {
|
|
414
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
415
|
+
}
|
|
416
|
+
// recoverProjectKey no-ops when a local key already exists; reissue should
|
|
417
|
+
// force a fresh key even when something is present, so drop any existing
|
|
418
|
+
// row first.
|
|
419
|
+
await store.removeProjectKey(params.projectRoot);
|
|
420
|
+
const recovery = await (0, project_key_capture_1.recoverProjectKey)({
|
|
421
|
+
projectRoot: params.projectRoot,
|
|
422
|
+
projectId,
|
|
423
|
+
client,
|
|
424
|
+
store,
|
|
425
|
+
});
|
|
426
|
+
if (recovery.kind === 'recovered') {
|
|
427
|
+
return (0, errors_1.createSuccess)({
|
|
428
|
+
action: 'reissue',
|
|
429
|
+
projectId,
|
|
430
|
+
newKeyId: recovery.record.keyId,
|
|
431
|
+
revokedKeyIds: [],
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
if (recovery.kind === 'missing-parent-key-id') {
|
|
435
|
+
return (0, errors_1.createError)({
|
|
436
|
+
code: 'DEVICE_CODE_REQUIRED',
|
|
437
|
+
message: 'Dashboard client has no authenticatingKeyId — device code flow must be run before reissue',
|
|
438
|
+
suggestion: 'Run the device code bootstrap (s57-m01) so the credential store has at least one user-scoped key.',
|
|
439
|
+
});
|
|
440
|
+
}
|
|
441
|
+
if (recovery.kind === 'reissue-failed') {
|
|
442
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError(recovery.error));
|
|
443
|
+
}
|
|
444
|
+
// 'no-op-already-present' can't happen — we removed the existing row above.
|
|
445
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError('reissue recovery returned an unexpected state'));
|
|
446
|
+
}
|
|
447
|
+
async function handleLogin(store, deviceCodeFlow, dashboardBaseUrl) {
|
|
448
|
+
if (!dashboardBaseUrl) {
|
|
449
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
450
|
+
}
|
|
451
|
+
let captured;
|
|
452
|
+
try {
|
|
453
|
+
const token = await deviceCodeFlow({
|
|
454
|
+
baseUrl: dashboardBaseUrl,
|
|
455
|
+
credentialStore: store,
|
|
456
|
+
prompter: (response) => {
|
|
457
|
+
// Dual-emit: (a) capture into the response payload so IDE MCP hosts
|
|
458
|
+
// (which swallow stderr) can render verificationUri/userCode to the
|
|
459
|
+
// user/agent, (b) print to stderr so terminal callers and live
|
|
460
|
+
// integration tests see the prompt immediately instead of after the
|
|
461
|
+
// poll loop completes.
|
|
462
|
+
captured = response;
|
|
463
|
+
(0, device_code_1.defaultPrompter)(response);
|
|
464
|
+
},
|
|
465
|
+
});
|
|
466
|
+
if (!captured) {
|
|
467
|
+
// The default flow always invokes the prompter before polling; this
|
|
468
|
+
// only triggers if a test double omits it.
|
|
469
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardError('device code flow produced no prompt response'));
|
|
470
|
+
}
|
|
471
|
+
return (0, errors_1.createSuccess)({
|
|
472
|
+
action: 'login',
|
|
473
|
+
verificationUri: captured.verificationUri,
|
|
474
|
+
userCode: captured.userCode,
|
|
475
|
+
expiresIn: captured.expiresIn,
|
|
476
|
+
interval: captured.interval,
|
|
477
|
+
keyId: token.keyId,
|
|
478
|
+
label: token.label,
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
catch (err) {
|
|
482
|
+
if (err instanceof device_code_1.DeviceCodeError) {
|
|
483
|
+
return (0, errors_1.createError)(mapDeviceCodeError(err));
|
|
484
|
+
}
|
|
485
|
+
throw err;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
async function handleLoginInit(deviceCodeRequester, dashboardBaseUrl) {
|
|
489
|
+
if (!dashboardBaseUrl) {
|
|
490
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
491
|
+
}
|
|
492
|
+
const version = await (0, device_code_1.readPackageVersion)();
|
|
493
|
+
const userAgent = (0, device_code_1.buildUserAgent)(version);
|
|
494
|
+
try {
|
|
495
|
+
const response = await deviceCodeRequester({ baseUrl: dashboardBaseUrl, userAgent });
|
|
496
|
+
return (0, errors_1.createSuccess)({
|
|
497
|
+
action: 'login_init',
|
|
498
|
+
deviceCode: response.deviceCode,
|
|
499
|
+
userCode: response.userCode,
|
|
500
|
+
verificationUri: response.verificationUri,
|
|
501
|
+
expiresIn: response.expiresIn,
|
|
502
|
+
interval: response.interval,
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
catch (err) {
|
|
506
|
+
if (err instanceof device_code_1.DeviceCodeError) {
|
|
507
|
+
return (0, errors_1.createError)(mapDeviceCodeError(err));
|
|
508
|
+
}
|
|
509
|
+
throw err;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
async function handleLoginComplete(params, store, tokenPoller, dashboardBaseUrl) {
|
|
513
|
+
if (!dashboardBaseUrl) {
|
|
514
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
515
|
+
}
|
|
516
|
+
if (!params.deviceCode) {
|
|
517
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.missingParameter('deviceCode'));
|
|
518
|
+
}
|
|
519
|
+
const maxWaitSeconds = params.maxWaitSeconds ?? DEFAULT_LOGIN_COMPLETE_MAX_WAIT_SECONDS;
|
|
520
|
+
const intervalSeconds = params.pollIntervalSeconds ?? DEFAULT_LOGIN_COMPLETE_INTERVAL_SECONDS;
|
|
521
|
+
const version = await (0, device_code_1.readPackageVersion)();
|
|
522
|
+
const userAgent = (0, device_code_1.buildUserAgent)(version);
|
|
523
|
+
try {
|
|
524
|
+
const poll = await tokenPoller({
|
|
525
|
+
baseUrl: dashboardBaseUrl,
|
|
526
|
+
deviceCode: params.deviceCode,
|
|
527
|
+
userAgent,
|
|
528
|
+
intervalSeconds,
|
|
529
|
+
maxWaitSeconds,
|
|
530
|
+
});
|
|
531
|
+
switch (poll.status) {
|
|
532
|
+
case 'approved': {
|
|
533
|
+
const now = new Date().toISOString();
|
|
534
|
+
const record = {
|
|
535
|
+
key: poll.key,
|
|
536
|
+
label: poll.label,
|
|
537
|
+
issuedAt: now,
|
|
538
|
+
lastUsedAt: now,
|
|
539
|
+
};
|
|
540
|
+
await store.upsertUserScopedKey(poll.keyId, record);
|
|
541
|
+
return (0, errors_1.createSuccess)({
|
|
542
|
+
action: 'login_complete',
|
|
543
|
+
status: 'approved',
|
|
544
|
+
keyId: poll.keyId,
|
|
545
|
+
label: poll.label,
|
|
546
|
+
intervalSeconds: poll.intervalSeconds,
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
case 'pending':
|
|
550
|
+
return (0, errors_1.createSuccess)({
|
|
551
|
+
action: 'login_complete',
|
|
552
|
+
status: 'pending',
|
|
553
|
+
intervalSeconds: poll.intervalSeconds,
|
|
554
|
+
});
|
|
555
|
+
case 'expired':
|
|
556
|
+
return (0, errors_1.createSuccess)({
|
|
557
|
+
action: 'login_complete',
|
|
558
|
+
status: 'expired',
|
|
559
|
+
});
|
|
560
|
+
case 'denied':
|
|
561
|
+
return (0, errors_1.createSuccess)({
|
|
562
|
+
action: 'login_complete',
|
|
563
|
+
status: 'denied',
|
|
564
|
+
...(poll.description !== undefined ? { description: poll.description } : {}),
|
|
565
|
+
});
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
catch (err) {
|
|
569
|
+
if (err instanceof device_code_1.DeviceCodeError) {
|
|
570
|
+
return (0, errors_1.createError)(mapDeviceCodeError(err));
|
|
571
|
+
}
|
|
572
|
+
throw err;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
async function handleLogout(params, store, clientResolver) {
|
|
576
|
+
const userScopedKeys = await store.listUserScopedKeys();
|
|
577
|
+
const localKeyIds = Object.keys(userScopedKeys);
|
|
578
|
+
let targetKeyId;
|
|
579
|
+
if (params.keyId) {
|
|
580
|
+
if (!userScopedKeys[params.keyId]) {
|
|
581
|
+
return (0, errors_1.createError)({
|
|
582
|
+
code: 'CREDENTIAL_NOT_FOUND',
|
|
583
|
+
message: `keyId ${params.keyId} is not a user-scoped key in the local credential store.`,
|
|
584
|
+
suggestion: 'logout specifically targets user-scoped login sessions. For project-scoped revocation use cmos_auth(action="revoke", keyId=...).',
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
targetKeyId = params.keyId;
|
|
588
|
+
}
|
|
589
|
+
else if (localKeyIds.length === 0) {
|
|
590
|
+
return (0, errors_1.createError)({
|
|
591
|
+
code: 'CREDENTIAL_NOT_FOUND',
|
|
592
|
+
message: 'No user-scoped key in the local credential store to logout.',
|
|
593
|
+
suggestion: 'Run cmos_auth(action="login_init") then login_complete to bootstrap a credential first.',
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
else if (localKeyIds.length === 1) {
|
|
597
|
+
targetKeyId = localKeyIds[0];
|
|
598
|
+
}
|
|
599
|
+
else {
|
|
600
|
+
return (0, errors_1.createError)({
|
|
601
|
+
code: 'MISSING_PARAMETER',
|
|
602
|
+
message: `Multiple user-scoped keys (${localKeyIds.length}) in the local store — pass an explicit keyId to logout a specific one.`,
|
|
603
|
+
suggestion: 'cmos_auth(action="list", mineOnly=true) lists your user-scoped keys; pass the target as keyId.',
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
const client = await clientResolver(params.projectRoot);
|
|
607
|
+
if (!client) {
|
|
608
|
+
return (0, errors_1.createError)(errors_1.CmosErrors.dashboardNotConfigured());
|
|
609
|
+
}
|
|
610
|
+
const result = await client.revokeKey(targetKeyId);
|
|
611
|
+
if (!result.success || !result.data) {
|
|
612
|
+
return (0, errors_1.createError)(result.error ?? errors_1.CmosErrors.dashboardError('logout revokeKey returned no data'));
|
|
613
|
+
}
|
|
614
|
+
// Remove the local user-scoped row. Project-scoped children are left alone
|
|
615
|
+
// — they keep working server-side as standalone cmk_ bearers; if the user
|
|
616
|
+
// wants to clean them up they can revoke each individually.
|
|
617
|
+
await store.removeUserScopedKey(targetKeyId);
|
|
618
|
+
return (0, errors_1.createSuccess)({
|
|
619
|
+
action: 'logout',
|
|
620
|
+
keyId: targetKeyId,
|
|
621
|
+
revokedAt: result.data.revokedAt,
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
function mapDeviceCodeError(err) {
|
|
625
|
+
switch (err.code) {
|
|
626
|
+
case 'expired_token':
|
|
627
|
+
return {
|
|
628
|
+
code: 'DEVICE_CODE_EXPIRED',
|
|
629
|
+
message: err.description
|
|
630
|
+
? `Device code expired before authorization completed: ${err.description}`
|
|
631
|
+
: 'Device code expired before authorization completed',
|
|
632
|
+
suggestion: 'Re-run cmos_auth(action="login") to request a fresh code, then approve it at the verificationUri before it expires.',
|
|
633
|
+
};
|
|
634
|
+
case 'access_denied':
|
|
635
|
+
return {
|
|
636
|
+
code: 'DEVICE_CODE_ACCESS_DENIED',
|
|
637
|
+
message: err.description
|
|
638
|
+
? `Authorization was denied: ${err.description}`
|
|
639
|
+
: 'Authorization was denied at the dashboard',
|
|
640
|
+
suggestion: 'Approve the device code at the verificationUri when re-running cmos_auth(action="login").',
|
|
641
|
+
};
|
|
642
|
+
case 'request_failed':
|
|
643
|
+
case 'malformed_response':
|
|
644
|
+
default:
|
|
645
|
+
return {
|
|
646
|
+
code: 'DASHBOARD_ERROR',
|
|
647
|
+
message: `Dashboard error: ${err.message}`,
|
|
648
|
+
suggestion: 'Check the dashboard is reachable and the device-code endpoints are healthy.',
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
function formatAuthForLLM(action, result) {
|
|
653
|
+
if (!result.success || !result.data) {
|
|
654
|
+
return `cmos_auth ${action} failed: ${result.error?.message ?? 'unknown error'}`;
|
|
655
|
+
}
|
|
656
|
+
const d = result.data;
|
|
657
|
+
switch (d.action) {
|
|
658
|
+
case 'rotate':
|
|
659
|
+
return `Rotated project key on ${d.projectId}: new=${d.newKeyId}, old=${d.oldKeyId} revokes at ${d.revokeAt}.`;
|
|
660
|
+
case 'revoke':
|
|
661
|
+
return `Revoked ${d.scope}-scoped key ${d.keyId}.`;
|
|
662
|
+
case 'list':
|
|
663
|
+
return `Listed ${d.userScoped.length} user-scoped + ${d.projectScoped.length} project-scoped keys (mineOnly=${d.mineOnly}, filteredOut=${d.filteredOut}).`;
|
|
664
|
+
case 'reissue':
|
|
665
|
+
return `Reissued project key on ${d.projectId}: new keyId=${d.newKeyId}.`;
|
|
666
|
+
case 'login':
|
|
667
|
+
return `Logged in via device code (keyId=${d.keyId}, label="${d.label}"). Open ${d.verificationUri} and enter ${d.userCode} if you haven't already — this key is now persisted locally.`;
|
|
668
|
+
case 'login_init':
|
|
669
|
+
return `Device code issued. Open ${d.verificationUri} and enter ${d.userCode} (expires in ${d.expiresIn}s). Then call cmos_auth(action="login_complete", deviceCode, pollIntervalSeconds=${d.interval}).`;
|
|
670
|
+
case 'login_complete': {
|
|
671
|
+
switch (d.status) {
|
|
672
|
+
case 'approved':
|
|
673
|
+
return `Login approved. keyId=${d.keyId ?? 'unknown'}, label="${d.label ?? ''}" persisted locally.`;
|
|
674
|
+
case 'pending':
|
|
675
|
+
return `Login still pending approval. Call cmos_auth(action="login_complete") again (pollIntervalSeconds=${d.intervalSeconds ?? '?'}).`;
|
|
676
|
+
case 'expired':
|
|
677
|
+
return `Device code expired before approval. Re-run cmos_auth(action="login_init") to request a fresh code.`;
|
|
678
|
+
case 'denied':
|
|
679
|
+
return `Login denied at the dashboard${d.description ? `: ${d.description}` : ''}.`;
|
|
680
|
+
}
|
|
681
|
+
return `login_complete ${String(d.status)}`;
|
|
682
|
+
}
|
|
683
|
+
case 'logout':
|
|
684
|
+
return `Logged out user-scoped key ${d.keyId} (revoked at ${d.revokedAt}). Local row cleared.`;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
//# sourceMappingURL=cmos-auth.js.map
|