@cleocode/core 2026.3.64 → 2026.3.66
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/agents/retry.d.ts.map +1 -1
- package/dist/cleo.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +128 -116
- package/dist/index.js.map +4 -4
- package/dist/tasks/complete.d.ts.map +1 -1
- package/dist/tasks/enforcement.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/agents/retry.ts +18 -46
- package/src/cleo.ts +2 -2
- package/src/config.ts +13 -0
- package/src/index.ts +4 -1
- package/src/tasks/add.ts +5 -5
- package/src/tasks/complete.ts +14 -48
- package/src/tasks/enforcement.ts +12 -24
- package/dist/adapters/adapter-registry.js +0 -64
- package/dist/adapters/adapter-registry.js.map +0 -1
- package/dist/adapters/discovery.js +0 -83
- package/dist/adapters/discovery.js.map +0 -1
- package/dist/adapters/index.js +0 -9
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/manager.js +0 -260
- package/dist/adapters/manager.js.map +0 -1
- package/dist/admin/export-tasks.js +0 -171
- package/dist/admin/export-tasks.js.map +0 -1
- package/dist/admin/export.js +0 -103
- package/dist/admin/export.js.map +0 -1
- package/dist/admin/help.js +0 -106
- package/dist/admin/help.js.map +0 -1
- package/dist/admin/import-tasks.js +0 -182
- package/dist/admin/import-tasks.js.map +0 -1
- package/dist/admin/import.js +0 -129
- package/dist/admin/import.js.map +0 -1
- package/dist/admin/index.js +0 -13
- package/dist/admin/index.js.map +0 -1
- package/dist/adrs/find.js +0 -134
- package/dist/adrs/find.js.map +0 -1
- package/dist/adrs/index.js +0 -15
- package/dist/adrs/index.js.map +0 -1
- package/dist/adrs/link-pipeline.js +0 -160
- package/dist/adrs/link-pipeline.js.map +0 -1
- package/dist/adrs/list.js +0 -43
- package/dist/adrs/list.js.map +0 -1
- package/dist/adrs/parse.js +0 -51
- package/dist/adrs/parse.js.map +0 -1
- package/dist/adrs/show.js +0 -22
- package/dist/adrs/show.js.map +0 -1
- package/dist/adrs/sync.js +0 -188
- package/dist/adrs/sync.js.map +0 -1
- package/dist/adrs/types.js +0 -9
- package/dist/adrs/types.js.map +0 -1
- package/dist/adrs/validate.js +0 -57
- package/dist/adrs/validate.js.map +0 -1
- package/dist/agents/agent-registry.js +0 -288
- package/dist/agents/agent-registry.js.map +0 -1
- package/dist/agents/agent-schema.js +0 -85
- package/dist/agents/agent-schema.js.map +0 -1
- package/dist/agents/capacity.js +0 -116
- package/dist/agents/capacity.js.map +0 -1
- package/dist/agents/execution-learning.js +0 -474
- package/dist/agents/execution-learning.js.map +0 -1
- package/dist/agents/health-monitor.js +0 -217
- package/dist/agents/health-monitor.js.map +0 -1
- package/dist/agents/index.js +0 -29
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/registry.js +0 -314
- package/dist/agents/registry.js.map +0 -1
- package/dist/agents/retry.js +0 -229
- package/dist/agents/retry.js.map +0 -1
- package/dist/audit-prune.js +0 -94
- package/dist/audit-prune.js.map +0 -1
- package/dist/audit.js +0 -68
- package/dist/audit.js.map +0 -1
- package/dist/backfill/index.js +0 -229
- package/dist/backfill/index.js.map +0 -1
- package/dist/bootstrap.js +0 -367
- package/dist/bootstrap.js.map +0 -1
- package/dist/caamp/adapter.js +0 -434
- package/dist/caamp/adapter.js.map +0 -1
- package/dist/caamp/capability-check.js +0 -38
- package/dist/caamp/capability-check.js.map +0 -1
- package/dist/caamp/index.js +0 -23
- package/dist/caamp/index.js.map +0 -1
- package/dist/caamp-init.js +0 -16
- package/dist/caamp-init.js.map +0 -1
- package/dist/cleo.js +0 -302
- package/dist/cleo.js.map +0 -1
- package/dist/codebase-map/analyzers/architecture.js +0 -130
- package/dist/codebase-map/analyzers/architecture.js.map +0 -1
- package/dist/codebase-map/analyzers/concerns.js +0 -122
- package/dist/codebase-map/analyzers/concerns.js.map +0 -1
- package/dist/codebase-map/analyzers/conventions.js +0 -149
- package/dist/codebase-map/analyzers/conventions.js.map +0 -1
- package/dist/codebase-map/analyzers/integrations.js +0 -108
- package/dist/codebase-map/analyzers/integrations.js.map +0 -1
- package/dist/codebase-map/analyzers/stack.js +0 -117
- package/dist/codebase-map/analyzers/stack.js.map +0 -1
- package/dist/codebase-map/analyzers/structure.js +0 -137
- package/dist/codebase-map/analyzers/structure.js.map +0 -1
- package/dist/codebase-map/analyzers/testing.js +0 -118
- package/dist/codebase-map/analyzers/testing.js.map +0 -1
- package/dist/codebase-map/index.js +0 -57
- package/dist/codebase-map/index.js.map +0 -1
- package/dist/codebase-map/store.js +0 -122
- package/dist/codebase-map/store.js.map +0 -1
- package/dist/codebase-map/summary.js +0 -152
- package/dist/codebase-map/summary.js.map +0 -1
- package/dist/compliance/index.js +0 -288
- package/dist/compliance/index.js.map +0 -1
- package/dist/compliance/protocol-enforcement.js +0 -332
- package/dist/compliance/protocol-enforcement.js.map +0 -1
- package/dist/compliance/protocol-rules.js +0 -786
- package/dist/compliance/protocol-rules.js.map +0 -1
- package/dist/compliance/protocol-types.js +0 -80
- package/dist/compliance/protocol-types.js.map +0 -1
- package/dist/compliance/store.js +0 -53
- package/dist/compliance/store.js.map +0 -1
- package/dist/config/build-config.js +0 -29
- package/dist/config/build-config.js.map +0 -1
- package/dist/config.js +0 -370
- package/dist/config.js.map +0 -1
- package/dist/constants.js +0 -18
- package/dist/constants.js.map +0 -1
- package/dist/context/index.js +0 -137
- package/dist/context/index.js.map +0 -1
- package/dist/engine-result.js +0 -12
- package/dist/engine-result.js.map +0 -1
- package/dist/error-catalog.js +0 -404
- package/dist/error-catalog.js.map +0 -1
- package/dist/error-registry.js +0 -393
- package/dist/error-registry.js.map +0 -1
- package/dist/errors.js +0 -167
- package/dist/errors.js.map +0 -1
- package/dist/hooks/handlers/error-hooks.js +0 -43
- package/dist/hooks/handlers/error-hooks.js.map +0 -1
- package/dist/hooks/handlers/file-hooks.js +0 -80
- package/dist/hooks/handlers/file-hooks.js.map +0 -1
- package/dist/hooks/handlers/index.js +0 -19
- package/dist/hooks/handlers/index.js.map +0 -1
- package/dist/hooks/handlers/mcp-hooks.js +0 -80
- package/dist/hooks/handlers/mcp-hooks.js.map +0 -1
- package/dist/hooks/handlers/session-hooks.js +0 -73
- package/dist/hooks/handlers/session-hooks.js.map +0 -1
- package/dist/hooks/handlers/task-hooks.js +0 -63
- package/dist/hooks/handlers/task-hooks.js.map +0 -1
- package/dist/hooks/index.js +0 -13
- package/dist/hooks/index.js.map +0 -1
- package/dist/hooks/payload-schemas.js +0 -163
- package/dist/hooks/payload-schemas.js.map +0 -1
- package/dist/hooks/provider-hooks.js +0 -34
- package/dist/hooks/provider-hooks.js.map +0 -1
- package/dist/hooks/registry.js +0 -176
- package/dist/hooks/registry.js.map +0 -1
- package/dist/hooks/types.js +0 -62
- package/dist/hooks/types.js.map +0 -1
- package/dist/hooks.js +0 -136
- package/dist/hooks.js.map +0 -1
- package/dist/init.js +0 -711
- package/dist/init.js.map +0 -1
- package/dist/inject/index.js +0 -82
- package/dist/inject/index.js.map +0 -1
- package/dist/injection.js +0 -343
- package/dist/injection.js.map +0 -1
- package/dist/intelligence/adaptive-validation.js +0 -497
- package/dist/intelligence/adaptive-validation.js.map +0 -1
- package/dist/intelligence/impact.js +0 -675
- package/dist/intelligence/impact.js.map +0 -1
- package/dist/intelligence/index.js +0 -22
- package/dist/intelligence/index.js.map +0 -1
- package/dist/intelligence/patterns.js +0 -492
- package/dist/intelligence/patterns.js.map +0 -1
- package/dist/intelligence/prediction.js +0 -499
- package/dist/intelligence/prediction.js.map +0 -1
- package/dist/intelligence/types.js +0 -13
- package/dist/intelligence/types.js.map +0 -1
- package/dist/internal.js +0 -269
- package/dist/internal.js.map +0 -1
- package/dist/issue/create.js +0 -121
- package/dist/issue/create.js.map +0 -1
- package/dist/issue/diagnostics.js +0 -59
- package/dist/issue/diagnostics.js.map +0 -1
- package/dist/issue/index.js +0 -10
- package/dist/issue/index.js.map +0 -1
- package/dist/issue/template-parser.js +0 -267
- package/dist/issue/template-parser.js.map +0 -1
- package/dist/json-schema-validator.js +0 -76
- package/dist/json-schema-validator.js.map +0 -1
- package/dist/lib/index.js +0 -10
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/retry.js +0 -152
- package/dist/lib/retry.js.map +0 -1
- package/dist/lifecycle/chain-composition.js +0 -152
- package/dist/lifecycle/chain-composition.js.map +0 -1
- package/dist/lifecycle/chain-store.js +0 -246
- package/dist/lifecycle/chain-store.js.map +0 -1
- package/dist/lifecycle/consolidate-rcasd.js +0 -352
- package/dist/lifecycle/consolidate-rcasd.js.map +0 -1
- package/dist/lifecycle/default-chain.js +0 -167
- package/dist/lifecycle/default-chain.js.map +0 -1
- package/dist/lifecycle/evidence.js +0 -180
- package/dist/lifecycle/evidence.js.map +0 -1
- package/dist/lifecycle/frontmatter.js +0 -363
- package/dist/lifecycle/frontmatter.js.map +0 -1
- package/dist/lifecycle/index.js +0 -753
- package/dist/lifecycle/index.js.map +0 -1
- package/dist/lifecycle/pipeline.js +0 -656
- package/dist/lifecycle/pipeline.js.map +0 -1
- package/dist/lifecycle/rcasd-index.js +0 -326
- package/dist/lifecycle/rcasd-index.js.map +0 -1
- package/dist/lifecycle/rcasd-paths.js +0 -220
- package/dist/lifecycle/rcasd-paths.js.map +0 -1
- package/dist/lifecycle/resume.js +0 -864
- package/dist/lifecycle/resume.js.map +0 -1
- package/dist/lifecycle/stage-artifacts.js +0 -94
- package/dist/lifecycle/stage-artifacts.js.map +0 -1
- package/dist/lifecycle/stages.js +0 -534
- package/dist/lifecycle/stages.js.map +0 -1
- package/dist/lifecycle/state-machine.js +0 -516
- package/dist/lifecycle/state-machine.js.map +0 -1
- package/dist/lifecycle/tessera-engine.js +0 -249
- package/dist/lifecycle/tessera-engine.js.map +0 -1
- package/dist/logger.js +0 -140
- package/dist/logger.js.map +0 -1
- package/dist/mcp/index.js +0 -146
- package/dist/mcp/index.js.map +0 -1
- package/dist/memory/auto-extract.js +0 -143
- package/dist/memory/auto-extract.js.map +0 -1
- package/dist/memory/brain-embedding.js +0 -49
- package/dist/memory/brain-embedding.js.map +0 -1
- package/dist/memory/brain-lifecycle.js +0 -298
- package/dist/memory/brain-lifecycle.js.map +0 -1
- package/dist/memory/brain-links.js +0 -148
- package/dist/memory/brain-links.js.map +0 -1
- package/dist/memory/brain-migration.js +0 -149
- package/dist/memory/brain-migration.js.map +0 -1
- package/dist/memory/brain-reasoning.js +0 -215
- package/dist/memory/brain-reasoning.js.map +0 -1
- package/dist/memory/brain-retrieval.js +0 -474
- package/dist/memory/brain-retrieval.js.map +0 -1
- package/dist/memory/brain-row-types.js +0 -10
- package/dist/memory/brain-row-types.js.map +0 -1
- package/dist/memory/brain-search.js +0 -519
- package/dist/memory/brain-search.js.map +0 -1
- package/dist/memory/brain-similarity.js +0 -145
- package/dist/memory/brain-similarity.js.map +0 -1
- package/dist/memory/claude-mem-migration.js +0 -277
- package/dist/memory/claude-mem-migration.js.map +0 -1
- package/dist/memory/decisions.js +0 -148
- package/dist/memory/decisions.js.map +0 -1
- package/dist/memory/engine-compat.js +0 -1030
- package/dist/memory/engine-compat.js.map +0 -1
- package/dist/memory/index.js +0 -773
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/learnings.js +0 -121
- package/dist/memory/learnings.js.map +0 -1
- package/dist/memory/memory-bridge.js +0 -289
- package/dist/memory/memory-bridge.js.map +0 -1
- package/dist/memory/patterns.js +0 -122
- package/dist/memory/patterns.js.map +0 -1
- package/dist/memory/pipeline-manifest-sqlite.js +0 -975
- package/dist/memory/pipeline-manifest-sqlite.js.map +0 -1
- package/dist/memory/session-memory.js +0 -226
- package/dist/memory/session-memory.js.map +0 -1
- package/dist/metrics/ab-test.js +0 -260
- package/dist/metrics/ab-test.js.map +0 -1
- package/dist/metrics/aggregation.js +0 -363
- package/dist/metrics/aggregation.js.map +0 -1
- package/dist/metrics/common.js +0 -64
- package/dist/metrics/common.js.map +0 -1
- package/dist/metrics/enums.js +0 -78
- package/dist/metrics/enums.js.map +0 -1
- package/dist/metrics/index.js +0 -19
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/model-provider-registry.js +0 -88
- package/dist/metrics/model-provider-registry.js.map +0 -1
- package/dist/metrics/otel-integration.js +0 -263
- package/dist/metrics/otel-integration.js.map +0 -1
- package/dist/metrics/provider-detection.js +0 -103
- package/dist/metrics/provider-detection.js.map +0 -1
- package/dist/metrics/token-estimation.js +0 -253
- package/dist/metrics/token-estimation.js.map +0 -1
- package/dist/metrics/token-service.js +0 -450
- package/dist/metrics/token-service.js.map +0 -1
- package/dist/migration/agent-outputs.js +0 -316
- package/dist/migration/agent-outputs.js.map +0 -1
- package/dist/migration/checksum.js +0 -92
- package/dist/migration/checksum.js.map +0 -1
- package/dist/migration/index.js +0 -282
- package/dist/migration/index.js.map +0 -1
- package/dist/migration/logger.js +0 -360
- package/dist/migration/logger.js.map +0 -1
- package/dist/migration/preflight.js +0 -9
- package/dist/migration/preflight.js.map +0 -1
- package/dist/migration/state.js +0 -421
- package/dist/migration/state.js.map +0 -1
- package/dist/migration/validate.js +0 -241
- package/dist/migration/validate.js.map +0 -1
- package/dist/nexus/deps.js +0 -375
- package/dist/nexus/deps.js.map +0 -1
- package/dist/nexus/discover.js +0 -288
- package/dist/nexus/discover.js.map +0 -1
- package/dist/nexus/hash.js +0 -10
- package/dist/nexus/hash.js.map +0 -1
- package/dist/nexus/index.js +0 -38
- package/dist/nexus/index.js.map +0 -1
- package/dist/nexus/migrate-json-to-sqlite.js +0 -115
- package/dist/nexus/migrate-json-to-sqlite.js.map +0 -1
- package/dist/nexus/permissions.js +0 -105
- package/dist/nexus/permissions.js.map +0 -1
- package/dist/nexus/query.js +0 -175
- package/dist/nexus/query.js.map +0 -1
- package/dist/nexus/registry.js +0 -584
- package/dist/nexus/registry.js.map +0 -1
- package/dist/nexus/sharing/index.js +0 -288
- package/dist/nexus/sharing/index.js.map +0 -1
- package/dist/nexus/transfer-types.js +0 -8
- package/dist/nexus/transfer-types.js.map +0 -1
- package/dist/nexus/transfer.js +0 -263
- package/dist/nexus/transfer.js.map +0 -1
- package/dist/observability/index.js +0 -103
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/log-filter.js +0 -63
- package/dist/observability/log-filter.js.map +0 -1
- package/dist/observability/log-parser.js +0 -99
- package/dist/observability/log-parser.js.map +0 -1
- package/dist/observability/log-reader.js +0 -139
- package/dist/observability/log-reader.js.map +0 -1
- package/dist/observability/types.js +0 -19
- package/dist/observability/types.js.map +0 -1
- package/dist/orchestration/analyze.js +0 -107
- package/dist/orchestration/analyze.js.map +0 -1
- package/dist/orchestration/bootstrap.js +0 -132
- package/dist/orchestration/bootstrap.js.map +0 -1
- package/dist/orchestration/context.js +0 -56
- package/dist/orchestration/context.js.map +0 -1
- package/dist/orchestration/critical-path.js +0 -100
- package/dist/orchestration/critical-path.js.map +0 -1
- package/dist/orchestration/index.js +0 -286
- package/dist/orchestration/index.js.map +0 -1
- package/dist/orchestration/parallel.js +0 -89
- package/dist/orchestration/parallel.js.map +0 -1
- package/dist/orchestration/protocol-validators.js +0 -524
- package/dist/orchestration/protocol-validators.js.map +0 -1
- package/dist/orchestration/skill-ops.js +0 -98
- package/dist/orchestration/skill-ops.js.map +0 -1
- package/dist/orchestration/status.js +0 -107
- package/dist/orchestration/status.js.map +0 -1
- package/dist/orchestration/unblock.js +0 -103
- package/dist/orchestration/unblock.js.map +0 -1
- package/dist/orchestration/validate-spawn.js +0 -67
- package/dist/orchestration/validate-spawn.js.map +0 -1
- package/dist/orchestration/waves.js +0 -86
- package/dist/orchestration/waves.js.map +0 -1
- package/dist/otel/index.js +0 -163
- package/dist/otel/index.js.map +0 -1
- package/dist/output.js +0 -132
- package/dist/output.js.map +0 -1
- package/dist/pagination.js +0 -61
- package/dist/pagination.js.map +0 -1
- package/dist/paths.js +0 -337
- package/dist/paths.js.map +0 -1
- package/dist/phases/deps.js +0 -372
- package/dist/phases/deps.js.map +0 -1
- package/dist/phases/index.js +0 -349
- package/dist/phases/index.js.map +0 -1
- package/dist/pipeline/index.js +0 -10
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/phase.js +0 -45
- package/dist/pipeline/phase.js.map +0 -1
- package/dist/platform.js +0 -211
- package/dist/platform.js.map +0 -1
- package/dist/project-info.js +0 -84
- package/dist/project-info.js.map +0 -1
- package/dist/reconciliation/index.js +0 -10
- package/dist/reconciliation/index.js.map +0 -1
- package/dist/reconciliation/link-store.js +0 -129
- package/dist/reconciliation/link-store.js.map +0 -1
- package/dist/reconciliation/reconciliation-engine.js +0 -298
- package/dist/reconciliation/reconciliation-engine.js.map +0 -1
- package/dist/release/artifacts.js +0 -427
- package/dist/release/artifacts.js.map +0 -1
- package/dist/release/changelog-writer.js +0 -151
- package/dist/release/changelog-writer.js.map +0 -1
- package/dist/release/channel.js +0 -144
- package/dist/release/channel.js.map +0 -1
- package/dist/release/ci.js +0 -166
- package/dist/release/ci.js.map +0 -1
- package/dist/release/github-pr.js +0 -225
- package/dist/release/github-pr.js.map +0 -1
- package/dist/release/guards.js +0 -116
- package/dist/release/guards.js.map +0 -1
- package/dist/release/index.js +0 -22
- package/dist/release/index.js.map +0 -1
- package/dist/release/release-config.js +0 -158
- package/dist/release/release-config.js.map +0 -1
- package/dist/release/release-manifest.js +0 -1019
- package/dist/release/release-manifest.js.map +0 -1
- package/dist/release/version-bump.js +0 -255
- package/dist/release/version-bump.js.map +0 -1
- package/dist/remote/index.js +0 -257
- package/dist/remote/index.js.map +0 -1
- package/dist/repair.js +0 -130
- package/dist/repair.js.map +0 -1
- package/dist/research/index.js +0 -2
- package/dist/research/index.js.map +0 -1
- package/dist/roadmap/index.js +0 -59
- package/dist/roadmap/index.js.map +0 -1
- package/dist/routing/capability-matrix.js +0 -1557
- package/dist/routing/capability-matrix.js.map +0 -1
- package/dist/routing/index.js +0 -9
- package/dist/routing/index.js.map +0 -1
- package/dist/scaffold.js +0 -1178
- package/dist/scaffold.js.map +0 -1
- package/dist/schema-management.js +0 -295
- package/dist/schema-management.js.map +0 -1
- package/dist/security/index.js +0 -9
- package/dist/security/index.js.map +0 -1
- package/dist/security/input-sanitization.js +0 -321
- package/dist/security/input-sanitization.js.map +0 -1
- package/dist/sequence/index.js +0 -295
- package/dist/sequence/index.js.map +0 -1
- package/dist/sessions/assumptions.js +0 -54
- package/dist/sessions/assumptions.js.map +0 -1
- package/dist/sessions/briefing.js +0 -377
- package/dist/sessions/briefing.js.map +0 -1
- package/dist/sessions/context-alert.js +0 -222
- package/dist/sessions/context-alert.js.map +0 -1
- package/dist/sessions/context-inject.js +0 -61
- package/dist/sessions/context-inject.js.map +0 -1
- package/dist/sessions/context-monitor.js +0 -98
- package/dist/sessions/context-monitor.js.map +0 -1
- package/dist/sessions/decisions.js +0 -65
- package/dist/sessions/decisions.js.map +0 -1
- package/dist/sessions/find.js +0 -63
- package/dist/sessions/find.js.map +0 -1
- package/dist/sessions/handoff.js +0 -328
- package/dist/sessions/handoff.js.map +0 -1
- package/dist/sessions/hitl-warnings.js +0 -254
- package/dist/sessions/hitl-warnings.js.map +0 -1
- package/dist/sessions/index.js +0 -318
- package/dist/sessions/index.js.map +0 -1
- package/dist/sessions/session-archive.js +0 -40
- package/dist/sessions/session-archive.js.map +0 -1
- package/dist/sessions/session-cleanup.js +0 -59
- package/dist/sessions/session-cleanup.js.map +0 -1
- package/dist/sessions/session-drift.js +0 -134
- package/dist/sessions/session-drift.js.map +0 -1
- package/dist/sessions/session-enforcement.js +0 -144
- package/dist/sessions/session-enforcement.js.map +0 -1
- package/dist/sessions/session-grade.js +0 -253
- package/dist/sessions/session-grade.js.map +0 -1
- package/dist/sessions/session-history.js +0 -42
- package/dist/sessions/session-history.js.map +0 -1
- package/dist/sessions/session-id.js +0 -81
- package/dist/sessions/session-id.js.map +0 -1
- package/dist/sessions/session-memory-bridge.js +0 -52
- package/dist/sessions/session-memory-bridge.js.map +0 -1
- package/dist/sessions/session-show.js +0 -24
- package/dist/sessions/session-show.js.map +0 -1
- package/dist/sessions/session-stats.js +0 -69
- package/dist/sessions/session-stats.js.map +0 -1
- package/dist/sessions/session-suspend.js +0 -39
- package/dist/sessions/session-suspend.js.map +0 -1
- package/dist/sessions/session-switch.js +0 -51
- package/dist/sessions/session-switch.js.map +0 -1
- package/dist/sessions/session-view.js +0 -76
- package/dist/sessions/session-view.js.map +0 -1
- package/dist/sessions/statusline-setup.js +0 -85
- package/dist/sessions/statusline-setup.js.map +0 -1
- package/dist/sessions/types.js +0 -8
- package/dist/sessions/types.js.map +0 -1
- package/dist/signaldock/claude-code-transport.js +0 -107
- package/dist/signaldock/claude-code-transport.js.map +0 -1
- package/dist/signaldock/factory.js +0 -25
- package/dist/signaldock/factory.js.map +0 -1
- package/dist/signaldock/index.js +0 -9
- package/dist/signaldock/index.js.map +0 -1
- package/dist/signaldock/signaldock-transport.js +0 -122
- package/dist/signaldock/signaldock-transport.js.map +0 -1
- package/dist/signaldock/transport.js +0 -11
- package/dist/signaldock/transport.js.map +0 -1
- package/dist/signaldock/types.js +0 -11
- package/dist/signaldock/types.js.map +0 -1
- package/dist/skills/agents/config.js +0 -94
- package/dist/skills/agents/config.js.map +0 -1
- package/dist/skills/agents/install.js +0 -116
- package/dist/skills/agents/install.js.map +0 -1
- package/dist/skills/agents/registry.js +0 -161
- package/dist/skills/agents/registry.js.map +0 -1
- package/dist/skills/discovery.js +0 -333
- package/dist/skills/discovery.js.map +0 -1
- package/dist/skills/dispatch.js +0 -347
- package/dist/skills/dispatch.js.map +0 -1
- package/dist/skills/dynamic-skill-generator.js +0 -100
- package/dist/skills/dynamic-skill-generator.js.map +0 -1
- package/dist/skills/index.js +0 -44
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/injection/subagent.js +0 -195
- package/dist/skills/injection/subagent.js.map +0 -1
- package/dist/skills/injection/token.js +0 -260
- package/dist/skills/injection/token.js.map +0 -1
- package/dist/skills/install.js +0 -40
- package/dist/skills/install.js.map +0 -1
- package/dist/skills/manifests/contribution.js +0 -175
- package/dist/skills/manifests/contribution.js.map +0 -1
- package/dist/skills/manifests/research.js +0 -281
- package/dist/skills/manifests/research.js.map +0 -1
- package/dist/skills/manifests/resolver.js +0 -146
- package/dist/skills/manifests/resolver.js.map +0 -1
- package/dist/skills/marketplace.js +0 -90
- package/dist/skills/marketplace.js.map +0 -1
- package/dist/skills/orchestrator/spawn.js +0 -178
- package/dist/skills/orchestrator/spawn.js.map +0 -1
- package/dist/skills/orchestrator/startup.js +0 -451
- package/dist/skills/orchestrator/startup.js.map +0 -1
- package/dist/skills/orchestrator/validator.js +0 -301
- package/dist/skills/orchestrator/validator.js.map +0 -1
- package/dist/skills/precedence-integration.js +0 -73
- package/dist/skills/precedence-integration.js.map +0 -1
- package/dist/skills/precedence-types.js +0 -16
- package/dist/skills/precedence-types.js.map +0 -1
- package/dist/skills/routing-table.js +0 -63
- package/dist/skills/routing-table.js.map +0 -1
- package/dist/skills/skill-paths.js +0 -220
- package/dist/skills/skill-paths.js.map +0 -1
- package/dist/skills/test-utility.js +0 -55
- package/dist/skills/test-utility.js.map +0 -1
- package/dist/skills/types.js +0 -118
- package/dist/skills/types.js.map +0 -1
- package/dist/skills/validation.js +0 -183
- package/dist/skills/validation.js.map +0 -1
- package/dist/skills/version.js +0 -57
- package/dist/skills/version.js.map +0 -1
- package/dist/snapshot/index.js +0 -188
- package/dist/snapshot/index.js.map +0 -1
- package/dist/spawn/adapter-registry.js +0 -246
- package/dist/spawn/adapter-registry.js.map +0 -1
- package/dist/spawn/index.js +0 -10
- package/dist/spawn/index.js.map +0 -1
- package/dist/stats/index.js +0 -343
- package/dist/stats/index.js.map +0 -1
- package/dist/stats/workflow-telemetry.js +0 -400
- package/dist/stats/workflow-telemetry.js.map +0 -1
- package/dist/sticky/archive.js +0 -47
- package/dist/sticky/archive.js.map +0 -1
- package/dist/sticky/convert.js +0 -235
- package/dist/sticky/convert.js.map +0 -1
- package/dist/sticky/create.js +0 -48
- package/dist/sticky/create.js.map +0 -1
- package/dist/sticky/id.js +0 -35
- package/dist/sticky/id.js.map +0 -1
- package/dist/sticky/index.js +0 -16
- package/dist/sticky/index.js.map +0 -1
- package/dist/sticky/list.js +0 -44
- package/dist/sticky/list.js.map +0 -1
- package/dist/sticky/purge.js +0 -45
- package/dist/sticky/purge.js.map +0 -1
- package/dist/sticky/show.js +0 -42
- package/dist/sticky/show.js.map +0 -1
- package/dist/sticky/types.js +0 -10
- package/dist/sticky/types.js.map +0 -1
- package/dist/store/atomic.js +0 -167
- package/dist/store/atomic.js.map +0 -1
- package/dist/store/backup.js +0 -94
- package/dist/store/backup.js.map +0 -1
- package/dist/store/brain-accessor.js +0 -397
- package/dist/store/brain-accessor.js.map +0 -1
- package/dist/store/brain-schema.js +0 -215
- package/dist/store/brain-schema.js.map +0 -1
- package/dist/store/brain-sqlite.js +0 -271
- package/dist/store/brain-sqlite.js.map +0 -1
- package/dist/store/cache.js +0 -168
- package/dist/store/cache.js.map +0 -1
- package/dist/store/chain-schema.js +0 -51
- package/dist/store/chain-schema.js.map +0 -1
- package/dist/store/converters.js +0 -122
- package/dist/store/converters.js.map +0 -1
- package/dist/store/cross-db-cleanup.js +0 -169
- package/dist/store/cross-db-cleanup.js.map +0 -1
- package/dist/store/data-accessor.js +0 -26
- package/dist/store/data-accessor.js.map +0 -1
- package/dist/store/data-safety-central.js +0 -269
- package/dist/store/data-safety-central.js.map +0 -1
- package/dist/store/data-safety.js +0 -274
- package/dist/store/data-safety.js.map +0 -1
- package/dist/store/db-helpers.js +0 -223
- package/dist/store/db-helpers.js.map +0 -1
- package/dist/store/export.js +0 -155
- package/dist/store/export.js.map +0 -1
- package/dist/store/file-utils.js +0 -270
- package/dist/store/file-utils.js.map +0 -1
- package/dist/store/git-checkpoint.js +0 -365
- package/dist/store/git-checkpoint.js.map +0 -1
- package/dist/store/import-logging.js +0 -139
- package/dist/store/import-logging.js.map +0 -1
- package/dist/store/import-remap.js +0 -145
- package/dist/store/import-remap.js.map +0 -1
- package/dist/store/import-sort.js +0 -121
- package/dist/store/import-sort.js.map +0 -1
- package/dist/store/index.js +0 -28
- package/dist/store/index.js.map +0 -1
- package/dist/store/json.js +0 -208
- package/dist/store/json.js.map +0 -1
- package/dist/store/lifecycle-store.js +0 -249
- package/dist/store/lifecycle-store.js.map +0 -1
- package/dist/store/lock.js +0 -70
- package/dist/store/lock.js.map +0 -1
- package/dist/store/migration-sqlite.js +0 -676
- package/dist/store/migration-sqlite.js.map +0 -1
- package/dist/store/nexus-schema.js +0 -62
- package/dist/store/nexus-schema.js.map +0 -1
- package/dist/store/nexus-sqlite.js +0 -217
- package/dist/store/nexus-sqlite.js.map +0 -1
- package/dist/store/nexus-validation-schemas.js +0 -40
- package/dist/store/nexus-validation-schemas.js.map +0 -1
- package/dist/store/parsers.js +0 -37
- package/dist/store/parsers.js.map +0 -1
- package/dist/store/project-detect.js +0 -457
- package/dist/store/project-detect.js.map +0 -1
- package/dist/store/provider.js +0 -101
- package/dist/store/provider.js.map +0 -1
- package/dist/store/safety-data-accessor.js +0 -243
- package/dist/store/safety-data-accessor.js.map +0 -1
- package/dist/store/schema.js +0 -7
- package/dist/store/schema.js.map +0 -1
- package/dist/store/session-store.js +0 -219
- package/dist/store/session-store.js.map +0 -1
- package/dist/store/sqlite-backup.js +0 -105
- package/dist/store/sqlite-backup.js.map +0 -1
- package/dist/store/sqlite-data-accessor.js +0 -734
- package/dist/store/sqlite-data-accessor.js.map +0 -1
- package/dist/store/sqlite.js +0 -554
- package/dist/store/sqlite.js.map +0 -1
- package/dist/store/status-registry.js +0 -8
- package/dist/store/status-registry.js.map +0 -1
- package/dist/store/task-store.js +0 -348
- package/dist/store/task-store.js.map +0 -1
- package/dist/store/tasks-schema.js +0 -604
- package/dist/store/tasks-schema.js.map +0 -1
- package/dist/store/typed-query.js +0 -15
- package/dist/store/typed-query.js.map +0 -1
- package/dist/store/validation-schemas.js +0 -278
- package/dist/store/validation-schemas.js.map +0 -1
- package/dist/system/archive-analytics.js +0 -277
- package/dist/system/archive-analytics.js.map +0 -1
- package/dist/system/archive-stats.js +0 -64
- package/dist/system/archive-stats.js.map +0 -1
- package/dist/system/audit.js +0 -145
- package/dist/system/audit.js.map +0 -1
- package/dist/system/backup.js +0 -141
- package/dist/system/backup.js.map +0 -1
- package/dist/system/cleanup.js +0 -134
- package/dist/system/cleanup.js.map +0 -1
- package/dist/system/health.js +0 -1054
- package/dist/system/health.js.map +0 -1
- package/dist/system/index.js +0 -18
- package/dist/system/index.js.map +0 -1
- package/dist/system/inject-generate.js +0 -122
- package/dist/system/inject-generate.js.map +0 -1
- package/dist/system/labels.js +0 -38
- package/dist/system/labels.js.map +0 -1
- package/dist/system/metrics.js +0 -61
- package/dist/system/metrics.js.map +0 -1
- package/dist/system/migrate.js +0 -43
- package/dist/system/migrate.js.map +0 -1
- package/dist/system/platform-paths.js +0 -80
- package/dist/system/platform-paths.js.map +0 -1
- package/dist/system/runtime.js +0 -161
- package/dist/system/runtime.js.map +0 -1
- package/dist/system/safestop.js +0 -99
- package/dist/system/safestop.js.map +0 -1
- package/dist/system/storage-preflight.js +0 -123
- package/dist/system/storage-preflight.js.map +0 -1
- package/dist/task-work/index.js +0 -155
- package/dist/task-work/index.js.map +0 -1
- package/dist/tasks/add.js +0 -656
- package/dist/tasks/add.js.map +0 -1
- package/dist/tasks/analyze.js +0 -85
- package/dist/tasks/analyze.js.map +0 -1
- package/dist/tasks/archive.js +0 -90
- package/dist/tasks/archive.js.map +0 -1
- package/dist/tasks/atomicity.js +0 -83
- package/dist/tasks/atomicity.js.map +0 -1
- package/dist/tasks/cancel-ops.js +0 -83
- package/dist/tasks/cancel-ops.js.map +0 -1
- package/dist/tasks/complete.js +0 -235
- package/dist/tasks/complete.js.map +0 -1
- package/dist/tasks/crossref-extract.js +0 -73
- package/dist/tasks/crossref-extract.js.map +0 -1
- package/dist/tasks/delete-preview.js +0 -192
- package/dist/tasks/delete-preview.js.map +0 -1
- package/dist/tasks/delete.js +0 -120
- package/dist/tasks/delete.js.map +0 -1
- package/dist/tasks/deletion-strategy.js +0 -200
- package/dist/tasks/deletion-strategy.js.map +0 -1
- package/dist/tasks/dependency-check.js +0 -278
- package/dist/tasks/dependency-check.js.map +0 -1
- package/dist/tasks/deps-ready.js +0 -32
- package/dist/tasks/deps-ready.js.map +0 -1
- package/dist/tasks/enforcement.js +0 -89
- package/dist/tasks/enforcement.js.map +0 -1
- package/dist/tasks/epic-enforcement.js +0 -294
- package/dist/tasks/epic-enforcement.js.map +0 -1
- package/dist/tasks/find.js +0 -148
- package/dist/tasks/find.js.map +0 -1
- package/dist/tasks/graph-cache.js +0 -127
- package/dist/tasks/graph-cache.js.map +0 -1
- package/dist/tasks/graph-ops.js +0 -171
- package/dist/tasks/graph-ops.js.map +0 -1
- package/dist/tasks/graph-rag.js +0 -328
- package/dist/tasks/graph-rag.js.map +0 -1
- package/dist/tasks/hierarchy-policy.js +0 -149
- package/dist/tasks/hierarchy-policy.js.map +0 -1
- package/dist/tasks/hierarchy.js +0 -185
- package/dist/tasks/hierarchy.js.map +0 -1
- package/dist/tasks/id-generator.js +0 -65
- package/dist/tasks/id-generator.js.map +0 -1
- package/dist/tasks/index.js +0 -14
- package/dist/tasks/index.js.map +0 -1
- package/dist/tasks/labels.js +0 -52
- package/dist/tasks/labels.js.map +0 -1
- package/dist/tasks/list.js +0 -68
- package/dist/tasks/list.js.map +0 -1
- package/dist/tasks/phase-tracking.js +0 -133
- package/dist/tasks/phase-tracking.js.map +0 -1
- package/dist/tasks/pipeline-stage.js +0 -248
- package/dist/tasks/pipeline-stage.js.map +0 -1
- package/dist/tasks/plan.js +0 -268
- package/dist/tasks/plan.js.map +0 -1
- package/dist/tasks/relates.js +0 -89
- package/dist/tasks/relates.js.map +0 -1
- package/dist/tasks/reparent.d.ts +0 -38
- package/dist/tasks/reparent.d.ts.map +0 -1
- package/dist/tasks/show.js +0 -78
- package/dist/tasks/show.js.map +0 -1
- package/dist/tasks/size-weighting.js +0 -86
- package/dist/tasks/size-weighting.js.map +0 -1
- package/dist/tasks/staleness.js +0 -86
- package/dist/tasks/staleness.js.map +0 -1
- package/dist/tasks/task-ops.js +0 -1340
- package/dist/tasks/task-ops.js.map +0 -1
- package/dist/tasks/update.js +0 -271
- package/dist/tasks/update.js.map +0 -1
- package/dist/templates/index.js +0 -10
- package/dist/templates/index.js.map +0 -1
- package/dist/templates/parser.js +0 -254
- package/dist/templates/parser.js.map +0 -1
- package/dist/ui/aliases.js +0 -153
- package/dist/ui/aliases.js.map +0 -1
- package/dist/ui/changelog.js +0 -184
- package/dist/ui/changelog.js.map +0 -1
- package/dist/ui/command-registry.js +0 -168
- package/dist/ui/command-registry.js.map +0 -1
- package/dist/ui/flags.js +0 -94
- package/dist/ui/flags.js.map +0 -1
- package/dist/ui/index.js +0 -24
- package/dist/ui/index.js.map +0 -1
- package/dist/ui/injection-legacy.d.ts +0 -26
- package/dist/ui/injection-legacy.d.ts.map +0 -1
- package/dist/ui/injection-legacy.js +0 -42
- package/dist/ui/injection-legacy.js.map +0 -1
- package/dist/upgrade.js +0 -901
- package/dist/upgrade.js.map +0 -1
- package/dist/validation/chain-validation.js +0 -146
- package/dist/validation/chain-validation.js.map +0 -1
- package/dist/validation/compliance.js +0 -155
- package/dist/validation/compliance.js.map +0 -1
- package/dist/validation/docs-sync.js +0 -212
- package/dist/validation/docs-sync.js.map +0 -1
- package/dist/validation/doctor/checks.js +0 -1069
- package/dist/validation/doctor/checks.js.map +0 -1
- package/dist/validation/doctor/index.js +0 -9
- package/dist/validation/doctor/index.js.map +0 -1
- package/dist/validation/doctor/project-cache.js +0 -160
- package/dist/validation/doctor/project-cache.js.map +0 -1
- package/dist/validation/doctor/utils.js +0 -155
- package/dist/validation/doctor/utils.js.map +0 -1
- package/dist/validation/engine.js +0 -902
- package/dist/validation/engine.js.map +0 -1
- package/dist/validation/gap-check.js +0 -175
- package/dist/validation/gap-check.js.map +0 -1
- package/dist/validation/index.js +0 -40
- package/dist/validation/index.js.map +0 -1
- package/dist/validation/manifest.js +0 -237
- package/dist/validation/manifest.js.map +0 -1
- package/dist/validation/operation-gate-validators.js +0 -724
- package/dist/validation/operation-gate-validators.js.map +0 -1
- package/dist/validation/operation-verification-gates.js +0 -532
- package/dist/validation/operation-verification-gates.js.map +0 -1
- package/dist/validation/param-utils.js +0 -139
- package/dist/validation/param-utils.js.map +0 -1
- package/dist/validation/protocol-common.js +0 -300
- package/dist/validation/protocol-common.js.map +0 -1
- package/dist/validation/protocols/consensus.js +0 -71
- package/dist/validation/protocols/consensus.js.map +0 -1
- package/dist/validation/protocols/contribution.js +0 -59
- package/dist/validation/protocols/contribution.js.map +0 -1
- package/dist/validation/protocols/decomposition.js +0 -59
- package/dist/validation/protocols/decomposition.js.map +0 -1
- package/dist/validation/protocols/implementation.js +0 -59
- package/dist/validation/protocols/implementation.js.map +0 -1
- package/dist/validation/protocols/release-protocol.js +0 -60
- package/dist/validation/protocols/release-protocol.js.map +0 -1
- package/dist/validation/protocols/research.js +0 -77
- package/dist/validation/protocols/research.js.map +0 -1
- package/dist/validation/protocols/specification.js +0 -84
- package/dist/validation/protocols/specification.js.map +0 -1
- package/dist/validation/protocols/testing-protocol.js +0 -70
- package/dist/validation/protocols/testing-protocol.js.map +0 -1
- package/dist/validation/protocols/validation-protocol.js +0 -70
- package/dist/validation/protocols/validation-protocol.js.map +0 -1
- package/dist/validation/schema-integrity.js +0 -170
- package/dist/validation/schema-integrity.js.map +0 -1
- package/dist/validation/schema-validator.js +0 -176
- package/dist/validation/schema-validator.js.map +0 -1
- package/dist/validation/validate-ops.js +0 -937
- package/dist/validation/validate-ops.js.map +0 -1
- package/dist/validation/validation-rules.js +0 -226
- package/dist/validation/validation-rules.js.map +0 -1
- package/dist/validation/verification.js +0 -321
- package/dist/validation/verification.js.map +0 -1
|
@@ -1,288 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent registry with capacity tracking for load balancing.
|
|
3
|
-
*
|
|
4
|
-
* Provides task-count-based capacity queries, specialization lookup,
|
|
5
|
-
* and performance recording on top of the existing `agent_instances` schema.
|
|
6
|
-
*
|
|
7
|
-
* Capacity model: each agent has a maximum of {@link MAX_TASKS_PER_AGENT}
|
|
8
|
-
* concurrent tasks. "Remaining capacity" is that constant minus the number of
|
|
9
|
-
* tasks currently assigned to an active agent instance.
|
|
10
|
-
*
|
|
11
|
-
* Specializations are stored as a `specializations` array inside the agent's
|
|
12
|
-
* `metadata_json` column. Use {@link updateAgentSpecializations} to write them.
|
|
13
|
-
*
|
|
14
|
-
* Performance recording delegates to the existing `recordAgentExecution`
|
|
15
|
-
* function in `execution-learning.ts` and wraps it with a simpler metrics
|
|
16
|
-
* interface suited for load-balancer callers.
|
|
17
|
-
*
|
|
18
|
-
* @module agents/agent-registry
|
|
19
|
-
* @task T041
|
|
20
|
-
* @epic T038
|
|
21
|
-
*/
|
|
22
|
-
import { and, eq, inArray } from 'drizzle-orm';
|
|
23
|
-
import { getDb } from '../store/sqlite.js';
|
|
24
|
-
import { agentInstances } from './agent-schema.js';
|
|
25
|
-
import { recordAgentExecution, } from './execution-learning.js';
|
|
26
|
-
import { listAgentInstances } from './registry.js';
|
|
27
|
-
// ============================================================================
|
|
28
|
-
// Constants
|
|
29
|
-
// ============================================================================
|
|
30
|
-
/**
|
|
31
|
-
* Maximum number of tasks that can be concurrently assigned to one agent.
|
|
32
|
-
* Used as the upper bound for task-count-based capacity calculation.
|
|
33
|
-
*/
|
|
34
|
-
export const MAX_TASKS_PER_AGENT = 5;
|
|
35
|
-
// ============================================================================
|
|
36
|
-
// Capacity queries
|
|
37
|
-
// ============================================================================
|
|
38
|
-
/**
|
|
39
|
-
* Get task-count-based remaining capacity for an agent.
|
|
40
|
-
*
|
|
41
|
-
* Remaining capacity = {@link MAX_TASKS_PER_AGENT} minus the number of tasks
|
|
42
|
-
* currently routed to this agent instance (tracked via the `task_id` column
|
|
43
|
-
* on `agent_instances` — each instance handles one task at a time; child agents
|
|
44
|
-
* spawned by an orchestrator appear as sibling rows referencing the same
|
|
45
|
-
* `parent_agent_id`).
|
|
46
|
-
*
|
|
47
|
-
* For capacity purposes the "active tasks" count is derived from the number of
|
|
48
|
-
* non-terminal sibling rows that share the same `parent_agent_id` as this
|
|
49
|
-
* agent, plus 1 for the agent's own current task when `task_id` is set.
|
|
50
|
-
*
|
|
51
|
-
* @remarks
|
|
52
|
-
* Agents in terminal states (`stopped`, `crashed`) always return 0 remaining
|
|
53
|
-
* capacity because they cannot accept work.
|
|
54
|
-
*
|
|
55
|
-
* @param agentId - Agent instance ID (agt_...) to check
|
|
56
|
-
* @param cwd - Working directory used to resolve tasks.db path
|
|
57
|
-
* @returns Capacity breakdown or null if the agent does not exist
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* ```ts
|
|
61
|
-
* const cap = await getAgentCapacity('agt_20260321120000_ab12cd', '/project');
|
|
62
|
-
* if (cap && cap.available) {
|
|
63
|
-
* console.log(`Agent can take ${cap.remainingCapacity} more tasks`);
|
|
64
|
-
* }
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
export async function getAgentCapacity(agentId, cwd) {
|
|
68
|
-
const db = await getDb(cwd);
|
|
69
|
-
const agent = await db.select().from(agentInstances).where(eq(agentInstances.id, agentId)).get();
|
|
70
|
-
if (!agent)
|
|
71
|
-
return null;
|
|
72
|
-
// Terminal agents have zero capacity
|
|
73
|
-
const isTerminal = agent.status === 'stopped' || agent.status === 'crashed';
|
|
74
|
-
if (isTerminal) {
|
|
75
|
-
return {
|
|
76
|
-
agentId: agent.id,
|
|
77
|
-
agentType: agent.agentType,
|
|
78
|
-
status: agent.status,
|
|
79
|
-
activeTasks: 0,
|
|
80
|
-
remainingCapacity: 0,
|
|
81
|
-
maxCapacity: MAX_TASKS_PER_AGENT,
|
|
82
|
-
available: false,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
// Count active child agents (subtasks delegated by this agent)
|
|
86
|
-
const children = await db
|
|
87
|
-
.select({ id: agentInstances.id })
|
|
88
|
-
.from(agentInstances)
|
|
89
|
-
.where(and(eq(agentInstances.parentAgentId, agentId), inArray(agentInstances.status, ['starting', 'active', 'idle', 'error'])))
|
|
90
|
-
.all();
|
|
91
|
-
// The agent itself counts as 1 active task when it has a task assigned
|
|
92
|
-
const selfTask = agent.taskId != null ? 1 : 0;
|
|
93
|
-
const activeTasks = selfTask + children.length;
|
|
94
|
-
const remainingCapacity = Math.max(0, MAX_TASKS_PER_AGENT - activeTasks);
|
|
95
|
-
return {
|
|
96
|
-
agentId: agent.id,
|
|
97
|
-
agentType: agent.agentType,
|
|
98
|
-
status: agent.status,
|
|
99
|
-
activeTasks,
|
|
100
|
-
remainingCapacity,
|
|
101
|
-
maxCapacity: MAX_TASKS_PER_AGENT,
|
|
102
|
-
available: remainingCapacity > 0,
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* List all non-terminal agents sorted by remaining task capacity (descending).
|
|
107
|
-
*
|
|
108
|
-
* Returns agents with the most available slots first, enabling callers to
|
|
109
|
-
* select the least-loaded agent for new work assignment.
|
|
110
|
-
*
|
|
111
|
-
* @remarks
|
|
112
|
-
* Only agents in `active` or `idle` states are included — `starting` agents
|
|
113
|
-
* are excluded because they may not yet be ready to accept work.
|
|
114
|
-
* Terminal agents (`stopped`, `crashed`) are always omitted.
|
|
115
|
-
*
|
|
116
|
-
* @param agentType - Optional filter to limit results to one agent type
|
|
117
|
-
* @param cwd - Working directory used to resolve tasks.db path
|
|
118
|
-
* @returns Array of capacity entries sorted highest remaining capacity first
|
|
119
|
-
*
|
|
120
|
-
* @example
|
|
121
|
-
* ```ts
|
|
122
|
-
* const agents = await getAgentsByCapacity('executor', '/project');
|
|
123
|
-
* const best = agents[0]; // most available slots
|
|
124
|
-
* if (best && best.available) {
|
|
125
|
-
* await assignTask(best.agentId, taskId);
|
|
126
|
-
* }
|
|
127
|
-
* ```
|
|
128
|
-
*/
|
|
129
|
-
export async function getAgentsByCapacity(agentType, cwd) {
|
|
130
|
-
const filters = agentType
|
|
131
|
-
? { status: ['active', 'idle'], agentType }
|
|
132
|
-
: { status: ['active', 'idle'] };
|
|
133
|
-
const activeAgents = await listAgentInstances(filters, cwd);
|
|
134
|
-
const capacities = await Promise.all(activeAgents.map((agent) => getAgentCapacity(agent.id, cwd)));
|
|
135
|
-
return capacities
|
|
136
|
-
.filter((c) => c !== null)
|
|
137
|
-
.sort((a, b) => b.remainingCapacity - a.remainingCapacity);
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Get the specialization/skills list for an agent.
|
|
141
|
-
*
|
|
142
|
-
* Specializations are stored as a string array under the `specializations`
|
|
143
|
-
* key in the agent's `metadata_json` column. An empty array is returned when
|
|
144
|
-
* the field is absent or the agent is not found.
|
|
145
|
-
*
|
|
146
|
-
* @remarks
|
|
147
|
-
* Write specializations with {@link updateAgentSpecializations} when
|
|
148
|
-
* registering or updating an agent. The metadata column is a free-form JSON
|
|
149
|
-
* blob — specializations are one namespaced key inside it.
|
|
150
|
-
*
|
|
151
|
-
* @param agentId - Agent instance ID (agt_...)
|
|
152
|
-
* @param cwd - Working directory used to resolve tasks.db path
|
|
153
|
-
* @returns Array of specialization strings (empty if none recorded)
|
|
154
|
-
*
|
|
155
|
-
* @example
|
|
156
|
-
* ```ts
|
|
157
|
-
* const skills = await getAgentSpecializations('agt_20260321120000_ab12cd', '/project');
|
|
158
|
-
* // ['typescript', 'testing', 'documentation']
|
|
159
|
-
* if (skills.includes('typescript')) {
|
|
160
|
-
* console.log('Agent can handle TypeScript tasks');
|
|
161
|
-
* }
|
|
162
|
-
* ```
|
|
163
|
-
*/
|
|
164
|
-
export async function getAgentSpecializations(agentId, cwd) {
|
|
165
|
-
const db = await getDb(cwd);
|
|
166
|
-
const agent = await db
|
|
167
|
-
.select({ metadataJson: agentInstances.metadataJson })
|
|
168
|
-
.from(agentInstances)
|
|
169
|
-
.where(eq(agentInstances.id, agentId))
|
|
170
|
-
.get();
|
|
171
|
-
if (!agent)
|
|
172
|
-
return [];
|
|
173
|
-
try {
|
|
174
|
-
const meta = JSON.parse(agent.metadataJson ?? '{}');
|
|
175
|
-
const specs = meta.specializations;
|
|
176
|
-
if (!Array.isArray(specs))
|
|
177
|
-
return [];
|
|
178
|
-
return specs.filter((s) => typeof s === 'string');
|
|
179
|
-
}
|
|
180
|
-
catch {
|
|
181
|
-
return [];
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Update the specializations list stored in an agent's metadata.
|
|
186
|
-
*
|
|
187
|
-
* Merges the new list into the existing `metadata_json` object, preserving
|
|
188
|
-
* any other keys already present. Returns the updated specializations list,
|
|
189
|
-
* or null if the agent was not found.
|
|
190
|
-
*
|
|
191
|
-
* @remarks
|
|
192
|
-
* This is a write-side companion to {@link getAgentSpecializations}. Call it
|
|
193
|
-
* after {@link registerAgent} to record the skills an agent was spawned with.
|
|
194
|
-
*
|
|
195
|
-
* @param agentId - Agent instance ID (agt_...)
|
|
196
|
-
* @param specializations - New specializations list (replaces existing)
|
|
197
|
-
* @param cwd - Working directory used to resolve tasks.db path
|
|
198
|
-
* @returns Updated specializations list, or null if agent not found
|
|
199
|
-
*
|
|
200
|
-
* @example
|
|
201
|
-
* ```ts
|
|
202
|
-
* await updateAgentSpecializations(
|
|
203
|
-
* 'agt_20260321120000_ab12cd',
|
|
204
|
-
* ['typescript', 'testing'],
|
|
205
|
-
* '/project',
|
|
206
|
-
* );
|
|
207
|
-
* ```
|
|
208
|
-
*/
|
|
209
|
-
export async function updateAgentSpecializations(agentId, specializations, cwd) {
|
|
210
|
-
const db = await getDb(cwd);
|
|
211
|
-
const agent = await db
|
|
212
|
-
.select({ metadataJson: agentInstances.metadataJson })
|
|
213
|
-
.from(agentInstances)
|
|
214
|
-
.where(eq(agentInstances.id, agentId))
|
|
215
|
-
.get();
|
|
216
|
-
if (!agent)
|
|
217
|
-
return null;
|
|
218
|
-
let existing = {};
|
|
219
|
-
try {
|
|
220
|
-
existing = JSON.parse(agent.metadataJson ?? '{}');
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
// Proceed with empty object if metadata is unparseable
|
|
224
|
-
}
|
|
225
|
-
const updated = { ...existing, specializations };
|
|
226
|
-
await db
|
|
227
|
-
.update(agentInstances)
|
|
228
|
-
.set({ metadataJson: JSON.stringify(updated) })
|
|
229
|
-
.where(eq(agentInstances.id, agentId));
|
|
230
|
-
return specializations;
|
|
231
|
-
}
|
|
232
|
-
// ============================================================================
|
|
233
|
-
// Performance recording
|
|
234
|
-
// ============================================================================
|
|
235
|
-
/**
|
|
236
|
-
* Record agent performance metrics to the BRAIN execution history.
|
|
237
|
-
*
|
|
238
|
-
* Translates a simplified {@link AgentPerformanceMetrics} object into the
|
|
239
|
-
* {@link AgentExecutionEvent} format expected by `execution-learning.ts` and
|
|
240
|
-
* delegates to {@link recordAgentExecution}. The agent type is resolved from
|
|
241
|
-
* the `agent_instances` table so callers only need to supply the agent ID.
|
|
242
|
-
*
|
|
243
|
-
* @remarks
|
|
244
|
-
* Recording is best-effort — if brain.db is unavailable the error is swallowed
|
|
245
|
-
* and null is returned, consistent with the rest of the execution-learning
|
|
246
|
-
* module. Agent lifecycle code is never disrupted by a brain write failure.
|
|
247
|
-
*
|
|
248
|
-
* @param agentId - Agent instance ID whose performance is being recorded
|
|
249
|
-
* @param metrics - Performance metrics for the task that was processed
|
|
250
|
-
* @param cwd - Working directory used to resolve tasks.db and brain.db paths
|
|
251
|
-
* @returns The brain decision ID if recorded, null on failure or not found
|
|
252
|
-
*
|
|
253
|
-
* @example
|
|
254
|
-
* ```ts
|
|
255
|
-
* const decisionId = await recordAgentPerformance('agt_20260321120000_ab12cd', {
|
|
256
|
-
* taskId: 'T041',
|
|
257
|
-
* taskType: 'task',
|
|
258
|
-
* outcome: 'success',
|
|
259
|
-
* durationMs: 4200,
|
|
260
|
-
* sessionId: 'ses_20260321_abc',
|
|
261
|
-
* }, '/project');
|
|
262
|
-
* ```
|
|
263
|
-
*/
|
|
264
|
-
export async function recordAgentPerformance(agentId, metrics, cwd) {
|
|
265
|
-
const db = await getDb(cwd);
|
|
266
|
-
const agent = await db
|
|
267
|
-
.select({ agentType: agentInstances.agentType, sessionId: agentInstances.sessionId })
|
|
268
|
-
.from(agentInstances)
|
|
269
|
-
.where(eq(agentInstances.id, agentId))
|
|
270
|
-
.get();
|
|
271
|
-
if (!agent)
|
|
272
|
-
return null;
|
|
273
|
-
const event = {
|
|
274
|
-
agentId,
|
|
275
|
-
agentType: agent.agentType,
|
|
276
|
-
taskId: metrics.taskId,
|
|
277
|
-
taskType: metrics.taskType,
|
|
278
|
-
outcome: metrics.outcome,
|
|
279
|
-
taskLabels: metrics.taskLabels,
|
|
280
|
-
sessionId: metrics.sessionId ?? agent.sessionId ?? undefined,
|
|
281
|
-
durationMs: metrics.durationMs,
|
|
282
|
-
errorMessage: metrics.errorMessage,
|
|
283
|
-
errorType: metrics.errorType,
|
|
284
|
-
};
|
|
285
|
-
const decision = await recordAgentExecution(event, cwd);
|
|
286
|
-
return decision?.id ?? null;
|
|
287
|
-
}
|
|
288
|
-
//# sourceMappingURL=agent-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-registry.js","sourceRoot":"","sources":["../../src/agents/agent-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Drizzle ORM schema for the CLEO Agent dimension.
|
|
3
|
-
*
|
|
4
|
-
* Defines the `agent_instances` table that tracks live agent processes,
|
|
5
|
-
* their health (heartbeat protocol), capacity, and error history.
|
|
6
|
-
*
|
|
7
|
-
* This is the DB-backed runtime registry -- distinct from the file-based
|
|
8
|
-
* skill agent registry in `skills/agents/registry.ts` which tracks
|
|
9
|
-
* installed agent *definitions*. This table tracks running agent *instances*.
|
|
10
|
-
*
|
|
11
|
-
* @module agents/agent-schema
|
|
12
|
-
*/
|
|
13
|
-
import { sql } from 'drizzle-orm';
|
|
14
|
-
import { index, integer, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
|
15
|
-
// ============================================================================
|
|
16
|
-
// Canonical enum constants
|
|
17
|
-
// ============================================================================
|
|
18
|
-
/** Agent instance status values matching DB CHECK constraint. */
|
|
19
|
-
export const AGENT_INSTANCE_STATUSES = [
|
|
20
|
-
'starting',
|
|
21
|
-
'active',
|
|
22
|
-
'idle',
|
|
23
|
-
'error',
|
|
24
|
-
'crashed',
|
|
25
|
-
'stopped',
|
|
26
|
-
];
|
|
27
|
-
/** Agent type values for classification. */
|
|
28
|
-
export const AGENT_TYPES = [
|
|
29
|
-
'orchestrator',
|
|
30
|
-
'executor',
|
|
31
|
-
'researcher',
|
|
32
|
-
'architect',
|
|
33
|
-
'validator',
|
|
34
|
-
'documentor',
|
|
35
|
-
'custom',
|
|
36
|
-
];
|
|
37
|
-
// ============================================================================
|
|
38
|
-
// Agent Instances Table
|
|
39
|
-
// ============================================================================
|
|
40
|
-
export const agentInstances = sqliteTable('agent_instances', {
|
|
41
|
-
id: text('id').primaryKey(),
|
|
42
|
-
agentType: text('agent_type', { enum: AGENT_TYPES }).notNull(),
|
|
43
|
-
status: text('status', { enum: AGENT_INSTANCE_STATUSES }).notNull().default('starting'),
|
|
44
|
-
// T033: FK constraints enforced at DB level by migration; kept soft here
|
|
45
|
-
// to avoid circular dependency with tasks-schema.ts (which imports agent-schema.ts).
|
|
46
|
-
// The migration SQL adds: session_id -> sessions ON DELETE SET NULL,
|
|
47
|
-
// task_id -> tasks ON DELETE SET NULL,
|
|
48
|
-
// parent_agent_id -> agent_instances ON DELETE SET NULL.
|
|
49
|
-
sessionId: text('session_id'),
|
|
50
|
-
taskId: text('task_id'),
|
|
51
|
-
startedAt: text('started_at').notNull().default(sql `(datetime('now'))`),
|
|
52
|
-
lastHeartbeat: text('last_heartbeat').notNull().default(sql `(datetime('now'))`),
|
|
53
|
-
stoppedAt: text('stopped_at'),
|
|
54
|
-
errorCount: integer('error_count').notNull().default(0),
|
|
55
|
-
totalTasksCompleted: integer('total_tasks_completed').notNull().default(0),
|
|
56
|
-
capacity: text('capacity').notNull().default('1.0'),
|
|
57
|
-
metadataJson: text('metadata_json').default('{}'),
|
|
58
|
-
parentAgentId: text('parent_agent_id'),
|
|
59
|
-
}, (table) => [
|
|
60
|
-
index('idx_agent_instances_status').on(table.status),
|
|
61
|
-
index('idx_agent_instances_agent_type').on(table.agentType),
|
|
62
|
-
index('idx_agent_instances_session_id').on(table.sessionId),
|
|
63
|
-
index('idx_agent_instances_task_id').on(table.taskId),
|
|
64
|
-
index('idx_agent_instances_parent_agent_id').on(table.parentAgentId),
|
|
65
|
-
index('idx_agent_instances_last_heartbeat').on(table.lastHeartbeat),
|
|
66
|
-
]);
|
|
67
|
-
// ============================================================================
|
|
68
|
-
// Agent Error Log Table
|
|
69
|
-
// ============================================================================
|
|
70
|
-
export const agentErrorLog = sqliteTable('agent_error_log', {
|
|
71
|
-
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
72
|
-
agentId: text('agent_id').notNull(),
|
|
73
|
-
errorType: text('error_type', {
|
|
74
|
-
enum: ['retriable', 'permanent', 'unknown'],
|
|
75
|
-
}).notNull(),
|
|
76
|
-
message: text('message').notNull(),
|
|
77
|
-
stack: text('stack'),
|
|
78
|
-
occurredAt: text('occurred_at').notNull().default(sql `(datetime('now'))`),
|
|
79
|
-
resolved: integer('resolved', { mode: 'boolean' }).notNull().default(false),
|
|
80
|
-
}, (table) => [
|
|
81
|
-
index('idx_agent_error_log_agent_id').on(table.agentId),
|
|
82
|
-
index('idx_agent_error_log_error_type').on(table.errorType),
|
|
83
|
-
index('idx_agent_error_log_occurred_at').on(table.occurredAt),
|
|
84
|
-
]);
|
|
85
|
-
//# sourceMappingURL=agent-schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-schema.js","sourceRoot":"","sources":["../../src/agents/agent-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/capacity.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Capacity tracking and load balancing for the Agent dimension.
|
|
3
|
-
*
|
|
4
|
-
* Tracks per-agent capacity (0.0-1.0) and provides queries for
|
|
5
|
-
* capacity-aware work distribution.
|
|
6
|
-
*
|
|
7
|
-
* @module agents/capacity
|
|
8
|
-
*/
|
|
9
|
-
import { eq } from 'drizzle-orm';
|
|
10
|
-
import { getDb } from '../store/sqlite.js';
|
|
11
|
-
import { agentInstances } from './agent-schema.js';
|
|
12
|
-
import { listAgentInstances } from './registry.js';
|
|
13
|
-
// ============================================================================
|
|
14
|
-
// Capacity Updates
|
|
15
|
-
// ============================================================================
|
|
16
|
-
/**
|
|
17
|
-
* Update the capacity value for an agent instance.
|
|
18
|
-
*
|
|
19
|
-
* @param id - Agent instance ID
|
|
20
|
-
* @param capacity - New capacity value (0.0 to 1.0)
|
|
21
|
-
* @param cwd - Working directory
|
|
22
|
-
* @returns Updated agent row, or null if not found
|
|
23
|
-
*/
|
|
24
|
-
export async function updateCapacity(id, capacity, cwd) {
|
|
25
|
-
if (capacity < 0 || capacity > 1) {
|
|
26
|
-
throw new Error(`Capacity must be between 0.0 and 1.0, got ${capacity}`);
|
|
27
|
-
}
|
|
28
|
-
const db = await getDb(cwd);
|
|
29
|
-
const existing = await db.select().from(agentInstances).where(eq(agentInstances.id, id)).get();
|
|
30
|
-
if (!existing)
|
|
31
|
-
return null;
|
|
32
|
-
const capacityStr = capacity.toFixed(4);
|
|
33
|
-
await db.update(agentInstances).set({ capacity: capacityStr }).where(eq(agentInstances.id, id));
|
|
34
|
-
return { ...existing, capacity: capacityStr };
|
|
35
|
-
}
|
|
36
|
-
// ============================================================================
|
|
37
|
-
// Capacity Queries
|
|
38
|
-
// ============================================================================
|
|
39
|
-
/**
|
|
40
|
-
* Get the total available capacity across all active agents.
|
|
41
|
-
*
|
|
42
|
-
* Only considers agents in 'active' or 'idle' status.
|
|
43
|
-
* Returns the sum of all capacity values.
|
|
44
|
-
*/
|
|
45
|
-
export async function getAvailableCapacity(cwd) {
|
|
46
|
-
const agents = await listAgentInstances({ status: ['active', 'idle'] }, cwd);
|
|
47
|
-
return agents.reduce((sum, agent) => sum + parseCapacity(agent.capacity), 0);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Find the agent with the most available capacity.
|
|
51
|
-
*
|
|
52
|
-
* @param agentType - Optional type filter
|
|
53
|
-
* @param cwd - Working directory
|
|
54
|
-
* @returns Agent with highest capacity, or null if no active agents
|
|
55
|
-
*/
|
|
56
|
-
export async function findLeastLoadedAgent(agentType, cwd) {
|
|
57
|
-
const filters = agentType
|
|
58
|
-
? { status: ['active', 'idle'], agentType }
|
|
59
|
-
: { status: ['active', 'idle'] };
|
|
60
|
-
const agents = await listAgentInstances(filters, cwd);
|
|
61
|
-
if (agents.length === 0)
|
|
62
|
-
return null;
|
|
63
|
-
let best = agents[0];
|
|
64
|
-
let bestCapacity = parseCapacity(best.capacity);
|
|
65
|
-
for (let i = 1; i < agents.length; i++) {
|
|
66
|
-
const cap = parseCapacity(agents[i].capacity);
|
|
67
|
-
if (cap > bestCapacity) {
|
|
68
|
-
best = agents[i];
|
|
69
|
-
bestCapacity = cap;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return best;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Check if the system is overloaded (total capacity below threshold).
|
|
76
|
-
*
|
|
77
|
-
* @param threshold - Minimum acceptable capacity (default: 0.1)
|
|
78
|
-
* @param cwd - Working directory
|
|
79
|
-
* @returns true if total available capacity is below the threshold
|
|
80
|
-
*/
|
|
81
|
-
export async function isOverloaded(threshold = 0.1, cwd) {
|
|
82
|
-
const capacity = await getAvailableCapacity(cwd);
|
|
83
|
-
return capacity < threshold;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Get a capacity summary across the entire agent pool.
|
|
87
|
-
*
|
|
88
|
-
* @param threshold - Overload threshold (default: 0.1)
|
|
89
|
-
* @param cwd - Working directory
|
|
90
|
-
*/
|
|
91
|
-
export async function getCapacitySummary(threshold = 0.1, cwd) {
|
|
92
|
-
const agents = await listAgentInstances({ status: ['active', 'idle'] }, cwd);
|
|
93
|
-
const totalCapacity = agents.reduce((sum, a) => sum + parseCapacity(a.capacity), 0);
|
|
94
|
-
const activeAgentCount = agents.length;
|
|
95
|
-
return {
|
|
96
|
-
totalCapacity,
|
|
97
|
-
activeAgentCount,
|
|
98
|
-
averageCapacity: activeAgentCount > 0 ? totalCapacity / activeAgentCount : 0,
|
|
99
|
-
overloaded: totalCapacity < threshold,
|
|
100
|
-
threshold,
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
// ============================================================================
|
|
104
|
-
// Utilities
|
|
105
|
-
// ============================================================================
|
|
106
|
-
/**
|
|
107
|
-
* Parse a capacity string to a number.
|
|
108
|
-
* The DB stores capacity as TEXT to avoid floating-point representation issues.
|
|
109
|
-
*/
|
|
110
|
-
function parseCapacity(value) {
|
|
111
|
-
if (!value)
|
|
112
|
-
return 0;
|
|
113
|
-
const parsed = parseFloat(value);
|
|
114
|
-
return Number.isNaN(parsed) ? 0 : Math.max(0, Math.min(1, parsed));
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=capacity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capacity.js","sourceRoot":"","sources":["../../src/agents/capacity.ts"],"names":[],"mappings":"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"}
|