@cleocode/core 2026.4.9 → 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,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tessera Instantiation Engine
|
|
3
|
+
*
|
|
4
|
+
* Provides template management and instantiation for parameterized
|
|
5
|
+
* WarpChain workflows. Wraps buildDefaultChain() with template
|
|
6
|
+
* variables and manages the template registry.
|
|
7
|
+
*
|
|
8
|
+
* @task T5409
|
|
9
|
+
*/
|
|
10
|
+
import { validateChain } from '../validation/chain-validation.js';
|
|
11
|
+
import { addChain, createInstance, showChain } from './chain-store.js';
|
|
12
|
+
import { buildDefaultChain } from './default-chain.js';
|
|
13
|
+
const DEFAULT_TESSERA_ID = 'tessera-rcasd';
|
|
14
|
+
const TASK_ID_PATTERN = /^T\d+$/;
|
|
15
|
+
const PLACEHOLDER_EXACT = /^\{\{\s*([A-Za-z0-9_]+)\s*\}\}$/;
|
|
16
|
+
const PLACEHOLDER_GLOBAL = /\{\{\s*([A-Za-z0-9_]+)\s*\}\}/g;
|
|
17
|
+
function valueType(value) {
|
|
18
|
+
if (value === null) {
|
|
19
|
+
return 'null';
|
|
20
|
+
}
|
|
21
|
+
if (Array.isArray(value)) {
|
|
22
|
+
return 'array';
|
|
23
|
+
}
|
|
24
|
+
return typeof value;
|
|
25
|
+
}
|
|
26
|
+
function hasOwn(obj, key) {
|
|
27
|
+
return Object.hasOwn(obj, key);
|
|
28
|
+
}
|
|
29
|
+
function validateVariableType(name, varDef, value) {
|
|
30
|
+
switch (varDef.type) {
|
|
31
|
+
case 'string': {
|
|
32
|
+
if (typeof value !== 'string') {
|
|
33
|
+
throw new Error(`Invalid variable type for "${name}": expected string, got ${valueType(value)}`);
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
case 'number': {
|
|
38
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
39
|
+
throw new Error(`Invalid variable type for "${name}": expected finite number, got ${valueType(value)}`);
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
case 'boolean': {
|
|
44
|
+
if (typeof value !== 'boolean') {
|
|
45
|
+
throw new Error(`Invalid variable type for "${name}": expected boolean, got ${valueType(value)}`);
|
|
46
|
+
}
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
case 'taskId':
|
|
50
|
+
case 'epicId': {
|
|
51
|
+
if (typeof value !== 'string') {
|
|
52
|
+
throw new Error(`Invalid variable type for "${name}": expected ${varDef.type}, got ${valueType(value)}`);
|
|
53
|
+
}
|
|
54
|
+
if (!TASK_ID_PATTERN.test(value)) {
|
|
55
|
+
throw new Error(`Invalid variable format for "${name}": expected ${varDef.type} like "T1234", got "${value}"`);
|
|
56
|
+
}
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
default: {
|
|
60
|
+
throw new Error(`Unsupported variable type for "${name}": ${String(varDef.type)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function substituteTemplateValue(value, variables, path) {
|
|
65
|
+
if (typeof value === 'string') {
|
|
66
|
+
const exact = value.match(PLACEHOLDER_EXACT);
|
|
67
|
+
if (exact) {
|
|
68
|
+
const variableName = exact[1];
|
|
69
|
+
if (!hasOwn(variables, variableName)) {
|
|
70
|
+
throw new Error(`Unknown template variable "${variableName}" at ${path}`);
|
|
71
|
+
}
|
|
72
|
+
return variables[variableName];
|
|
73
|
+
}
|
|
74
|
+
return value.replace(PLACEHOLDER_GLOBAL, (_full, variableName) => {
|
|
75
|
+
if (!hasOwn(variables, variableName)) {
|
|
76
|
+
throw new Error(`Unknown template variable "${variableName}" at ${path}`);
|
|
77
|
+
}
|
|
78
|
+
return String(variables[variableName]);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
if (Array.isArray(value)) {
|
|
82
|
+
return value.map((entry, index) => substituteTemplateValue(entry, variables, `${path}[${index}]`));
|
|
83
|
+
}
|
|
84
|
+
if (value !== null && typeof value === 'object') {
|
|
85
|
+
const out = {};
|
|
86
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
87
|
+
out[key] = substituteTemplateValue(nested, variables, `${path}.${key}`);
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
}
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
function resolveVariables(template, inputVariables) {
|
|
94
|
+
const variableKeys = Object.keys(template.variables).sort();
|
|
95
|
+
const allowedVariables = new Set(variableKeys);
|
|
96
|
+
for (const key of Object.keys(inputVariables).sort()) {
|
|
97
|
+
if (!allowedVariables.has(key)) {
|
|
98
|
+
throw new Error(`Unknown variable: ${key}. Allowed variables: ${variableKeys.join(', ')}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const resolvedVariables = {};
|
|
102
|
+
for (const key of variableKeys) {
|
|
103
|
+
const varDef = template.variables[key];
|
|
104
|
+
const hasInput = hasOwn(inputVariables, key);
|
|
105
|
+
const inputValue = hasInput ? inputVariables[key] : undefined;
|
|
106
|
+
if (inputValue === undefined) {
|
|
107
|
+
if (varDef.required) {
|
|
108
|
+
throw new Error(`Missing required variable: ${key}`);
|
|
109
|
+
}
|
|
110
|
+
if (hasOwn(template.defaultValues, key)) {
|
|
111
|
+
const defaultValue = template.defaultValues[key];
|
|
112
|
+
validateVariableType(key, varDef, defaultValue);
|
|
113
|
+
resolvedVariables[key] = defaultValue;
|
|
114
|
+
}
|
|
115
|
+
else if (varDef.default !== undefined) {
|
|
116
|
+
validateVariableType(key, varDef, varDef.default);
|
|
117
|
+
resolvedVariables[key] = varDef.default;
|
|
118
|
+
}
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
validateVariableType(key, varDef, inputValue);
|
|
122
|
+
resolvedVariables[key] = inputValue;
|
|
123
|
+
}
|
|
124
|
+
return resolvedVariables;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Build the default RCASD Tessera template.
|
|
128
|
+
*
|
|
129
|
+
* Wraps buildDefaultChain() with template variables:
|
|
130
|
+
* - epicId (required, type 'epicId')
|
|
131
|
+
* - projectName (optional, type 'string', default 'unnamed')
|
|
132
|
+
* - skipResearch (optional, type 'boolean', default false)
|
|
133
|
+
*
|
|
134
|
+
* @task T5409
|
|
135
|
+
*/
|
|
136
|
+
export function buildDefaultTessera() {
|
|
137
|
+
const chain = buildDefaultChain();
|
|
138
|
+
return {
|
|
139
|
+
...chain,
|
|
140
|
+
id: DEFAULT_TESSERA_ID,
|
|
141
|
+
tessera: DEFAULT_TESSERA_ID,
|
|
142
|
+
variables: {
|
|
143
|
+
epicId: {
|
|
144
|
+
name: 'epicId',
|
|
145
|
+
type: 'epicId',
|
|
146
|
+
description: 'The epic task ID to bind this pipeline to',
|
|
147
|
+
required: true,
|
|
148
|
+
},
|
|
149
|
+
projectName: {
|
|
150
|
+
name: 'projectName',
|
|
151
|
+
type: 'string',
|
|
152
|
+
description: 'Name of the project for labeling',
|
|
153
|
+
required: false,
|
|
154
|
+
default: 'unnamed',
|
|
155
|
+
},
|
|
156
|
+
skipResearch: {
|
|
157
|
+
name: 'skipResearch',
|
|
158
|
+
type: 'boolean',
|
|
159
|
+
description: 'Whether to skip the research stage',
|
|
160
|
+
required: false,
|
|
161
|
+
default: false,
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
archetypes: ['lifecycle', 'rcasd'],
|
|
165
|
+
defaultValues: {
|
|
166
|
+
projectName: 'unnamed',
|
|
167
|
+
skipResearch: false,
|
|
168
|
+
},
|
|
169
|
+
category: 'lifecycle',
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/** In-memory template registry. */
|
|
173
|
+
const templates = new Map();
|
|
174
|
+
/** Ensure the default template is registered. */
|
|
175
|
+
function ensureDefaults() {
|
|
176
|
+
if (!templates.has(DEFAULT_TESSERA_ID)) {
|
|
177
|
+
templates.set(DEFAULT_TESSERA_ID, buildDefaultTessera());
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Instantiate a Tessera template into a concrete WarpChainInstance.
|
|
182
|
+
*
|
|
183
|
+
* Steps:
|
|
184
|
+
* 1. Validate all required variables are provided
|
|
185
|
+
* 2. Apply defaults for missing optional variables
|
|
186
|
+
* 3. Construct concrete WarpChain from template
|
|
187
|
+
* 4. Validate chain via validateChain()
|
|
188
|
+
* 5. Store via createInstance() from chain-store
|
|
189
|
+
* 6. Return instance
|
|
190
|
+
*
|
|
191
|
+
* @task T5409
|
|
192
|
+
*/
|
|
193
|
+
export async function instantiateTessera(template, input, projectRoot) {
|
|
194
|
+
// 1. Resolve and validate input variables
|
|
195
|
+
const inputVariables = input.variables && typeof input.variables === 'object' ? input.variables : {};
|
|
196
|
+
const resolvedVariables = resolveVariables(template, inputVariables);
|
|
197
|
+
// 2. Build chain from template with deep substitution
|
|
198
|
+
const chainSeed = {
|
|
199
|
+
id: template.id,
|
|
200
|
+
name: template.name,
|
|
201
|
+
version: template.version,
|
|
202
|
+
description: template.description,
|
|
203
|
+
shape: template.shape,
|
|
204
|
+
gates: template.gates,
|
|
205
|
+
tessera: template.id,
|
|
206
|
+
metadata: template.metadata,
|
|
207
|
+
};
|
|
208
|
+
const substituted = substituteTemplateValue(chainSeed, resolvedVariables, 'chain');
|
|
209
|
+
const chain = substituted;
|
|
210
|
+
chain.metadata = {
|
|
211
|
+
...(chain.metadata ?? {}),
|
|
212
|
+
variables: resolvedVariables,
|
|
213
|
+
};
|
|
214
|
+
// 3. Validate the chain
|
|
215
|
+
const validation = validateChain(chain);
|
|
216
|
+
if (validation.errors.length > 0) {
|
|
217
|
+
throw new Error(`Tessera chain validation failed: ${validation.errors.join('; ')}`);
|
|
218
|
+
}
|
|
219
|
+
// 4. Store chain if not already stored, then create instance
|
|
220
|
+
const existing = await showChain(chain.id, projectRoot);
|
|
221
|
+
if (!existing) {
|
|
222
|
+
await addChain(chain, projectRoot);
|
|
223
|
+
}
|
|
224
|
+
// 5. Create and return instance
|
|
225
|
+
return createInstance({
|
|
226
|
+
chainId: chain.id,
|
|
227
|
+
epicId: input.epicId,
|
|
228
|
+
variables: resolvedVariables,
|
|
229
|
+
}, projectRoot);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* List all registered Tessera templates.
|
|
233
|
+
*
|
|
234
|
+
* @task T5409
|
|
235
|
+
*/
|
|
236
|
+
export function listTesseraTemplates() {
|
|
237
|
+
ensureDefaults();
|
|
238
|
+
return Array.from(templates.values());
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Find a Tessera template by ID.
|
|
242
|
+
*
|
|
243
|
+
* @task T5409
|
|
244
|
+
*/
|
|
245
|
+
export function showTessera(id) {
|
|
246
|
+
ensureDefaults();
|
|
247
|
+
return templates.get(id) ?? null;
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=tessera-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tessera-engine.js","sourceRoot":"","sources":["../../src/lifecycle/tessera-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized pino logger factory for CLEO.
|
|
3
|
+
*
|
|
4
|
+
* Singleton pattern. Uses pino-roll for automatic file rotation and retention.
|
|
5
|
+
* Custom formatters for uppercase level labels and ISO timestamps.
|
|
6
|
+
* Context via child loggers (getLogger('subsystem')).
|
|
7
|
+
*
|
|
8
|
+
* All diagnostic logging goes to files — stdout is reserved for structured
|
|
9
|
+
* CLI output. Fallback stderr logger if not yet initialized.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { dirname, join } from 'node:path';
|
|
13
|
+
import pino from 'pino';
|
|
14
|
+
let rootLogger = null;
|
|
15
|
+
let currentLogDir = null;
|
|
16
|
+
/**
|
|
17
|
+
* Convert bytes to a human-readable size string for pino-roll.
|
|
18
|
+
* pino-roll accepts '10m', '1g', '500k', etc.
|
|
19
|
+
*/
|
|
20
|
+
function bytesToSizeString(bytes) {
|
|
21
|
+
if (bytes >= 1024 * 1024 * 1024)
|
|
22
|
+
return `${Math.floor(bytes / (1024 * 1024 * 1024))}g`;
|
|
23
|
+
if (bytes >= 1024 * 1024)
|
|
24
|
+
return `${Math.floor(bytes / (1024 * 1024))}m`;
|
|
25
|
+
if (bytes >= 1024)
|
|
26
|
+
return `${Math.floor(bytes / 1024)}k`;
|
|
27
|
+
return `${bytes}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Initialize the root logger. Call once at startup.
|
|
31
|
+
*
|
|
32
|
+
* Uses pino-roll for automatic size+daily rotation with built-in retention.
|
|
33
|
+
* No custom rotation code needed.
|
|
34
|
+
*
|
|
35
|
+
* @param cleoDir - Absolute path to .cleo directory
|
|
36
|
+
* @param config - Logging configuration from CleoConfig.logging
|
|
37
|
+
* @param projectHash - Stable project identity token bound to every log entry.
|
|
38
|
+
* Optional for backward compatibility; warns if absent.
|
|
39
|
+
* @returns The root pino logger instance
|
|
40
|
+
*/
|
|
41
|
+
export function initLogger(cleoDir, config, projectHash) {
|
|
42
|
+
const dest = join(cleoDir, config.filePath);
|
|
43
|
+
currentLogDir = dirname(dest);
|
|
44
|
+
// Log directory should already exist via ensureCleoStructure() which
|
|
45
|
+
// creates all REQUIRED_CLEO_SUBDIRS including 'logs'. The pino-roll
|
|
46
|
+
// transport has mkdir: true as a safety net for edge cases where the
|
|
47
|
+
// logger is initialized before scaffold (e.g. early startup fallback).
|
|
48
|
+
if (!existsSync(currentLogDir)) {
|
|
49
|
+
// Emit to stderr — stdout is reserved for structured output
|
|
50
|
+
process.stderr.write(`[cleo:logger] Log directory missing: ${currentLogDir} — pino-roll will create it\n`);
|
|
51
|
+
}
|
|
52
|
+
// Use pino-roll transport for automatic rotation and retention.
|
|
53
|
+
// pino.transport() runs in a worker thread; sync: true ensures
|
|
54
|
+
// no log loss on process exit (critical for CLI tools).
|
|
55
|
+
const transport = pino.transport({
|
|
56
|
+
target: 'pino-roll',
|
|
57
|
+
options: {
|
|
58
|
+
file: dest,
|
|
59
|
+
size: bytesToSizeString(config.maxFileSize),
|
|
60
|
+
frequency: 'daily',
|
|
61
|
+
dateFormat: 'yyyy-MM-dd',
|
|
62
|
+
mkdir: true,
|
|
63
|
+
limit: {
|
|
64
|
+
count: config.maxFiles,
|
|
65
|
+
removeOtherLogFiles: true,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
// Build base object: projectHash and platform info appear in every log entry.
|
|
70
|
+
// Pino merges base with pid/hostname by default; we add our fields alongside.
|
|
71
|
+
const base = {
|
|
72
|
+
platform: process.platform,
|
|
73
|
+
arch: process.arch,
|
|
74
|
+
nodeVersion: process.version,
|
|
75
|
+
};
|
|
76
|
+
if (projectHash) {
|
|
77
|
+
base.projectHash = projectHash;
|
|
78
|
+
}
|
|
79
|
+
rootLogger = pino({
|
|
80
|
+
level: config.level,
|
|
81
|
+
base,
|
|
82
|
+
formatters: {
|
|
83
|
+
level: (label) => ({ level: label.toUpperCase() }),
|
|
84
|
+
},
|
|
85
|
+
timestamp: pino.stdTimeFunctions.isoTime,
|
|
86
|
+
}, transport);
|
|
87
|
+
// Warn after logger is initialized so the message goes to the log file
|
|
88
|
+
if (!projectHash) {
|
|
89
|
+
getLogger('engine').warn('projectHash not provided to initLogger; audit correlation will be incomplete');
|
|
90
|
+
}
|
|
91
|
+
return rootLogger;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get a child logger bound to a subsystem name.
|
|
95
|
+
*
|
|
96
|
+
* Safe to call before initLogger — returns a stderr fallback logger
|
|
97
|
+
* so early startup code and tests never crash.
|
|
98
|
+
*
|
|
99
|
+
* @param subsystem - Logical subsystem name (e.g. 'audit', 'dispatch', 'migration')
|
|
100
|
+
*/
|
|
101
|
+
export function getLogger(subsystem) {
|
|
102
|
+
if (!rootLogger) {
|
|
103
|
+
// Fallback: stderr logger (stdout reserved for structured output)
|
|
104
|
+
return pino({
|
|
105
|
+
level: 'warn',
|
|
106
|
+
formatters: { level: (label) => ({ level: label.toUpperCase() }) },
|
|
107
|
+
}, pino.destination(2)).child({ subsystem });
|
|
108
|
+
}
|
|
109
|
+
return rootLogger.child({ subsystem });
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the current log directory path.
|
|
113
|
+
* Useful for read APIs that need to scan log files.
|
|
114
|
+
*/
|
|
115
|
+
export function getLogDir() {
|
|
116
|
+
return currentLogDir;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Flush and close the logger. Call during graceful shutdown.
|
|
120
|
+
*
|
|
121
|
+
* Returns a Promise that resolves once the pino transport worker thread
|
|
122
|
+
* has processed all pending writes. Callers that cannot await (e.g. sync
|
|
123
|
+
* shutdown handlers) may fire-and-forget safely — the underlying flush
|
|
124
|
+
* will still occur before the process exits.
|
|
125
|
+
*/
|
|
126
|
+
export function closeLogger() {
|
|
127
|
+
return new Promise((resolve) => {
|
|
128
|
+
if (rootLogger) {
|
|
129
|
+
rootLogger.flush(() => {
|
|
130
|
+
rootLogger = null;
|
|
131
|
+
currentLogDir = null;
|
|
132
|
+
resolve();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
resolve();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-extract structured memory entries from task completions and session ends.
|
|
3
|
+
*
|
|
4
|
+
* Best-effort extraction: all functions wrap their logic in try/catch and
|
|
5
|
+
* must never throw — memory extraction must never block the calling flow.
|
|
6
|
+
*
|
|
7
|
+
* @task T-auto-extract
|
|
8
|
+
* @epic T5149
|
|
9
|
+
*/
|
|
10
|
+
import { storeDecision } from './decisions.js';
|
|
11
|
+
import { storeLearning } from './learnings.js';
|
|
12
|
+
import { storePattern } from './patterns.js';
|
|
13
|
+
/**
|
|
14
|
+
* Extract and store memory entries when a task is completed.
|
|
15
|
+
*
|
|
16
|
+
* - Always stores a learning for the completed task.
|
|
17
|
+
* - Stores a second learning if the task had dependencies.
|
|
18
|
+
* - Detects recurring label patterns across recent completed tasks
|
|
19
|
+
* and stores a success pattern when any label appears 3+ times.
|
|
20
|
+
*/
|
|
21
|
+
export async function extractTaskCompletionMemory(projectRoot, task, _parentTask) {
|
|
22
|
+
try {
|
|
23
|
+
// Always store a learning for this completion
|
|
24
|
+
await storeLearning(projectRoot, {
|
|
25
|
+
insight: `Completed: ${task.title} — ${task.description ?? ''}`,
|
|
26
|
+
source: `task-completion:${task.id}`,
|
|
27
|
+
confidence: 0.7,
|
|
28
|
+
actionable: true,
|
|
29
|
+
});
|
|
30
|
+
// Dependency chain learning
|
|
31
|
+
const deps = task.depends ?? [];
|
|
32
|
+
if (deps.length > 0) {
|
|
33
|
+
await storeLearning(projectRoot, {
|
|
34
|
+
insight: `Task ${task.id} depended on ${deps.join(', ')} — dependency chain completed successfully`,
|
|
35
|
+
source: `task-completion:${task.id}`,
|
|
36
|
+
confidence: 0.7,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
// Pattern detection: look for recurring labels across recent done tasks
|
|
40
|
+
const { getAccessor } = await import('../store/data-accessor.js');
|
|
41
|
+
const accessor = await getAccessor(projectRoot);
|
|
42
|
+
let doneTasks;
|
|
43
|
+
try {
|
|
44
|
+
const { tasks } = await accessor.queryTasks({ status: 'done' });
|
|
45
|
+
doneTasks = tasks;
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
await accessor.close();
|
|
49
|
+
}
|
|
50
|
+
const recentDone = doneTasks.slice(-50);
|
|
51
|
+
const labelCounts = new Map();
|
|
52
|
+
for (const t of recentDone) {
|
|
53
|
+
for (const label of t.labels ?? []) {
|
|
54
|
+
const existing = labelCounts.get(label) ?? [];
|
|
55
|
+
existing.push(t.id);
|
|
56
|
+
labelCounts.set(label, existing);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
for (const [label, taskIds] of labelCounts.entries()) {
|
|
60
|
+
if (taskIds.length >= 3) {
|
|
61
|
+
await storePattern(projectRoot, {
|
|
62
|
+
type: 'success',
|
|
63
|
+
pattern: `Recurring label "${label}" seen in ${taskIds.length} completed tasks`,
|
|
64
|
+
context: `Auto-detected from task completion of ${task.id}`,
|
|
65
|
+
impact: 'medium',
|
|
66
|
+
examples: taskIds,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Best-effort: must never throw
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Extract and store memory entries when a session ends.
|
|
77
|
+
*
|
|
78
|
+
* - Stores a process decision summarising the session.
|
|
79
|
+
* - Stores a per-task learning for each completed task.
|
|
80
|
+
* - Stores a workflow pattern when 2+ completed tasks share a label.
|
|
81
|
+
*/
|
|
82
|
+
export async function extractSessionEndMemory(projectRoot, sessionData, taskDetails) {
|
|
83
|
+
try {
|
|
84
|
+
if (taskDetails.length > 0) {
|
|
85
|
+
await storeDecision(projectRoot, {
|
|
86
|
+
type: 'process',
|
|
87
|
+
decision: `Session ${sessionData.sessionId} completed ${taskDetails.length} tasks: ${taskDetails.map((t) => t.id).join(', ')}`,
|
|
88
|
+
rationale: `Session scope: ${sessionData.scope}. Duration: ${Math.round(sessionData.duration / 60)} min.`,
|
|
89
|
+
confidence: 'medium',
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Per-task learnings
|
|
93
|
+
for (const t of taskDetails) {
|
|
94
|
+
await storeLearning(projectRoot, {
|
|
95
|
+
insight: `Completed: ${t.title} — ${t.description ?? ''}`,
|
|
96
|
+
source: `session-end:${sessionData.sessionId}`,
|
|
97
|
+
confidence: 0.7,
|
|
98
|
+
actionable: true,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
// Workflow pattern when 2+ tasks share a label
|
|
102
|
+
const labelCounts = new Map();
|
|
103
|
+
for (const t of taskDetails) {
|
|
104
|
+
for (const label of t.labels ?? []) {
|
|
105
|
+
const existing = labelCounts.get(label) ?? [];
|
|
106
|
+
existing.push(t.id);
|
|
107
|
+
labelCounts.set(label, existing);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const [label, taskIds] of labelCounts.entries()) {
|
|
111
|
+
if (taskIds.length >= 2) {
|
|
112
|
+
await storePattern(projectRoot, {
|
|
113
|
+
type: 'workflow',
|
|
114
|
+
pattern: `Session ${sessionData.sessionId} completed ${taskIds.length} tasks with label "${label}"`,
|
|
115
|
+
context: `Auto-detected from session end: ${sessionData.sessionId}`,
|
|
116
|
+
impact: 'medium',
|
|
117
|
+
examples: taskIds,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Best-effort: must never throw
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Resolve an array of task IDs to their full Task objects.
|
|
128
|
+
* Tasks that cannot be found are silently excluded.
|
|
129
|
+
*/
|
|
130
|
+
export async function resolveTaskDetails(projectRoot, taskIds) {
|
|
131
|
+
if (taskIds.length === 0) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const { getAccessor } = await import('../store/data-accessor.js');
|
|
135
|
+
const accessor = await getAccessor(projectRoot);
|
|
136
|
+
try {
|
|
137
|
+
return await accessor.loadTasks(taskIds);
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
await accessor.close();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/** Action words that indicate a meaningful assistant turn worth storing. */
|
|
144
|
+
const ACTION_PATTERNS = /\b(implement|fix|add|create|update|remove|refactor|extract|migrate|resolve|complete|found|learned|discovered)\b/i;
|
|
145
|
+
/**
|
|
146
|
+
* Extract key observations from a provider session transcript and store
|
|
147
|
+
* them in brain.db as learnings.
|
|
148
|
+
*
|
|
149
|
+
* Filters assistant lines that contain action words, stores up to 5 as
|
|
150
|
+
* learnings with 0.6 confidence. Always best-effort — never throws.
|
|
151
|
+
*
|
|
152
|
+
* @param projectRoot - Absolute path to project root.
|
|
153
|
+
* @param sessionId - The CLEO session ID being processed.
|
|
154
|
+
* @param transcript - Plain-text provider transcript (user/assistant turns).
|
|
155
|
+
* @task T144 @epic T134
|
|
156
|
+
*/
|
|
157
|
+
export async function extractFromTranscript(projectRoot, sessionId, transcript) {
|
|
158
|
+
try {
|
|
159
|
+
const lines = transcript.split('\n').filter((l) => l.trim().length > 20);
|
|
160
|
+
const actionLines = lines.filter((l) => ACTION_PATTERNS.test(l)).slice(0, 5);
|
|
161
|
+
if (actionLines.length === 0)
|
|
162
|
+
return;
|
|
163
|
+
const { storeLearning } = await import('./learnings.js');
|
|
164
|
+
for (const line of actionLines) {
|
|
165
|
+
await storeLearning(projectRoot, {
|
|
166
|
+
insight: line.trim().slice(0, 250),
|
|
167
|
+
source: `transcript:${sessionId}`,
|
|
168
|
+
confidence: 0.6,
|
|
169
|
+
actionable: false,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Best-effort: must never throw
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=auto-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-extract.js","sourceRoot":"","sources":["../../src/memory/auto-extract.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,WAAmB,EACnB,IAAU,EACV,WAAkB;IAElB,IAAI,CAAC;QACH,8CAA8C;QAC9C,MAAM,aAAa,CAAC,WAAW,EAAE;YAC/B,OAAO,EAAE,cAAc,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE;YAC/D,MAAM,EAAE,mBAAmB,IAAI,CAAC,EAAE,EAAE;YACpC,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,IAAI;SACjB,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,aAAa,CAAC,WAAW,EAAE;gBAC/B,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,4CAA4C;gBACnG,MAAM,EAAE,mBAAmB,IAAI,CAAC,EAAE,EAAE;gBACpC,UAAU,EAAE,GAAG;aAChB,CAAC,CAAC;QACL,CAAC;QAED,wEAAwE;QACxE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;QAChD,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAChE,SAAS,GAAG,KAAK,CAAC;QACpB,CAAC;gBAAS,CAAC;YACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAExC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,YAAY,CAAC,WAAW,EAAE;oBAC9B,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,oBAAoB,KAAK,aAAa,OAAO,CAAC,MAAM,kBAAkB;oBAC/E,OAAO,EAAE,yCAAyC,IAAI,CAAC,EAAE,EAAE;oBAC3D,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,WAAmB,EACnB,WAA8B,EAC9B,WAAmB;IAEnB,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,aAAa,CAAC,WAAW,EAAE;gBAC/B,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,WAAW,WAAW,CAAC,SAAS,cAAc,WAAW,CAAC,MAAM,WAAW,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC9H,SAAS,EAAE,kBAAkB,WAAW,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,OAAO;gBACzG,UAAU,EAAE,QAAQ;aACrB,CAAC,CAAC;QACL,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,aAAa,CAAC,WAAW,EAAE;gBAC/B,OAAO,EAAE,cAAc,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE;gBACzD,MAAM,EAAE,eAAe,WAAW,CAAC,SAAS,EAAE;gBAC9C,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;QACL,CAAC;QAED,+CAA+C;QAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpB,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,YAAY,CAAC,WAAW,EAAE;oBAC9B,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,WAAW,WAAW,CAAC,SAAS,cAAc,OAAO,CAAC,MAAM,sBAAsB,KAAK,GAAG;oBACnG,OAAO,EAAE,mCAAmC,WAAW,CAAC,SAAS,EAAE;oBACnE,MAAM,EAAE,QAAQ;oBAChB,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAAiB;IAC7E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,eAAe,GACnB,kHAAkH,CAAC;AAErH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,WAAmB,EACnB,SAAiB,EACjB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACzE,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAErC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,aAAa,CAAC,WAAW,EAAE;gBAC/B,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAClC,MAAM,EAAE,cAAc,SAAS,EAAE;gBACjC,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Brain Embedding System
|
|
3
|
+
*
|
|
4
|
+
* Provides text-to-vector embedding for semantic search in brain.db.
|
|
5
|
+
* Uses a pluggable provider interface — real model integration
|
|
6
|
+
* (e.g. @huggingface/transformers with all-MiniLM-L6-v2) is separate
|
|
7
|
+
* from the embedding pipeline. When no provider is set, the system
|
|
8
|
+
* falls back to FTS5-only search gracefully.
|
|
9
|
+
*
|
|
10
|
+
* @epic T5149
|
|
11
|
+
* @task T5386
|
|
12
|
+
*/
|
|
13
|
+
/** Matches the brain_embeddings vec0 table: FLOAT[384]. */
|
|
14
|
+
export const EMBEDDING_DIMENSIONS = 384;
|
|
15
|
+
let currentProvider = null;
|
|
16
|
+
/**
|
|
17
|
+
* Register an embedding provider for the brain system.
|
|
18
|
+
* Validates that the provider's dimensions match the vec0 table.
|
|
19
|
+
*
|
|
20
|
+
* @throws Error if provider dimensions do not match EMBEDDING_DIMENSIONS
|
|
21
|
+
*/
|
|
22
|
+
export function setEmbeddingProvider(provider) {
|
|
23
|
+
if (provider.dimensions !== EMBEDDING_DIMENSIONS) {
|
|
24
|
+
throw new Error(`Embedding provider dimensions (${provider.dimensions}) do not match vec0 table (${EMBEDDING_DIMENSIONS})`);
|
|
25
|
+
}
|
|
26
|
+
currentProvider = provider;
|
|
27
|
+
}
|
|
28
|
+
/** Get the currently registered embedding provider, or null. */
|
|
29
|
+
export function getEmbeddingProvider() {
|
|
30
|
+
return currentProvider;
|
|
31
|
+
}
|
|
32
|
+
/** Clear the current embedding provider (useful for testing). */
|
|
33
|
+
export function clearEmbeddingProvider() {
|
|
34
|
+
currentProvider = null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Embed text into a float vector using the registered provider.
|
|
38
|
+
* Returns null when no provider is set or not available (FTS5-only fallback).
|
|
39
|
+
*/
|
|
40
|
+
export async function embedText(text) {
|
|
41
|
+
if (!currentProvider || !currentProvider.isAvailable())
|
|
42
|
+
return null;
|
|
43
|
+
return currentProvider.embed(text);
|
|
44
|
+
}
|
|
45
|
+
/** Check whether embedding is currently available. */
|
|
46
|
+
export function isEmbeddingAvailable() {
|
|
47
|
+
return currentProvider?.isAvailable() ?? false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Initialize the default local embedding provider.
|
|
51
|
+
*
|
|
52
|
+
* Loads the LocalEmbeddingProvider dynamically and registers it via
|
|
53
|
+
* setEmbeddingProvider(). Should be called once at startup when
|
|
54
|
+
* `brain.embedding.enabled` is true.
|
|
55
|
+
*
|
|
56
|
+
* Uses dynamic import to avoid loading the heavy @xenova/transformers
|
|
57
|
+
* bundle unless embedding is actually requested.
|
|
58
|
+
*
|
|
59
|
+
* @task T136 @epic T134
|
|
60
|
+
*/
|
|
61
|
+
export async function initDefaultProvider() {
|
|
62
|
+
const { LocalEmbeddingProvider } = await import('./embedding-local.js');
|
|
63
|
+
const provider = new LocalEmbeddingProvider();
|
|
64
|
+
setEmbeddingProvider(provider);
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=brain-embedding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brain-embedding.js","sourceRoot":"","sources":["../../src/memory/brain-embedding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,2DAA2D;AAC3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,IAAI,eAAe,GAA6B,IAAI,CAAC;AAErD;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAA2B;IAC9D,IAAI,QAAQ,CAAC,UAAU,KAAK,oBAAoB,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,CAAC,UAAU,8BAA8B,oBAAoB,GAAG,CAC3G,CAAC;IACJ,CAAC;IACD,eAAe,GAAG,QAAQ,CAAC;AAC7B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,sBAAsB;IACpC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC9C,oBAAoB,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
|