@cleocode/core 2026.4.7 → 2026.4.11
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 +188 -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.d.ts +2 -2
- 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 +344 -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 +10 -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 +295 -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 +130 -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 +52 -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/index.js +15 -0
- package/dist/conduit/index.js.map +1 -0
- package/dist/conduit/local-transport.js +245 -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 +401 -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 +191 -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 +167 -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/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 +28 -0
- package/dist/hooks/handlers/index.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.d.ts +21 -0
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +142 -0
- package/dist/hooks/handlers/session-hooks.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.js +65 -0
- package/dist/hooks/handlers/task-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.d.ts +2 -2
- 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/index.js +3361 -3095
- package/dist/index.js.map +4 -4
- package/dist/init.js +852 -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 +343 -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/internal.d.ts +7 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +299 -0
- package/dist/internal.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 +71 -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/auto-extract.js +177 -0
- package/dist/memory/auto-extract.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-lifecycle.js +298 -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 +114 -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-reasoning.js +215 -0
- package/dist/memory/brain-reasoning.js.map +1 -0
- package/dist/memory/brain-retrieval.js +542 -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 +519 -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/claude-mem-migration.js +277 -0
- package/dist/memory/claude-mem-migration.js.map +1 -0
- package/dist/memory/decisions.js +162 -0
- package/dist/memory/decisions.js.map +1 -0
- package/dist/memory/embedding-local.js +97 -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 +1397 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/index.js +1140 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learnings.d.ts +4 -4
- package/dist/memory/learnings.js +121 -0
- package/dist/memory/learnings.js.map +1 -0
- package/dist/memory/memory-bridge.js +370 -0
- package/dist/memory/memory-bridge.js.map +1 -0
- package/dist/memory/patterns.d.ts +6 -6
- package/dist/memory/patterns.js +122 -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/session-memory.js +331 -0
- package/dist/memory/session-memory.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 +74 -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/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 +584 -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 +263 -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.d.ts +39 -9
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +776 -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 +129 -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.d.ts +15 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +1759 -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 +321 -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 +52 -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 +343 -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 +44 -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 +265 -0
- package/dist/store/agent-registry-accessor.js.map +1 -0
- package/dist/store/atomic.js +167 -0
- package/dist/store/atomic.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 +397 -0
- package/dist/store/brain-accessor.js.map +1 -0
- package/dist/store/brain-schema.d.ts +8 -8
- package/dist/store/brain-schema.js +215 -0
- package/dist/store/brain-schema.js.map +1 -0
- package/dist/store/brain-sqlite.js +222 -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.d.ts +128 -0
- package/dist/store/cleanup-legacy.d.ts.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 +224 -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/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.d.ts +1 -0
- package/dist/store/index.d.ts.map +1 -1
- 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/migration-manager.js +151 -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 +62 -0
- package/dist/store/nexus-schema.js.map +1 -0
- package/dist/store/nexus-sqlite.d.ts +14 -2
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +217 -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/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 +400 -0
- package/dist/store/signaldock-sqlite.js.map +1 -0
- package/dist/store/sqlite-backup.d.ts +121 -10
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/sqlite-backup.js +241 -0
- package/dist/store/sqlite-backup.js.map +1 -0
- package/dist/store/sqlite-data-accessor.js +787 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +481 -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/task-store.js +358 -0
- package/dist/store/task-store.js.map +1 -0
- package/dist/store/tasks-schema.d.ts +8 -8
- 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.d.ts +37 -37
- 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.d.ts +91 -3
- package/dist/system/backup.d.ts.map +1 -1
- 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/health.js +1100 -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 +99 -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 +661 -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 +211 -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 +154 -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 +171 -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 +52 -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 +89 -0
- package/dist/tasks/relates.js.map +1 -0
- package/dist/tasks/show.js +80 -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 +277 -0
- package/dist/tasks/update.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 +1148 -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 +902 -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 +139 -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 +75 -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 +10 -8
- package/src/__tests__/paths-walkup.test.ts +305 -0
- package/src/__tests__/paths.test.ts +61 -17
- package/src/hooks/handlers/session-hooks.ts +42 -0
- package/src/internal.ts +19 -2
- package/src/paths.ts +91 -14
- package/src/scaffold.ts +22 -3
- package/src/store/__tests__/cleanup-legacy.test.ts +268 -0
- package/src/store/__tests__/database-topology-integration.test.ts +504 -0
- package/src/store/__tests__/sqlite-backup-global.test.ts +281 -0
- package/src/store/__tests__/sqlite-backup.test.ts +118 -10
- package/src/store/cleanup-legacy.ts +208 -0
- package/src/store/index.ts +7 -0
- package/src/store/nexus-sqlite.ts +32 -3
- package/src/store/sqlite-backup.ts +368 -37
- package/src/store/sqlite.ts +19 -3
- package/src/system/__tests__/backup.test.ts +237 -0
- package/src/system/backup.ts +248 -28
- package/templates/cleo-gitignore +19 -3
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drizzle ORM schema for WarpChain storage in tasks.db.
|
|
3
|
+
*
|
|
4
|
+
* Tables: warp_chains, warp_chain_instances
|
|
5
|
+
* Stores chain definitions and runtime instances bound to epics.
|
|
6
|
+
*
|
|
7
|
+
* @task T5403
|
|
8
|
+
*/
|
|
9
|
+
import { sql } from 'drizzle-orm';
|
|
10
|
+
import { index, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
|
11
|
+
/** Chain instance status values. */
|
|
12
|
+
export const WARP_CHAIN_INSTANCE_STATUSES = [
|
|
13
|
+
'pending',
|
|
14
|
+
'active',
|
|
15
|
+
'completed',
|
|
16
|
+
'failed',
|
|
17
|
+
'cancelled',
|
|
18
|
+
];
|
|
19
|
+
// === WARP_CHAINS TABLE ===
|
|
20
|
+
/** Stored WarpChain definitions (serialized as JSON). */
|
|
21
|
+
export const warpChains = sqliteTable('warp_chains', {
|
|
22
|
+
id: text('id').primaryKey(),
|
|
23
|
+
name: text('name').notNull(),
|
|
24
|
+
version: text('version').notNull(),
|
|
25
|
+
description: text('description'),
|
|
26
|
+
definition: text('definition').notNull(), // JSON-serialized WarpChain
|
|
27
|
+
validated: integer('validated', { mode: 'boolean' }).default(false),
|
|
28
|
+
createdAt: text('created_at').default(sql `(datetime('now'))`),
|
|
29
|
+
updatedAt: text('updated_at').default(sql `(datetime('now'))`),
|
|
30
|
+
}, (table) => [index('idx_warp_chains_name').on(table.name)]);
|
|
31
|
+
// === WARP_CHAIN_INSTANCES TABLE ===
|
|
32
|
+
/** Runtime chain instances bound to epics. */
|
|
33
|
+
export const warpChainInstances = sqliteTable('warp_chain_instances', {
|
|
34
|
+
id: text('id').primaryKey(),
|
|
35
|
+
chainId: text('chain_id')
|
|
36
|
+
.notNull()
|
|
37
|
+
.references(() => warpChains.id, { onDelete: 'cascade' }),
|
|
38
|
+
epicId: text('epic_id').notNull(),
|
|
39
|
+
variables: text('variables'), // JSON
|
|
40
|
+
stageToTask: text('stage_to_task'), // JSON
|
|
41
|
+
status: text('status').notNull().default('pending'),
|
|
42
|
+
currentStage: text('current_stage'),
|
|
43
|
+
gateResults: text('gate_results'), // JSON array of GateResult
|
|
44
|
+
createdAt: text('created_at').default(sql `(datetime('now'))`),
|
|
45
|
+
updatedAt: text('updated_at').default(sql `(datetime('now'))`),
|
|
46
|
+
}, (table) => [
|
|
47
|
+
index('idx_warp_instances_chain').on(table.chainId),
|
|
48
|
+
index('idx_warp_instances_epic').on(table.epicId),
|
|
49
|
+
index('idx_warp_instances_status').on(table.status),
|
|
50
|
+
]);
|
|
51
|
+
//# sourceMappingURL=chain-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-schema.js","sourceRoot":"","sources":["../../src/store/chain-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE5E,oCAAoC;AACpC,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,SAAS;IACT,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,WAAW;CACH,CAAC;AAEX,4BAA4B;AAE5B,yDAAyD;AACzD,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CACnC,aAAa,EACb;IACE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAC3B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;IAC5B,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IAClC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;IAChC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,4BAA4B;IACtE,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACnE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;IAC7D,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;CAC9D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAC1D,CAAC;AAEF,qCAAqC;AAErC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAC3C,sBAAsB,EACtB;IACE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE;IAC3B,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;SACtB,OAAO,EAAE;SACT,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IAC3D,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;IACjC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO;IACrC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,OAAO;IAC3C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACnD,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC;IACnC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,2BAA2B;IAC9D,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;IAC7D,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAA,mBAAmB,CAAC;CAC9D,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,KAAK,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;IACnD,KAAK,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IACjD,KAAK,CAAC,2BAA2B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;CACpD,CACF,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idempotent cleanup of legacy and stray CLEO database files.
|
|
3
|
+
*
|
|
4
|
+
* Provides two independent cleanup functions:
|
|
5
|
+
*
|
|
6
|
+
* 1. {@link detectAndRemoveLegacyGlobalFiles} — removes stale files left at
|
|
7
|
+
* the global CLEO home directory (`getCleoHome()`) by pre-v2026.4.11
|
|
8
|
+
* naming migrations. Safe to call on repeat invocations — existence-checks
|
|
9
|
+
* guard every deletion.
|
|
10
|
+
*
|
|
11
|
+
* Files targeted (see ADR-036 §Decision/Global-Tier table):
|
|
12
|
+
* - workspace.db (pre-nexus naming relic)
|
|
13
|
+
* - workspace.db.bak-pre-rename (safety copy from a long-landed rename)
|
|
14
|
+
* - workspace.db-shm (SQLite shared-memory sidecar of workspace.db)
|
|
15
|
+
* - workspace.db-shm-wal (SQLite WAL sidecar of workspace.db)
|
|
16
|
+
* - nexus-pre-cleo.db.bak (pre-CLEO backup of nexus — migration complete)
|
|
17
|
+
*
|
|
18
|
+
* Live files (nexus.db, signaldock.db, machine-key, config.json, etc.) are
|
|
19
|
+
* NEVER touched. The function only acts on the explicit LEGACY_FILES list.
|
|
20
|
+
*
|
|
21
|
+
* 2. {@link detectAndRemoveStrayProjectNexus} — removes a stray
|
|
22
|
+
* `{projectRoot}/.cleo/nexus.db` that violates ADR-036's global-only
|
|
23
|
+
* nexus contract. Some pre-v2026.4.11 code path accidentally created a
|
|
24
|
+
* zero-byte nexus.db at project tier; this cleans it up on first run.
|
|
25
|
+
*
|
|
26
|
+
* @task T304
|
|
27
|
+
* @task T307
|
|
28
|
+
* @epic T299
|
|
29
|
+
* @adr ADR-036
|
|
30
|
+
* @why v2026.4.10 left workspace.db and pre-cleo backups at global tier;
|
|
31
|
+
* ADR-036 mandates their deletion to eliminate diagnostic confusion and
|
|
32
|
+
* false impressions of active legacy databases.
|
|
33
|
+
*/
|
|
34
|
+
/** Result returned by {@link detectAndRemoveLegacyGlobalFiles}. */
|
|
35
|
+
export interface LegacyCleanupResult {
|
|
36
|
+
/** Filenames (basename only) that were successfully deleted. */
|
|
37
|
+
removed: string[];
|
|
38
|
+
/** Files that could not be deleted, with error messages. */
|
|
39
|
+
errors: Array<{
|
|
40
|
+
file: string;
|
|
41
|
+
error: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Detect and remove legacy global-tier files from the CLEO home directory.
|
|
46
|
+
*
|
|
47
|
+
* Idempotent: safe to call when some or all files are already absent. Each
|
|
48
|
+
* file is individually existence-checked before attempting deletion. Failures
|
|
49
|
+
* on individual files are captured in `errors` rather than thrown, so the
|
|
50
|
+
* caller receives a complete picture of what was (and was not) cleaned up.
|
|
51
|
+
*
|
|
52
|
+
* Logs each successful deletion at `info` level and each failure at `warn`
|
|
53
|
+
* level via the shared pino logger.
|
|
54
|
+
*
|
|
55
|
+
* @param cleoHomeOverride - Optional directory override for tests. When
|
|
56
|
+
* omitted the canonical `getCleoHome()` path is used. Prefer passing this
|
|
57
|
+
* parameter in test harnesses rather than mutating `CLEO_HOME` environment
|
|
58
|
+
* variables, as it avoids global state contamination between test runs.
|
|
59
|
+
* @returns A {@link LegacyCleanupResult} describing what was removed and any
|
|
60
|
+
* errors encountered.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* // Production usage (runs against real global home)
|
|
65
|
+
* const result = detectAndRemoveLegacyGlobalFiles();
|
|
66
|
+
* if (result.removed.length > 0) {
|
|
67
|
+
* // Legacy files were cleaned up
|
|
68
|
+
* }
|
|
69
|
+
*
|
|
70
|
+
* // Test usage (runs against tmp directory)
|
|
71
|
+
* const result = detectAndRemoveLegacyGlobalFiles('/tmp/fake-cleo-home');
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @task T304
|
|
75
|
+
* @epic T299
|
|
76
|
+
*/
|
|
77
|
+
export declare function detectAndRemoveLegacyGlobalFiles(cleoHomeOverride?: string): LegacyCleanupResult;
|
|
78
|
+
/** Result returned by {@link detectAndRemoveStrayProjectNexus}. */
|
|
79
|
+
export interface StrayNexusCleanupResult {
|
|
80
|
+
/** Whether a stray nexus.db was found and deleted. */
|
|
81
|
+
removed: boolean;
|
|
82
|
+
/** Absolute path that was checked (and removed if `removed` is true). */
|
|
83
|
+
path: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Detect and remove a stray project-tier `.cleo/nexus.db` file.
|
|
87
|
+
*
|
|
88
|
+
* ADR-036 declares nexus.db as **global-only** — it lives exclusively under
|
|
89
|
+
* `getCleoHome()` (e.g. `~/.local/share/cleo/nexus.db` on Linux). A
|
|
90
|
+
* zero-byte stray was discovered at `/mnt/projects/cleocode/.cleo/nexus.db`
|
|
91
|
+
* (created 2026-03-31), likely produced by an early `cleo init` / `cleo
|
|
92
|
+
* nexus init` invocation that ran before the canonical path was fully wired
|
|
93
|
+
* through `getNexusDbPath()`.
|
|
94
|
+
*
|
|
95
|
+
* This function is idempotent: calling it when no stray file exists is a
|
|
96
|
+
* no-op. It is designed to be called once per CLI startup (alongside
|
|
97
|
+
* {@link detectAndRemoveLegacyGlobalFiles}) so that users who upgrade to
|
|
98
|
+
* v2026.4.11 have the stray silently cleaned up on the first `cleo` run.
|
|
99
|
+
*
|
|
100
|
+
* @param projectRoot - Absolute path to the project root directory. When
|
|
101
|
+
* omitted the caller is responsible for supplying the current project
|
|
102
|
+
* root from `getProjectRoot()`. An override parameter is accepted here to
|
|
103
|
+
* keep tests hermetic (avoids reading live `process.cwd()` state).
|
|
104
|
+
* @returns A {@link StrayNexusCleanupResult} indicating whether a file was
|
|
105
|
+
* removed and the absolute path that was checked.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* // Production usage
|
|
110
|
+
* import { getProjectRoot } from '../paths.js';
|
|
111
|
+
* const result = detectAndRemoveStrayProjectNexus(getProjectRoot());
|
|
112
|
+
* if (result.removed) {
|
|
113
|
+
* // Stray project-tier nexus.db has been cleaned up
|
|
114
|
+
* }
|
|
115
|
+
*
|
|
116
|
+
* // Test usage (hermetic)
|
|
117
|
+
* const result = detectAndRemoveStrayProjectNexus('/tmp/fake-project-root');
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @task T307
|
|
121
|
+
* @epic T299
|
|
122
|
+
* @adr ADR-036
|
|
123
|
+
* @why ADR-036 §Decision/Global-Tier: nexus.db is global-only. A stray
|
|
124
|
+
* project-tier copy was created by pre-v2026.4.11 code and must be removed
|
|
125
|
+
* to prevent diagnostic confusion and guard against future regressions.
|
|
126
|
+
*/
|
|
127
|
+
export declare function detectAndRemoveStrayProjectNexus(projectRoot: string): StrayNexusCleanupResult;
|
|
128
|
+
//# sourceMappingURL=cleanup-legacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cleanup-legacy.d.ts","sourceRoot":"","sources":["../../src/store/cleanup-legacy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AA6BH,mEAAmE;AACnE,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,4DAA4D;IAC5D,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,gCAAgC,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAsB/F;AAMD,mEAAmE;AACnE,MAAM,WAAW,uBAAuB;IACtC,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,uBAAuB,CAuB7F"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared row <-> domain conversion functions for SQLite store modules.
|
|
3
|
+
*
|
|
4
|
+
* Eliminates duplication across sqlite-data-accessor.ts, task-store.ts,
|
|
5
|
+
* and session-store.ts.
|
|
6
|
+
*/
|
|
7
|
+
import { safeParseJson, safeParseJsonArray } from './parsers.js';
|
|
8
|
+
/** Convert a database TaskRow to a domain Task object. */
|
|
9
|
+
export function rowToTask(row) {
|
|
10
|
+
return {
|
|
11
|
+
id: row.id,
|
|
12
|
+
title: row.title,
|
|
13
|
+
status: row.status,
|
|
14
|
+
priority: row.priority,
|
|
15
|
+
type: row.type ?? undefined,
|
|
16
|
+
parentId: row.parentId ?? undefined,
|
|
17
|
+
phase: row.phase ?? undefined,
|
|
18
|
+
size: row.size ?? undefined,
|
|
19
|
+
position: row.position ?? undefined,
|
|
20
|
+
positionVersion: row.positionVersion ?? undefined,
|
|
21
|
+
description: row.description ?? '',
|
|
22
|
+
labels: safeParseJsonArray(row.labelsJson),
|
|
23
|
+
notes: safeParseJsonArray(row.notesJson),
|
|
24
|
+
acceptance: safeParseJsonArray(row.acceptanceJson),
|
|
25
|
+
files: safeParseJsonArray(row.filesJson),
|
|
26
|
+
depends: undefined, // Populated separately from task_dependencies
|
|
27
|
+
origin: row.origin ?? undefined,
|
|
28
|
+
blockedBy: row.blockedBy ?? undefined,
|
|
29
|
+
epicLifecycle: row.epicLifecycle ?? undefined,
|
|
30
|
+
noAutoComplete: row.noAutoComplete ?? undefined,
|
|
31
|
+
createdAt: row.createdAt,
|
|
32
|
+
updatedAt: row.updatedAt ?? undefined,
|
|
33
|
+
completedAt: row.completedAt ?? undefined,
|
|
34
|
+
cancelledAt: row.cancelledAt ?? undefined,
|
|
35
|
+
cancellationReason: row.cancellationReason ?? undefined,
|
|
36
|
+
verification: row.verificationJson ? safeParseJson(row.verificationJson) : undefined,
|
|
37
|
+
provenance: row.createdBy || row.modifiedBy || row.sessionId
|
|
38
|
+
? {
|
|
39
|
+
createdBy: row.createdBy ?? null,
|
|
40
|
+
modifiedBy: row.modifiedBy ?? null,
|
|
41
|
+
sessionId: row.sessionId ?? null,
|
|
42
|
+
}
|
|
43
|
+
: undefined,
|
|
44
|
+
pipelineStage: row.pipelineStage ?? undefined,
|
|
45
|
+
assignee: row.assignee ?? undefined,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Convert a domain Task to a database row for insert/upsert. */
|
|
49
|
+
export function taskToRow(task) {
|
|
50
|
+
return {
|
|
51
|
+
id: task.id,
|
|
52
|
+
title: task.title ?? '',
|
|
53
|
+
description: task.description ?? null,
|
|
54
|
+
status: task.status ?? 'pending',
|
|
55
|
+
priority: task.priority ?? 'medium',
|
|
56
|
+
type: task.type ?? null,
|
|
57
|
+
parentId: task.parentId ?? null,
|
|
58
|
+
phase: task.phase ?? null,
|
|
59
|
+
size: task.size ?? null,
|
|
60
|
+
position: task.position ?? null,
|
|
61
|
+
positionVersion: task.positionVersion ?? 0,
|
|
62
|
+
labelsJson: task.labels ? JSON.stringify(task.labels) : '[]',
|
|
63
|
+
notesJson: task.notes ? JSON.stringify(task.notes) : '[]',
|
|
64
|
+
acceptanceJson: task.acceptance ? JSON.stringify(task.acceptance) : '[]',
|
|
65
|
+
filesJson: task.files ? JSON.stringify(task.files) : '[]',
|
|
66
|
+
origin: task.origin ?? null,
|
|
67
|
+
blockedBy: task.blockedBy ?? null,
|
|
68
|
+
epicLifecycle: task.epicLifecycle ?? null,
|
|
69
|
+
noAutoComplete: task.noAutoComplete ?? null,
|
|
70
|
+
createdAt: task.createdAt ?? new Date().toISOString(),
|
|
71
|
+
updatedAt: task.updatedAt ?? null,
|
|
72
|
+
completedAt: task.completedAt ?? null,
|
|
73
|
+
cancelledAt: task.cancelledAt ?? null,
|
|
74
|
+
cancellationReason: task.cancellationReason ?? null,
|
|
75
|
+
verificationJson: task.verification ? JSON.stringify(task.verification) : null,
|
|
76
|
+
createdBy: task.provenance?.createdBy ?? null,
|
|
77
|
+
modifiedBy: task.provenance?.modifiedBy ?? null,
|
|
78
|
+
sessionId: task.provenance?.sessionId ?? null,
|
|
79
|
+
pipelineStage: task.pipelineStage ?? null,
|
|
80
|
+
assignee: task.assignee ?? null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Convert a domain Task to a row suitable for archived tasks. */
|
|
84
|
+
export function archivedTaskToRow(task) {
|
|
85
|
+
const row = taskToRow(task);
|
|
86
|
+
row.status = 'archived';
|
|
87
|
+
if (!row['archivedAt']) {
|
|
88
|
+
row['archivedAt'] = task.completedAt ?? new Date().toISOString();
|
|
89
|
+
}
|
|
90
|
+
return row;
|
|
91
|
+
}
|
|
92
|
+
/** Convert a SessionRow to a domain Session. */
|
|
93
|
+
export function rowToSession(row) {
|
|
94
|
+
const taskWork = {
|
|
95
|
+
taskId: row.currentTask ?? null,
|
|
96
|
+
setAt: row.taskStartedAt ?? null,
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
id: row.id,
|
|
100
|
+
name: row.name,
|
|
101
|
+
status: row.status,
|
|
102
|
+
scope: (safeParseJson(row.scopeJson) ?? { type: 'global' }),
|
|
103
|
+
taskWork,
|
|
104
|
+
startedAt: row.startedAt,
|
|
105
|
+
endedAt: row.endedAt ?? undefined,
|
|
106
|
+
agent: row.agent ?? undefined,
|
|
107
|
+
notes: safeParseJsonArray(row.notesJson),
|
|
108
|
+
tasksCompleted: safeParseJsonArray(row.tasksCompletedJson),
|
|
109
|
+
tasksCreated: safeParseJsonArray(row.tasksCreatedJson),
|
|
110
|
+
handoffJson: row.handoffJson ?? null,
|
|
111
|
+
// Session chain fields (T4959)
|
|
112
|
+
previousSessionId: row.previousSessionId ?? null,
|
|
113
|
+
nextSessionId: row.nextSessionId ?? null,
|
|
114
|
+
agentIdentifier: row.agentIdentifier ?? null,
|
|
115
|
+
handoffConsumedAt: row.handoffConsumedAt ?? null,
|
|
116
|
+
handoffConsumedBy: row.handoffConsumedBy ?? null,
|
|
117
|
+
debriefJson: row.debriefJson ?? null,
|
|
118
|
+
// Session stats fields
|
|
119
|
+
stats: row.statsJson ? safeParseJson(row.statsJson) : undefined,
|
|
120
|
+
resumeCount: row.resumeCount ?? undefined,
|
|
121
|
+
gradeMode: row.gradeMode ? Boolean(row.gradeMode) : undefined,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"converters.js","sourceRoot":"","sources":["../../src/store/converters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-database cleanup hooks for brain.db → tasks.db soft FK enforcement.
|
|
3
|
+
*
|
|
4
|
+
* SQLite does not support foreign key constraints across database connections.
|
|
5
|
+
* This module provides application-layer guards that maintain referential
|
|
6
|
+
* integrity between brain.db and tasks.db after destructive operations.
|
|
7
|
+
*
|
|
8
|
+
* Implements the recommendations from T030 audit (XFKB-001 through XFKB-005).
|
|
9
|
+
*
|
|
10
|
+
* @task T033
|
|
11
|
+
* @epic T029
|
|
12
|
+
*/
|
|
13
|
+
import { and, eq, isNotNull, or } from 'drizzle-orm';
|
|
14
|
+
import * as brainSchema from './brain-schema.js';
|
|
15
|
+
import { getBrainDb } from './brain-sqlite.js';
|
|
16
|
+
/**
|
|
17
|
+
* Clean up brain.db references after a task is deleted from tasks.db.
|
|
18
|
+
*
|
|
19
|
+
* Handles:
|
|
20
|
+
* - XFKB-001/002: Nullify brain_decisions.context_epic_id / context_task_id
|
|
21
|
+
* - XFKB-003: Delete brain_memory_links rows where task_id matches
|
|
22
|
+
* - XFKB-005: Delete brain_page_nodes with id='task:<taskId>' and cascade brain_page_edges
|
|
23
|
+
*
|
|
24
|
+
* This is a best-effort cleanup — brain.db is a cognitive store and minor
|
|
25
|
+
* staleness is preferable to failing task deletions due to brain.db errors.
|
|
26
|
+
*
|
|
27
|
+
* @remarks
|
|
28
|
+
* Best-effort: failures in brain.db cleanup do not propagate to the caller.
|
|
29
|
+
* A background reconciliation pass can clean up any residual stale refs.
|
|
30
|
+
*
|
|
31
|
+
* @param taskId - The ID of the task being deleted from tasks.db
|
|
32
|
+
* @param cwd - Optional working directory
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* await cleanupBrainRefsOnTaskDelete('T042');
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export async function cleanupBrainRefsOnTaskDelete(taskId, cwd) {
|
|
40
|
+
let brainDb = null;
|
|
41
|
+
try {
|
|
42
|
+
brainDb = await getBrainDb(cwd);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// brain.db may not be initialized — non-fatal
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const nodeId = `task:${taskId}`;
|
|
49
|
+
try {
|
|
50
|
+
// XFKB-001/002: Nullify context references in brain_decisions
|
|
51
|
+
await brainDb
|
|
52
|
+
.update(brainSchema.brainDecisions)
|
|
53
|
+
.set({ contextEpicId: null })
|
|
54
|
+
.where(eq(brainSchema.brainDecisions.contextEpicId, taskId));
|
|
55
|
+
await brainDb
|
|
56
|
+
.update(brainSchema.brainDecisions)
|
|
57
|
+
.set({ contextTaskId: null })
|
|
58
|
+
.where(eq(brainSchema.brainDecisions.contextTaskId, taskId));
|
|
59
|
+
// XFKB-003: Delete brain_memory_links rows referencing this task
|
|
60
|
+
await brainDb
|
|
61
|
+
.delete(brainSchema.brainMemoryLinks)
|
|
62
|
+
.where(eq(brainSchema.brainMemoryLinks.taskId, taskId));
|
|
63
|
+
// XFKB-005: Delete brain_page_edges first (FK cascade not available cross-DB),
|
|
64
|
+
// then delete brain_page_nodes for this task
|
|
65
|
+
await brainDb
|
|
66
|
+
.delete(brainSchema.brainPageEdges)
|
|
67
|
+
.where(or(eq(brainSchema.brainPageEdges.fromId, nodeId), eq(brainSchema.brainPageEdges.toId, nodeId)));
|
|
68
|
+
await brainDb
|
|
69
|
+
.delete(brainSchema.brainPageNodes)
|
|
70
|
+
.where(eq(brainSchema.brainPageNodes.id, nodeId));
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Non-fatal: log silently. Brain.db cleanup is best-effort.
|
|
74
|
+
// A background reconciliation pass can clean up any residual stale refs.
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Clean up brain.db references after a session is deleted from tasks.db.
|
|
79
|
+
*
|
|
80
|
+
* Handles:
|
|
81
|
+
* - XFKB-004: Nullify brain_observations.source_session_id where it matches
|
|
82
|
+
*
|
|
83
|
+
* @remarks
|
|
84
|
+
* Best-effort: failures do not propagate. brain.db may not be initialised.
|
|
85
|
+
*
|
|
86
|
+
* @param sessionId - The ID of the session being deleted from tasks.db
|
|
87
|
+
* @param cwd - Optional working directory
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* await cleanupBrainRefsOnSessionDelete('ses_20260321_abc');
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export async function cleanupBrainRefsOnSessionDelete(sessionId, cwd) {
|
|
95
|
+
let brainDb = null;
|
|
96
|
+
try {
|
|
97
|
+
brainDb = await getBrainDb(cwd);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
// XFKB-004: Nullify source_session_id in brain_observations
|
|
104
|
+
await brainDb
|
|
105
|
+
.update(brainSchema.brainObservations)
|
|
106
|
+
.set({ sourceSessionId: null })
|
|
107
|
+
.where(eq(brainSchema.brainObservations.sourceSessionId, sessionId));
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Non-fatal best-effort cleanup
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Verify a task ID exists in tasks.db before writing a cross-DB reference to brain.db.
|
|
115
|
+
* Returns true if the task exists, false otherwise.
|
|
116
|
+
*
|
|
117
|
+
* Provides write-guard for XFKB-001/002/003 on brain.db insert.
|
|
118
|
+
*
|
|
119
|
+
* @remarks
|
|
120
|
+
* Used as a write-guard before inserting cross-DB references into brain.db.
|
|
121
|
+
*
|
|
122
|
+
* @param taskId - Task ID to verify
|
|
123
|
+
* @param tasksDb - The tasks.db drizzle instance
|
|
124
|
+
* @returns True if the task exists in tasks.db
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* if (await taskExistsInTasksDb('T042', db)) { /* safe to reference *\/ }
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
export async function taskExistsInTasksDb(taskId, tasksDb) {
|
|
132
|
+
const { tasks } = await import('./tasks-schema.js');
|
|
133
|
+
const { eq: eqOp } = await import('drizzle-orm');
|
|
134
|
+
const result = await tasksDb
|
|
135
|
+
.select({ id: tasks.id })
|
|
136
|
+
.from(tasks)
|
|
137
|
+
.where(eqOp(tasks.id, taskId))
|
|
138
|
+
.all();
|
|
139
|
+
return result.length > 0;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Verify a session ID exists in tasks.db before writing a cross-DB reference to brain.db.
|
|
143
|
+
* Returns true if the session exists, false otherwise.
|
|
144
|
+
*
|
|
145
|
+
* Provides write-guard for XFKB-004 on brain.db insert.
|
|
146
|
+
*
|
|
147
|
+
* @remarks
|
|
148
|
+
* Used as a write-guard before inserting cross-DB references into brain.db.
|
|
149
|
+
*
|
|
150
|
+
* @param sessionId - Session ID to verify
|
|
151
|
+
* @param tasksDb - The tasks.db drizzle instance
|
|
152
|
+
* @returns True if the session exists in tasks.db
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* if (await sessionExistsInTasksDb('ses_abc', db)) { /* safe to reference *\/ }
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
/**
|
|
160
|
+
* Reconcile orphaned cross-DB references in brain.db.
|
|
161
|
+
*
|
|
162
|
+
* Scans brain.db for references to tasks/sessions that no longer exist in
|
|
163
|
+
* tasks.db and cleans them up:
|
|
164
|
+
* - brain_decisions with stale context_task_id or context_epic_id → nullify
|
|
165
|
+
* - brain_observations with stale source_session_id → nullify
|
|
166
|
+
* - brain_memory_links with stale task_id → delete row
|
|
167
|
+
*
|
|
168
|
+
* This is the background reconciliation pass mentioned in the module doc.
|
|
169
|
+
* Safe to run at any frequency — idempotent.
|
|
170
|
+
*
|
|
171
|
+
* @param cwd - Optional working directory
|
|
172
|
+
* @returns Counts of orphaned references cleaned up
|
|
173
|
+
*/
|
|
174
|
+
export async function reconcileOrphanedRefs(cwd) {
|
|
175
|
+
let brainDb = null;
|
|
176
|
+
const result = { decisionsFixed: 0, observationsFixed: 0, linksRemoved: 0 };
|
|
177
|
+
try {
|
|
178
|
+
brainDb = await getBrainDb(cwd);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
const { getDb } = await import('./sqlite.js');
|
|
184
|
+
let tasksDb;
|
|
185
|
+
try {
|
|
186
|
+
tasksDb = await getDb(cwd);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
// 1. Find decisions with stale context_task_id
|
|
193
|
+
const decisionsWithTaskRef = await brainDb
|
|
194
|
+
.select({
|
|
195
|
+
id: brainSchema.brainDecisions.id,
|
|
196
|
+
contextTaskId: brainSchema.brainDecisions.contextTaskId,
|
|
197
|
+
contextEpicId: brainSchema.brainDecisions.contextEpicId,
|
|
198
|
+
})
|
|
199
|
+
.from(brainSchema.brainDecisions)
|
|
200
|
+
.where(or(isNotNull(brainSchema.brainDecisions.contextTaskId), isNotNull(brainSchema.brainDecisions.contextEpicId)))
|
|
201
|
+
.all();
|
|
202
|
+
for (const d of decisionsWithTaskRef) {
|
|
203
|
+
if (d.contextTaskId) {
|
|
204
|
+
const exists = await taskExistsInTasksDb(d.contextTaskId, tasksDb);
|
|
205
|
+
if (!exists) {
|
|
206
|
+
await brainDb
|
|
207
|
+
.update(brainSchema.brainDecisions)
|
|
208
|
+
.set({ contextTaskId: null })
|
|
209
|
+
.where(eq(brainSchema.brainDecisions.id, d.id));
|
|
210
|
+
result.decisionsFixed++;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (d.contextEpicId) {
|
|
214
|
+
const exists = await taskExistsInTasksDb(d.contextEpicId, tasksDb);
|
|
215
|
+
if (!exists) {
|
|
216
|
+
await brainDb
|
|
217
|
+
.update(brainSchema.brainDecisions)
|
|
218
|
+
.set({ contextEpicId: null })
|
|
219
|
+
.where(eq(brainSchema.brainDecisions.id, d.id));
|
|
220
|
+
result.decisionsFixed++;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// 2. Find observations with stale source_session_id
|
|
225
|
+
const obsWithSessionRef = await brainDb
|
|
226
|
+
.select({
|
|
227
|
+
id: brainSchema.brainObservations.id,
|
|
228
|
+
sourceSessionId: brainSchema.brainObservations.sourceSessionId,
|
|
229
|
+
})
|
|
230
|
+
.from(brainSchema.brainObservations)
|
|
231
|
+
.where(isNotNull(brainSchema.brainObservations.sourceSessionId))
|
|
232
|
+
.all();
|
|
233
|
+
for (const o of obsWithSessionRef) {
|
|
234
|
+
{
|
|
235
|
+
const exists = o.sourceSessionId
|
|
236
|
+
? await sessionExistsInTasksDb(o.sourceSessionId, tasksDb)
|
|
237
|
+
: false;
|
|
238
|
+
if (!exists) {
|
|
239
|
+
await brainDb
|
|
240
|
+
.update(brainSchema.brainObservations)
|
|
241
|
+
.set({ sourceSessionId: null })
|
|
242
|
+
.where(eq(brainSchema.brainObservations.id, o.id));
|
|
243
|
+
result.observationsFixed++;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 3. Find memory links with stale task_id
|
|
248
|
+
const allLinks = await brainDb
|
|
249
|
+
.select({
|
|
250
|
+
memoryType: brainSchema.brainMemoryLinks.memoryType,
|
|
251
|
+
memoryId: brainSchema.brainMemoryLinks.memoryId,
|
|
252
|
+
taskId: brainSchema.brainMemoryLinks.taskId,
|
|
253
|
+
linkType: brainSchema.brainMemoryLinks.linkType,
|
|
254
|
+
})
|
|
255
|
+
.from(brainSchema.brainMemoryLinks)
|
|
256
|
+
.all();
|
|
257
|
+
for (const link of allLinks) {
|
|
258
|
+
const exists = await taskExistsInTasksDb(link.taskId, tasksDb);
|
|
259
|
+
if (!exists) {
|
|
260
|
+
await brainDb
|
|
261
|
+
.delete(brainSchema.brainMemoryLinks)
|
|
262
|
+
.where(and(eq(brainSchema.brainMemoryLinks.memoryType, link.memoryType), eq(brainSchema.brainMemoryLinks.memoryId, link.memoryId), eq(brainSchema.brainMemoryLinks.taskId, link.taskId), eq(brainSchema.brainMemoryLinks.linkType, link.linkType)));
|
|
263
|
+
result.linksRemoved++;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
catch {
|
|
268
|
+
// Non-fatal best-effort reconciliation
|
|
269
|
+
}
|
|
270
|
+
return result;
|
|
271
|
+
}
|
|
272
|
+
export async function sessionExistsInTasksDb(sessionId, tasksDb) {
|
|
273
|
+
const { sessions } = await import('./tasks-schema.js');
|
|
274
|
+
const { eq: eqOp } = await import('drizzle-orm');
|
|
275
|
+
const result = await tasksDb
|
|
276
|
+
.select({ id: sessions.id })
|
|
277
|
+
.from(sessions)
|
|
278
|
+
.where(eqOp(sessions.id, sessionId))
|
|
279
|
+
.all();
|
|
280
|
+
return result.length > 0;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Verify an agent exists in signaldock.db before creating cross-DB references.
|
|
284
|
+
* Returns true if the agent_id exists in signaldock.db agents table.
|
|
285
|
+
*
|
|
286
|
+
* Provides write-guard for agent_instances and agent_error_log in tasks.db
|
|
287
|
+
* that reference agents whose identity lives in signaldock.db.
|
|
288
|
+
*
|
|
289
|
+
* @param agentId - Agent slug (e.g. 'cleo-db-lead') to verify
|
|
290
|
+
* @param cwd - Optional working directory
|
|
291
|
+
* @returns True if the agent exists in signaldock.db
|
|
292
|
+
*
|
|
293
|
+
* @task T238
|
|
294
|
+
*/
|
|
295
|
+
export async function agentExistsInSignaldockDb(agentId, cwd) {
|
|
296
|
+
try {
|
|
297
|
+
const { getSignaldockDbPath } = await import('./signaldock-sqlite.js');
|
|
298
|
+
const { existsSync } = await import('node:fs');
|
|
299
|
+
const dbPath = getSignaldockDbPath(cwd);
|
|
300
|
+
if (!existsSync(dbPath))
|
|
301
|
+
return false;
|
|
302
|
+
const { createRequire } = await import('node:module');
|
|
303
|
+
const _require = createRequire(import.meta.url);
|
|
304
|
+
const { DatabaseSync } = _require('node:sqlite');
|
|
305
|
+
const db = new DatabaseSync(dbPath);
|
|
306
|
+
try {
|
|
307
|
+
const row = db.prepare('SELECT id FROM agents WHERE agent_id = ?').get(agentId);
|
|
308
|
+
return !!row;
|
|
309
|
+
}
|
|
310
|
+
finally {
|
|
311
|
+
db.close();
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
// signaldock.db may not exist yet — non-fatal
|
|
316
|
+
return false;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=cross-db-cleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-db-cleanup.js","sourceRoot":"","sources":["../../src/store/cross-db-cleanup.ts"],"names":[],"mappings":"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"}
|