@cleocode/core 2026.4.31 → 2026.4.35
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 +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 +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 +400 -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/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.d.ts +4 -0
- package/dist/hooks/handlers/index.d.ts.map +1 -1
- package/dist/hooks/handlers/index.js +34 -0
- package/dist/hooks/handlers/index.js.map +1 -0
- package/dist/hooks/handlers/intelligence-hooks.d.ts +26 -0
- package/dist/hooks/handlers/intelligence-hooks.d.ts.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.d.ts +16 -0
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +157 -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/watchdog-hooks.d.ts +49 -0
- package/dist/hooks/handlers/watchdog-hooks.d.ts.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/index.js +3828 -2167
- package/dist/index.js.map +4 -4
- package/dist/init.js +920 -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.d.ts +13 -1
- package/dist/injection.d.ts.map +1 -1
- 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/internal.d.ts +8 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +320 -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 +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/auto-extract.js +96 -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.d.ts +48 -0
- package/dist/memory/brain-consolidator.d.ts.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-lifecycle.d.ts +83 -2
- package/dist/memory/brain-lifecycle.d.ts.map +1 -1
- package/dist/memory/brain-lifecycle.js +807 -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-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.d.ts +69 -1
- package/dist/memory/brain-retrieval.d.ts.map +1 -1
- package/dist/memory/brain-retrieval.js +912 -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.d.ts.map +1 -1
- package/dist/memory/brain-search.js +528 -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.d.ts.map +1 -1
- package/dist/memory/decisions.js +218 -0
- package/dist/memory/decisions.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.d.ts.map +1 -1
- package/dist/memory/engine-compat.js +1564 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/extraction-gate.d.ts +139 -0
- package/dist/memory/extraction-gate.d.ts.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-queries.js +290 -0
- package/dist/memory/graph-queries.js.map +1 -0
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +1144 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learnings.d.ts +14 -0
- package/dist/memory/learnings.d.ts.map +1 -1
- package/dist/memory/learnings.js +178 -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/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/patterns.d.ts +24 -4
- package/dist/memory/patterns.d.ts.map +1 -1
- package/dist/memory/patterns.js +174 -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-scoring.d.ts +42 -5
- package/dist/memory/quality-scoring.d.ts.map +1 -1
- 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/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.d.ts +51 -0
- package/dist/nexus/nexus-bridge.d.ts.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 +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 +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.d.ts +18 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +1798 -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.d.ts.map +1 -1
- 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.d.ts +496 -3
- package/dist/store/brain-schema.d.ts.map +1 -1
- package/dist/store/brain-schema.js +549 -0
- package/dist/store/brain-schema.js.map +1 -0
- package/dist/store/brain-sqlite.d.ts.map +1 -1
- package/dist/store/brain-sqlite.js +257 -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 +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/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.d.ts +5 -1
- package/dist/store/migration-manager.d.ts.map +1 -1
- package/dist/store/migration-manager.js +288 -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 +268 -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 +787 -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.d.ts +1 -1
- 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 +6 -6
- 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.d.ts.map +1 -1
- package/dist/system/health.js +1206 -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 +229 -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.d.ts.map +1 -1
- 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/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 +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/migrations/drizzle-brain/20260411000001_t528-graph-schema-expansion/migration.sql +47 -0
- package/migrations/drizzle-brain/20260412000001_t531-quality-score-typed-tables/migration.sql +23 -0
- package/migrations/drizzle-brain/20260413000001_t549-tiered-typed-memory/migration.sql +195 -0
- package/migrations/drizzle-nexus/20260412000001_t529-nexus-graph-tables/migration.sql +49 -0
- package/package.json +8 -8
- package/src/hooks/handlers/index.ts +6 -0
- package/src/hooks/handlers/intelligence-hooks.ts +80 -0
- package/src/hooks/handlers/session-hooks.ts +41 -0
- package/src/hooks/handlers/watchdog-hooks.ts +187 -0
- package/src/injection.ts +41 -2
- package/src/internal.ts +31 -2
- package/src/memory/brain-consolidator.ts +344 -0
- package/src/memory/brain-lifecycle.ts +636 -2
- package/src/memory/brain-retrieval.ts +445 -2
- package/src/memory/brain-search.ts +38 -4
- package/src/memory/decisions.ts +21 -1
- package/src/memory/engine-compat.ts +9 -11
- package/src/memory/extraction-gate.ts +574 -0
- package/src/memory/index.ts +6 -2
- package/src/memory/learnings.ts +33 -1
- package/src/memory/patterns.ts +30 -1
- package/src/memory/quality-scoring.ts +93 -9
- package/src/nexus/nexus-bridge.ts +444 -0
- package/src/scaffold.ts +42 -0
- package/src/stats/index.ts +11 -3
- package/src/store/brain-schema.ts +238 -0
- package/src/store/brain-sqlite.ts +55 -0
- package/src/store/migration-manager.ts +83 -12
- package/src/system/health.ts +17 -0
- package/src/tasks/graph-ops.ts +1 -0
- package/src/tasks/task-ops.ts +1 -1
- package/templates/CLEO-INJECTION.md +15 -0
|
@@ -0,0 +1,807 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BRAIN lifecycle operations — temporal decay, memory consolidation, and tier promotion.
|
|
3
|
+
*
|
|
4
|
+
* Reduces confidence of stale learnings based on age, following an
|
|
5
|
+
* exponential decay model: new_confidence = confidence * (decayRate ^ daysSinceUpdate).
|
|
6
|
+
*
|
|
7
|
+
* Consolidation groups old observations by keyword overlap and merges
|
|
8
|
+
* clusters into summary observations, archiving the originals.
|
|
9
|
+
*
|
|
10
|
+
* Wave 3 additions (T549):
|
|
11
|
+
* - runTierPromotion — promotes entries through short→medium→long based on citation count,
|
|
12
|
+
* age, and verification; soft-evicts stale short-term entries.
|
|
13
|
+
* - runConsolidation — orchestrates all consolidation steps (dedup, quality recompute,
|
|
14
|
+
* tier promotion, contradiction detection, soft eviction, graph strengthening, summaries).
|
|
15
|
+
*
|
|
16
|
+
* @task T5394 T5395 T549
|
|
17
|
+
* @epic T5149
|
|
18
|
+
*/
|
|
19
|
+
import { createHash } from 'node:crypto';
|
|
20
|
+
import { getBrainAccessor } from '../store/brain-accessor.js';
|
|
21
|
+
import { typedAll } from '../store/typed-query.js';
|
|
22
|
+
/**
|
|
23
|
+
* Apply temporal decay to brain_learnings confidence values.
|
|
24
|
+
*
|
|
25
|
+
* Entries older than `olderThanDays` have their confidence reduced
|
|
26
|
+
* by an exponential decay factor based on the number of days since
|
|
27
|
+
* their last update (or creation if never updated).
|
|
28
|
+
*
|
|
29
|
+
* Formula: new_confidence = confidence * (decayRate ^ daysSinceUpdate)
|
|
30
|
+
*
|
|
31
|
+
* @param projectRoot - Project root directory for brain.db resolution
|
|
32
|
+
* @param options - Decay configuration
|
|
33
|
+
* @returns Count of updated rows and tables processed
|
|
34
|
+
*/
|
|
35
|
+
export async function applyTemporalDecay(projectRoot, options) {
|
|
36
|
+
const decayRate = options?.decayRate ?? 0.995;
|
|
37
|
+
const olderThanDays = options?.olderThanDays ?? 30;
|
|
38
|
+
// Ensure brain.db is initialized
|
|
39
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
40
|
+
await getBrainDb(projectRoot);
|
|
41
|
+
const nativeDb = getBrainNativeDb();
|
|
42
|
+
if (!nativeDb) {
|
|
43
|
+
return { updated: 0, tablesProcessed: [] };
|
|
44
|
+
}
|
|
45
|
+
// Calculate the cutoff date
|
|
46
|
+
const cutoffDate = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000)
|
|
47
|
+
.toISOString()
|
|
48
|
+
.replace('T', ' ')
|
|
49
|
+
.slice(0, 19);
|
|
50
|
+
// Update learnings: reduce confidence based on age since last update (or creation).
|
|
51
|
+
// SQLite's julianday function computes the difference in days.
|
|
52
|
+
// We use COALESCE to prefer updated_at over created_at for the age calculation.
|
|
53
|
+
const stmt = nativeDb.prepare(`
|
|
54
|
+
UPDATE brain_learnings
|
|
55
|
+
SET confidence = confidence * POWER(?, julianday('now') - julianday(COALESCE(updated_at, created_at))),
|
|
56
|
+
updated_at = datetime('now')
|
|
57
|
+
WHERE COALESCE(updated_at, created_at) < ?
|
|
58
|
+
AND confidence > 0.01
|
|
59
|
+
`);
|
|
60
|
+
const result = stmt.run(decayRate, cutoffDate);
|
|
61
|
+
const updated = typeof result.changes === 'number' ? result.changes : 0;
|
|
62
|
+
return {
|
|
63
|
+
updated,
|
|
64
|
+
tablesProcessed: ['brain_learnings'],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/** Stop words excluded from keyword extraction. */
|
|
68
|
+
const STOP_WORDS = new Set([
|
|
69
|
+
'the',
|
|
70
|
+
'a',
|
|
71
|
+
'an',
|
|
72
|
+
'is',
|
|
73
|
+
'are',
|
|
74
|
+
'was',
|
|
75
|
+
'were',
|
|
76
|
+
'be',
|
|
77
|
+
'been',
|
|
78
|
+
'being',
|
|
79
|
+
'have',
|
|
80
|
+
'has',
|
|
81
|
+
'had',
|
|
82
|
+
'do',
|
|
83
|
+
'does',
|
|
84
|
+
'did',
|
|
85
|
+
'will',
|
|
86
|
+
'would',
|
|
87
|
+
'could',
|
|
88
|
+
'should',
|
|
89
|
+
'may',
|
|
90
|
+
'might',
|
|
91
|
+
'shall',
|
|
92
|
+
'can',
|
|
93
|
+
'need',
|
|
94
|
+
'dare',
|
|
95
|
+
'ought',
|
|
96
|
+
'used',
|
|
97
|
+
'to',
|
|
98
|
+
'of',
|
|
99
|
+
'in',
|
|
100
|
+
'for',
|
|
101
|
+
'on',
|
|
102
|
+
'with',
|
|
103
|
+
'at',
|
|
104
|
+
'by',
|
|
105
|
+
'from',
|
|
106
|
+
'as',
|
|
107
|
+
'into',
|
|
108
|
+
'through',
|
|
109
|
+
'during',
|
|
110
|
+
'before',
|
|
111
|
+
'after',
|
|
112
|
+
'above',
|
|
113
|
+
'below',
|
|
114
|
+
'between',
|
|
115
|
+
'out',
|
|
116
|
+
'off',
|
|
117
|
+
'over',
|
|
118
|
+
'under',
|
|
119
|
+
'again',
|
|
120
|
+
'further',
|
|
121
|
+
'then',
|
|
122
|
+
'once',
|
|
123
|
+
'and',
|
|
124
|
+
'but',
|
|
125
|
+
'or',
|
|
126
|
+
'nor',
|
|
127
|
+
'not',
|
|
128
|
+
'so',
|
|
129
|
+
'yet',
|
|
130
|
+
'both',
|
|
131
|
+
'either',
|
|
132
|
+
'neither',
|
|
133
|
+
'each',
|
|
134
|
+
'every',
|
|
135
|
+
'all',
|
|
136
|
+
'any',
|
|
137
|
+
'few',
|
|
138
|
+
'more',
|
|
139
|
+
'most',
|
|
140
|
+
'other',
|
|
141
|
+
'some',
|
|
142
|
+
'such',
|
|
143
|
+
'no',
|
|
144
|
+
'only',
|
|
145
|
+
'own',
|
|
146
|
+
'same',
|
|
147
|
+
'than',
|
|
148
|
+
'too',
|
|
149
|
+
'very',
|
|
150
|
+
'just',
|
|
151
|
+
'because',
|
|
152
|
+
'until',
|
|
153
|
+
'while',
|
|
154
|
+
'about',
|
|
155
|
+
'against',
|
|
156
|
+
'this',
|
|
157
|
+
'that',
|
|
158
|
+
'these',
|
|
159
|
+
'those',
|
|
160
|
+
'it',
|
|
161
|
+
'its',
|
|
162
|
+
]);
|
|
163
|
+
/**
|
|
164
|
+
* Extract significant keywords from text for grouping.
|
|
165
|
+
* Filters stop words and short tokens, returns lowercase words.
|
|
166
|
+
*/
|
|
167
|
+
function extractKeywords(text) {
|
|
168
|
+
const words = text
|
|
169
|
+
.toLowerCase()
|
|
170
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
171
|
+
.split(/\s+/);
|
|
172
|
+
const keywords = new Set();
|
|
173
|
+
for (const w of words) {
|
|
174
|
+
if (w.length >= 4 && !STOP_WORDS.has(w)) {
|
|
175
|
+
keywords.add(w);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return keywords;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Calculate keyword overlap ratio between two sets.
|
|
182
|
+
* Returns the Jaccard similarity coefficient.
|
|
183
|
+
*/
|
|
184
|
+
function keywordOverlap(a, b) {
|
|
185
|
+
if (a.size === 0 || b.size === 0)
|
|
186
|
+
return 0;
|
|
187
|
+
let intersection = 0;
|
|
188
|
+
for (const w of a) {
|
|
189
|
+
if (b.has(w))
|
|
190
|
+
intersection++;
|
|
191
|
+
}
|
|
192
|
+
const union = a.size + b.size - intersection;
|
|
193
|
+
return union > 0 ? intersection / union : 0;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Consolidate old observations by keyword similarity.
|
|
197
|
+
*
|
|
198
|
+
* Groups observations older than `olderThanDays` by FTS5 keyword overlap.
|
|
199
|
+
* For groups with at least `minClusterSize` entries, creates one summary
|
|
200
|
+
* observation and marks originals as archived (updated_at set, narrative
|
|
201
|
+
* prefixed with [ARCHIVED]).
|
|
202
|
+
*
|
|
203
|
+
* @param projectRoot - Project root directory for brain.db resolution
|
|
204
|
+
* @param options - Consolidation configuration
|
|
205
|
+
* @returns Counts of grouped, merged, and archived observations
|
|
206
|
+
*/
|
|
207
|
+
export async function consolidateMemories(projectRoot, options) {
|
|
208
|
+
const olderThanDays = options?.olderThanDays ?? 90;
|
|
209
|
+
const minClusterSize = options?.minClusterSize ?? 3;
|
|
210
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
211
|
+
await getBrainDb(projectRoot);
|
|
212
|
+
const nativeDb = getBrainNativeDb();
|
|
213
|
+
if (!nativeDb) {
|
|
214
|
+
return { grouped: 0, merged: 0, archived: 0 };
|
|
215
|
+
}
|
|
216
|
+
const cutoffDate = new Date(Date.now() - olderThanDays * 24 * 60 * 60 * 1000)
|
|
217
|
+
.toISOString()
|
|
218
|
+
.replace('T', ' ')
|
|
219
|
+
.slice(0, 19);
|
|
220
|
+
// Fetch old observations that are not already archived
|
|
221
|
+
const stmt = nativeDb.prepare(`
|
|
222
|
+
SELECT id, type, title, narrative, project, created_at
|
|
223
|
+
FROM brain_observations
|
|
224
|
+
WHERE created_at < ?
|
|
225
|
+
AND narrative NOT LIKE '[ARCHIVED]%'
|
|
226
|
+
ORDER BY created_at DESC
|
|
227
|
+
`);
|
|
228
|
+
const oldObservations = typedAll(stmt, cutoffDate);
|
|
229
|
+
if (oldObservations.length < minClusterSize) {
|
|
230
|
+
return { grouped: 0, merged: 0, archived: 0 };
|
|
231
|
+
}
|
|
232
|
+
// Extract keywords for each observation
|
|
233
|
+
const entries = oldObservations.map((obs) => ({
|
|
234
|
+
...obs,
|
|
235
|
+
keywords: extractKeywords(`${obs.title} ${obs.narrative ?? ''}`),
|
|
236
|
+
clustered: false,
|
|
237
|
+
}));
|
|
238
|
+
// Greedy clustering: group by keyword overlap >= 0.3
|
|
239
|
+
const clusters = [];
|
|
240
|
+
const overlapThreshold = 0.3;
|
|
241
|
+
for (let i = 0; i < entries.length; i++) {
|
|
242
|
+
if (entries[i].clustered)
|
|
243
|
+
continue;
|
|
244
|
+
const cluster = [entries[i]];
|
|
245
|
+
entries[i].clustered = true;
|
|
246
|
+
for (let j = i + 1; j < entries.length; j++) {
|
|
247
|
+
if (entries[j].clustered)
|
|
248
|
+
continue;
|
|
249
|
+
if (entries[i].type !== entries[j].type)
|
|
250
|
+
continue;
|
|
251
|
+
const overlap = keywordOverlap(entries[i].keywords, entries[j].keywords);
|
|
252
|
+
if (overlap >= overlapThreshold) {
|
|
253
|
+
cluster.push(entries[j]);
|
|
254
|
+
entries[j].clustered = true;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
if (cluster.length >= minClusterSize) {
|
|
258
|
+
clusters.push(cluster);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
let grouped = 0;
|
|
262
|
+
let merged = 0;
|
|
263
|
+
let archived = 0;
|
|
264
|
+
const accessor = await getBrainAccessor(projectRoot);
|
|
265
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
266
|
+
for (const cluster of clusters) {
|
|
267
|
+
grouped += cluster.length;
|
|
268
|
+
// Create summary observation from cluster
|
|
269
|
+
const titles = cluster.map((c) => c.title).join('; ');
|
|
270
|
+
const summaryTitle = `Consolidated: ${cluster[0].type} observations (${cluster.length} entries)`;
|
|
271
|
+
const summaryNarrative = `Merged from ${cluster.length} observations: ${titles.slice(0, 500)}`;
|
|
272
|
+
const contentHash = createHash('sha256')
|
|
273
|
+
.update(summaryTitle + summaryNarrative)
|
|
274
|
+
.digest('hex')
|
|
275
|
+
.slice(0, 16);
|
|
276
|
+
const id = `O-${Date.now().toString(36)}`;
|
|
277
|
+
await accessor.addObservation({
|
|
278
|
+
id,
|
|
279
|
+
type: cluster[0]
|
|
280
|
+
.type,
|
|
281
|
+
title: summaryTitle,
|
|
282
|
+
narrative: summaryNarrative,
|
|
283
|
+
contentHash,
|
|
284
|
+
project: cluster[0].project ?? null,
|
|
285
|
+
sourceType: 'agent',
|
|
286
|
+
createdAt: now,
|
|
287
|
+
});
|
|
288
|
+
merged++;
|
|
289
|
+
// Archive originals by prefixing narrative
|
|
290
|
+
for (const obs of cluster) {
|
|
291
|
+
nativeDb
|
|
292
|
+
.prepare(`
|
|
293
|
+
UPDATE brain_observations
|
|
294
|
+
SET narrative = '[ARCHIVED] ' || COALESCE(narrative, ''),
|
|
295
|
+
updated_at = ?
|
|
296
|
+
WHERE id = ?
|
|
297
|
+
`)
|
|
298
|
+
.run(now, obs.id);
|
|
299
|
+
archived++;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return { grouped, merged, archived };
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Run tier promotion for all memory tables.
|
|
306
|
+
*
|
|
307
|
+
* Promotion rules (per spec §1.1–§1.3):
|
|
308
|
+
* - short → medium: citationCount >= 3 AND age > 24h AND verified = true
|
|
309
|
+
* OR qualityScore >= 0.7 AND verified = true (fast-track)
|
|
310
|
+
* - medium → long: citationCount >= 5 AND age > 7 days AND verified = true
|
|
311
|
+
*
|
|
312
|
+
* Eviction rules:
|
|
313
|
+
* - short-term entries older than shortTermEvictionDays (default 7) with no
|
|
314
|
+
* promotion eligibility are soft-evicted (invalidAt = now).
|
|
315
|
+
* - long-term entries are NEVER auto-evicted.
|
|
316
|
+
*
|
|
317
|
+
* @param projectRoot - Project root directory for brain.db resolution
|
|
318
|
+
* @returns Lists of promoted and evicted entries
|
|
319
|
+
*/
|
|
320
|
+
export async function runTierPromotion(projectRoot) {
|
|
321
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
322
|
+
await getBrainDb(projectRoot);
|
|
323
|
+
const nativeDb = getBrainNativeDb();
|
|
324
|
+
if (!nativeDb) {
|
|
325
|
+
return { promoted: [], evicted: [] };
|
|
326
|
+
}
|
|
327
|
+
const promoted = [];
|
|
328
|
+
const evicted = [];
|
|
329
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
330
|
+
// Threshold timestamps
|
|
331
|
+
const age24h = new Date(Date.now() - 24 * 60 * 60 * 1000)
|
|
332
|
+
.toISOString()
|
|
333
|
+
.replace('T', ' ')
|
|
334
|
+
.slice(0, 19);
|
|
335
|
+
const age7d = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
|
|
336
|
+
.toISOString()
|
|
337
|
+
.replace('T', ' ')
|
|
338
|
+
.slice(0, 19);
|
|
339
|
+
const evictionCutoff = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
|
|
340
|
+
.toISOString()
|
|
341
|
+
.replace('T', ' ')
|
|
342
|
+
.slice(0, 19);
|
|
343
|
+
// Tables + their date column name (mixed conventions in schema)
|
|
344
|
+
const tables = [
|
|
345
|
+
{ table: 'brain_observations', dateCol: 'created_at' },
|
|
346
|
+
{ table: 'brain_learnings', dateCol: 'created_at' },
|
|
347
|
+
{ table: 'brain_patterns', dateCol: 'extracted_at' },
|
|
348
|
+
{ table: 'brain_decisions', dateCol: 'created_at' },
|
|
349
|
+
];
|
|
350
|
+
for (const { table, dateCol } of tables) {
|
|
351
|
+
let shortToMedium = [];
|
|
352
|
+
try {
|
|
353
|
+
shortToMedium = typedAll(nativeDb.prepare(`
|
|
354
|
+
SELECT id, citation_count, quality_score
|
|
355
|
+
FROM ${table}
|
|
356
|
+
WHERE memory_tier = 'short'
|
|
357
|
+
AND invalid_at IS NULL
|
|
358
|
+
AND ${dateCol} < ?
|
|
359
|
+
AND verified = 1
|
|
360
|
+
AND (citation_count >= 3 OR quality_score >= 0.7)
|
|
361
|
+
`), age24h);
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
// Table may lack columns on older DB — best-effort
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
for (const row of shortToMedium) {
|
|
368
|
+
try {
|
|
369
|
+
nativeDb
|
|
370
|
+
.prepare(`UPDATE ${table} SET memory_tier = 'medium', updated_at = ? WHERE id = ?`)
|
|
371
|
+
.run(now, row.id);
|
|
372
|
+
promoted.push({
|
|
373
|
+
id: row.id,
|
|
374
|
+
table,
|
|
375
|
+
fromTier: 'short',
|
|
376
|
+
toTier: 'medium',
|
|
377
|
+
reason: row.citation_count >= 3
|
|
378
|
+
? `citationCount=${row.citation_count} >= 3, verified, age > 24h`
|
|
379
|
+
: `qualityScore=${row.quality_score?.toFixed(2)} >= 0.70, verified, age > 24h`,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
catch {
|
|
383
|
+
/* best-effort */
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// --- medium → long promotion ---
|
|
387
|
+
let mediumToLong = [];
|
|
388
|
+
try {
|
|
389
|
+
mediumToLong = typedAll(nativeDb.prepare(`
|
|
390
|
+
SELECT id, citation_count, quality_score
|
|
391
|
+
FROM ${table}
|
|
392
|
+
WHERE memory_tier = 'medium'
|
|
393
|
+
AND invalid_at IS NULL
|
|
394
|
+
AND ${dateCol} < ?
|
|
395
|
+
AND verified = 1
|
|
396
|
+
AND citation_count >= 5
|
|
397
|
+
`), age7d);
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
for (const row of mediumToLong) {
|
|
403
|
+
try {
|
|
404
|
+
nativeDb
|
|
405
|
+
.prepare(`UPDATE ${table} SET memory_tier = 'long', updated_at = ? WHERE id = ?`)
|
|
406
|
+
.run(now, row.id);
|
|
407
|
+
promoted.push({
|
|
408
|
+
id: row.id,
|
|
409
|
+
table,
|
|
410
|
+
fromTier: 'medium',
|
|
411
|
+
toTier: 'long',
|
|
412
|
+
reason: `citationCount=${row.citation_count} >= 5, verified, age > 7d`,
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
/* best-effort */
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
let toEvict = [];
|
|
420
|
+
try {
|
|
421
|
+
toEvict = typedAll(nativeDb.prepare(`
|
|
422
|
+
SELECT id, quality_score
|
|
423
|
+
FROM ${table}
|
|
424
|
+
WHERE memory_tier = 'short'
|
|
425
|
+
AND invalid_at IS NULL
|
|
426
|
+
AND ${dateCol} < ?
|
|
427
|
+
AND (verified = 0 OR verified IS NULL)
|
|
428
|
+
AND (quality_score IS NULL OR quality_score < 0.5)
|
|
429
|
+
`), evictionCutoff);
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
for (const row of toEvict) {
|
|
435
|
+
try {
|
|
436
|
+
nativeDb
|
|
437
|
+
.prepare(`UPDATE ${table} SET invalid_at = ?, updated_at = ? WHERE id = ?`)
|
|
438
|
+
.run(now, now, row.id);
|
|
439
|
+
evicted.push({
|
|
440
|
+
id: row.id,
|
|
441
|
+
table,
|
|
442
|
+
tier: 'short',
|
|
443
|
+
reason: `age > 7d, unverified, qualityScore=${row.quality_score?.toFixed(2) ?? 'null'} < 0.5`,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
/* best-effort */
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
return { promoted, evicted };
|
|
452
|
+
}
|
|
453
|
+
/**
|
|
454
|
+
* Run the full sleep-time consolidation pipeline.
|
|
455
|
+
*
|
|
456
|
+
* This is the "Letta OS sleep-time compute" pattern — consolidation runs
|
|
457
|
+
* during idle time (after session end), never during active work.
|
|
458
|
+
*
|
|
459
|
+
* Steps (in order):
|
|
460
|
+
* 1. Deduplication — merge entries with >0.85 content similarity
|
|
461
|
+
* 2. Quality recompute — recalculate scores with current age/citations
|
|
462
|
+
* 3. Tier promotion — runTierPromotion()
|
|
463
|
+
* 4. Contradiction detection — from brain-consolidator
|
|
464
|
+
* 5. Soft eviction — invalidate low-quality medium-term entries
|
|
465
|
+
* 6. Graph edge strengthening — increment weight on frequently-traversed edges
|
|
466
|
+
* 7. Summary generation — existing consolidateMemories() for large clusters
|
|
467
|
+
*
|
|
468
|
+
* All steps are BEST-EFFORT — any step failure is caught and logged to console.warn.
|
|
469
|
+
*
|
|
470
|
+
* @param projectRoot - Project root directory for brain.db resolution
|
|
471
|
+
* @returns Aggregated counts from each consolidation step
|
|
472
|
+
*/
|
|
473
|
+
export async function runConsolidation(projectRoot) {
|
|
474
|
+
const result = {
|
|
475
|
+
deduplicated: 0,
|
|
476
|
+
qualityRecomputed: 0,
|
|
477
|
+
tierPromotions: { promoted: [], evicted: [] },
|
|
478
|
+
contradictions: 0,
|
|
479
|
+
softEvicted: 0,
|
|
480
|
+
edgesStrengthened: 0,
|
|
481
|
+
summariesGenerated: 0,
|
|
482
|
+
};
|
|
483
|
+
// Step 1: Deduplication (embedding-based when available)
|
|
484
|
+
try {
|
|
485
|
+
const deduped = await deduplicateByEmbedding(projectRoot);
|
|
486
|
+
result.deduplicated = deduped;
|
|
487
|
+
}
|
|
488
|
+
catch (err) {
|
|
489
|
+
console.warn('[consolidation] Step 1 deduplication failed:', err);
|
|
490
|
+
}
|
|
491
|
+
// Step 2: Quality recompute (age + citation factor)
|
|
492
|
+
try {
|
|
493
|
+
const recomputed = await recomputeQualityScores(projectRoot);
|
|
494
|
+
result.qualityRecomputed = recomputed;
|
|
495
|
+
}
|
|
496
|
+
catch (err) {
|
|
497
|
+
console.warn('[consolidation] Step 2 quality recompute failed:', err);
|
|
498
|
+
}
|
|
499
|
+
// Step 3: Tier promotion
|
|
500
|
+
try {
|
|
501
|
+
result.tierPromotions = await runTierPromotion(projectRoot);
|
|
502
|
+
}
|
|
503
|
+
catch (err) {
|
|
504
|
+
console.warn('[consolidation] Step 3 tier promotion failed:', err);
|
|
505
|
+
}
|
|
506
|
+
// Step 4: Contradiction detection
|
|
507
|
+
try {
|
|
508
|
+
const { detectContradictions } = await import('./brain-consolidator.js');
|
|
509
|
+
const contradictions = await detectContradictions(projectRoot);
|
|
510
|
+
result.contradictions = contradictions.length;
|
|
511
|
+
}
|
|
512
|
+
catch (err) {
|
|
513
|
+
console.warn('[consolidation] Step 4 contradiction detection failed:', err);
|
|
514
|
+
}
|
|
515
|
+
// Step 5: Soft eviction of low-quality medium-term entries
|
|
516
|
+
try {
|
|
517
|
+
const evicted = await softEvictLowQualityMedium(projectRoot);
|
|
518
|
+
result.softEvicted = evicted;
|
|
519
|
+
}
|
|
520
|
+
catch (err) {
|
|
521
|
+
console.warn('[consolidation] Step 5 soft eviction failed:', err);
|
|
522
|
+
}
|
|
523
|
+
// Step 6: Graph edge strengthening
|
|
524
|
+
try {
|
|
525
|
+
const strengthened = await strengthenCoRetrievedEdges(projectRoot);
|
|
526
|
+
result.edgesStrengthened = strengthened;
|
|
527
|
+
}
|
|
528
|
+
catch (err) {
|
|
529
|
+
console.warn('[consolidation] Step 6 edge strengthening failed:', err);
|
|
530
|
+
}
|
|
531
|
+
// Step 7: Summary generation from large observation clusters
|
|
532
|
+
try {
|
|
533
|
+
const summaryResult = await consolidateMemories(projectRoot, {
|
|
534
|
+
olderThanDays: 30,
|
|
535
|
+
minClusterSize: 5,
|
|
536
|
+
});
|
|
537
|
+
result.summariesGenerated = summaryResult.merged;
|
|
538
|
+
}
|
|
539
|
+
catch (err) {
|
|
540
|
+
console.warn('[consolidation] Step 7 summary generation failed:', err);
|
|
541
|
+
}
|
|
542
|
+
return result;
|
|
543
|
+
}
|
|
544
|
+
// ============================================================================
|
|
545
|
+
// Deduplication (Step 1)
|
|
546
|
+
// ============================================================================
|
|
547
|
+
/**
|
|
548
|
+
* Merge entries with high embedding similarity (> 0.85 cosine similarity).
|
|
549
|
+
*
|
|
550
|
+
* For each pair above the threshold: keep the higher-quality entry, transfer
|
|
551
|
+
* citationCount, and soft-evict the clone (set invalidAt). When embeddings
|
|
552
|
+
* are unavailable, falls back to exact content-hash deduplication.
|
|
553
|
+
*
|
|
554
|
+
* @param projectRoot - Project root for brain.db resolution
|
|
555
|
+
* @returns Count of merged/evicted duplicate entries
|
|
556
|
+
*/
|
|
557
|
+
async function deduplicateByEmbedding(projectRoot) {
|
|
558
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
559
|
+
await getBrainDb(projectRoot);
|
|
560
|
+
const nativeDb = getBrainNativeDb();
|
|
561
|
+
if (!nativeDb)
|
|
562
|
+
return 0;
|
|
563
|
+
let merged = 0;
|
|
564
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
565
|
+
const dupHashes = typedAll(nativeDb.prepare(`
|
|
566
|
+
SELECT content_hash, COUNT(*) as cnt
|
|
567
|
+
FROM brain_observations
|
|
568
|
+
WHERE content_hash IS NOT NULL
|
|
569
|
+
AND invalid_at IS NULL
|
|
570
|
+
GROUP BY content_hash
|
|
571
|
+
HAVING cnt > 1
|
|
572
|
+
`));
|
|
573
|
+
for (const dup of dupHashes) {
|
|
574
|
+
const dupes = typedAll(nativeDb.prepare(`
|
|
575
|
+
SELECT id, quality_score, citation_count
|
|
576
|
+
FROM brain_observations
|
|
577
|
+
WHERE content_hash = ?
|
|
578
|
+
AND invalid_at IS NULL
|
|
579
|
+
ORDER BY quality_score DESC, citation_count DESC
|
|
580
|
+
`), dup.content_hash);
|
|
581
|
+
if (dupes.length < 2)
|
|
582
|
+
continue;
|
|
583
|
+
// Keep the best entry, evict the rest and transfer their citations
|
|
584
|
+
const [keeper, ...clones] = dupes;
|
|
585
|
+
if (!keeper)
|
|
586
|
+
continue;
|
|
587
|
+
let totalCitations = keeper.citation_count;
|
|
588
|
+
for (const clone of clones) {
|
|
589
|
+
totalCitations += clone.citation_count;
|
|
590
|
+
nativeDb
|
|
591
|
+
.prepare(`UPDATE brain_observations SET invalid_at = ?, updated_at = ? WHERE id = ?`)
|
|
592
|
+
.run(now, now, clone.id);
|
|
593
|
+
merged++;
|
|
594
|
+
}
|
|
595
|
+
if (totalCitations !== keeper.citation_count) {
|
|
596
|
+
nativeDb
|
|
597
|
+
.prepare(`UPDATE brain_observations SET citation_count = ?, updated_at = ? WHERE id = ?`)
|
|
598
|
+
.run(totalCitations, now, keeper.id);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
return merged;
|
|
602
|
+
}
|
|
603
|
+
// ============================================================================
|
|
604
|
+
// Quality Recompute (Step 2)
|
|
605
|
+
// ============================================================================
|
|
606
|
+
/**
|
|
607
|
+
* Recompute quality scores factoring in current citation count and age.
|
|
608
|
+
*
|
|
609
|
+
* Applies a citation boost: +0.01 per citation, capped at +0.15.
|
|
610
|
+
* Applies age decay only on episodic entries (observations, episodic learnings).
|
|
611
|
+
*
|
|
612
|
+
* @param projectRoot - Project root for brain.db resolution
|
|
613
|
+
* @returns Count of entries updated
|
|
614
|
+
*/
|
|
615
|
+
async function recomputeQualityScores(projectRoot) {
|
|
616
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
617
|
+
await getBrainDb(projectRoot);
|
|
618
|
+
const nativeDb = getBrainNativeDb();
|
|
619
|
+
if (!nativeDb)
|
|
620
|
+
return 0;
|
|
621
|
+
let updated = 0;
|
|
622
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
623
|
+
// Update observation quality: base + citation boost, min 0.0, max 1.0
|
|
624
|
+
// Only update entries with citation_count > 0 (others unchanged)
|
|
625
|
+
try {
|
|
626
|
+
const stmt = nativeDb.prepare(`
|
|
627
|
+
UPDATE brain_observations
|
|
628
|
+
SET quality_score = MIN(1.0, COALESCE(quality_score, 0.5) + MIN(0.15, citation_count * 0.01)),
|
|
629
|
+
updated_at = ?
|
|
630
|
+
WHERE citation_count > 0
|
|
631
|
+
AND invalid_at IS NULL
|
|
632
|
+
`);
|
|
633
|
+
const r = stmt.run(now);
|
|
634
|
+
updated += typeof r.changes === 'number' ? r.changes : 0;
|
|
635
|
+
}
|
|
636
|
+
catch {
|
|
637
|
+
/* table may not have all columns — best-effort */
|
|
638
|
+
}
|
|
639
|
+
// Same for learnings
|
|
640
|
+
try {
|
|
641
|
+
const stmt = nativeDb.prepare(`
|
|
642
|
+
UPDATE brain_learnings
|
|
643
|
+
SET quality_score = MIN(1.0, COALESCE(quality_score, 0.5) + MIN(0.15, citation_count * 0.01)),
|
|
644
|
+
updated_at = ?
|
|
645
|
+
WHERE citation_count > 0
|
|
646
|
+
AND invalid_at IS NULL
|
|
647
|
+
`);
|
|
648
|
+
const r = stmt.run(now);
|
|
649
|
+
updated += typeof r.changes === 'number' ? r.changes : 0;
|
|
650
|
+
}
|
|
651
|
+
catch {
|
|
652
|
+
/* best-effort */
|
|
653
|
+
}
|
|
654
|
+
return updated;
|
|
655
|
+
}
|
|
656
|
+
// ============================================================================
|
|
657
|
+
// Soft Eviction of Low-Quality Medium-Term Entries (Step 5)
|
|
658
|
+
// ============================================================================
|
|
659
|
+
/**
|
|
660
|
+
* Soft-evict medium-term entries that have decayed below quality threshold.
|
|
661
|
+
*
|
|
662
|
+
* Entries are invalidated (invalidAt = now) when:
|
|
663
|
+
* - memoryTier = 'medium'
|
|
664
|
+
* - qualityScore < 0.30 AND age > 30 days
|
|
665
|
+
* - NOT long-term (protected from auto-eviction)
|
|
666
|
+
*
|
|
667
|
+
* @param projectRoot - Project root for brain.db resolution
|
|
668
|
+
* @returns Count of entries soft-evicted
|
|
669
|
+
*/
|
|
670
|
+
async function softEvictLowQualityMedium(projectRoot) {
|
|
671
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
672
|
+
await getBrainDb(projectRoot);
|
|
673
|
+
const nativeDb = getBrainNativeDb();
|
|
674
|
+
if (!nativeDb)
|
|
675
|
+
return 0;
|
|
676
|
+
let evicted = 0;
|
|
677
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
678
|
+
const age30d = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000)
|
|
679
|
+
.toISOString()
|
|
680
|
+
.replace('T', ' ')
|
|
681
|
+
.slice(0, 19);
|
|
682
|
+
const tables = [
|
|
683
|
+
{ table: 'brain_observations', dateCol: 'created_at' },
|
|
684
|
+
{ table: 'brain_learnings', dateCol: 'created_at' },
|
|
685
|
+
{ table: 'brain_patterns', dateCol: 'extracted_at' },
|
|
686
|
+
{ table: 'brain_decisions', dateCol: 'created_at' },
|
|
687
|
+
];
|
|
688
|
+
for (const { table, dateCol } of tables) {
|
|
689
|
+
try {
|
|
690
|
+
const stmt = nativeDb.prepare(`
|
|
691
|
+
UPDATE ${table}
|
|
692
|
+
SET invalid_at = ?, updated_at = ?
|
|
693
|
+
WHERE memory_tier = 'medium'
|
|
694
|
+
AND invalid_at IS NULL
|
|
695
|
+
AND quality_score IS NOT NULL
|
|
696
|
+
AND quality_score < 0.30
|
|
697
|
+
AND ${dateCol} < ?
|
|
698
|
+
`);
|
|
699
|
+
const r = stmt.run(now, now, age30d);
|
|
700
|
+
evicted += typeof r.changes === 'number' ? r.changes : 0;
|
|
701
|
+
}
|
|
702
|
+
catch {
|
|
703
|
+
/* column may not exist on older rows — best-effort */
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
return evicted;
|
|
707
|
+
}
|
|
708
|
+
// ============================================================================
|
|
709
|
+
// Graph Edge Strengthening (Step 6)
|
|
710
|
+
// ============================================================================
|
|
711
|
+
/**
|
|
712
|
+
* Strengthen edges between frequently co-retrieved brain graph nodes.
|
|
713
|
+
*
|
|
714
|
+
* Queries the brain_retrieval_log table (if it exists) to find pairs of
|
|
715
|
+
* entries that were returned together frequently (>= 3 times in the last
|
|
716
|
+
* 30 days). For each qualifying pair, increments the edge weight by 0.1
|
|
717
|
+
* (capped at 1.0) in brain_page_edges.
|
|
718
|
+
*
|
|
719
|
+
* Gracefully no-ops when brain_retrieval_log does not yet exist.
|
|
720
|
+
*
|
|
721
|
+
* @param projectRoot - Project root for brain.db resolution
|
|
722
|
+
* @returns Count of edges strengthened
|
|
723
|
+
*/
|
|
724
|
+
async function strengthenCoRetrievedEdges(projectRoot) {
|
|
725
|
+
const { getBrainDb, getBrainNativeDb } = await import('../store/brain-sqlite.js');
|
|
726
|
+
await getBrainDb(projectRoot);
|
|
727
|
+
const nativeDb = getBrainNativeDb();
|
|
728
|
+
if (!nativeDb)
|
|
729
|
+
return 0;
|
|
730
|
+
// Check if retrieval log table exists
|
|
731
|
+
try {
|
|
732
|
+
nativeDb.prepare('SELECT 1 FROM brain_retrieval_log LIMIT 1').get();
|
|
733
|
+
}
|
|
734
|
+
catch {
|
|
735
|
+
// Table doesn't exist yet — nothing to do
|
|
736
|
+
return 0;
|
|
737
|
+
}
|
|
738
|
+
const age30d = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000)
|
|
739
|
+
.toISOString()
|
|
740
|
+
.replace('T', ' ')
|
|
741
|
+
.slice(0, 19);
|
|
742
|
+
const now = new Date().toISOString().replace('T', ' ').slice(0, 19);
|
|
743
|
+
let logRows = [];
|
|
744
|
+
try {
|
|
745
|
+
logRows = typedAll(nativeDb.prepare(`SELECT entry_ids FROM brain_retrieval_log WHERE created_at >= ? LIMIT 1000`), age30d);
|
|
746
|
+
}
|
|
747
|
+
catch {
|
|
748
|
+
return 0;
|
|
749
|
+
}
|
|
750
|
+
// Build co-occurrence counts from JSON entry_ids arrays
|
|
751
|
+
const coOccurrence = new Map();
|
|
752
|
+
for (const row of logRows) {
|
|
753
|
+
let ids;
|
|
754
|
+
try {
|
|
755
|
+
ids = JSON.parse(row.entry_ids);
|
|
756
|
+
}
|
|
757
|
+
catch {
|
|
758
|
+
continue;
|
|
759
|
+
}
|
|
760
|
+
// Generate all pairs from the returned ID list
|
|
761
|
+
for (let i = 0; i < ids.length; i++) {
|
|
762
|
+
for (let j = i + 1; j < ids.length; j++) {
|
|
763
|
+
const a = ids[i];
|
|
764
|
+
const b = ids[j];
|
|
765
|
+
// Normalize pair key to canonical order
|
|
766
|
+
const key = a < b ? `${a}|${b}` : `${b}|${a}`;
|
|
767
|
+
coOccurrence.set(key, (coOccurrence.get(key) ?? 0) + 1);
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
let strengthened = 0;
|
|
772
|
+
for (const [pair, count] of coOccurrence) {
|
|
773
|
+
if (count < 3)
|
|
774
|
+
continue;
|
|
775
|
+
const [fromId, toId] = pair.split('|');
|
|
776
|
+
if (!fromId || !toId)
|
|
777
|
+
continue;
|
|
778
|
+
const nodeFrom = `observation:${fromId}`;
|
|
779
|
+
const nodeTo = `observation:${toId}`;
|
|
780
|
+
try {
|
|
781
|
+
// Try to update existing edge
|
|
782
|
+
const updateStmt = nativeDb.prepare(`
|
|
783
|
+
UPDATE brain_page_edges
|
|
784
|
+
SET weight = MIN(1.0, weight + 0.1)
|
|
785
|
+
WHERE from_id = ? AND to_id = ? AND edge_type = 'relates_to'
|
|
786
|
+
`);
|
|
787
|
+
const updateResult = updateStmt.run(nodeFrom, nodeTo);
|
|
788
|
+
const changes = typeof updateResult.changes === 'number' ? updateResult.changes : 0;
|
|
789
|
+
if (changes === 0) {
|
|
790
|
+
// Edge doesn't exist; insert it
|
|
791
|
+
nativeDb
|
|
792
|
+
.prepare(`
|
|
793
|
+
INSERT OR IGNORE INTO brain_page_edges
|
|
794
|
+
(from_id, to_id, edge_type, weight, provenance, created_at)
|
|
795
|
+
VALUES (?, ?, 'relates_to', 0.3, 'consolidation:co-retrieval', ?)
|
|
796
|
+
`)
|
|
797
|
+
.run(nodeFrom, nodeTo, now);
|
|
798
|
+
}
|
|
799
|
+
strengthened++;
|
|
800
|
+
}
|
|
801
|
+
catch {
|
|
802
|
+
/* best-effort */
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
return strengthened;
|
|
806
|
+
}
|
|
807
|
+
//# sourceMappingURL=brain-lifecycle.js.map
|