@cleocode/core 2026.3.76 → 2026.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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.map +1 -1
- package/dist/agents/agent-schema.js +85 -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 +367 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/caamp/adapter.js +434 -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 +23 -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/cant/approval.js +185 -0
- package/dist/cant/approval.js.map +1 -0
- package/dist/cant/context-builder.js +117 -0
- package/dist/cant/context-builder.js.map +1 -0
- package/dist/cant/discretion.js +116 -0
- package/dist/cant/discretion.js.map +1 -0
- package/dist/cant/index.js +23 -0
- package/dist/cant/index.js.map +1 -0
- package/dist/cant/parallel-runner.js +173 -0
- package/dist/cant/parallel-runner.js.map +1 -0
- package/dist/cant/types.js +11 -0
- package/dist/cant/types.js.map +1 -0
- package/dist/cant/workflow-executor.js +440 -0
- package/dist/cant/workflow-executor.js.map +1 -0
- package/dist/cleo.js +322 -0
- package/dist/cleo.js.map +1 -0
- package/dist/code/index.d.ts +10 -0
- package/dist/code/index.d.ts.map +1 -0
- package/dist/code/outline.d.ts +51 -0
- package/dist/code/outline.d.ts.map +1 -0
- package/dist/code/parser.d.ts +30 -0
- package/dist/code/parser.d.ts.map +1 -0
- package/dist/code/search.d.ts +42 -0
- package/dist/code/search.d.ts.map +1 -0
- package/dist/code/unfold.d.ts +44 -0
- package/dist/code/unfold.d.ts.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 +80 -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.d.ts +9 -0
- package/dist/conduit/conduit-client.d.ts.map +1 -1
- package/dist/conduit/conduit-client.js +94 -0
- package/dist/conduit/conduit-client.js.map +1 -0
- package/dist/conduit/factory.d.ts +3 -1
- package/dist/conduit/factory.d.ts.map +1 -1
- package/dist/conduit/factory.js +35 -0
- package/dist/conduit/factory.js.map +1 -0
- package/dist/conduit/http-transport.d.ts +17 -5
- package/dist/conduit/http-transport.d.ts.map +1 -1
- package/dist/conduit/http-transport.js +165 -0
- package/dist/conduit/http-transport.js.map +1 -0
- package/dist/conduit/index.d.ts +5 -2
- package/dist/conduit/index.d.ts.map +1 -1
- package/dist/conduit/index.js +12 -0
- package/dist/conduit/index.js.map +1 -0
- package/dist/conduit/local-transport.d.ts +91 -0
- package/dist/conduit/local-transport.d.ts.map +1 -0
- package/dist/conduit/sse-transport.d.ts +68 -0
- package/dist/conduit/sse-transport.d.ts.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 +144 -0
- package/dist/crypto/credentials.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/mcp-hooks.js +147 -0
- package/dist/hooks/handlers/mcp-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/session-hooks.js +104 -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.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.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4605 -3042
- package/dist/index.js.map +4 -4
- package/dist/init.js +723 -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 +5 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +286 -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.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +10 -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.d.ts +29 -0
- package/dist/lib/tree-sitter-languages.d.ts.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 +167 -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 +753 -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/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/mcp/index.js +146 -0
- package/dist/mcp/index.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.d.ts.map +1 -1
- package/dist/memory/brain-links.js +148 -0
- package/dist/memory/brain-links.js.map +1 -0
- package/dist/memory/brain-maintenance.d.ts +13 -0
- package/dist/memory/brain-maintenance.d.ts.map +1 -1
- package/dist/memory/brain-maintenance.js +98 -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.d.ts.map +1 -1
- package/dist/memory/brain-retrieval.js +526 -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.d.ts.map +1 -1
- package/dist/memory/decisions.js +148 -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 +1030 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/index.js +773 -0
- package/dist/memory/index.js.map +1 -0
- 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.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.d.ts +32 -0
- package/dist/orchestration/hierarchy.d.ts.map +1 -0
- package/dist/orchestration/index.d.ts +1 -0
- package/dist/orchestration/index.d.ts.map +1 -1
- package/dist/orchestration/index.js +286 -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 +524 -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 +337 -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 +1557 -0
- package/dist/routing/capability-matrix.js.map +1 -0
- package/dist/routing/index.js +9 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/scaffold.js +1178 -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 +321 -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/signaldock/claude-code-transport.d.ts +34 -0
- package/dist/signaldock/claude-code-transport.d.ts.map +1 -0
- package/dist/signaldock/claude-code-transport.js +107 -0
- package/dist/signaldock/claude-code-transport.js.map +1 -0
- package/dist/signaldock/factory.d.ts +22 -0
- package/dist/signaldock/factory.d.ts.map +1 -0
- package/dist/signaldock/factory.js +25 -0
- package/dist/signaldock/factory.js.map +1 -0
- package/dist/signaldock/index.d.ts +13 -0
- package/dist/signaldock/index.d.ts.map +1 -0
- package/dist/signaldock/index.js +9 -0
- package/dist/signaldock/index.js.map +1 -0
- package/dist/signaldock/signaldock-transport.d.ts +45 -0
- package/dist/signaldock/signaldock-transport.d.ts.map +1 -0
- package/dist/signaldock/signaldock-transport.js +122 -0
- package/dist/signaldock/signaldock-transport.js.map +1 -0
- package/dist/signaldock/transport.d.ts +49 -0
- package/dist/signaldock/transport.d.ts.map +1 -0
- package/dist/signaldock/transport.js +11 -0
- package/dist/signaldock/transport.js.map +1 -0
- package/dist/signaldock/types.d.ts +88 -0
- package/dist/signaldock/types.d.ts.map +1 -0
- package/dist/signaldock/types.js +11 -0
- package/dist/signaldock/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 +100 -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 +220 -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.d.ts +10 -433
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +169 -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.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/converters.js +124 -0
- package/dist/store/converters.js.map +1 -0
- package/dist/store/cross-db-cleanup.d.ts +34 -0
- package/dist/store/cross-db-cleanup.d.ts.map +1 -1
- package/dist/store/cross-db-cleanup.js +169 -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.js +28 -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.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.d.ts.map +1 -1
- package/dist/store/signaldock-sqlite.js +178 -0
- package/dist/store/signaldock-sqlite.js.map +1 -0
- package/dist/store/sqlite-backup.js +105 -0
- package/dist/store/sqlite-backup.js.map +1 -0
- package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
- package/dist/store/sqlite-data-accessor.js +784 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -0
- package/dist/store/sqlite.js +465 -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.d.ts.map +1 -1
- package/dist/store/task-store.js +350 -0
- package/dist/store/task-store.js.map +1 -0
- package/dist/store/tasks-schema.d.ts +0 -224
- package/dist/store/tasks-schema.d.ts.map +1 -1
- package/dist/store/tasks-schema.js +637 -0
- package/dist/store/tasks-schema.js.map +1 -0
- package/dist/store/typed-query.js +15 -0
- package/dist/store/typed-query.js.map +1 -0
- package/dist/store/validation-schemas.js +278 -0
- package/dist/store/validation-schemas.js.map +1 -0
- package/dist/system/archive-analytics.js +277 -0
- package/dist/system/archive-analytics.js.map +1 -0
- package/dist/system/archive-stats.js +64 -0
- package/dist/system/archive-stats.js.map +1 -0
- package/dist/system/audit.js +145 -0
- package/dist/system/audit.js.map +1 -0
- package/dist/system/backup.js +141 -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.d.ts +1 -1
- package/dist/system/health.d.ts.map +1 -1
- package/dist/system/health.js +1089 -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 +1340 -0
- package/dist/tasks/task-ops.js.map +1 -0
- package/dist/tasks/update.js +271 -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 +1159 -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/consensus.js +71 -0
- package/dist/validation/protocols/consensus.js.map +1 -0
- package/dist/validation/protocols/contribution.js +59 -0
- package/dist/validation/protocols/contribution.js.map +1 -0
- package/dist/validation/protocols/decomposition.js +59 -0
- package/dist/validation/protocols/decomposition.js.map +1 -0
- package/dist/validation/protocols/implementation.js +59 -0
- package/dist/validation/protocols/implementation.js.map +1 -0
- package/dist/validation/protocols/release-protocol.js +60 -0
- package/dist/validation/protocols/release-protocol.js.map +1 -0
- package/dist/validation/protocols/research.js +77 -0
- package/dist/validation/protocols/research.js.map +1 -0
- package/dist/validation/protocols/specification.js +84 -0
- package/dist/validation/protocols/specification.js.map +1 -0
- package/dist/validation/protocols/testing-protocol.js +70 -0
- package/dist/validation/protocols/testing-protocol.js.map +1 -0
- package/dist/validation/protocols/validation-protocol.js +70 -0
- package/dist/validation/protocols/validation-protocol.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 +17 -7
- package/src/agents/agent-schema.ts +2 -5
- package/src/code/index.ts +10 -0
- package/src/code/outline.ts +214 -0
- package/src/code/parser.ts +299 -0
- package/src/code/search.ts +173 -0
- package/src/code/unfold.ts +204 -0
- package/src/conduit/__tests__/dual-api-e2e.test.ts +212 -0
- package/src/conduit/__tests__/local-credential-flow.test.ts +230 -0
- package/src/conduit/__tests__/local-transport.test.ts +320 -0
- package/src/conduit/__tests__/sse-transport.test.ts +344 -0
- package/src/conduit/conduit-client.ts +9 -0
- package/src/conduit/factory.ts +9 -5
- package/src/conduit/http-transport.ts +76 -15
- package/src/conduit/index.ts +5 -2
- package/src/conduit/local-transport.ts +309 -0
- package/src/conduit/sse-transport.ts +382 -0
- package/src/index.ts +1 -0
- package/src/internal.ts +6 -1
- package/src/lib/index.ts +8 -0
- package/src/lib/tree-sitter-languages.ts +88 -0
- package/src/memory/__tests__/brain-links.test.ts +14 -0
- package/src/memory/__tests__/brain-retrieval.test.ts +10 -0
- package/src/memory/__tests__/session-memory.test.ts +17 -0
- package/src/memory/brain-links.ts +17 -0
- package/src/memory/brain-maintenance.ts +33 -1
- package/src/memory/brain-retrieval.ts +18 -2
- package/src/memory/decisions.ts +18 -2
- package/src/orchestration/hierarchy.ts +202 -0
- package/src/orchestration/index.ts +1 -0
- package/src/store/agent-registry-accessor.ts +284 -108
- package/src/store/cross-db-cleanup.ts +175 -1
- package/src/store/signaldock-sqlite.ts +262 -60
- package/src/store/sqlite-data-accessor.ts +3 -0
- package/src/store/task-store.ts +8 -1
- package/src/store/tasks-schema.ts +3 -38
- package/src/system/__tests__/health.test.ts +2 -2
- package/src/system/health.ts +34 -15
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SseTransport test scenarios.
|
|
3
|
+
*
|
|
4
|
+
* Tests for the Server-Sent Events transport implementation.
|
|
5
|
+
* SseTransport extends HTTP polling with real-time push via SSE,
|
|
6
|
+
* falling back to HTTP polling when SSE is unavailable.
|
|
7
|
+
*
|
|
8
|
+
* @see packages/contracts/src/transport.ts — Transport interface
|
|
9
|
+
* @see packages/contracts/src/conduit.ts — ConduitState types
|
|
10
|
+
* @task T216
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
14
|
+
|
|
15
|
+
import { SseTransport } from '../sse-transport.js';
|
|
16
|
+
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Test helpers
|
|
19
|
+
// ============================================================================
|
|
20
|
+
|
|
21
|
+
/** Mock SSE event source that simulates server-sent events. */
|
|
22
|
+
function createMockEventSource() {
|
|
23
|
+
const handlers: Record<string, ((event: MessageEvent) => void)[]> = {};
|
|
24
|
+
return {
|
|
25
|
+
addEventListener: vi.fn((type: string, handler: (event: MessageEvent) => void) => {
|
|
26
|
+
handlers[type] = handlers[type] || [];
|
|
27
|
+
handlers[type].push(handler);
|
|
28
|
+
}),
|
|
29
|
+
removeEventListener: vi.fn(),
|
|
30
|
+
close: vi.fn(),
|
|
31
|
+
readyState: 0, // CONNECTING
|
|
32
|
+
/** Simulate receiving an SSE event. */
|
|
33
|
+
_emit(type: string, data: string) {
|
|
34
|
+
for (const h of handlers[type] || []) {
|
|
35
|
+
h(new MessageEvent(type, { data }));
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
/** Simulate connection open. */
|
|
39
|
+
_open() {
|
|
40
|
+
this.readyState = 1; // OPEN
|
|
41
|
+
for (const h of handlers['open'] || []) {
|
|
42
|
+
h(new MessageEvent('open', { data: '' }));
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
/** Simulate connection error. */
|
|
46
|
+
_error() {
|
|
47
|
+
this.readyState = 2; // CLOSED
|
|
48
|
+
for (const h of handlers['error'] || []) {
|
|
49
|
+
h(new MessageEvent('error', { data: '' }));
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Standard test config for SseTransport. */
|
|
56
|
+
const TEST_CONFIG = {
|
|
57
|
+
agentId: 'test-agent',
|
|
58
|
+
apiKey: 'sk_live_test123',
|
|
59
|
+
apiBaseUrl: 'https://api.signaldock.io',
|
|
60
|
+
sseEndpoint: 'https://api.signaldock.io/sse',
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Connection lifecycle
|
|
65
|
+
// ============================================================================
|
|
66
|
+
|
|
67
|
+
describe('SseTransport', () => {
|
|
68
|
+
describe('connect', () => {
|
|
69
|
+
it.todo('should establish SSE connection to sseEndpoint');
|
|
70
|
+
// Expected behavior:
|
|
71
|
+
// - Creates EventSource to config.sseEndpoint with auth headers
|
|
72
|
+
// - Sets transport name to 'sse'
|
|
73
|
+
// - Transitions state: disconnected → connecting → connected
|
|
74
|
+
// - Resolves when EventSource 'open' event fires
|
|
75
|
+
|
|
76
|
+
it.todo('should fall back to HTTP polling when SSE endpoint is unreachable');
|
|
77
|
+
// Expected behavior:
|
|
78
|
+
// - Attempts SSE connection
|
|
79
|
+
// - On connection error, transitions to HTTP polling mode
|
|
80
|
+
// - State: disconnected → connecting → connected (via HTTP fallback)
|
|
81
|
+
// - Logs warning: "SSE unavailable, falling back to HTTP polling"
|
|
82
|
+
// - poll() still works via HTTP
|
|
83
|
+
|
|
84
|
+
it.todo('should include auth headers in SSE connection');
|
|
85
|
+
// Expected behavior:
|
|
86
|
+
// - EventSource URL includes ?token=<apiKey> (SSE doesn't support custom headers)
|
|
87
|
+
// - Or uses a pre-flight auth endpoint to get a session token
|
|
88
|
+
// - X-Agent-Id is conveyed via query param or pre-flight
|
|
89
|
+
|
|
90
|
+
it.todo('should reject connect when no sseEndpoint or apiBaseUrl is configured');
|
|
91
|
+
// Expected behavior:
|
|
92
|
+
// - Throws Error with message indicating missing config
|
|
93
|
+
// - State remains 'disconnected'
|
|
94
|
+
|
|
95
|
+
it('rejects connect when no sseEndpoint or apiBaseUrl provided', async () => {
|
|
96
|
+
const transport = new SseTransport();
|
|
97
|
+
await expect(
|
|
98
|
+
transport.connect({ agentId: 'test', apiKey: 'key', apiBaseUrl: '' }),
|
|
99
|
+
).rejects.toThrow('requires');
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it.todo('should reject connect when already connected');
|
|
103
|
+
// Expected behavior:
|
|
104
|
+
// - Second connect() call throws or is no-op
|
|
105
|
+
// - Does not create duplicate EventSource instances
|
|
106
|
+
|
|
107
|
+
it('has name "sse"', () => {
|
|
108
|
+
const transport = new SseTransport();
|
|
109
|
+
expect(transport.name).toBe('sse');
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Disconnect
|
|
115
|
+
// ============================================================================
|
|
116
|
+
|
|
117
|
+
describe('disconnect', () => {
|
|
118
|
+
it.todo('should close SSE connection and clear state');
|
|
119
|
+
// Expected behavior:
|
|
120
|
+
// - Calls EventSource.close()
|
|
121
|
+
// - Clears internal state
|
|
122
|
+
// - State: connected → disconnected
|
|
123
|
+
// - Subsequent push/poll calls throw "not connected"
|
|
124
|
+
|
|
125
|
+
it.todo('should be idempotent when already disconnected');
|
|
126
|
+
// Expected behavior:
|
|
127
|
+
// - No error when calling disconnect() on already disconnected transport
|
|
128
|
+
// - State remains 'disconnected'
|
|
129
|
+
|
|
130
|
+
it('is safe to call disconnect when not connected', async () => {
|
|
131
|
+
const transport = new SseTransport();
|
|
132
|
+
await transport.disconnect(); // Should not throw
|
|
133
|
+
await transport.disconnect(); // Still should not throw
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it.todo('should cancel any pending poll timers');
|
|
137
|
+
// Expected behavior:
|
|
138
|
+
// - If HTTP fallback polling is active, clears interval
|
|
139
|
+
// - No orphaned timers after disconnect
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// Reconnect
|
|
144
|
+
// ============================================================================
|
|
145
|
+
|
|
146
|
+
describe('reconnect', () => {
|
|
147
|
+
it.todo('should automatically reconnect on SSE connection drop');
|
|
148
|
+
// Expected behavior:
|
|
149
|
+
// - When EventSource fires 'error' and readyState becomes CLOSED
|
|
150
|
+
// - State: connected → reconnecting
|
|
151
|
+
// - Exponential backoff: 1s, 2s, 4s, 8s, max 30s
|
|
152
|
+
// - On successful reconnect: state → connected
|
|
153
|
+
// - Messages received during reconnect are not lost (server-side cursor)
|
|
154
|
+
|
|
155
|
+
it.todo('should fall back to HTTP polling after N failed SSE reconnects');
|
|
156
|
+
// Expected behavior:
|
|
157
|
+
// - After 3 failed SSE reconnect attempts
|
|
158
|
+
// - Permanently switches to HTTP polling mode for this session
|
|
159
|
+
// - State: reconnecting → connected (via HTTP)
|
|
160
|
+
// - Logs: "SSE reconnect failed 3 times, switching to HTTP polling"
|
|
161
|
+
|
|
162
|
+
it.todo('should preserve message cursor across reconnect');
|
|
163
|
+
// Expected behavior:
|
|
164
|
+
// - Tracks last received message ID or timestamp
|
|
165
|
+
// - Reconnect URL includes ?lastEventId=<cursor>
|
|
166
|
+
// - Server replays missed messages from cursor
|
|
167
|
+
// - No duplicate messages delivered to consumer
|
|
168
|
+
|
|
169
|
+
it.todo('should emit state change events during reconnect cycle');
|
|
170
|
+
// Expected behavior:
|
|
171
|
+
// - onStateChange fires: connected → reconnecting → connected
|
|
172
|
+
// - Or: connected → reconnecting → error (if max retries exceeded)
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
// ============================================================================
|
|
176
|
+
// Message receive (SSE mode)
|
|
177
|
+
// ============================================================================
|
|
178
|
+
|
|
179
|
+
describe('message receive via SSE', () => {
|
|
180
|
+
it.todo('should deliver incoming SSE messages via poll() return');
|
|
181
|
+
// Expected behavior:
|
|
182
|
+
// - SSE 'message' events are buffered internally
|
|
183
|
+
// - poll() returns buffered messages and clears buffer
|
|
184
|
+
// - Messages conform to ConduitMessage interface
|
|
185
|
+
|
|
186
|
+
it.todo('should parse SSE data field as JSON ConduitMessage');
|
|
187
|
+
// Expected behavior:
|
|
188
|
+
// - SSE data: {"id":"msg-1","from":"agent-a","content":"hello","timestamp":"..."}
|
|
189
|
+
// - Parsed into ConduitMessage with all fields populated
|
|
190
|
+
|
|
191
|
+
it.todo('should handle malformed SSE data gracefully');
|
|
192
|
+
// Expected behavior:
|
|
193
|
+
// - Invalid JSON in SSE data field does not crash transport
|
|
194
|
+
// - Malformed messages are logged and skipped
|
|
195
|
+
// - poll() returns only valid messages
|
|
196
|
+
|
|
197
|
+
it.todo('should filter self-sent messages');
|
|
198
|
+
// Expected behavior:
|
|
199
|
+
// - Messages where from === config.agentId are excluded from poll()
|
|
200
|
+
// - Prevents echo of own messages
|
|
201
|
+
|
|
202
|
+
it.todo('should support SSE event types for different message categories');
|
|
203
|
+
// Expected behavior:
|
|
204
|
+
// - 'message' event: standard agent messages
|
|
205
|
+
// - 'heartbeat' event: keep-alive (ignored in poll output)
|
|
206
|
+
// - 'system' event: system notifications (e.g., agent online/offline)
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
// ============================================================================
|
|
210
|
+
// Send with SSE down (fallback to HTTP)
|
|
211
|
+
// ============================================================================
|
|
212
|
+
|
|
213
|
+
describe('send (push)', () => {
|
|
214
|
+
it.todo('should send messages via HTTP POST regardless of SSE state');
|
|
215
|
+
// Expected behavior:
|
|
216
|
+
// - push() always uses HTTP POST (SSE is receive-only)
|
|
217
|
+
// - POST /conversations/{conversationId}/messages or /agents/{to}/messages
|
|
218
|
+
// - Returns { messageId } from response
|
|
219
|
+
// - Works whether SSE is connected, reconnecting, or fallen back to HTTP
|
|
220
|
+
|
|
221
|
+
it.todo('should send messages when SSE is connected');
|
|
222
|
+
// Expected behavior:
|
|
223
|
+
// - SSE connection is active for receiving
|
|
224
|
+
// - push() uses HTTP POST for sending (SSE is unidirectional)
|
|
225
|
+
// - Both channels work simultaneously
|
|
226
|
+
|
|
227
|
+
it.todo('should send messages when SSE is down and in HTTP fallback mode');
|
|
228
|
+
// Expected behavior:
|
|
229
|
+
// - SSE connection has failed, transport is in HTTP polling mode
|
|
230
|
+
// - push() still works via HTTP POST
|
|
231
|
+
// - No difference in send behavior between SSE and HTTP modes
|
|
232
|
+
|
|
233
|
+
it.todo('should retry failed sends with exponential backoff');
|
|
234
|
+
// Expected behavior:
|
|
235
|
+
// - On HTTP 5xx or network error, retry up to 3 times
|
|
236
|
+
// - Backoff: 500ms, 1s, 2s
|
|
237
|
+
// - On 4xx (client error), fail immediately (no retry)
|
|
238
|
+
// - Returns error after max retries
|
|
239
|
+
|
|
240
|
+
it.todo('should throw when not connected');
|
|
241
|
+
// Expected behavior:
|
|
242
|
+
// - push() before connect() throws "Transport not connected"
|
|
243
|
+
// - push() after disconnect() throws "Transport not connected"
|
|
244
|
+
|
|
245
|
+
it('throws when push is called before connect', async () => {
|
|
246
|
+
const transport = new SseTransport();
|
|
247
|
+
await expect(transport.push('to', 'msg')).rejects.toThrow('not connected');
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('throws when poll is called before connect', async () => {
|
|
251
|
+
const transport = new SseTransport();
|
|
252
|
+
await expect(transport.poll()).rejects.toThrow('not connected');
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
it('throws when ack is called before connect', async () => {
|
|
256
|
+
const transport = new SseTransport();
|
|
257
|
+
await expect(transport.ack(['id'])).rejects.toThrow('not connected');
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// ============================================================================
|
|
262
|
+
// Poll (hybrid mode)
|
|
263
|
+
// ============================================================================
|
|
264
|
+
|
|
265
|
+
describe('poll', () => {
|
|
266
|
+
it.todo('should return SSE-buffered messages when SSE is active');
|
|
267
|
+
// Expected behavior:
|
|
268
|
+
// - In SSE mode, poll() drains the internal message buffer
|
|
269
|
+
// - Does NOT make an HTTP request (messages arrive via SSE push)
|
|
270
|
+
// - Returns empty array if no new messages since last poll
|
|
271
|
+
|
|
272
|
+
it.todo('should fall back to HTTP polling when SSE is down');
|
|
273
|
+
// Expected behavior:
|
|
274
|
+
// - In HTTP fallback mode, poll() makes GET /messages/peek
|
|
275
|
+
// - Behaves identically to HttpTransport.poll()
|
|
276
|
+
// - Respects limit and since options
|
|
277
|
+
|
|
278
|
+
it.todo('should respect since parameter for cursor-based retrieval');
|
|
279
|
+
// Expected behavior:
|
|
280
|
+
// - poll({ since: '2026-03-30T20:00:00Z' }) returns only newer messages
|
|
281
|
+
// - In SSE mode: filters buffer by timestamp
|
|
282
|
+
// - In HTTP mode: passes as query param
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
// ============================================================================
|
|
286
|
+
// Acknowledge
|
|
287
|
+
// ============================================================================
|
|
288
|
+
|
|
289
|
+
describe('ack', () => {
|
|
290
|
+
it.todo('should acknowledge messages via HTTP POST');
|
|
291
|
+
// Expected behavior:
|
|
292
|
+
// - ack(['msg-1', 'msg-2']) sends POST /messages/ack
|
|
293
|
+
// - Works in both SSE and HTTP modes (always HTTP for ack)
|
|
294
|
+
// - Acknowledged messages are not returned by subsequent poll()
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
// ============================================================================
|
|
298
|
+
// Heartbeat
|
|
299
|
+
// ============================================================================
|
|
300
|
+
|
|
301
|
+
describe('heartbeat', () => {
|
|
302
|
+
it.todo('should send heartbeat via HTTP POST');
|
|
303
|
+
// Expected behavior:
|
|
304
|
+
// - POST /agents/{agentId}/heartbeat
|
|
305
|
+
// - Works in both SSE and HTTP modes
|
|
306
|
+
// - Does not depend on SSE connection state
|
|
307
|
+
|
|
308
|
+
it.todo('should detect SSE connection health from heartbeat response');
|
|
309
|
+
// Expected behavior:
|
|
310
|
+
// - Heartbeat response may include SSE connection status
|
|
311
|
+
// - If server reports SSE session expired, trigger reconnect
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
// ============================================================================
|
|
315
|
+
// Edge cases
|
|
316
|
+
// ============================================================================
|
|
317
|
+
|
|
318
|
+
describe('edge cases', () => {
|
|
319
|
+
it.todo('should handle rapid connect/disconnect cycles');
|
|
320
|
+
// Expected behavior:
|
|
321
|
+
// - connect() → disconnect() → connect() in quick succession
|
|
322
|
+
// - No resource leaks (EventSource properly closed)
|
|
323
|
+
// - Final state is consistent
|
|
324
|
+
|
|
325
|
+
it.todo('should handle server-initiated SSE close');
|
|
326
|
+
// Expected behavior:
|
|
327
|
+
// - Server sends SSE close/shutdown event
|
|
328
|
+
// - Transport transitions to reconnecting or HTTP fallback
|
|
329
|
+
// - No unhandled errors
|
|
330
|
+
|
|
331
|
+
it.todo('should handle network going offline then online');
|
|
332
|
+
// Expected behavior:
|
|
333
|
+
// - SSE connection drops (network offline)
|
|
334
|
+
// - Reconnect attempts fail (network offline)
|
|
335
|
+
// - When network returns, reconnect succeeds
|
|
336
|
+
// - Messages buffered server-side are delivered
|
|
337
|
+
|
|
338
|
+
it.todo('should not leak EventSource instances on repeated reconnects');
|
|
339
|
+
// Expected behavior:
|
|
340
|
+
// - Each reconnect properly closes the previous EventSource
|
|
341
|
+
// - No accumulation of open connections
|
|
342
|
+
// - Memory usage stays constant
|
|
343
|
+
});
|
|
344
|
+
});
|
|
@@ -25,19 +25,23 @@ export class ConduitClient implements Conduit {
|
|
|
25
25
|
private credential: AgentCredential;
|
|
26
26
|
private state: ConduitState = 'disconnected';
|
|
27
27
|
|
|
28
|
+
/** Create a ConduitClient backed by the given transport and credential. */
|
|
28
29
|
constructor(transport: Transport, credential: AgentCredential) {
|
|
29
30
|
this.transport = transport;
|
|
30
31
|
this.credential = credential;
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
/** The agent ID from the bound credential. */
|
|
33
35
|
get agentId(): string {
|
|
34
36
|
return this.credential.agentId;
|
|
35
37
|
}
|
|
36
38
|
|
|
39
|
+
/** Current connection state (disconnected → connecting → connected | error). */
|
|
37
40
|
getState(): ConduitState {
|
|
38
41
|
return this.state;
|
|
39
42
|
}
|
|
40
43
|
|
|
44
|
+
/** Connect the underlying transport using the bound credential. */
|
|
41
45
|
async connect(): Promise<void> {
|
|
42
46
|
this.state = 'connecting';
|
|
43
47
|
try {
|
|
@@ -55,6 +59,7 @@ export class ConduitClient implements Conduit {
|
|
|
55
59
|
}
|
|
56
60
|
}
|
|
57
61
|
|
|
62
|
+
/** Send a message to another agent, optionally within a thread. */
|
|
58
63
|
async send(
|
|
59
64
|
to: string,
|
|
60
65
|
content: string,
|
|
@@ -69,6 +74,7 @@ export class ConduitClient implements Conduit {
|
|
|
69
74
|
};
|
|
70
75
|
}
|
|
71
76
|
|
|
77
|
+
/** Subscribe to incoming messages. Uses real-time transport when available, else polls. */
|
|
72
78
|
onMessage(handler: (message: ConduitMessage) => void): ConduitUnsubscribe {
|
|
73
79
|
// Prefer real-time subscription if transport supports it
|
|
74
80
|
if (this.transport.subscribe) {
|
|
@@ -85,11 +91,13 @@ export class ConduitClient implements Conduit {
|
|
|
85
91
|
return () => clearInterval(interval);
|
|
86
92
|
}
|
|
87
93
|
|
|
94
|
+
/** Send an empty heartbeat to maintain presence on the relay. */
|
|
88
95
|
async heartbeat(): Promise<void> {
|
|
89
96
|
// Send empty heartbeat via transport
|
|
90
97
|
await this.transport.push(this.credential.agentId, '', {});
|
|
91
98
|
}
|
|
92
99
|
|
|
100
|
+
/** Check whether a remote agent is currently online via the cloud API. */
|
|
93
101
|
async isOnline(agentId: string): Promise<boolean> {
|
|
94
102
|
// Delegate to cloud API check — stub for now
|
|
95
103
|
try {
|
|
@@ -107,6 +115,7 @@ export class ConduitClient implements Conduit {
|
|
|
107
115
|
}
|
|
108
116
|
}
|
|
109
117
|
|
|
118
|
+
/** Disconnect the transport and reset state to disconnected. */
|
|
110
119
|
async disconnect(): Promise<void> {
|
|
111
120
|
await this.transport.disconnect();
|
|
112
121
|
this.state = 'disconnected';
|
package/src/conduit/factory.ts
CHANGED
|
@@ -11,16 +11,20 @@
|
|
|
11
11
|
import type { AgentCredential, AgentRegistryAPI, Conduit, Transport } from '@cleocode/contracts';
|
|
12
12
|
import { ConduitClient } from './conduit-client.js';
|
|
13
13
|
import { HttpTransport } from './http-transport.js';
|
|
14
|
+
import { LocalTransport } from './local-transport.js';
|
|
15
|
+
import { SseTransport } from './sse-transport.js';
|
|
14
16
|
|
|
15
17
|
/** Resolve the best available transport for a credential. */
|
|
16
|
-
function resolveTransport(credential: AgentCredential): Transport {
|
|
17
|
-
// Priority: Local (
|
|
18
|
-
|
|
18
|
+
export function resolveTransport(credential: AgentCredential): Transport {
|
|
19
|
+
// Priority: Local (SQLite) > WebSocket > SSE > HTTP polling
|
|
20
|
+
if (LocalTransport.isAvailable()) {
|
|
21
|
+
return new LocalTransport();
|
|
22
|
+
}
|
|
19
23
|
if (credential.transportConfig.wsUrl) {
|
|
20
|
-
// WsTransport
|
|
24
|
+
// WsTransport — fall through to SSE/HTTP for now
|
|
21
25
|
}
|
|
22
26
|
if (credential.transportConfig.sseEndpoint) {
|
|
23
|
-
|
|
27
|
+
return new SseTransport();
|
|
24
28
|
}
|
|
25
29
|
return new HttpTransport();
|
|
26
30
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* HttpTransport — HTTP polling transport
|
|
2
|
+
* HttpTransport — HTTP polling transport with automatic failover.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* (api.
|
|
6
|
-
*
|
|
4
|
+
* Tries the primary API URL (api.signaldock.io) first. If unreachable,
|
|
5
|
+
* falls back to the legacy URL (api.clawmsgr.com). Failover is transparent
|
|
6
|
+
* to callers — they see a single transport that always works if either
|
|
7
|
+
* endpoint is up.
|
|
7
8
|
*
|
|
8
9
|
* @see docs/specs/SIGNALDOCK-UNIFIED-AGENT-REGISTRY.md Section 4.4
|
|
9
10
|
* @task T177
|
|
@@ -15,28 +16,52 @@ import type { ConduitMessage, Transport, TransportConnectConfig } from '@cleocod
|
|
|
15
16
|
interface HttpTransportState {
|
|
16
17
|
agentId: string;
|
|
17
18
|
apiKey: string;
|
|
18
|
-
|
|
19
|
+
primaryUrl: string;
|
|
20
|
+
fallbackUrl: string | null;
|
|
21
|
+
activeUrl: string;
|
|
19
22
|
connected: boolean;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
/** HTTP
|
|
25
|
+
/** HTTP transport with automatic primary/fallback failover. */
|
|
23
26
|
export class HttpTransport implements Transport {
|
|
24
27
|
readonly name = 'http';
|
|
25
28
|
private state: HttpTransportState | null = null;
|
|
26
29
|
|
|
30
|
+
/** Connect to the SignalDock API, probing primary/fallback health when both are configured. */
|
|
27
31
|
async connect(config: TransportConnectConfig): Promise<void> {
|
|
32
|
+
const primaryUrl = config.apiBaseUrl;
|
|
33
|
+
const fallbackUrl = config.apiBaseUrlFallback ?? null;
|
|
34
|
+
|
|
35
|
+
// Only probe health when there's a fallback to choose between
|
|
36
|
+
let activeUrl = primaryUrl;
|
|
37
|
+
if (fallbackUrl) {
|
|
38
|
+
const [primaryResult, fallbackResult] = await Promise.allSettled([
|
|
39
|
+
fetch(`${primaryUrl}/health`, { method: 'GET', signal: AbortSignal.timeout(5000) }),
|
|
40
|
+
fetch(`${fallbackUrl}/health`, { method: 'GET', signal: AbortSignal.timeout(5000) }),
|
|
41
|
+
]);
|
|
42
|
+
const primaryOk = primaryResult.status === 'fulfilled' && primaryResult.value.ok;
|
|
43
|
+
const fallbackOk = fallbackResult.status === 'fulfilled' && fallbackResult.value.ok;
|
|
44
|
+
if (!primaryOk && fallbackOk) {
|
|
45
|
+
activeUrl = fallbackUrl;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
28
49
|
this.state = {
|
|
29
50
|
agentId: config.agentId,
|
|
30
51
|
apiKey: config.apiKey,
|
|
31
|
-
|
|
52
|
+
primaryUrl,
|
|
53
|
+
fallbackUrl,
|
|
54
|
+
activeUrl,
|
|
32
55
|
connected: true,
|
|
33
56
|
};
|
|
34
57
|
}
|
|
35
58
|
|
|
59
|
+
/** Disconnect and clear connection state. */
|
|
36
60
|
async disconnect(): Promise<void> {
|
|
37
61
|
this.state = null;
|
|
38
62
|
}
|
|
39
63
|
|
|
64
|
+
/** Send a message to an agent (direct or within a conversation thread). */
|
|
40
65
|
async push(
|
|
41
66
|
to: string,
|
|
42
67
|
content: string,
|
|
@@ -46,18 +71,18 @@ export class HttpTransport implements Transport {
|
|
|
46
71
|
|
|
47
72
|
const body: Record<string, string> = { content };
|
|
48
73
|
|
|
49
|
-
let
|
|
74
|
+
let path: string;
|
|
50
75
|
if (options?.conversationId) {
|
|
51
|
-
|
|
76
|
+
path = `/conversations/${options.conversationId}/messages`;
|
|
52
77
|
if (options.replyTo) {
|
|
53
78
|
body['replyTo'] = options.replyTo;
|
|
54
79
|
}
|
|
55
80
|
} else {
|
|
56
|
-
|
|
81
|
+
path = '/messages';
|
|
57
82
|
body['toAgentId'] = to;
|
|
58
83
|
}
|
|
59
84
|
|
|
60
|
-
const response = await
|
|
85
|
+
const response = await this.fetchWithFallback(path, {
|
|
61
86
|
method: 'POST',
|
|
62
87
|
headers: this.headers(),
|
|
63
88
|
body: JSON.stringify(body),
|
|
@@ -76,17 +101,16 @@ export class HttpTransport implements Transport {
|
|
|
76
101
|
return { messageId };
|
|
77
102
|
}
|
|
78
103
|
|
|
104
|
+
/** Poll for new messages mentioning this agent. Returns empty array on HTTP error. */
|
|
79
105
|
async poll(options?: { limit?: number; since?: string }): Promise<ConduitMessage[]> {
|
|
80
106
|
this.ensureConnected();
|
|
81
107
|
|
|
82
108
|
const params = new URLSearchParams();
|
|
83
109
|
params.set('mentioned', this.state!.agentId);
|
|
84
110
|
if (options?.limit) params.set('limit', String(options.limit));
|
|
85
|
-
// H5 fix: pass since param to avoid reprocessing old messages
|
|
86
111
|
if (options?.since) params.set('since', options.since);
|
|
87
112
|
|
|
88
|
-
const
|
|
89
|
-
const response = await fetch(url, {
|
|
113
|
+
const response = await this.fetchWithFallback(`/messages/peek?${params}`, {
|
|
90
114
|
method: 'GET',
|
|
91
115
|
headers: this.headers(),
|
|
92
116
|
});
|
|
@@ -114,16 +138,53 @@ export class HttpTransport implements Transport {
|
|
|
114
138
|
}));
|
|
115
139
|
}
|
|
116
140
|
|
|
141
|
+
/** Acknowledge messages by ID so they are not returned by future polls. */
|
|
117
142
|
async ack(messageIds: string[]): Promise<void> {
|
|
118
143
|
this.ensureConnected();
|
|
119
144
|
|
|
120
|
-
await
|
|
145
|
+
await this.fetchWithFallback('/messages/ack', {
|
|
121
146
|
method: 'POST',
|
|
122
147
|
headers: this.headers(),
|
|
123
148
|
body: JSON.stringify({ messageIds }),
|
|
124
149
|
});
|
|
125
150
|
}
|
|
126
151
|
|
|
152
|
+
/**
|
|
153
|
+
* Fetch with automatic failover. Tries activeUrl first.
|
|
154
|
+
* If it fails and a fallback exists, retries on the other URL
|
|
155
|
+
* and swaps activeUrl for subsequent calls.
|
|
156
|
+
*/
|
|
157
|
+
private async fetchWithFallback(path: string, init: RequestInit): Promise<Response> {
|
|
158
|
+
const timeout = AbortSignal.timeout(10000);
|
|
159
|
+
const signal = init.signal ? AbortSignal.any([init.signal, timeout]) : timeout;
|
|
160
|
+
const url = `${this.state!.activeUrl}${path}`;
|
|
161
|
+
|
|
162
|
+
try {
|
|
163
|
+
return await fetch(url, { ...init, signal });
|
|
164
|
+
} catch (primaryErr) {
|
|
165
|
+
const otherUrl =
|
|
166
|
+
this.state!.activeUrl === this.state!.primaryUrl
|
|
167
|
+
? this.state!.fallbackUrl
|
|
168
|
+
: this.state!.primaryUrl;
|
|
169
|
+
|
|
170
|
+
if (!otherUrl) throw primaryErr;
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
const fallbackSignal = init.signal
|
|
174
|
+
? AbortSignal.any([init.signal, AbortSignal.timeout(10000)])
|
|
175
|
+
: AbortSignal.timeout(10000);
|
|
176
|
+
const fallbackResponse = await fetch(`${otherUrl}${path}`, {
|
|
177
|
+
...init,
|
|
178
|
+
signal: fallbackSignal,
|
|
179
|
+
});
|
|
180
|
+
this.state!.activeUrl = otherUrl;
|
|
181
|
+
return fallbackResponse;
|
|
182
|
+
} catch {
|
|
183
|
+
throw primaryErr;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
127
188
|
private headers(): Record<string, string> {
|
|
128
189
|
return {
|
|
129
190
|
'Content-Type': 'application/json',
|
package/src/conduit/index.ts
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
* Conduit — High-level agent messaging for the CLEO ecosystem.
|
|
3
3
|
*
|
|
4
4
|
* Exports the ConduitClient (high-level messaging), HttpTransport
|
|
5
|
-
* (HTTP polling to cloud),
|
|
5
|
+
* (HTTP polling to cloud), LocalTransport (offline SQLite), and
|
|
6
|
+
* createConduit factory.
|
|
6
7
|
*
|
|
7
8
|
* @module conduit
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
export { ConduitClient } from './conduit-client.js';
|
|
11
|
-
export { createConduit } from './factory.js';
|
|
12
|
+
export { createConduit, resolveTransport } from './factory.js';
|
|
12
13
|
export { HttpTransport } from './http-transport.js';
|
|
14
|
+
export { LocalTransport } from './local-transport.js';
|
|
15
|
+
export { SseTransport } from './sse-transport.js';
|