@cleocode/core 2026.4.57 → 2026.4.59
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/dist/adapters/adapter-registry.js +64 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/discovery.js +83 -0
- package/dist/adapters/discovery.js.map +1 -0
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/manager.js +260 -0
- package/dist/adapters/manager.js.map +1 -0
- package/dist/admin/export-tasks.js +171 -0
- package/dist/admin/export-tasks.js.map +1 -0
- package/dist/admin/export.js +103 -0
- package/dist/admin/export.js.map +1 -0
- package/dist/admin/help.js +106 -0
- package/dist/admin/help.js.map +1 -0
- package/dist/admin/import-tasks.js +182 -0
- package/dist/admin/import-tasks.js.map +1 -0
- package/dist/admin/import.js +129 -0
- package/dist/admin/import.js.map +1 -0
- package/dist/admin/index.js +13 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/adrs/find.js +134 -0
- package/dist/adrs/find.js.map +1 -0
- package/dist/adrs/index.js +15 -0
- package/dist/adrs/index.js.map +1 -0
- package/dist/adrs/link-pipeline.js +160 -0
- package/dist/adrs/link-pipeline.js.map +1 -0
- package/dist/adrs/list.js +43 -0
- package/dist/adrs/list.js.map +1 -0
- package/dist/adrs/parse.js +51 -0
- package/dist/adrs/parse.js.map +1 -0
- package/dist/adrs/show.js +22 -0
- package/dist/adrs/show.js.map +1 -0
- package/dist/adrs/sync.js +232 -0
- package/dist/adrs/sync.js.map +1 -0
- package/dist/adrs/types.js +9 -0
- package/dist/adrs/types.js.map +1 -0
- package/dist/adrs/validate.js +57 -0
- package/dist/adrs/validate.js.map +1 -0
- package/dist/agents/agent-registry.js +288 -0
- package/dist/agents/agent-registry.js.map +1 -0
- package/dist/agents/agent-schema.js +82 -0
- package/dist/agents/agent-schema.js.map +1 -0
- package/dist/agents/capacity.js +116 -0
- package/dist/agents/capacity.js.map +1 -0
- package/dist/agents/execution-learning.js +474 -0
- package/dist/agents/execution-learning.js.map +1 -0
- package/dist/agents/health-monitor.js +217 -0
- package/dist/agents/health-monitor.js.map +1 -0
- package/dist/agents/index.js +29 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.js +314 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/retry.js +215 -0
- package/dist/agents/retry.js.map +1 -0
- package/dist/audit-prune.js +94 -0
- package/dist/audit-prune.js.map +1 -0
- package/dist/audit.js +68 -0
- package/dist/audit.js.map +1 -0
- package/dist/backfill/index.js +229 -0
- package/dist/backfill/index.js.map +1 -0
- package/dist/bootstrap.js +435 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/caamp/adapter.js +259 -0
- package/dist/caamp/adapter.js.map +1 -0
- package/dist/caamp/capability-check.js +38 -0
- package/dist/caamp/capability-check.js.map +1 -0
- package/dist/caamp/index.js +21 -0
- package/dist/caamp/index.js.map +1 -0
- package/dist/caamp-init.js +16 -0
- package/dist/caamp-init.js.map +1 -0
- package/dist/cleo.js +322 -0
- package/dist/cleo.js.map +1 -0
- package/dist/code/index.js +14 -0
- package/dist/code/index.js.map +1 -0
- package/dist/code/outline.js +165 -0
- package/dist/code/outline.js.map +1 -0
- package/dist/code/parser.js +420 -0
- package/dist/code/parser.js.map +1 -0
- package/dist/code/search.js +135 -0
- package/dist/code/search.js.map +1 -0
- package/dist/code/unfold.js +155 -0
- package/dist/code/unfold.js.map +1 -0
- package/dist/codebase-map/analyzers/architecture.js +129 -0
- package/dist/codebase-map/analyzers/architecture.js.map +1 -0
- package/dist/codebase-map/analyzers/concerns.js +122 -0
- package/dist/codebase-map/analyzers/concerns.js.map +1 -0
- package/dist/codebase-map/analyzers/conventions.js +149 -0
- package/dist/codebase-map/analyzers/conventions.js.map +1 -0
- package/dist/codebase-map/analyzers/integrations.js +108 -0
- package/dist/codebase-map/analyzers/integrations.js.map +1 -0
- package/dist/codebase-map/analyzers/stack.js +117 -0
- package/dist/codebase-map/analyzers/stack.js.map +1 -0
- package/dist/codebase-map/analyzers/structure.js +137 -0
- package/dist/codebase-map/analyzers/structure.js.map +1 -0
- package/dist/codebase-map/analyzers/testing.js +118 -0
- package/dist/codebase-map/analyzers/testing.js.map +1 -0
- package/dist/codebase-map/index.js +57 -0
- package/dist/codebase-map/index.js.map +1 -0
- package/dist/codebase-map/store.js +122 -0
- package/dist/codebase-map/store.js.map +1 -0
- package/dist/codebase-map/summary.js +152 -0
- package/dist/codebase-map/summary.js.map +1 -0
- package/dist/compliance/index.js +288 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/protocol-enforcement.js +332 -0
- package/dist/compliance/protocol-enforcement.js.map +1 -0
- package/dist/compliance/protocol-rules.js +786 -0
- package/dist/compliance/protocol-rules.js.map +1 -0
- package/dist/compliance/protocol-types.js +79 -0
- package/dist/compliance/protocol-types.js.map +1 -0
- package/dist/compliance/store.js +53 -0
- package/dist/compliance/store.js.map +1 -0
- package/dist/conduit/conduit-client.js +107 -0
- package/dist/conduit/conduit-client.js.map +1 -0
- package/dist/conduit/factory.js +55 -0
- package/dist/conduit/factory.js.map +1 -0
- package/dist/conduit/http-transport.js +155 -0
- package/dist/conduit/http-transport.js.map +1 -0
- package/dist/conduit/local-transport.js +255 -0
- package/dist/conduit/local-transport.js.map +1 -0
- package/dist/conduit/sse-transport.js +299 -0
- package/dist/conduit/sse-transport.js.map +1 -0
- package/dist/config/build-config.js +29 -0
- package/dist/config/build-config.js.map +1 -0
- package/dist/config.js +407 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -0
- package/dist/context/index.js +137 -0
- package/dist/context/index.js.map +1 -0
- package/dist/crypto/credentials.js +219 -0
- package/dist/crypto/credentials.js.map +1 -0
- package/dist/discovery.js +182 -0
- package/dist/discovery.js.map +1 -0
- package/dist/engine-result.js +12 -0
- package/dist/engine-result.js.map +1 -0
- package/dist/error-catalog.js +404 -0
- package/dist/error-catalog.js.map +1 -0
- package/dist/error-registry.js +393 -0
- package/dist/error-registry.js.map +1 -0
- package/dist/errors.js +173 -0
- package/dist/errors.js.map +1 -0
- package/dist/hooks/handlers/agent-hooks.js +106 -0
- package/dist/hooks/handlers/agent-hooks.js.map +1 -0
- package/dist/hooks/handlers/conduit-hooks.js +229 -0
- package/dist/hooks/handlers/conduit-hooks.js.map +1 -0
- package/dist/hooks/handlers/context-hooks.js +111 -0
- package/dist/hooks/handlers/context-hooks.js.map +1 -0
- package/dist/hooks/handlers/error-hooks.js +52 -0
- package/dist/hooks/handlers/error-hooks.js.map +1 -0
- package/dist/hooks/handlers/file-hooks.js +104 -0
- package/dist/hooks/handlers/file-hooks.js.map +1 -0
- package/dist/hooks/handlers/handler-helpers.js +61 -0
- package/dist/hooks/handlers/handler-helpers.js.map +1 -0
- package/dist/hooks/handlers/index.js +37 -0
- package/dist/hooks/handlers/index.js.map +1 -0
- package/dist/hooks/handlers/intelligence-hooks.js +69 -0
- package/dist/hooks/handlers/intelligence-hooks.js.map +1 -0
- package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
- package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
- package/dist/hooks/handlers/notification-hooks.js +62 -0
- package/dist/hooks/handlers/notification-hooks.js.map +1 -0
- package/dist/hooks/handlers/session-hooks.js +190 -0
- package/dist/hooks/handlers/session-hooks.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.js +90 -0
- package/dist/hooks/handlers/task-hooks.js.map +1 -0
- package/dist/hooks/handlers/watchdog-hooks.js +162 -0
- package/dist/hooks/handlers/watchdog-hooks.js.map +1 -0
- package/dist/hooks/handlers/work-capture-hooks.js +165 -0
- package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
- package/dist/hooks/index.js +13 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/payload-schemas.js +220 -0
- package/dist/hooks/payload-schemas.js.map +1 -0
- package/dist/hooks/provider-hooks.js +66 -0
- package/dist/hooks/provider-hooks.js.map +1 -0
- package/dist/hooks/registry.js +229 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.js +66 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/hooks.js +136 -0
- package/dist/hooks.js.map +1 -0
- package/dist/init.js +959 -0
- package/dist/init.js.map +1 -0
- package/dist/inject/index.js +82 -0
- package/dist/inject/index.js.map +1 -0
- package/dist/injection.js +377 -0
- package/dist/injection.js.map +1 -0
- package/dist/intelligence/adaptive-validation.js +497 -0
- package/dist/intelligence/adaptive-validation.js.map +1 -0
- package/dist/intelligence/impact.js +675 -0
- package/dist/intelligence/impact.js.map +1 -0
- package/dist/intelligence/index.js +22 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/patterns.js +492 -0
- package/dist/intelligence/patterns.js.map +1 -0
- package/dist/intelligence/prediction.js +499 -0
- package/dist/intelligence/prediction.js.map +1 -0
- package/dist/intelligence/types.js +13 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/issue/create.js +121 -0
- package/dist/issue/create.js.map +1 -0
- package/dist/issue/diagnostics.js +59 -0
- package/dist/issue/diagnostics.js.map +1 -0
- package/dist/issue/index.js +10 -0
- package/dist/issue/index.js.map +1 -0
- package/dist/issue/template-parser.js +267 -0
- package/dist/issue/template-parser.js.map +1 -0
- package/dist/json-schema-validator.js +76 -0
- package/dist/json-schema-validator.js.map +1 -0
- package/dist/lib/index.js +11 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/retry.js +152 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/tree-sitter-languages.js +75 -0
- package/dist/lib/tree-sitter-languages.js.map +1 -0
- package/dist/lifecycle/chain-composition.js +152 -0
- package/dist/lifecycle/chain-composition.js.map +1 -0
- package/dist/lifecycle/chain-store.js +246 -0
- package/dist/lifecycle/chain-store.js.map +1 -0
- package/dist/lifecycle/consolidate-rcasd.js +352 -0
- package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
- package/dist/lifecycle/default-chain.js +176 -0
- package/dist/lifecycle/default-chain.js.map +1 -0
- package/dist/lifecycle/evidence.js +180 -0
- package/dist/lifecycle/evidence.js.map +1 -0
- package/dist/lifecycle/frontmatter.js +363 -0
- package/dist/lifecycle/frontmatter.js.map +1 -0
- package/dist/lifecycle/index.js +756 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/pipeline.js +656 -0
- package/dist/lifecycle/pipeline.js.map +1 -0
- package/dist/lifecycle/rcasd-index.js +326 -0
- package/dist/lifecycle/rcasd-index.js.map +1 -0
- package/dist/lifecycle/rcasd-paths.js +220 -0
- package/dist/lifecycle/rcasd-paths.js.map +1 -0
- package/dist/lifecycle/resume.js +864 -0
- package/dist/lifecycle/resume.js.map +1 -0
- package/dist/lifecycle/stage-artifacts.js +94 -0
- package/dist/lifecycle/stage-artifacts.js.map +1 -0
- package/dist/lifecycle/stage-guidance.js +234 -0
- package/dist/lifecycle/stage-guidance.js.map +1 -0
- package/dist/lifecycle/stages.js +534 -0
- package/dist/lifecycle/stages.js.map +1 -0
- package/dist/lifecycle/state-machine.js +516 -0
- package/dist/lifecycle/state-machine.js.map +1 -0
- package/dist/lifecycle/tessera-engine.js +249 -0
- package/dist/lifecycle/tessera-engine.js.map +1 -0
- package/dist/logger.js +140 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory/anthropic-key-resolver.js +105 -0
- package/dist/memory/anthropic-key-resolver.js.map +1 -0
- package/dist/memory/auto-extract.js +77 -0
- package/dist/memory/auto-extract.js.map +1 -0
- package/dist/memory/brain-backfill.js +389 -0
- package/dist/memory/brain-backfill.js.map +1 -0
- package/dist/memory/brain-consolidator.js +294 -0
- package/dist/memory/brain-consolidator.js.map +1 -0
- package/dist/memory/brain-embedding.js +66 -0
- package/dist/memory/brain-embedding.js.map +1 -0
- package/dist/memory/brain-export.js +239 -0
- package/dist/memory/brain-export.js.map +1 -0
- package/dist/memory/brain-lifecycle.js +841 -0
- package/dist/memory/brain-lifecycle.js.map +1 -0
- package/dist/memory/brain-links.js +161 -0
- package/dist/memory/brain-links.js.map +1 -0
- package/dist/memory/brain-maintenance.js +125 -0
- package/dist/memory/brain-maintenance.js.map +1 -0
- package/dist/memory/brain-migration.js +149 -0
- package/dist/memory/brain-migration.js.map +1 -0
- package/dist/memory/brain-purge.js +243 -0
- package/dist/memory/brain-purge.js.map +1 -0
- package/dist/memory/brain-reasoning.js +215 -0
- package/dist/memory/brain-reasoning.js.map +1 -0
- package/dist/memory/brain-retrieval.js +1088 -0
- package/dist/memory/brain-retrieval.js.map +1 -0
- package/dist/memory/brain-row-types.js +10 -0
- package/dist/memory/brain-row-types.js.map +1 -0
- package/dist/memory/brain-search.js +613 -0
- package/dist/memory/brain-search.js.map +1 -0
- package/dist/memory/brain-similarity.js +145 -0
- package/dist/memory/brain-similarity.js.map +1 -0
- package/dist/memory/brain-stdp.js +297 -0
- package/dist/memory/brain-stdp.js.map +1 -0
- package/dist/memory/claude-mem-migration.js +277 -0
- package/dist/memory/claude-mem-migration.js.map +1 -0
- package/dist/memory/decision-cross-link.js +228 -0
- package/dist/memory/decision-cross-link.js.map +1 -0
- package/dist/memory/decisions.js +242 -0
- package/dist/memory/decisions.js.map +1 -0
- package/dist/memory/edge-types.js +31 -0
- package/dist/memory/edge-types.js.map +1 -0
- package/dist/memory/embedding-local.js +102 -0
- package/dist/memory/embedding-local.js.map +1 -0
- package/dist/memory/embedding-queue.js +271 -0
- package/dist/memory/embedding-queue.js.map +1 -0
- package/dist/memory/embedding-worker.js +58 -0
- package/dist/memory/embedding-worker.js.map +1 -0
- package/dist/memory/engine-compat.js +1597 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/extraction-gate.js +459 -0
- package/dist/memory/extraction-gate.js.map +1 -0
- package/dist/memory/graph-auto-populate.js +148 -0
- package/dist/memory/graph-auto-populate.js.map +1 -0
- package/dist/memory/graph-memory-bridge.js +517 -0
- package/dist/memory/graph-memory-bridge.js.map +1 -0
- package/dist/memory/graph-queries.js +290 -0
- package/dist/memory/graph-queries.js.map +1 -0
- package/dist/memory/index.js +1148 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learnings.js +197 -0
- package/dist/memory/learnings.js.map +1 -0
- package/dist/memory/llm-extraction.js +425 -0
- package/dist/memory/llm-extraction.js.map +1 -0
- package/dist/memory/memory-bridge.js +382 -0
- package/dist/memory/memory-bridge.js.map +1 -0
- package/dist/memory/mental-model-injection.js +61 -0
- package/dist/memory/mental-model-injection.js.map +1 -0
- package/dist/memory/mental-model-queue.js +211 -0
- package/dist/memory/mental-model-queue.js.map +1 -0
- package/dist/memory/observer-reflector.js +626 -0
- package/dist/memory/observer-reflector.js.map +1 -0
- package/dist/memory/patterns.js +192 -0
- package/dist/memory/patterns.js.map +1 -0
- package/dist/memory/pipeline-manifest-sqlite.js +975 -0
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
- package/dist/memory/quality-feedback.js +449 -0
- package/dist/memory/quality-feedback.js.map +1 -0
- package/dist/memory/quality-scoring.js +182 -0
- package/dist/memory/quality-scoring.js.map +1 -0
- package/dist/memory/session-memory.js +331 -0
- package/dist/memory/session-memory.js.map +1 -0
- package/dist/memory/sleep-consolidation.js +706 -0
- package/dist/memory/sleep-consolidation.js.map +1 -0
- package/dist/memory/temporal-supersession.js +403 -0
- package/dist/memory/temporal-supersession.js.map +1 -0
- package/dist/metrics/ab-test.js +260 -0
- package/dist/metrics/ab-test.js.map +1 -0
- package/dist/metrics/aggregation.js +363 -0
- package/dist/metrics/aggregation.js.map +1 -0
- package/dist/metrics/common.js +64 -0
- package/dist/metrics/common.js.map +1 -0
- package/dist/metrics/enums.js +78 -0
- package/dist/metrics/enums.js.map +1 -0
- package/dist/metrics/index.js +19 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/model-provider-registry.js +88 -0
- package/dist/metrics/model-provider-registry.js.map +1 -0
- package/dist/metrics/otel-integration.js +263 -0
- package/dist/metrics/otel-integration.js.map +1 -0
- package/dist/metrics/provider-detection.js +103 -0
- package/dist/metrics/provider-detection.js.map +1 -0
- package/dist/metrics/token-estimation.js +253 -0
- package/dist/metrics/token-estimation.js.map +1 -0
- package/dist/metrics/token-service.js +450 -0
- package/dist/metrics/token-service.js.map +1 -0
- package/dist/migration/agent-outputs.js +316 -0
- package/dist/migration/agent-outputs.js.map +1 -0
- package/dist/migration/checksum.js +92 -0
- package/dist/migration/checksum.js.map +1 -0
- package/dist/migration/index.js +282 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/logger.js +360 -0
- package/dist/migration/logger.js.map +1 -0
- package/dist/migration/preflight.js +9 -0
- package/dist/migration/preflight.js.map +1 -0
- package/dist/migration/state.js +421 -0
- package/dist/migration/state.js.map +1 -0
- package/dist/migration/validate.js +241 -0
- package/dist/migration/validate.js.map +1 -0
- package/dist/mvi-helpers.js +73 -0
- package/dist/mvi-helpers.js.map +1 -0
- package/dist/nexus/deps.js +375 -0
- package/dist/nexus/deps.js.map +1 -0
- package/dist/nexus/discover.js +288 -0
- package/dist/nexus/discover.js.map +1 -0
- package/dist/nexus/hash.js +10 -0
- package/dist/nexus/hash.js.map +1 -0
- package/dist/nexus/index.js +40 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/nexus/migrate-json-to-sqlite.js +115 -0
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
- package/dist/nexus/nexus-bridge.js +321 -0
- package/dist/nexus/nexus-bridge.js.map +1 -0
- package/dist/nexus/permissions.js +105 -0
- package/dist/nexus/permissions.js.map +1 -0
- package/dist/nexus/query.js +175 -0
- package/dist/nexus/query.js.map +1 -0
- package/dist/nexus/registry.js +665 -0
- package/dist/nexus/registry.js.map +1 -0
- package/dist/nexus/sharing/index.js +288 -0
- package/dist/nexus/sharing/index.js.map +1 -0
- package/dist/nexus/transfer-types.js +8 -0
- package/dist/nexus/transfer-types.js.map +1 -0
- package/dist/nexus/transfer.js +271 -0
- package/dist/nexus/transfer.js.map +1 -0
- package/dist/nexus/workspace.js +355 -0
- package/dist/nexus/workspace.js.map +1 -0
- package/dist/observability/index.js +103 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/log-filter.js +63 -0
- package/dist/observability/log-filter.js.map +1 -0
- package/dist/observability/log-parser.js +99 -0
- package/dist/observability/log-parser.js.map +1 -0
- package/dist/observability/log-reader.js +139 -0
- package/dist/observability/log-reader.js.map +1 -0
- package/dist/observability/types.js +19 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/orchestration/analyze.js +107 -0
- package/dist/orchestration/analyze.js.map +1 -0
- package/dist/orchestration/bootstrap.js +132 -0
- package/dist/orchestration/bootstrap.js.map +1 -0
- package/dist/orchestration/context.js +56 -0
- package/dist/orchestration/context.js.map +1 -0
- package/dist/orchestration/critical-path.js +100 -0
- package/dist/orchestration/critical-path.js.map +1 -0
- package/dist/orchestration/hierarchy.js +183 -0
- package/dist/orchestration/hierarchy.js.map +1 -0
- package/dist/orchestration/index.js +287 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/parallel.js +89 -0
- package/dist/orchestration/parallel.js.map +1 -0
- package/dist/orchestration/protocol-validators.js +815 -0
- package/dist/orchestration/protocol-validators.js.map +1 -0
- package/dist/orchestration/skill-ops.js +98 -0
- package/dist/orchestration/skill-ops.js.map +1 -0
- package/dist/orchestration/status.js +107 -0
- package/dist/orchestration/status.js.map +1 -0
- package/dist/orchestration/unblock.js +103 -0
- package/dist/orchestration/unblock.js.map +1 -0
- package/dist/orchestration/validate-spawn.js +67 -0
- package/dist/orchestration/validate-spawn.js.map +1 -0
- package/dist/orchestration/waves.js +86 -0
- package/dist/orchestration/waves.js.map +1 -0
- package/dist/otel/index.js +163 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/output.js +164 -0
- package/dist/output.js.map +1 -0
- package/dist/pagination.js +64 -0
- package/dist/pagination.js.map +1 -0
- package/dist/paths.js +882 -0
- package/dist/paths.js.map +1 -0
- package/dist/phases/deps.js +372 -0
- package/dist/phases/deps.js.map +1 -0
- package/dist/phases/index.js +349 -0
- package/dist/phases/index.js.map +1 -0
- package/dist/pipeline/index.js +10 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/phase.js +45 -0
- package/dist/pipeline/phase.js.map +1 -0
- package/dist/platform.js +211 -0
- package/dist/platform.js.map +1 -0
- package/dist/project-info.js +84 -0
- package/dist/project-info.js.map +1 -0
- package/dist/reconciliation/index.js +10 -0
- package/dist/reconciliation/index.js.map +1 -0
- package/dist/reconciliation/link-store.js +175 -0
- package/dist/reconciliation/link-store.js.map +1 -0
- package/dist/reconciliation/reconciliation-engine.js +298 -0
- package/dist/reconciliation/reconciliation-engine.js.map +1 -0
- package/dist/release/artifacts.js +427 -0
- package/dist/release/artifacts.js.map +1 -0
- package/dist/release/changelog-writer.js +151 -0
- package/dist/release/changelog-writer.js.map +1 -0
- package/dist/release/channel.js +144 -0
- package/dist/release/channel.js.map +1 -0
- package/dist/release/ci.js +166 -0
- package/dist/release/ci.js.map +1 -0
- package/dist/release/github-pr.js +225 -0
- package/dist/release/github-pr.js.map +1 -0
- package/dist/release/guards.js +116 -0
- package/dist/release/guards.js.map +1 -0
- package/dist/release/index.js +22 -0
- package/dist/release/index.js.map +1 -0
- package/dist/release/release-config.js +158 -0
- package/dist/release/release-config.js.map +1 -0
- package/dist/release/release-manifest.js +1019 -0
- package/dist/release/release-manifest.js.map +1 -0
- package/dist/release/version-bump.js +255 -0
- package/dist/release/version-bump.js.map +1 -0
- package/dist/remote/index.js +257 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/repair.js +130 -0
- package/dist/repair.js.map +1 -0
- package/dist/research/index.js +2 -0
- package/dist/research/index.js.map +1 -0
- package/dist/roadmap/index.js +59 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/routing/capability-matrix.js +1556 -0
- package/dist/routing/capability-matrix.js.map +1 -0
- package/dist/routing/index.js +9 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/scaffold.js +1937 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/schema-management.js +295 -0
- package/dist/schema-management.js.map +1 -0
- package/dist/security/index.js +9 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/input-sanitization.js +326 -0
- package/dist/security/input-sanitization.js.map +1 -0
- package/dist/sequence/index.js +295 -0
- package/dist/sequence/index.js.map +1 -0
- package/dist/sessions/assumptions.js +54 -0
- package/dist/sessions/assumptions.js.map +1 -0
- package/dist/sessions/briefing.js +377 -0
- package/dist/sessions/briefing.js.map +1 -0
- package/dist/sessions/context-alert.js +222 -0
- package/dist/sessions/context-alert.js.map +1 -0
- package/dist/sessions/context-inject.js +61 -0
- package/dist/sessions/context-inject.js.map +1 -0
- package/dist/sessions/context-monitor.js +98 -0
- package/dist/sessions/context-monitor.js.map +1 -0
- package/dist/sessions/decisions.js +65 -0
- package/dist/sessions/decisions.js.map +1 -0
- package/dist/sessions/find.js +65 -0
- package/dist/sessions/find.js.map +1 -0
- package/dist/sessions/handoff.js +328 -0
- package/dist/sessions/handoff.js.map +1 -0
- package/dist/sessions/hitl-warnings.js +254 -0
- package/dist/sessions/hitl-warnings.js.map +1 -0
- package/dist/sessions/index.js +327 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/session-archive.js +40 -0
- package/dist/sessions/session-archive.js.map +1 -0
- package/dist/sessions/session-cleanup.js +59 -0
- package/dist/sessions/session-cleanup.js.map +1 -0
- package/dist/sessions/session-drift.js +134 -0
- package/dist/sessions/session-drift.js.map +1 -0
- package/dist/sessions/session-enforcement.js +144 -0
- package/dist/sessions/session-enforcement.js.map +1 -0
- package/dist/sessions/session-grade.js +253 -0
- package/dist/sessions/session-grade.js.map +1 -0
- package/dist/sessions/session-history.js +42 -0
- package/dist/sessions/session-history.js.map +1 -0
- package/dist/sessions/session-id.js +81 -0
- package/dist/sessions/session-id.js.map +1 -0
- package/dist/sessions/session-memory-bridge.js +30 -0
- package/dist/sessions/session-memory-bridge.js.map +1 -0
- package/dist/sessions/session-show.js +24 -0
- package/dist/sessions/session-show.js.map +1 -0
- package/dist/sessions/session-stats.js +69 -0
- package/dist/sessions/session-stats.js.map +1 -0
- package/dist/sessions/session-suspend.js +39 -0
- package/dist/sessions/session-suspend.js.map +1 -0
- package/dist/sessions/session-switch.js +51 -0
- package/dist/sessions/session-switch.js.map +1 -0
- package/dist/sessions/session-view.js +76 -0
- package/dist/sessions/session-view.js.map +1 -0
- package/dist/sessions/snapshot.js +213 -0
- package/dist/sessions/snapshot.js.map +1 -0
- package/dist/sessions/statusline-setup.js +85 -0
- package/dist/sessions/statusline-setup.js.map +1 -0
- package/dist/sessions/types.js +8 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/skills/agents/config.js +94 -0
- package/dist/skills/agents/config.js.map +1 -0
- package/dist/skills/agents/install.js +116 -0
- package/dist/skills/agents/install.js.map +1 -0
- package/dist/skills/agents/registry.js +161 -0
- package/dist/skills/agents/registry.js.map +1 -0
- package/dist/skills/discovery.js +333 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/dispatch.js +347 -0
- package/dist/skills/dispatch.js.map +1 -0
- package/dist/skills/dynamic-skill-generator.js +87 -0
- package/dist/skills/dynamic-skill-generator.js.map +1 -0
- package/dist/skills/index.js +44 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/injection/subagent.js +195 -0
- package/dist/skills/injection/subagent.js.map +1 -0
- package/dist/skills/injection/token.js +260 -0
- package/dist/skills/injection/token.js.map +1 -0
- package/dist/skills/install.js +40 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/manifests/contribution.js +175 -0
- package/dist/skills/manifests/contribution.js.map +1 -0
- package/dist/skills/manifests/research.js +281 -0
- package/dist/skills/manifests/research.js.map +1 -0
- package/dist/skills/manifests/resolver.js +146 -0
- package/dist/skills/manifests/resolver.js.map +1 -0
- package/dist/skills/marketplace.js +90 -0
- package/dist/skills/marketplace.js.map +1 -0
- package/dist/skills/orchestrator/spawn.js +178 -0
- package/dist/skills/orchestrator/spawn.js.map +1 -0
- package/dist/skills/orchestrator/startup.js +451 -0
- package/dist/skills/orchestrator/startup.js.map +1 -0
- package/dist/skills/orchestrator/validator.js +301 -0
- package/dist/skills/orchestrator/validator.js.map +1 -0
- package/dist/skills/precedence-integration.js +73 -0
- package/dist/skills/precedence-integration.js.map +1 -0
- package/dist/skills/precedence-types.js +16 -0
- package/dist/skills/precedence-types.js.map +1 -0
- package/dist/skills/routing-table.js +63 -0
- package/dist/skills/routing-table.js.map +1 -0
- package/dist/skills/skill-paths.js +217 -0
- package/dist/skills/skill-paths.js.map +1 -0
- package/dist/skills/test-utility.js +55 -0
- package/dist/skills/test-utility.js.map +1 -0
- package/dist/skills/types.js +118 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validation.js +183 -0
- package/dist/skills/validation.js.map +1 -0
- package/dist/skills/version.js +57 -0
- package/dist/skills/version.js.map +1 -0
- package/dist/snapshot/index.js +188 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/spawn/adapter-registry.js +246 -0
- package/dist/spawn/adapter-registry.js.map +1 -0
- package/dist/spawn/index.js +10 -0
- package/dist/spawn/index.js.map +1 -0
- package/dist/stats/index.js +350 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/workflow-telemetry.js +400 -0
- package/dist/stats/workflow-telemetry.js.map +1 -0
- package/dist/sticky/archive.js +47 -0
- package/dist/sticky/archive.js.map +1 -0
- package/dist/sticky/convert.js +235 -0
- package/dist/sticky/convert.js.map +1 -0
- package/dist/sticky/create.js +48 -0
- package/dist/sticky/create.js.map +1 -0
- package/dist/sticky/id.js +35 -0
- package/dist/sticky/id.js.map +1 -0
- package/dist/sticky/index.js +16 -0
- package/dist/sticky/index.js.map +1 -0
- package/dist/sticky/list.js +57 -0
- package/dist/sticky/list.js.map +1 -0
- package/dist/sticky/purge.js +45 -0
- package/dist/sticky/purge.js.map +1 -0
- package/dist/sticky/show.js +42 -0
- package/dist/sticky/show.js.map +1 -0
- package/dist/sticky/types.js +10 -0
- package/dist/sticky/types.js.map +1 -0
- package/dist/store/agent-registry-accessor.js +886 -0
- package/dist/store/agent-registry-accessor.js.map +1 -0
- package/dist/store/api-key-kdf.js +84 -0
- package/dist/store/api-key-kdf.js.map +1 -0
- package/dist/store/atomic.js +167 -0
- package/dist/store/atomic.js.map +1 -0
- package/dist/store/backup-crypto.js +184 -0
- package/dist/store/backup-crypto.js.map +1 -0
- package/dist/store/backup-pack.js +581 -0
- package/dist/store/backup-pack.js.map +1 -0
- package/dist/store/backup-unpack.js +449 -0
- package/dist/store/backup-unpack.js.map +1 -0
- package/dist/store/backup.js +94 -0
- package/dist/store/backup.js.map +1 -0
- package/dist/store/brain-accessor.js +429 -0
- package/dist/store/brain-accessor.js.map +1 -0
- package/dist/store/brain-schema.js +628 -0
- package/dist/store/brain-schema.js.map +1 -0
- package/dist/store/brain-sqlite.js +320 -0
- package/dist/store/brain-sqlite.js.map +1 -0
- package/dist/store/cache.js +168 -0
- package/dist/store/cache.js.map +1 -0
- package/dist/store/chain-schema.js +51 -0
- package/dist/store/chain-schema.js.map +1 -0
- package/dist/store/cleanup-legacy.js +171 -0
- package/dist/store/cleanup-legacy.js.map +1 -0
- package/dist/store/conduit-sqlite.js +570 -0
- package/dist/store/conduit-sqlite.js.map +1 -0
- package/dist/store/converters.js +124 -0
- package/dist/store/converters.js.map +1 -0
- package/dist/store/cross-db-cleanup.js +319 -0
- package/dist/store/cross-db-cleanup.js.map +1 -0
- package/dist/store/data-accessor.js +26 -0
- package/dist/store/data-accessor.js.map +1 -0
- package/dist/store/data-safety-central.js +269 -0
- package/dist/store/data-safety-central.js.map +1 -0
- package/dist/store/data-safety.js +274 -0
- package/dist/store/data-safety.js.map +1 -0
- package/dist/store/db-helpers.js +241 -0
- package/dist/store/db-helpers.js.map +1 -0
- package/dist/store/export.js +155 -0
- package/dist/store/export.js.map +1 -0
- package/dist/store/file-utils.js +270 -0
- package/dist/store/file-utils.js.map +1 -0
- package/dist/store/git-checkpoint.js +365 -0
- package/dist/store/git-checkpoint.js.map +1 -0
- package/dist/store/global-salt.js +147 -0
- package/dist/store/global-salt.js.map +1 -0
- package/dist/store/import-logging.js +139 -0
- package/dist/store/import-logging.js.map +1 -0
- package/dist/store/import-remap.js +145 -0
- package/dist/store/import-remap.js.map +1 -0
- package/dist/store/import-sort.js +121 -0
- package/dist/store/import-sort.js.map +1 -0
- package/dist/store/index.js +29 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/json.js +208 -0
- package/dist/store/json.js.map +1 -0
- package/dist/store/lifecycle-store.js +249 -0
- package/dist/store/lifecycle-store.js.map +1 -0
- package/dist/store/lock.js +70 -0
- package/dist/store/lock.js.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.js +562 -0
- package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
- package/dist/store/migration-manager.js +403 -0
- package/dist/store/migration-manager.js.map +1 -0
- package/dist/store/migration-sqlite.js +676 -0
- package/dist/store/migration-sqlite.js.map +1 -0
- package/dist/store/nexus-schema.js +277 -0
- package/dist/store/nexus-schema.js.map +1 -0
- package/dist/store/nexus-sqlite.js +242 -0
- package/dist/store/nexus-sqlite.js.map +1 -0
- package/dist/store/nexus-validation-schemas.js +40 -0
- package/dist/store/nexus-validation-schemas.js.map +1 -0
- package/dist/store/parsers.js +37 -0
- package/dist/store/parsers.js.map +1 -0
- package/dist/store/project-detect.js +457 -0
- package/dist/store/project-detect.js.map +1 -0
- package/dist/store/provider.js +101 -0
- package/dist/store/provider.js.map +1 -0
- package/dist/store/regenerators.js +207 -0
- package/dist/store/regenerators.js.map +1 -0
- package/dist/store/restore-conflict-report.js +206 -0
- package/dist/store/restore-conflict-report.js.map +1 -0
- package/dist/store/restore-json-merge.js +454 -0
- package/dist/store/restore-json-merge.js.map +1 -0
- package/dist/store/safety-data-accessor.js +257 -0
- package/dist/store/safety-data-accessor.js.map +1 -0
- package/dist/store/schema.js +7 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/session-store.js +219 -0
- package/dist/store/session-store.js.map +1 -0
- package/dist/store/signaldock-sqlite.js +550 -0
- package/dist/store/signaldock-sqlite.js.map +1 -0
- package/dist/store/sqlite-backup.js +498 -0
- package/dist/store/sqlite-backup.js.map +1 -0
- package/dist/store/sqlite-data-accessor.js +788 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -0
- package/dist/store/sqlite.js +483 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/store/status-registry.js +8 -0
- package/dist/store/status-registry.js.map +1 -0
- package/dist/store/t310-readiness.js +115 -0
- package/dist/store/t310-readiness.js.map +1 -0
- package/dist/store/task-store.js +358 -0
- package/dist/store/task-store.js.map +1 -0
- package/dist/store/tasks-schema.js +610 -0
- package/dist/store/tasks-schema.js.map +1 -0
- package/dist/store/typed-query.js +15 -0
- package/dist/store/typed-query.js.map +1 -0
- package/dist/store/validation-schemas.js +278 -0
- package/dist/store/validation-schemas.js.map +1 -0
- package/dist/system/archive-analytics.js +277 -0
- package/dist/system/archive-analytics.js.map +1 -0
- package/dist/system/archive-stats.js +64 -0
- package/dist/system/archive-stats.js.map +1 -0
- package/dist/system/audit.js +145 -0
- package/dist/system/audit.js.map +1 -0
- package/dist/system/backup.js +280 -0
- package/dist/system/backup.js.map +1 -0
- package/dist/system/cleanup.js +134 -0
- package/dist/system/cleanup.js.map +1 -0
- package/dist/system/dependencies.js +466 -0
- package/dist/system/dependencies.js.map +1 -0
- package/dist/system/health.js +1207 -0
- package/dist/system/health.js.map +1 -0
- package/dist/system/index.js +18 -0
- package/dist/system/index.js.map +1 -0
- package/dist/system/inject-generate.js +122 -0
- package/dist/system/inject-generate.js.map +1 -0
- package/dist/system/labels.js +38 -0
- package/dist/system/labels.js.map +1 -0
- package/dist/system/metrics.js +61 -0
- package/dist/system/metrics.js.map +1 -0
- package/dist/system/migrate.js +43 -0
- package/dist/system/migrate.js.map +1 -0
- package/dist/system/platform-paths.js +80 -0
- package/dist/system/platform-paths.js.map +1 -0
- package/dist/system/runtime.js +161 -0
- package/dist/system/runtime.js.map +1 -0
- package/dist/system/safestop.js +89 -0
- package/dist/system/safestop.js.map +1 -0
- package/dist/system/storage-preflight.js +123 -0
- package/dist/system/storage-preflight.js.map +1 -0
- package/dist/task-work/index.js +159 -0
- package/dist/task-work/index.js.map +1 -0
- package/dist/tasks/add.js +837 -0
- package/dist/tasks/add.js.map +1 -0
- package/dist/tasks/analyze.js +85 -0
- package/dist/tasks/analyze.js.map +1 -0
- package/dist/tasks/archive.js +90 -0
- package/dist/tasks/archive.js.map +1 -0
- package/dist/tasks/atomicity.js +83 -0
- package/dist/tasks/atomicity.js.map +1 -0
- package/dist/tasks/cancel-ops.js +83 -0
- package/dist/tasks/cancel-ops.js.map +1 -0
- package/dist/tasks/complete.js +252 -0
- package/dist/tasks/complete.js.map +1 -0
- package/dist/tasks/crossref-extract.js +73 -0
- package/dist/tasks/crossref-extract.js.map +1 -0
- package/dist/tasks/delete-preview.js +192 -0
- package/dist/tasks/delete-preview.js.map +1 -0
- package/dist/tasks/delete.js +120 -0
- package/dist/tasks/delete.js.map +1 -0
- package/dist/tasks/deletion-strategy.js +200 -0
- package/dist/tasks/deletion-strategy.js.map +1 -0
- package/dist/tasks/dependency-check.js +278 -0
- package/dist/tasks/dependency-check.js.map +1 -0
- package/dist/tasks/deps-ready.js +32 -0
- package/dist/tasks/deps-ready.js.map +1 -0
- package/dist/tasks/enforcement.js +86 -0
- package/dist/tasks/enforcement.js.map +1 -0
- package/dist/tasks/epic-enforcement.js +294 -0
- package/dist/tasks/epic-enforcement.js.map +1 -0
- package/dist/tasks/find.js +163 -0
- package/dist/tasks/find.js.map +1 -0
- package/dist/tasks/graph-cache.js +127 -0
- package/dist/tasks/graph-cache.js.map +1 -0
- package/dist/tasks/graph-ops.js +173 -0
- package/dist/tasks/graph-ops.js.map +1 -0
- package/dist/tasks/graph-rag.js +328 -0
- package/dist/tasks/graph-rag.js.map +1 -0
- package/dist/tasks/hierarchy-policy.js +149 -0
- package/dist/tasks/hierarchy-policy.js.map +1 -0
- package/dist/tasks/hierarchy.js +185 -0
- package/dist/tasks/hierarchy.js.map +1 -0
- package/dist/tasks/id-generator.js +65 -0
- package/dist/tasks/id-generator.js.map +1 -0
- package/dist/tasks/index.js +14 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/labels.js +55 -0
- package/dist/tasks/labels.js.map +1 -0
- package/dist/tasks/list.js +75 -0
- package/dist/tasks/list.js.map +1 -0
- package/dist/tasks/phase-tracking.js +133 -0
- package/dist/tasks/phase-tracking.js.map +1 -0
- package/dist/tasks/pipeline-stage.js +248 -0
- package/dist/tasks/pipeline-stage.js.map +1 -0
- package/dist/tasks/plan.js +268 -0
- package/dist/tasks/plan.js.map +1 -0
- package/dist/tasks/relates.js +101 -0
- package/dist/tasks/relates.js.map +1 -0
- package/dist/tasks/show.js +83 -0
- package/dist/tasks/show.js.map +1 -0
- package/dist/tasks/size-weighting.js +86 -0
- package/dist/tasks/size-weighting.js.map +1 -0
- package/dist/tasks/staleness.js +86 -0
- package/dist/tasks/staleness.js.map +1 -0
- package/dist/tasks/task-ops.js +1741 -0
- package/dist/tasks/task-ops.js.map +1 -0
- package/dist/tasks/update.js +303 -0
- package/dist/tasks/update.js.map +1 -0
- package/dist/telemetry/index.js +249 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/schema.js +60 -0
- package/dist/telemetry/schema.js.map +1 -0
- package/dist/telemetry/sqlite.js +111 -0
- package/dist/telemetry/sqlite.js.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/parser.js +254 -0
- package/dist/templates/parser.js.map +1 -0
- package/dist/ui/aliases.js +153 -0
- package/dist/ui/aliases.js.map +1 -0
- package/dist/ui/changelog.js +184 -0
- package/dist/ui/changelog.js.map +1 -0
- package/dist/ui/command-registry.js +168 -0
- package/dist/ui/command-registry.js.map +1 -0
- package/dist/ui/flags.js +94 -0
- package/dist/ui/flags.js.map +1 -0
- package/dist/ui/index.js +24 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/upgrade.js +1387 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/validation/chain-validation.js +146 -0
- package/dist/validation/chain-validation.js.map +1 -0
- package/dist/validation/compliance.js +155 -0
- package/dist/validation/compliance.js.map +1 -0
- package/dist/validation/docs-sync.js +212 -0
- package/dist/validation/docs-sync.js.map +1 -0
- package/dist/validation/doctor/checks.js +1069 -0
- package/dist/validation/doctor/checks.js.map +1 -0
- package/dist/validation/doctor/index.js +9 -0
- package/dist/validation/doctor/index.js.map +1 -0
- package/dist/validation/doctor/project-cache.js +160 -0
- package/dist/validation/doctor/project-cache.js.map +1 -0
- package/dist/validation/doctor/utils.js +155 -0
- package/dist/validation/doctor/utils.js.map +1 -0
- package/dist/validation/engine.js +914 -0
- package/dist/validation/engine.js.map +1 -0
- package/dist/validation/gap-check.js +175 -0
- package/dist/validation/gap-check.js.map +1 -0
- package/dist/validation/index.js +40 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/manifest.js +237 -0
- package/dist/validation/manifest.js.map +1 -0
- package/dist/validation/operation-gate-validators.js +724 -0
- package/dist/validation/operation-gate-validators.js.map +1 -0
- package/dist/validation/operation-verification-gates.js +532 -0
- package/dist/validation/operation-verification-gates.js.map +1 -0
- package/dist/validation/param-utils.js +141 -0
- package/dist/validation/param-utils.js.map +1 -0
- package/dist/validation/protocol-common.js +300 -0
- package/dist/validation/protocol-common.js.map +1 -0
- package/dist/validation/protocols/_shared.js +82 -0
- package/dist/validation/protocols/_shared.js.map +1 -0
- package/dist/validation/protocols/architecture-decision.js +31 -0
- package/dist/validation/protocols/architecture-decision.js.map +1 -0
- package/dist/validation/protocols/artifact-publish.js +28 -0
- package/dist/validation/protocols/artifact-publish.js.map +1 -0
- package/dist/validation/protocols/consensus.js +41 -0
- package/dist/validation/protocols/consensus.js.map +1 -0
- package/dist/validation/protocols/contribution.js +27 -0
- package/dist/validation/protocols/contribution.js.map +1 -0
- package/dist/validation/protocols/decomposition.js +28 -0
- package/dist/validation/protocols/decomposition.js.map +1 -0
- package/dist/validation/protocols/implementation.js +24 -0
- package/dist/validation/protocols/implementation.js.map +1 -0
- package/dist/validation/protocols/provenance.js +29 -0
- package/dist/validation/protocols/provenance.js.map +1 -0
- package/dist/validation/protocols/release.js +29 -0
- package/dist/validation/protocols/release.js.map +1 -0
- package/dist/validation/protocols/research.js +24 -0
- package/dist/validation/protocols/research.js.map +1 -0
- package/dist/validation/protocols/specification.js +27 -0
- package/dist/validation/protocols/specification.js.map +1 -0
- package/dist/validation/protocols/testing.js +30 -0
- package/dist/validation/protocols/testing.js.map +1 -0
- package/dist/validation/protocols/validation.js +30 -0
- package/dist/validation/protocols/validation.js.map +1 -0
- package/dist/validation/schema-integrity.js +170 -0
- package/dist/validation/schema-integrity.js.map +1 -0
- package/dist/validation/schema-validator.js +176 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/dist/validation/validate-ops.js +937 -0
- package/dist/validation/validate-ops.js.map +1 -0
- package/dist/validation/validation-rules.js +226 -0
- package/dist/validation/validation-rules.js.map +1 -0
- package/dist/validation/verification.js +321 -0
- package/dist/validation/verification.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NEXUS project registry - cross-project registration and management.
|
|
3
|
+
*
|
|
4
|
+
* SQLite-backed via nexus.db (Drizzle ORM). The global project registry
|
|
5
|
+
* is stored in ~/.cleo/nexus.db in the project_registry table.
|
|
6
|
+
*
|
|
7
|
+
* Legacy JSON backend (projects-registry.json) is migrated on first init
|
|
8
|
+
* via migrate-json-to-sqlite.ts.
|
|
9
|
+
*
|
|
10
|
+
* @task T5366
|
|
11
|
+
* @epic T4540
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID } from 'node:crypto';
|
|
14
|
+
import { mkdir } from 'node:fs/promises';
|
|
15
|
+
import { basename, join, resolve } from 'node:path';
|
|
16
|
+
import { ExitCode } from '@cleocode/contracts';
|
|
17
|
+
import { CleoError } from '../errors.js';
|
|
18
|
+
import { getLogger } from '../logger.js';
|
|
19
|
+
import { getCleoHome } from '../paths.js';
|
|
20
|
+
import { getAccessor } from '../store/data-accessor.js';
|
|
21
|
+
import { nexusAuditLog, projectRegistry } from '../store/nexus-schema.js';
|
|
22
|
+
// Re-export only: resetNexusDbState used by tests and index barrel.
|
|
23
|
+
import { resetNexusDbState } from '../store/nexus-sqlite.js';
|
|
24
|
+
import { generateProjectHash } from './hash.js';
|
|
25
|
+
// ── Path helpers ─────────────────────────────────────────────────────
|
|
26
|
+
/** Get path to the NEXUS home directory (cache, etc.). */
|
|
27
|
+
export function getNexusHome() {
|
|
28
|
+
return process.env['NEXUS_HOME'] ?? join(getCleoHome(), 'nexus');
|
|
29
|
+
}
|
|
30
|
+
/** Get path to the NEXUS cache directory. */
|
|
31
|
+
export function getNexusCacheDir() {
|
|
32
|
+
return process.env['NEXUS_CACHE_DIR'] ?? join(getNexusHome(), 'cache');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get path to the legacy projects registry JSON file.
|
|
36
|
+
* @deprecated Use nexus.db via getNexusDb() instead. Retained for JSON-to-SQLite migration.
|
|
37
|
+
*/
|
|
38
|
+
export function getRegistryPath() {
|
|
39
|
+
return process.env['NEXUS_REGISTRY_FILE'] ?? join(getCleoHome(), 'projects-registry.json');
|
|
40
|
+
}
|
|
41
|
+
// ── Row-to-NexusProject mapping ─────────────────────────────────────
|
|
42
|
+
/** Convert a project_registry row to a NexusProject object. */
|
|
43
|
+
function rowToProject(row) {
|
|
44
|
+
let labels = [];
|
|
45
|
+
try {
|
|
46
|
+
labels = JSON.parse(row.labelsJson);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
labels = [];
|
|
50
|
+
}
|
|
51
|
+
let stats = { nodeCount: 0, relationCount: 0, fileCount: 0 };
|
|
52
|
+
try {
|
|
53
|
+
const parsed = JSON.parse(row.statsJson ?? '{}');
|
|
54
|
+
stats = {
|
|
55
|
+
nodeCount: parsed.nodeCount ?? 0,
|
|
56
|
+
relationCount: parsed.relationCount ?? 0,
|
|
57
|
+
fileCount: parsed.fileCount ?? 0,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
stats = { nodeCount: 0, relationCount: 0, fileCount: 0 };
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
hash: row.projectHash,
|
|
65
|
+
projectId: row.projectId,
|
|
66
|
+
path: row.projectPath,
|
|
67
|
+
name: row.name,
|
|
68
|
+
registeredAt: row.registeredAt,
|
|
69
|
+
lastSeen: row.lastSeen,
|
|
70
|
+
healthStatus: row.healthStatus,
|
|
71
|
+
healthLastCheck: row.healthLastCheck ?? null,
|
|
72
|
+
permissions: row.permissions,
|
|
73
|
+
lastSync: row.lastSync,
|
|
74
|
+
taskCount: row.taskCount,
|
|
75
|
+
labels,
|
|
76
|
+
brainDbPath: row.brainDbPath ?? null,
|
|
77
|
+
tasksDbPath: row.tasksDbPath ?? null,
|
|
78
|
+
lastIndexed: row.lastIndexed ?? null,
|
|
79
|
+
stats,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Write an audit entry to the nexus_audit_log table and emit a Pino log.
|
|
84
|
+
* Audit failures are caught and logged as warnings — they must never break
|
|
85
|
+
* primary operations.
|
|
86
|
+
*/
|
|
87
|
+
async function writeNexusAudit(fields) {
|
|
88
|
+
try {
|
|
89
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
90
|
+
const db = await getNexusDb();
|
|
91
|
+
await db.insert(nexusAuditLog).values({
|
|
92
|
+
id: randomUUID(),
|
|
93
|
+
action: fields.action,
|
|
94
|
+
projectHash: fields.projectHash,
|
|
95
|
+
projectId: fields.projectId,
|
|
96
|
+
domain: 'nexus',
|
|
97
|
+
operation: fields.operation,
|
|
98
|
+
sessionId: fields.sessionId,
|
|
99
|
+
requestId: fields.requestId,
|
|
100
|
+
source: fields.source,
|
|
101
|
+
gateway: fields.gateway,
|
|
102
|
+
success: fields.success ? 1 : 0,
|
|
103
|
+
durationMs: fields.durationMs,
|
|
104
|
+
detailsJson: JSON.stringify(fields.details ?? {}),
|
|
105
|
+
errorMessage: fields.errorMessage,
|
|
106
|
+
});
|
|
107
|
+
getLogger('nexus').info({ ...fields, domain: 'nexus' }, `nexus audit: ${fields.action}`);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
getLogger('nexus').warn({ err }, 'nexus audit write failed');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ── Registry operations ──────────────────────────────────────────────
|
|
114
|
+
/**
|
|
115
|
+
* Read all projects from nexus.db and return as a NexusRegistryFile.
|
|
116
|
+
* Compatibility wrapper for consumers that expect the legacy JSON shape.
|
|
117
|
+
* Returns null if nexus.db has not been initialized yet.
|
|
118
|
+
*/
|
|
119
|
+
export async function readRegistry() {
|
|
120
|
+
try {
|
|
121
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
122
|
+
const db = await getNexusDb();
|
|
123
|
+
const rows = await db.select().from(projectRegistry);
|
|
124
|
+
const projects = {};
|
|
125
|
+
let latestUpdate = '';
|
|
126
|
+
for (const row of rows) {
|
|
127
|
+
const p = rowToProject(row);
|
|
128
|
+
projects[p.hash] = p;
|
|
129
|
+
if (p.lastSeen > latestUpdate)
|
|
130
|
+
latestUpdate = p.lastSeen;
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
schemaVersion: '1.0.0',
|
|
134
|
+
lastUpdated: latestUpdate || new Date().toISOString(),
|
|
135
|
+
projects,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Read the global registry, throwing if not initialized.
|
|
144
|
+
*/
|
|
145
|
+
export async function readRegistryRequired() {
|
|
146
|
+
const registry = await readRegistry();
|
|
147
|
+
if (!registry) {
|
|
148
|
+
throw new CleoError(ExitCode.NEXUS_NOT_INITIALIZED, 'Nexus registry not initialized. Run: cleo nexus init', { fix: 'cleo nexus init' });
|
|
149
|
+
}
|
|
150
|
+
return registry;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Initialize the NEXUS directory structure and nexus.db.
|
|
154
|
+
* Idempotent -- safe to call multiple times.
|
|
155
|
+
* Migrates legacy JSON registry on first run if present.
|
|
156
|
+
*/
|
|
157
|
+
export async function nexusInit() {
|
|
158
|
+
const nexusHome = getNexusHome();
|
|
159
|
+
const cacheDir = getNexusCacheDir();
|
|
160
|
+
// Create directories
|
|
161
|
+
await mkdir(nexusHome, { recursive: true });
|
|
162
|
+
await mkdir(cacheDir, { recursive: true });
|
|
163
|
+
// Initialize nexus.db (runs migrations) then check for legacy migration
|
|
164
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
165
|
+
await getNexusDb();
|
|
166
|
+
// Migrate legacy JSON if nexus.db is empty and JSON exists
|
|
167
|
+
const db = await getNexusDb();
|
|
168
|
+
const existing = await db.select().from(projectRegistry);
|
|
169
|
+
if (existing.length === 0) {
|
|
170
|
+
const { migrateJsonToSqlite } = await import('./migrate-json-to-sqlite.js');
|
|
171
|
+
await migrateJsonToSqlite();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/** Check if a path contains a CLEO project (has readable task data). */
|
|
175
|
+
async function isCleoProject(projectPath) {
|
|
176
|
+
try {
|
|
177
|
+
const accessor = await getAccessor(projectPath);
|
|
178
|
+
await accessor.countTasks();
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** Read task metadata from a project's task file. */
|
|
186
|
+
async function readProjectMeta(projectPath) {
|
|
187
|
+
try {
|
|
188
|
+
const accessor = await getAccessor(projectPath);
|
|
189
|
+
const { tasks } = await accessor.queryTasks({});
|
|
190
|
+
const allLabels = tasks.flatMap((t) => t.labels ?? []);
|
|
191
|
+
const uniqueLabels = [...new Set(allLabels)].sort();
|
|
192
|
+
return { taskCount: tasks.length, labels: uniqueLabels };
|
|
193
|
+
}
|
|
194
|
+
catch {
|
|
195
|
+
return { taskCount: 0, labels: [] };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Read project-info.json from a project directory for projectId.
|
|
200
|
+
* Returns empty string if not available.
|
|
201
|
+
*/
|
|
202
|
+
async function readProjectId(projectPath) {
|
|
203
|
+
try {
|
|
204
|
+
const { readFileSync, existsSync } = await import('node:fs');
|
|
205
|
+
const infoPath = join(projectPath, '.cleo', 'project-info.json');
|
|
206
|
+
if (!existsSync(infoPath))
|
|
207
|
+
return '';
|
|
208
|
+
const data = JSON.parse(readFileSync(infoPath, 'utf-8'));
|
|
209
|
+
return typeof data.projectId === 'string' ? data.projectId : '';
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return '';
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Register a project in the global registry (nexus.db).
|
|
217
|
+
* @returns The project hash.
|
|
218
|
+
*/
|
|
219
|
+
export async function nexusRegister(projectPath, name, permissions = 'read') {
|
|
220
|
+
if (!projectPath) {
|
|
221
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Project path required');
|
|
222
|
+
}
|
|
223
|
+
// Validate project has readable task data
|
|
224
|
+
if (!(await isCleoProject(projectPath))) {
|
|
225
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Path missing .cleo/tasks.db: ${projectPath}`, {
|
|
226
|
+
fix: `cd ${projectPath} && cleo init`,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
const projectName = name || basename(projectPath) || 'unnamed';
|
|
230
|
+
const projectHash = generateProjectHash(projectPath);
|
|
231
|
+
// Ensure nexus.db is initialized
|
|
232
|
+
await nexusInit();
|
|
233
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
234
|
+
const { eq } = await import('drizzle-orm');
|
|
235
|
+
const db = await getNexusDb();
|
|
236
|
+
// Check if already registered
|
|
237
|
+
const existingRows = await db
|
|
238
|
+
.select()
|
|
239
|
+
.from(projectRegistry)
|
|
240
|
+
.where(eq(projectRegistry.projectHash, projectHash));
|
|
241
|
+
const existing = existingRows[0];
|
|
242
|
+
if (existing?.permissions) {
|
|
243
|
+
throw new CleoError(ExitCode.NEXUS_PROJECT_EXISTS, `Project already registered with hash: ${projectHash}`);
|
|
244
|
+
}
|
|
245
|
+
// Check for name conflicts (new entries only)
|
|
246
|
+
if (!existing) {
|
|
247
|
+
const nameConflictRows = await db
|
|
248
|
+
.select()
|
|
249
|
+
.from(projectRegistry)
|
|
250
|
+
.where(eq(projectRegistry.name, projectName));
|
|
251
|
+
if (nameConflictRows.length > 0) {
|
|
252
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, `Project name '${projectName}' already exists in registry`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Read project metadata
|
|
256
|
+
const meta = await readProjectMeta(projectPath);
|
|
257
|
+
const now = new Date().toISOString();
|
|
258
|
+
let projectId = await readProjectId(projectPath);
|
|
259
|
+
const resolvedPath = resolve(projectPath);
|
|
260
|
+
const brainDbPath = join(resolvedPath, '.cleo', 'brain.db');
|
|
261
|
+
const tasksDbPath = join(resolvedPath, '.cleo', 'tasks.db');
|
|
262
|
+
if (existing) {
|
|
263
|
+
// Merge nexus fields into existing entry
|
|
264
|
+
await db
|
|
265
|
+
.update(projectRegistry)
|
|
266
|
+
.set({
|
|
267
|
+
permissions,
|
|
268
|
+
lastSync: now,
|
|
269
|
+
taskCount: meta.taskCount,
|
|
270
|
+
labelsJson: JSON.stringify(meta.labels),
|
|
271
|
+
lastSeen: now,
|
|
272
|
+
brainDbPath,
|
|
273
|
+
tasksDbPath,
|
|
274
|
+
})
|
|
275
|
+
.where(eq(projectRegistry.projectHash, projectHash));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
// Generate projectId fallback
|
|
279
|
+
if (!projectId) {
|
|
280
|
+
projectId = randomUUID();
|
|
281
|
+
}
|
|
282
|
+
// Create new entry
|
|
283
|
+
await db.insert(projectRegistry).values({
|
|
284
|
+
projectId,
|
|
285
|
+
projectHash,
|
|
286
|
+
projectPath,
|
|
287
|
+
name: projectName,
|
|
288
|
+
registeredAt: now,
|
|
289
|
+
lastSeen: now,
|
|
290
|
+
healthStatus: 'unknown',
|
|
291
|
+
healthLastCheck: null,
|
|
292
|
+
permissions,
|
|
293
|
+
lastSync: now,
|
|
294
|
+
taskCount: meta.taskCount,
|
|
295
|
+
labelsJson: JSON.stringify(meta.labels),
|
|
296
|
+
brainDbPath,
|
|
297
|
+
tasksDbPath,
|
|
298
|
+
statsJson: '{}',
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
await writeNexusAudit({
|
|
302
|
+
action: 'register',
|
|
303
|
+
projectHash,
|
|
304
|
+
projectId,
|
|
305
|
+
operation: 'register',
|
|
306
|
+
success: true,
|
|
307
|
+
});
|
|
308
|
+
return projectHash;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Unregister a project from the global registry.
|
|
312
|
+
*/
|
|
313
|
+
export async function nexusUnregister(nameOrHash) {
|
|
314
|
+
if (!nameOrHash) {
|
|
315
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Project name or hash required');
|
|
316
|
+
}
|
|
317
|
+
const project = await nexusGetProject(nameOrHash);
|
|
318
|
+
if (!project) {
|
|
319
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Project not found in registry: ${nameOrHash}`);
|
|
320
|
+
}
|
|
321
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
322
|
+
const { eq } = await import('drizzle-orm');
|
|
323
|
+
const db = await getNexusDb();
|
|
324
|
+
await db.delete(projectRegistry).where(eq(projectRegistry.projectHash, project.hash));
|
|
325
|
+
await writeNexusAudit({
|
|
326
|
+
action: 'unregister',
|
|
327
|
+
projectHash: project.hash,
|
|
328
|
+
projectId: project.projectId,
|
|
329
|
+
operation: 'unregister',
|
|
330
|
+
success: true,
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* List all registered projects.
|
|
335
|
+
*/
|
|
336
|
+
export async function nexusList() {
|
|
337
|
+
try {
|
|
338
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
339
|
+
const db = await getNexusDb();
|
|
340
|
+
const rows = await db.select().from(projectRegistry);
|
|
341
|
+
return rows.map(rowToProject);
|
|
342
|
+
}
|
|
343
|
+
catch {
|
|
344
|
+
return [];
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get a project by name or hash.
|
|
349
|
+
* Returns null if not found.
|
|
350
|
+
*/
|
|
351
|
+
export async function nexusGetProject(nameOrHash) {
|
|
352
|
+
try {
|
|
353
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
354
|
+
const { eq, or } = await import('drizzle-orm');
|
|
355
|
+
const db = await getNexusDb();
|
|
356
|
+
// Try hash match first, then name
|
|
357
|
+
const rows = await db
|
|
358
|
+
.select()
|
|
359
|
+
.from(projectRegistry)
|
|
360
|
+
.where(or(eq(projectRegistry.projectHash, nameOrHash), eq(projectRegistry.name, nameOrHash)));
|
|
361
|
+
const row = rows[0];
|
|
362
|
+
if (!row)
|
|
363
|
+
return null;
|
|
364
|
+
return rowToProject(row);
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Check if a project exists in the registry.
|
|
372
|
+
*/
|
|
373
|
+
export async function nexusProjectExists(nameOrHash) {
|
|
374
|
+
const project = await nexusGetProject(nameOrHash);
|
|
375
|
+
return project !== null;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Sync project metadata (task count, labels) for a registered project.
|
|
379
|
+
*/
|
|
380
|
+
export async function nexusSync(nameOrHash) {
|
|
381
|
+
if (!nameOrHash) {
|
|
382
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Project name or hash required');
|
|
383
|
+
}
|
|
384
|
+
const project = await nexusGetProject(nameOrHash);
|
|
385
|
+
if (!project) {
|
|
386
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Project not found in registry: ${nameOrHash}`);
|
|
387
|
+
}
|
|
388
|
+
const meta = await readProjectMeta(project.path);
|
|
389
|
+
const now = new Date().toISOString();
|
|
390
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
391
|
+
const { eq } = await import('drizzle-orm');
|
|
392
|
+
const db = await getNexusDb();
|
|
393
|
+
await db
|
|
394
|
+
.update(projectRegistry)
|
|
395
|
+
.set({
|
|
396
|
+
taskCount: meta.taskCount,
|
|
397
|
+
labelsJson: JSON.stringify(meta.labels),
|
|
398
|
+
lastSync: now,
|
|
399
|
+
lastSeen: now,
|
|
400
|
+
})
|
|
401
|
+
.where(eq(projectRegistry.projectHash, project.hash));
|
|
402
|
+
await writeNexusAudit({
|
|
403
|
+
action: 'sync',
|
|
404
|
+
projectHash: project.hash,
|
|
405
|
+
projectId: project.projectId,
|
|
406
|
+
operation: 'sync',
|
|
407
|
+
success: true,
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Sync all registered projects.
|
|
412
|
+
* @returns Counts of synced and failed projects.
|
|
413
|
+
*/
|
|
414
|
+
export async function nexusSyncAll() {
|
|
415
|
+
const projects = await nexusList();
|
|
416
|
+
let synced = 0;
|
|
417
|
+
let failed = 0;
|
|
418
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
419
|
+
const { eq } = await import('drizzle-orm');
|
|
420
|
+
const db = await getNexusDb();
|
|
421
|
+
for (const project of projects) {
|
|
422
|
+
try {
|
|
423
|
+
const meta = await readProjectMeta(project.path);
|
|
424
|
+
const now = new Date().toISOString();
|
|
425
|
+
await db
|
|
426
|
+
.update(projectRegistry)
|
|
427
|
+
.set({
|
|
428
|
+
taskCount: meta.taskCount,
|
|
429
|
+
labelsJson: JSON.stringify(meta.labels),
|
|
430
|
+
lastSync: now,
|
|
431
|
+
lastSeen: now,
|
|
432
|
+
})
|
|
433
|
+
.where(eq(projectRegistry.projectHash, project.hash));
|
|
434
|
+
synced++;
|
|
435
|
+
}
|
|
436
|
+
catch {
|
|
437
|
+
failed++;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
await writeNexusAudit({
|
|
441
|
+
action: 'sync-all',
|
|
442
|
+
operation: 'sync-all',
|
|
443
|
+
success: true,
|
|
444
|
+
details: { synced, failed },
|
|
445
|
+
});
|
|
446
|
+
return { synced, failed };
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* Update code intelligence index stats for a registered project.
|
|
450
|
+
*
|
|
451
|
+
* Called after a successful `cleo nexus analyze` run to record the
|
|
452
|
+
* latest node/relation/file counts and the indexed timestamp.
|
|
453
|
+
*
|
|
454
|
+
* @param projectPath - Absolute path to the project root.
|
|
455
|
+
* @param stats - Results from the pipeline run.
|
|
456
|
+
* @task T622
|
|
457
|
+
*/
|
|
458
|
+
export async function nexusUpdateIndexStats(projectPath, stats) {
|
|
459
|
+
if (!projectPath)
|
|
460
|
+
return;
|
|
461
|
+
const projectHash = generateProjectHash(projectPath);
|
|
462
|
+
const now = new Date().toISOString();
|
|
463
|
+
try {
|
|
464
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
465
|
+
const { eq } = await import('drizzle-orm');
|
|
466
|
+
const db = await getNexusDb();
|
|
467
|
+
const rows = await db
|
|
468
|
+
.select()
|
|
469
|
+
.from(projectRegistry)
|
|
470
|
+
.where(eq(projectRegistry.projectHash, projectHash));
|
|
471
|
+
if (rows.length === 0) {
|
|
472
|
+
// Not yet registered — auto-register first (best effort)
|
|
473
|
+
try {
|
|
474
|
+
await nexusRegister(projectPath);
|
|
475
|
+
}
|
|
476
|
+
catch {
|
|
477
|
+
// Already registered or cannot register — ignore
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
await db
|
|
481
|
+
.update(projectRegistry)
|
|
482
|
+
.set({
|
|
483
|
+
lastIndexed: now,
|
|
484
|
+
statsJson: JSON.stringify(stats),
|
|
485
|
+
lastSeen: now,
|
|
486
|
+
})
|
|
487
|
+
.where(eq(projectRegistry.projectHash, projectHash));
|
|
488
|
+
await writeNexusAudit({
|
|
489
|
+
action: 'update-index-stats',
|
|
490
|
+
projectHash,
|
|
491
|
+
operation: 'update-index-stats',
|
|
492
|
+
success: true,
|
|
493
|
+
details: {
|
|
494
|
+
nodeCount: stats.nodeCount,
|
|
495
|
+
relationCount: stats.relationCount,
|
|
496
|
+
fileCount: stats.fileCount,
|
|
497
|
+
},
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
catch (err) {
|
|
501
|
+
// Non-fatal — index stats update must never break the analyze pipeline
|
|
502
|
+
getLogger('nexus').warn({ err }, 'nexus: failed to update index stats');
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Update a project's permission level in the registry.
|
|
507
|
+
* Used by permissions.ts to avoid direct JSON file writes.
|
|
508
|
+
*/
|
|
509
|
+
export async function nexusSetPermission(nameOrHash, permission) {
|
|
510
|
+
const project = await nexusGetProject(nameOrHash);
|
|
511
|
+
if (!project) {
|
|
512
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Project not found in registry: ${nameOrHash}`);
|
|
513
|
+
}
|
|
514
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
515
|
+
const { eq } = await import('drizzle-orm');
|
|
516
|
+
const db = await getNexusDb();
|
|
517
|
+
await db
|
|
518
|
+
.update(projectRegistry)
|
|
519
|
+
.set({ permissions: permission })
|
|
520
|
+
.where(eq(projectRegistry.projectHash, project.hash));
|
|
521
|
+
await writeNexusAudit({
|
|
522
|
+
action: 'set-permission',
|
|
523
|
+
projectHash: project.hash,
|
|
524
|
+
projectId: project.projectId,
|
|
525
|
+
operation: 'set-permission',
|
|
526
|
+
success: true,
|
|
527
|
+
details: { permission },
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Reconcile the current project's identity with the global nexus registry.
|
|
532
|
+
*
|
|
533
|
+
* 4-scenario policy:
|
|
534
|
+
* 1. projectId in registry + path matches → update lastSeen, return {status:'ok'}
|
|
535
|
+
* 2. projectId in registry + path changed → update path+hash, return {status:'path_updated'}
|
|
536
|
+
* 3. projectId not in registry → auto-register, return {status:'auto_registered'}
|
|
537
|
+
* 4. projectHash matches but different projectId → throw CleoError (identity conflict)
|
|
538
|
+
*
|
|
539
|
+
* Uses projectId as the stable identifier across project moves, since
|
|
540
|
+
* projectHash is derived from the absolute path and changes when moved.
|
|
541
|
+
*
|
|
542
|
+
* @task T5368
|
|
543
|
+
*/
|
|
544
|
+
export async function nexusReconcile(projectRoot) {
|
|
545
|
+
if (!projectRoot) {
|
|
546
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Project root path required');
|
|
547
|
+
}
|
|
548
|
+
await nexusInit();
|
|
549
|
+
const { getNexusDb } = await import('../store/nexus-sqlite.js');
|
|
550
|
+
const { eq } = await import('drizzle-orm');
|
|
551
|
+
const db = await getNexusDb();
|
|
552
|
+
const projectId = await readProjectId(projectRoot);
|
|
553
|
+
const currentHash = generateProjectHash(projectRoot);
|
|
554
|
+
// Scenario 4 check: hash matches but different projectId
|
|
555
|
+
if (projectId) {
|
|
556
|
+
const hashRows = await db
|
|
557
|
+
.select()
|
|
558
|
+
.from(projectRegistry)
|
|
559
|
+
.where(eq(projectRegistry.projectHash, currentHash));
|
|
560
|
+
const hashMatch = hashRows[0];
|
|
561
|
+
if (hashMatch && hashMatch.projectId !== projectId) {
|
|
562
|
+
await writeNexusAudit({
|
|
563
|
+
action: 'reconcile',
|
|
564
|
+
projectHash: currentHash,
|
|
565
|
+
projectId,
|
|
566
|
+
operation: 'reconcile',
|
|
567
|
+
success: false,
|
|
568
|
+
errorMessage: `Identity conflict: hash ${currentHash} registered to '${hashMatch.projectId}', current project is '${projectId}'`,
|
|
569
|
+
});
|
|
570
|
+
throw new CleoError(ExitCode.NEXUS_REGISTRY_CORRUPT, `Project identity conflict: hash ${currentHash} is registered to projectId '${hashMatch.projectId}' but current project has projectId '${projectId}'`, { fix: 'Manually resolve the conflict with `cleo nexus unregister` and re-register' });
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
// Look up by projectId (stable across moves)
|
|
574
|
+
if (projectId) {
|
|
575
|
+
const idRows = await db
|
|
576
|
+
.select()
|
|
577
|
+
.from(projectRegistry)
|
|
578
|
+
.where(eq(projectRegistry.projectId, projectId));
|
|
579
|
+
const existing = idRows[0];
|
|
580
|
+
if (existing) {
|
|
581
|
+
const now = new Date().toISOString();
|
|
582
|
+
if (existing.projectPath === projectRoot) {
|
|
583
|
+
// Scenario 1: path matches — just update lastSeen
|
|
584
|
+
await db
|
|
585
|
+
.update(projectRegistry)
|
|
586
|
+
.set({ lastSeen: now })
|
|
587
|
+
.where(eq(projectRegistry.projectId, projectId));
|
|
588
|
+
await writeNexusAudit({
|
|
589
|
+
action: 'reconcile',
|
|
590
|
+
projectHash: currentHash,
|
|
591
|
+
projectId,
|
|
592
|
+
operation: 'reconcile',
|
|
593
|
+
success: true,
|
|
594
|
+
details: { status: 'ok' },
|
|
595
|
+
});
|
|
596
|
+
return { status: 'ok' };
|
|
597
|
+
}
|
|
598
|
+
// Scenario 2: path changed — update path, hash, and lastSeen
|
|
599
|
+
const oldPath = existing.projectPath;
|
|
600
|
+
await db
|
|
601
|
+
.update(projectRegistry)
|
|
602
|
+
.set({
|
|
603
|
+
projectPath: projectRoot,
|
|
604
|
+
projectHash: currentHash,
|
|
605
|
+
lastSeen: now,
|
|
606
|
+
})
|
|
607
|
+
.where(eq(projectRegistry.projectId, projectId));
|
|
608
|
+
await writeNexusAudit({
|
|
609
|
+
action: 'reconcile',
|
|
610
|
+
projectHash: currentHash,
|
|
611
|
+
projectId,
|
|
612
|
+
operation: 'reconcile',
|
|
613
|
+
success: true,
|
|
614
|
+
details: { status: 'path_updated', oldPath, newPath: projectRoot },
|
|
615
|
+
});
|
|
616
|
+
return { status: 'path_updated', oldPath, newPath: projectRoot };
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
// Also check by hash for projects without a projectId
|
|
620
|
+
const hashRows = await db
|
|
621
|
+
.select()
|
|
622
|
+
.from(projectRegistry)
|
|
623
|
+
.where(eq(projectRegistry.projectHash, currentHash));
|
|
624
|
+
const hashMatch = hashRows[0];
|
|
625
|
+
if (hashMatch) {
|
|
626
|
+
const now = new Date().toISOString();
|
|
627
|
+
await db
|
|
628
|
+
.update(projectRegistry)
|
|
629
|
+
.set({ lastSeen: now })
|
|
630
|
+
.where(eq(projectRegistry.projectHash, currentHash));
|
|
631
|
+
await writeNexusAudit({
|
|
632
|
+
action: 'reconcile',
|
|
633
|
+
projectHash: currentHash,
|
|
634
|
+
operation: 'reconcile',
|
|
635
|
+
success: true,
|
|
636
|
+
details: { status: 'ok' },
|
|
637
|
+
});
|
|
638
|
+
return { status: 'ok' };
|
|
639
|
+
}
|
|
640
|
+
// Scenario 3: not in registry — auto-register
|
|
641
|
+
try {
|
|
642
|
+
await nexusRegister(projectRoot);
|
|
643
|
+
}
|
|
644
|
+
catch (err) {
|
|
645
|
+
const errStr = String(err);
|
|
646
|
+
if (!errStr.includes('already registered') && !errStr.includes('NEXUS_PROJECT_EXISTS')) {
|
|
647
|
+
throw err;
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
await writeNexusAudit({
|
|
651
|
+
action: 'reconcile',
|
|
652
|
+
projectHash: currentHash,
|
|
653
|
+
projectId: projectId || undefined,
|
|
654
|
+
operation: 'reconcile',
|
|
655
|
+
success: true,
|
|
656
|
+
details: { status: 'auto_registered' },
|
|
657
|
+
});
|
|
658
|
+
return { status: 'auto_registered' };
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Reset the nexus database singleton state.
|
|
662
|
+
* Re-exported from nexus-sqlite for test convenience.
|
|
663
|
+
*/
|
|
664
|
+
export { resetNexusDbState };
|
|
665
|
+
//# sourceMappingURL=registry.js.map
|