@cleocode/core 2026.3.59 → 2026.3.60
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.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 +229 -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.d.ts +2 -1
- package/dist/bootstrap.d.ts.map +1 -1
- 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/cleo.d.ts +40 -0
- package/dist/cleo.d.ts.map +1 -1
- package/dist/cleo.js +267 -0
- package/dist/cleo.js.map +1 -0
- package/dist/codebase-map/analyzers/architecture.js +130 -0
- package/dist/codebase-map/analyzers/architecture.js.map +1 -0
- package/dist/codebase-map/analyzers/concerns.js +122 -0
- package/dist/codebase-map/analyzers/concerns.js.map +1 -0
- package/dist/codebase-map/analyzers/conventions.js +149 -0
- package/dist/codebase-map/analyzers/conventions.js.map +1 -0
- package/dist/codebase-map/analyzers/integrations.js +108 -0
- package/dist/codebase-map/analyzers/integrations.js.map +1 -0
- package/dist/codebase-map/analyzers/stack.js +117 -0
- package/dist/codebase-map/analyzers/stack.js.map +1 -0
- package/dist/codebase-map/analyzers/structure.js +137 -0
- package/dist/codebase-map/analyzers/structure.js.map +1 -0
- package/dist/codebase-map/analyzers/testing.js +118 -0
- package/dist/codebase-map/analyzers/testing.js.map +1 -0
- package/dist/codebase-map/index.js +57 -0
- package/dist/codebase-map/index.js.map +1 -0
- package/dist/codebase-map/store.js +122 -0
- package/dist/codebase-map/store.js.map +1 -0
- package/dist/codebase-map/summary.js +152 -0
- package/dist/codebase-map/summary.js.map +1 -0
- package/dist/compliance/index.js +288 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/protocol-enforcement.js +332 -0
- package/dist/compliance/protocol-enforcement.js.map +1 -0
- package/dist/compliance/protocol-rules.js +786 -0
- package/dist/compliance/protocol-rules.js.map +1 -0
- package/dist/compliance/protocol-types.js +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/config/build-config.js +29 -0
- package/dist/config/build-config.js.map +1 -0
- package/dist/config.js +370 -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/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/error-hooks.js +43 -0
- package/dist/hooks/handlers/error-hooks.js.map +1 -0
- package/dist/hooks/handlers/file-hooks.js +80 -0
- package/dist/hooks/handlers/file-hooks.js.map +1 -0
- package/dist/hooks/handlers/index.js +19 -0
- package/dist/hooks/handlers/index.js.map +1 -0
- package/dist/hooks/handlers/mcp-hooks.js +80 -0
- package/dist/hooks/handlers/mcp-hooks.js.map +1 -0
- package/dist/hooks/handlers/session-hooks.js +73 -0
- package/dist/hooks/handlers/session-hooks.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.js +63 -0
- package/dist/hooks/handlers/task-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 +163 -0
- package/dist/hooks/payload-schemas.js.map +1 -0
- package/dist/hooks/provider-hooks.js +34 -0
- package/dist/hooks/provider-hooks.js.map +1 -0
- package/dist/hooks/registry.js +176 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.js +62 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/hooks.js +136 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.js +156 -30
- package/dist/index.js.map +3 -3
- package/dist/init.js +711 -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.js +267 -0
- package/dist/internal.js.map +1 -0
- package/dist/issue/create.js +121 -0
- package/dist/issue/create.js.map +1 -0
- package/dist/issue/diagnostics.js +59 -0
- package/dist/issue/diagnostics.js.map +1 -0
- package/dist/issue/index.js +10 -0
- package/dist/issue/index.js.map +1 -0
- package/dist/issue/template-parser.js +267 -0
- package/dist/issue/template-parser.js.map +1 -0
- package/dist/json-schema-validator.js +76 -0
- package/dist/json-schema-validator.js.map +1 -0
- package/dist/lib/index.js +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/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 +143 -0
- package/dist/memory/auto-extract.js.map +1 -0
- package/dist/memory/brain-embedding.js +49 -0
- package/dist/memory/brain-embedding.js.map +1 -0
- package/dist/memory/brain-lifecycle.js +298 -0
- package/dist/memory/brain-lifecycle.js.map +1 -0
- package/dist/memory/brain-links.js +148 -0
- package/dist/memory/brain-links.js.map +1 -0
- package/dist/memory/brain-migration.js +149 -0
- package/dist/memory/brain-migration.js.map +1 -0
- package/dist/memory/brain-reasoning.js +215 -0
- package/dist/memory/brain-reasoning.js.map +1 -0
- package/dist/memory/brain-retrieval.js +474 -0
- package/dist/memory/brain-retrieval.js.map +1 -0
- package/dist/memory/brain-row-types.js +10 -0
- package/dist/memory/brain-row-types.js.map +1 -0
- package/dist/memory/brain-search.js +519 -0
- package/dist/memory/brain-search.js.map +1 -0
- package/dist/memory/brain-similarity.js +145 -0
- package/dist/memory/brain-similarity.js.map +1 -0
- package/dist/memory/claude-mem-migration.js +277 -0
- package/dist/memory/claude-mem-migration.js.map +1 -0
- package/dist/memory/decisions.js +148 -0
- package/dist/memory/decisions.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 +289 -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 +226 -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/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 +38 -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/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/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 +132 -0
- package/dist/output.js.map +1 -0
- package/dist/pagination.js +61 -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 +369 -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 +89 -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 +1550 -0
- package/dist/routing/capability-matrix.js.map +1 -0
- package/dist/routing/index.js +9 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/scaffold.d.ts.map +1 -1
- 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 +63 -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 +318 -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/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.js +107 -0
- package/dist/signaldock/claude-code-transport.js.map +1 -0
- package/dist/signaldock/factory.js +25 -0
- package/dist/signaldock/factory.js.map +1 -0
- package/dist/signaldock/index.js +9 -0
- package/dist/signaldock/index.js.map +1 -0
- package/dist/signaldock/signaldock-transport.js +122 -0
- package/dist/signaldock/signaldock-transport.js.map +1 -0
- package/dist/signaldock/transport.js +11 -0
- package/dist/signaldock/transport.js.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 +341 -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/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 +271 -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 +122 -0
- package/dist/store/converters.js.map +1 -0
- 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 +223 -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-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 +243 -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/sqlite-backup.js +105 -0
- package/dist/store/sqlite-backup.js.map +1 -0
- package/dist/store/sqlite-data-accessor.js +734 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -0
- package/dist/store/sqlite.js +500 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/store/status-registry.js +8 -0
- package/dist/store/status-registry.js.map +1 -0
- package/dist/store/task-store.js +348 -0
- package/dist/store/task-store.js.map +1 -0
- package/dist/store/tasks-schema.js +604 -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 +99 -0
- package/dist/system/backup.js.map +1 -0
- package/dist/system/cleanup.js +134 -0
- package/dist/system/cleanup.js.map +1 -0
- package/dist/system/health.js +1054 -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 +155 -0
- package/dist/task-work/index.js.map +1 -0
- package/dist/tasks/add.js +594 -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 +235 -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 +89 -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 +148 -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 +68 -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/reparent.d.ts +38 -0
- package/dist/tasks/reparent.d.ts.map +1 -0
- package/dist/tasks/show.js +78 -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/ui/injection-legacy.d.ts +26 -0
- package/dist/ui/injection-legacy.d.ts.map +1 -0
- package/dist/ui/injection-legacy.js +42 -0
- package/dist/ui/injection-legacy.js.map +1 -0
- package/dist/upgrade.js +901 -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 +5 -5
- package/src/agents/__tests__/agent-registry.test.ts +1 -1
- package/src/bootstrap.ts +171 -30
- package/src/cleo.ts +103 -2
- package/src/scaffold.ts +24 -2
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook Registry System - Phase 2C of T5237
|
|
3
|
+
*
|
|
4
|
+
* Central registry for managing hook handlers with priority-based execution,
|
|
5
|
+
* async dispatch, and best-effort error handling. Integrates with CAAMP 1.6.0
|
|
6
|
+
* event definitions while providing CLEO's execution engine.
|
|
7
|
+
*
|
|
8
|
+
* @module @cleocode/cleo/hooks/registry
|
|
9
|
+
*/
|
|
10
|
+
import { getLogger } from '../logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Default configuration for the hook system.
|
|
13
|
+
* All events are enabled by default.
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_HOOK_CONFIG = {
|
|
16
|
+
enabled: true,
|
|
17
|
+
events: {
|
|
18
|
+
onSessionStart: true,
|
|
19
|
+
onSessionEnd: true,
|
|
20
|
+
onToolStart: true,
|
|
21
|
+
onToolComplete: true,
|
|
22
|
+
onFileChange: true,
|
|
23
|
+
onError: true,
|
|
24
|
+
onPromptSubmit: true,
|
|
25
|
+
onResponseComplete: true,
|
|
26
|
+
onWorkAvailable: true,
|
|
27
|
+
onAgentSpawn: true,
|
|
28
|
+
onAgentComplete: true,
|
|
29
|
+
onCascadeStart: true,
|
|
30
|
+
onPatrol: true,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Central registry for hook handlers.
|
|
35
|
+
*
|
|
36
|
+
* Manages registration, priority-based ordering, and async dispatch
|
|
37
|
+
* of hook handlers. Provides best-effort execution where errors in
|
|
38
|
+
* one handler do not block others.
|
|
39
|
+
*/
|
|
40
|
+
export class HookRegistry {
|
|
41
|
+
handlers = new Map();
|
|
42
|
+
config = DEFAULT_HOOK_CONFIG;
|
|
43
|
+
/**
|
|
44
|
+
* Register a hook handler for a specific event.
|
|
45
|
+
*
|
|
46
|
+
* Handlers are sorted by priority (highest first) and executed
|
|
47
|
+
* in parallel when the event is dispatched.
|
|
48
|
+
*
|
|
49
|
+
* @param registration - The hook registration containing event, handler, priority, and ID
|
|
50
|
+
* @returns A function to unregister the handler
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const unregister = hooks.register({
|
|
55
|
+
* id: 'my-handler',
|
|
56
|
+
* event: 'onSessionStart',
|
|
57
|
+
* handler: async (root, payload) => { console.log('Session started'); },
|
|
58
|
+
* priority: 100
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* // Later: unregister()
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
register(registration) {
|
|
65
|
+
const list = this.handlers.get(registration.event) || [];
|
|
66
|
+
list.push(registration);
|
|
67
|
+
// Sort by priority (highest first)
|
|
68
|
+
list.sort((a, b) => b.priority - a.priority);
|
|
69
|
+
this.handlers.set(registration.event, list);
|
|
70
|
+
// Return unregister function
|
|
71
|
+
return () => {
|
|
72
|
+
const handlers = this.handlers.get(registration.event);
|
|
73
|
+
if (handlers) {
|
|
74
|
+
const idx = handlers.findIndex((h) => h.id === registration.id);
|
|
75
|
+
if (idx !== -1)
|
|
76
|
+
handlers.splice(idx, 1);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Dispatch an event to all registered handlers.
|
|
82
|
+
*
|
|
83
|
+
* Executes handlers in parallel using Promise.allSettled for best-effort
|
|
84
|
+
* execution. Errors in individual handlers are logged but do not block
|
|
85
|
+
* other handlers or propagate to the caller.
|
|
86
|
+
*
|
|
87
|
+
* @param event - The CAAMP hook event to dispatch
|
|
88
|
+
* @param projectRoot - The project root directory path
|
|
89
|
+
* @param payload - The event payload (typed by event)
|
|
90
|
+
* @returns Promise that resolves when all handlers have completed
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* await hooks.dispatch('onSessionStart', '/project', {
|
|
95
|
+
* timestamp: new Date().toISOString(),
|
|
96
|
+
* sessionId: 'sess-123',
|
|
97
|
+
* name: 'My Session',
|
|
98
|
+
* scope: 'feature'
|
|
99
|
+
* });
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
async dispatch(event, projectRoot, payload) {
|
|
103
|
+
// Check if hooks enabled globally
|
|
104
|
+
if (!this.config.enabled)
|
|
105
|
+
return;
|
|
106
|
+
// Check if this event enabled
|
|
107
|
+
if (!this.config.events[event])
|
|
108
|
+
return;
|
|
109
|
+
const handlers = this.handlers.get(event);
|
|
110
|
+
if (!handlers || handlers.length === 0)
|
|
111
|
+
return;
|
|
112
|
+
// Execute all handlers in parallel (best-effort)
|
|
113
|
+
await Promise.allSettled(handlers.map(async (reg) => {
|
|
114
|
+
try {
|
|
115
|
+
await reg.handler(projectRoot, payload);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Hooks are best-effort - log but don't throw
|
|
119
|
+
getLogger('hooks').warn({ err: error, hookId: reg.id, event }, 'Hook handler failed');
|
|
120
|
+
}
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Check if a specific event is currently enabled.
|
|
125
|
+
*
|
|
126
|
+
* Both the global enabled flag and the per-event flag must be true.
|
|
127
|
+
*
|
|
128
|
+
* @param event - The CAAMP hook event to check
|
|
129
|
+
* @returns True if the event is enabled
|
|
130
|
+
*/
|
|
131
|
+
isEnabled(event) {
|
|
132
|
+
return this.config.enabled && this.config.events[event];
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Update the hook system configuration.
|
|
136
|
+
*
|
|
137
|
+
* Merges the provided config with the existing config.
|
|
138
|
+
*
|
|
139
|
+
* @param config - Partial configuration to apply
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```typescript
|
|
143
|
+
* hooks.setConfig({ enabled: false }); // Disable all hooks
|
|
144
|
+
* hooks.setConfig({ events: { onError: false } }); // Disable specific event
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
setConfig(config) {
|
|
148
|
+
this.config = { ...this.config, ...config };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get the current hook configuration.
|
|
152
|
+
*
|
|
153
|
+
* @returns A copy of the current configuration
|
|
154
|
+
*/
|
|
155
|
+
getConfig() {
|
|
156
|
+
return { ...this.config };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* List all registered handlers for a specific event.
|
|
160
|
+
*
|
|
161
|
+
* Returns handlers in priority order (highest first).
|
|
162
|
+
*
|
|
163
|
+
* @param event - The CAAMP hook event
|
|
164
|
+
* @returns Array of hook registrations
|
|
165
|
+
*/
|
|
166
|
+
listHandlers(event) {
|
|
167
|
+
return [...(this.handlers.get(event) || [])];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Singleton instance of the HookRegistry.
|
|
172
|
+
*
|
|
173
|
+
* Use this instance for all hook operations throughout the application.
|
|
174
|
+
*/
|
|
175
|
+
export const hooks = new HookRegistry();
|
|
176
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal Hooks Core Types - Phase 2B of T5237
|
|
3
|
+
*
|
|
4
|
+
* This module defines the core type system for CLEO's Universal Hooks
|
|
5
|
+
* integration with CAAMP 1.6.0. CLEO builds the hook registry and
|
|
6
|
+
* execution system while CAAMP provides the event definitions.
|
|
7
|
+
*
|
|
8
|
+
* @module @cleocode/cleo/hooks/types
|
|
9
|
+
*/
|
|
10
|
+
// Re-export CAAMP provider query functions for hook capability discovery
|
|
11
|
+
export { getCommonHookEvents, getProvidersByHookEvent } from '@cleocode/caamp';
|
|
12
|
+
/**
|
|
13
|
+
* CLEO-local coordination events used by the autonomous runtime.
|
|
14
|
+
*
|
|
15
|
+
* These are internal lifecycle signals for worker orchestration and are not
|
|
16
|
+
* surfaced through CAAMP's provider capability registry.
|
|
17
|
+
*/
|
|
18
|
+
export const INTERNAL_HOOK_EVENTS = [
|
|
19
|
+
'onWorkAvailable',
|
|
20
|
+
'onAgentSpawn',
|
|
21
|
+
'onAgentComplete',
|
|
22
|
+
'onCascadeStart',
|
|
23
|
+
'onPatrol',
|
|
24
|
+
];
|
|
25
|
+
const INTERNAL_HOOK_EVENT_SET = new Set(INTERNAL_HOOK_EVENTS);
|
|
26
|
+
/**
|
|
27
|
+
* Type guard for CAAMP/provider-discoverable hook events.
|
|
28
|
+
*/
|
|
29
|
+
export function isProviderHookEvent(event) {
|
|
30
|
+
return !INTERNAL_HOOK_EVENT_SET.has(event);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Type guard for CLEO-local coordination hook events.
|
|
34
|
+
*/
|
|
35
|
+
export function isInternalHookEvent(event) {
|
|
36
|
+
return INTERNAL_HOOK_EVENT_SET.has(event);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Mapping from CLEO internal lifecycle events to CAAMP hook events
|
|
40
|
+
* This is where CLEO connects its lifecycle to CAAMP's event definitions
|
|
41
|
+
*/
|
|
42
|
+
export const CLEO_TO_CAAMP_HOOK_MAP = {
|
|
43
|
+
'session.start': 'onSessionStart',
|
|
44
|
+
'session.end': 'onSessionEnd',
|
|
45
|
+
'task.start': 'onToolStart',
|
|
46
|
+
'task.complete': 'onToolComplete',
|
|
47
|
+
'file.change': 'onFileChange',
|
|
48
|
+
'system.error': 'onError',
|
|
49
|
+
'prompt.submit': 'onPromptSubmit',
|
|
50
|
+
'response.complete': 'onResponseComplete',
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Internal CLEO lifecycle events that drive autonomous coordination.
|
|
54
|
+
*/
|
|
55
|
+
export const CLEO_INTERNAL_HOOK_MAP = {
|
|
56
|
+
'agent.work.available': 'onWorkAvailable',
|
|
57
|
+
'agent.spawn': 'onAgentSpawn',
|
|
58
|
+
'agent.complete': 'onAgentComplete',
|
|
59
|
+
'cascade.start': 'onCascadeStart',
|
|
60
|
+
'watcher.patrol': 'onPatrol',
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/hooks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,yEAAyE;AACzE,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAO/E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iBAAiB;IACjB,cAAc;IACd,iBAAiB;IACjB,gBAAgB;IAChB,UAAU;CACF,CAAC;AAYX,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAS,oBAAoB,CAAC,CAAC;AAEtE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,OAAO,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAwSD;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE,gBAAgB;IACjC,aAAa,EAAE,cAAc;IAC7B,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,gBAAgB;IACjC,aAAa,EAAE,cAAc;IAC7B,cAAc,EAAE,SAAS;IACzB,eAAe,EAAE,gBAAgB;IACjC,mBAAmB,EAAE,oBAAoB;CACjC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,sBAAsB,EAAE,iBAAiB;IACzC,aAAa,EAAE,cAAc;IAC7B,gBAAgB,EAAE,iBAAiB;IACnC,eAAe,EAAE,gBAAgB;IACjC,gBAAgB,EAAE,UAAU;CACpB,CAAC"}
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git hook management utilities.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from init.ts to enable shared use across init, upgrade, and
|
|
5
|
+
* doctor/health-check workflows.
|
|
6
|
+
*
|
|
7
|
+
* Handles installation, update, and verification of managed git hooks
|
|
8
|
+
* from the package's templates/git-hooks/ directory.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import { chmod, copyFile, mkdir, readFile } from 'node:fs/promises';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
import { getPackageRoot } from './scaffold.js';
|
|
14
|
+
// ── Constants ────────────────────────────────────────────────────────
|
|
15
|
+
/** Git hooks managed by CLEO. */
|
|
16
|
+
export const MANAGED_HOOKS = ['commit-msg', 'pre-commit', 'pre-push'];
|
|
17
|
+
// ── ensureGitHooks ───────────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Install or update managed git hooks from templates/git-hooks/ into .git/hooks/.
|
|
20
|
+
*
|
|
21
|
+
* Handles:
|
|
22
|
+
* - No .git directory (skips gracefully)
|
|
23
|
+
* - No source templates directory (skips gracefully)
|
|
24
|
+
* - Hooks already installed (skips unless force)
|
|
25
|
+
* - Sets executable permissions on installed hooks
|
|
26
|
+
*/
|
|
27
|
+
export async function ensureGitHooks(projectRoot, opts) {
|
|
28
|
+
const gitDir = join(projectRoot, '.git');
|
|
29
|
+
const gitHooksDir = join(gitDir, 'hooks');
|
|
30
|
+
if (!existsSync(gitDir)) {
|
|
31
|
+
return {
|
|
32
|
+
action: 'skipped',
|
|
33
|
+
path: gitHooksDir,
|
|
34
|
+
details: 'No .git/ directory found, skipping git hook installation',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const packageRoot = getPackageRoot();
|
|
38
|
+
const sourceDir = join(packageRoot, 'templates', 'git-hooks');
|
|
39
|
+
if (!existsSync(sourceDir)) {
|
|
40
|
+
return {
|
|
41
|
+
action: 'skipped',
|
|
42
|
+
path: sourceDir,
|
|
43
|
+
details: 'templates/git-hooks/ not found in package root, skipping git hook installation',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
await mkdir(gitHooksDir, { recursive: true });
|
|
47
|
+
const force = opts?.force ?? false;
|
|
48
|
+
let installedCount = 0;
|
|
49
|
+
const errors = [];
|
|
50
|
+
for (const hook of MANAGED_HOOKS) {
|
|
51
|
+
const sourcePath = join(sourceDir, hook);
|
|
52
|
+
const destPath = join(gitHooksDir, hook);
|
|
53
|
+
if (!existsSync(sourcePath)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
if (existsSync(destPath) && !force) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
await copyFile(sourcePath, destPath);
|
|
61
|
+
await chmod(destPath, 0o755);
|
|
62
|
+
installedCount++;
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
errors.push(`Failed to install git hook ${hook}: ${err instanceof Error ? err.message : String(err)}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (errors.length > 0) {
|
|
69
|
+
return {
|
|
70
|
+
action: 'repaired',
|
|
71
|
+
path: gitHooksDir,
|
|
72
|
+
details: `Installed ${installedCount} hook(s) with ${errors.length} error(s): ${errors.join('; ')}`,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
if (installedCount === 0) {
|
|
76
|
+
return {
|
|
77
|
+
action: 'skipped',
|
|
78
|
+
path: gitHooksDir,
|
|
79
|
+
details: 'All managed hooks already installed',
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
action: 'created',
|
|
84
|
+
path: gitHooksDir,
|
|
85
|
+
details: `Installed ${installedCount} git hooks`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// ── checkGitHooks ────────────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Verify managed hooks are installed and current.
|
|
91
|
+
*
|
|
92
|
+
* Compares installed hooks in .git/hooks/ against source templates in the
|
|
93
|
+
* package's templates/git-hooks/ directory. Returns per-hook status including
|
|
94
|
+
* whether the hook is installed and whether its content matches the source.
|
|
95
|
+
*/
|
|
96
|
+
export async function checkGitHooks(projectRoot) {
|
|
97
|
+
const gitHooksDir = join(projectRoot, '.git', 'hooks');
|
|
98
|
+
const packageRoot = getPackageRoot();
|
|
99
|
+
const sourceDir = join(packageRoot, 'templates', 'git-hooks');
|
|
100
|
+
const results = [];
|
|
101
|
+
for (const hook of MANAGED_HOOKS) {
|
|
102
|
+
const sourcePath = join(sourceDir, hook);
|
|
103
|
+
const installedPath = join(gitHooksDir, hook);
|
|
104
|
+
const result = {
|
|
105
|
+
hook,
|
|
106
|
+
installed: false,
|
|
107
|
+
current: false,
|
|
108
|
+
sourcePath,
|
|
109
|
+
installedPath,
|
|
110
|
+
};
|
|
111
|
+
if (!existsSync(sourcePath)) {
|
|
112
|
+
// No source template — nothing to compare against
|
|
113
|
+
results.push(result);
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (!existsSync(installedPath)) {
|
|
117
|
+
results.push(result);
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
result.installed = true;
|
|
121
|
+
try {
|
|
122
|
+
const [sourceContent, installedContent] = await Promise.all([
|
|
123
|
+
readFile(sourcePath, 'utf-8'),
|
|
124
|
+
readFile(installedPath, 'utf-8'),
|
|
125
|
+
]);
|
|
126
|
+
result.current = sourceContent === installedContent;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// If we can't read either file, mark as not current
|
|
130
|
+
result.current = false;
|
|
131
|
+
}
|
|
132
|
+
results.push(result);
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19102,6 +19102,7 @@ import { execFile as execFile3 } from "node:child_process";
|
|
|
19102
19102
|
import { randomUUID } from "node:crypto";
|
|
19103
19103
|
import { existsSync as existsSync33, constants as fsConstants3, readFileSync as readFileSync22, statSync as statSync8 } from "node:fs";
|
|
19104
19104
|
import { access as access3, mkdir as mkdir5, readFile as readFile6, rm as rm2, writeFile as writeFile5 } from "node:fs/promises";
|
|
19105
|
+
import { homedir as getHomedir } from "node:os";
|
|
19105
19106
|
import { dirname as dirname8, join as join37, resolve as resolve5 } from "node:path";
|
|
19106
19107
|
import { fileURLToPath as fileURLToPath4 } from "node:url";
|
|
19107
19108
|
import { promisify as promisify3 } from "node:util";
|
|
@@ -19913,12 +19914,30 @@ function checkGlobalTemplates() {
|
|
|
19913
19914
|
fix: "cleo init (or restart MCP server)"
|
|
19914
19915
|
};
|
|
19915
19916
|
}
|
|
19917
|
+
const xdgContent = readFileSync22(injectionPath, "utf-8");
|
|
19918
|
+
const xdgVersion = xdgContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
|
|
19919
|
+
const home = getHomedir();
|
|
19920
|
+
const legacyPath = join37(home, ".cleo", "templates", "CLEO-INJECTION.md");
|
|
19921
|
+
if (existsSync33(legacyPath)) {
|
|
19922
|
+
const legacyContent = readFileSync22(legacyPath, "utf-8");
|
|
19923
|
+
const legacyVersion = legacyContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
|
|
19924
|
+
if (legacyVersion && xdgVersion && legacyVersion !== xdgVersion) {
|
|
19925
|
+
return {
|
|
19926
|
+
id: "global_templates",
|
|
19927
|
+
category: "global",
|
|
19928
|
+
status: "warning",
|
|
19929
|
+
message: `Legacy template version (${legacyVersion}) out of sync with XDG (${xdgVersion})`,
|
|
19930
|
+
details: { path: injectionPath, exists: true, xdgVersion, legacyVersion, legacyPath },
|
|
19931
|
+
fix: "npm install -g @cleocode/cleo (reinstall syncs both paths)"
|
|
19932
|
+
};
|
|
19933
|
+
}
|
|
19934
|
+
}
|
|
19916
19935
|
return {
|
|
19917
19936
|
id: "global_templates",
|
|
19918
19937
|
category: "global",
|
|
19919
19938
|
status: "passed",
|
|
19920
|
-
message:
|
|
19921
|
-
details: { path: injectionPath, exists: true },
|
|
19939
|
+
message: `Global injection template present (v${xdgVersion ?? "unknown"})`,
|
|
19940
|
+
details: { path: injectionPath, exists: true, version: xdgVersion },
|
|
19922
19941
|
fix: null
|
|
19923
19942
|
};
|
|
19924
19943
|
}
|
|
@@ -64457,46 +64476,68 @@ async function bootstrapGlobalCleo(options) {
|
|
|
64457
64476
|
await installSkillsGlobally(ctx);
|
|
64458
64477
|
await installAgentDefinitionGlobally(ctx);
|
|
64459
64478
|
await installProviderAdapters(ctx, options?.packageRoot);
|
|
64479
|
+
await verifyBootstrapHealth(ctx);
|
|
64460
64480
|
return ctx;
|
|
64461
64481
|
}
|
|
64482
|
+
async function writeTemplateTo(content, destPath, isDryRun) {
|
|
64483
|
+
if (isDryRun) return false;
|
|
64484
|
+
const { dirname: dirname20 } = await import("node:path");
|
|
64485
|
+
await mkdir17(dirname20(destPath), { recursive: true });
|
|
64486
|
+
await writeFile12(destPath, content);
|
|
64487
|
+
return true;
|
|
64488
|
+
}
|
|
64462
64489
|
async function ensureGlobalTemplatesBootstrap(ctx, packageRootOverride) {
|
|
64463
64490
|
const globalTemplatesDir = getCleoTemplatesDir();
|
|
64464
64491
|
if (!ctx.isDryRun) {
|
|
64465
64492
|
await mkdir17(globalTemplatesDir, { recursive: true });
|
|
64466
64493
|
}
|
|
64494
|
+
let templateContent = null;
|
|
64467
64495
|
try {
|
|
64468
64496
|
const pkgRoot = packageRootOverride ?? getPackageRoot();
|
|
64469
64497
|
const templatePath = join104(pkgRoot, "templates", "CLEO-INJECTION.md");
|
|
64470
64498
|
if (existsSync103(templatePath)) {
|
|
64471
|
-
|
|
64472
|
-
const destPath = join104(globalTemplatesDir, "CLEO-INJECTION.md");
|
|
64473
|
-
if (!ctx.isDryRun) {
|
|
64474
|
-
await writeFile12(destPath, content);
|
|
64475
|
-
}
|
|
64476
|
-
ctx.created.push(
|
|
64477
|
-
`~/.cleo/templates/CLEO-INJECTION.md (${ctx.isDryRun ? "would refresh" : "refreshed"})`
|
|
64478
|
-
);
|
|
64479
|
-
} else {
|
|
64480
|
-
try {
|
|
64481
|
-
const { getInjectionTemplateContent: getInjectionTemplateContent2 } = await Promise.resolve().then(() => (init_injection(), injection_exports));
|
|
64482
|
-
const content = getInjectionTemplateContent2();
|
|
64483
|
-
if (content) {
|
|
64484
|
-
const destPath = join104(globalTemplatesDir, "CLEO-INJECTION.md");
|
|
64485
|
-
if (!ctx.isDryRun) {
|
|
64486
|
-
await writeFile12(destPath, content);
|
|
64487
|
-
}
|
|
64488
|
-
ctx.created.push(
|
|
64489
|
-
`~/.cleo/templates/CLEO-INJECTION.md (${ctx.isDryRun ? "would refresh" : "refreshed"} from embedded)`
|
|
64490
|
-
);
|
|
64491
|
-
}
|
|
64492
|
-
} catch {
|
|
64493
|
-
ctx.warnings.push("Could not refresh CLEO-INJECTION.md template");
|
|
64494
|
-
}
|
|
64499
|
+
templateContent = readFileSync77(templatePath, "utf-8");
|
|
64495
64500
|
}
|
|
64496
64501
|
} catch {
|
|
64502
|
+
}
|
|
64503
|
+
if (!templateContent) {
|
|
64504
|
+
try {
|
|
64505
|
+
const { getInjectionTemplateContent: getInjectionTemplateContent2 } = await Promise.resolve().then(() => (init_injection(), injection_exports));
|
|
64506
|
+
templateContent = getInjectionTemplateContent2() ?? null;
|
|
64507
|
+
} catch {
|
|
64508
|
+
ctx.warnings.push("Could not refresh CLEO-INJECTION.md template");
|
|
64509
|
+
return;
|
|
64510
|
+
}
|
|
64511
|
+
}
|
|
64512
|
+
if (!templateContent) {
|
|
64497
64513
|
ctx.warnings.push("Could not refresh CLEO-INJECTION.md template");
|
|
64514
|
+
return;
|
|
64515
|
+
}
|
|
64516
|
+
const xdgDest = join104(globalTemplatesDir, "CLEO-INJECTION.md");
|
|
64517
|
+
const xdgWritten = await writeTemplateTo(templateContent, xdgDest, ctx.isDryRun);
|
|
64518
|
+
ctx.created.push(
|
|
64519
|
+
`${getCleoTemplatesTildePath()}/CLEO-INJECTION.md (${xdgWritten ? "refreshed" : "would refresh"})`
|
|
64520
|
+
);
|
|
64521
|
+
const home = homedir6();
|
|
64522
|
+
const legacyTemplatesDir = join104(home, ".cleo", "templates");
|
|
64523
|
+
if (legacyTemplatesDir !== globalTemplatesDir && existsSync103(join104(home, ".cleo"))) {
|
|
64524
|
+
const legacyDest = join104(legacyTemplatesDir, "CLEO-INJECTION.md");
|
|
64525
|
+
const legacyWritten = await writeTemplateTo(templateContent, legacyDest, ctx.isDryRun);
|
|
64526
|
+
if (legacyWritten) {
|
|
64527
|
+
ctx.created.push("~/.cleo/templates/CLEO-INJECTION.md (legacy sync)");
|
|
64528
|
+
}
|
|
64498
64529
|
}
|
|
64499
64530
|
}
|
|
64531
|
+
function sanitizeCaampFile(content) {
|
|
64532
|
+
let cleaned = content.replace(/(<!-- CAAMP:END -->)\s*(<!-- CAAMP:END -->)/g, "$1");
|
|
64533
|
+
cleaned = cleaned.replace(
|
|
64534
|
+
/<!-- CAAMP:END -->\s*[A-Z][A-Za-z-]*\.md\s*(?:<!-- CAAMP:END -->)?/g,
|
|
64535
|
+
"<!-- CAAMP:END -->"
|
|
64536
|
+
);
|
|
64537
|
+
cleaned = cleaned.replace(/^[A-Z][A-Za-z-]*\.md\s*$/gm, "");
|
|
64538
|
+
cleaned = cleaned.replace(/\n{3,}/g, "\n\n");
|
|
64539
|
+
return cleaned.trim() + "\n";
|
|
64540
|
+
}
|
|
64500
64541
|
async function injectAgentsHub(ctx) {
|
|
64501
64542
|
const globalAgentsDir = getAgentsHome();
|
|
64502
64543
|
const globalAgentsMd = join104(globalAgentsDir, "AGENTS.md");
|
|
@@ -64510,13 +64551,23 @@ async function injectAgentsHub(ctx) {
|
|
|
64510
64551
|
/\n?<!-- CLEO:START[^>]*-->[\s\S]*?<!-- CLEO:END -->\n?/g,
|
|
64511
64552
|
""
|
|
64512
64553
|
);
|
|
64513
|
-
|
|
64514
|
-
|
|
64554
|
+
const sanitized = sanitizeCaampFile(stripped);
|
|
64555
|
+
if (sanitized !== content) {
|
|
64556
|
+
await writeFile12(globalAgentsMd, sanitized, "utf8");
|
|
64557
|
+
ctx.created.push("~/.agents/AGENTS.md (sanitized CAAMP corruption)");
|
|
64515
64558
|
}
|
|
64516
64559
|
}
|
|
64517
64560
|
const templateRef = `@${getCleoTemplatesTildePath()}/CLEO-INJECTION.md`;
|
|
64518
64561
|
const action = await inject2(globalAgentsMd, templateRef);
|
|
64519
64562
|
ctx.created.push(`~/.agents/AGENTS.md (${action})`);
|
|
64563
|
+
const postContent = await readFile19(globalAgentsMd, "utf8");
|
|
64564
|
+
const caampBlocks = postContent.match(/<!-- CAAMP:START -->/g);
|
|
64565
|
+
const caampEnds = postContent.match(/<!-- CAAMP:END -->/g);
|
|
64566
|
+
if (caampBlocks && caampEnds && caampBlocks.length !== caampEnds.length) {
|
|
64567
|
+
ctx.warnings.push(
|
|
64568
|
+
`~/.agents/AGENTS.md has mismatched CAAMP markers (${caampBlocks.length} START vs ${caampEnds.length} END)`
|
|
64569
|
+
);
|
|
64570
|
+
}
|
|
64520
64571
|
} else {
|
|
64521
64572
|
ctx.created.push("~/.agents/AGENTS.md (would create/update CAAMP block)");
|
|
64522
64573
|
}
|
|
@@ -64650,6 +64701,45 @@ async function installProviderAdapters(ctx, packageRootOverride) {
|
|
|
64650
64701
|
);
|
|
64651
64702
|
}
|
|
64652
64703
|
}
|
|
64704
|
+
async function verifyBootstrapHealth(ctx) {
|
|
64705
|
+
if (ctx.isDryRun) return;
|
|
64706
|
+
try {
|
|
64707
|
+
const xdgTemplatePath = join104(getCleoTemplatesDir(), "CLEO-INJECTION.md");
|
|
64708
|
+
const agentsMd = join104(getAgentsHome(), "AGENTS.md");
|
|
64709
|
+
if (!existsSync103(xdgTemplatePath)) {
|
|
64710
|
+
ctx.warnings.push("Health: XDG template missing after bootstrap");
|
|
64711
|
+
return;
|
|
64712
|
+
}
|
|
64713
|
+
const xdgContent = await readFile19(xdgTemplatePath, "utf8");
|
|
64714
|
+
const xdgVersion = xdgContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
|
|
64715
|
+
const home = homedir6();
|
|
64716
|
+
const legacyTemplatePath = join104(home, ".cleo", "templates", "CLEO-INJECTION.md");
|
|
64717
|
+
if (existsSync103(legacyTemplatePath)) {
|
|
64718
|
+
const legacyContent = await readFile19(legacyTemplatePath, "utf8");
|
|
64719
|
+
const legacyVersion = legacyContent.match(/^Version:\s*(.+)$/m)?.[1]?.trim();
|
|
64720
|
+
if (legacyVersion !== xdgVersion) {
|
|
64721
|
+
ctx.warnings.push(
|
|
64722
|
+
`Health: Legacy template version (${legacyVersion}) != XDG version (${xdgVersion})`
|
|
64723
|
+
);
|
|
64724
|
+
}
|
|
64725
|
+
}
|
|
64726
|
+
if (existsSync103(agentsMd)) {
|
|
64727
|
+
const agentsContent = await readFile19(agentsMd, "utf8");
|
|
64728
|
+
const expectedRef = `@${getCleoTemplatesTildePath()}/CLEO-INJECTION.md`;
|
|
64729
|
+
if (!agentsContent.includes(expectedRef)) {
|
|
64730
|
+
ctx.warnings.push(`Health: ~/.agents/AGENTS.md does not reference ${expectedRef}`);
|
|
64731
|
+
}
|
|
64732
|
+
const outsideCaamp = agentsContent.replace(
|
|
64733
|
+
/<!-- CAAMP:START -->[\s\S]*?<!-- CAAMP:END -->/g,
|
|
64734
|
+
""
|
|
64735
|
+
);
|
|
64736
|
+
if (/[A-Z][A-Za-z-]*\.md/.test(outsideCaamp)) {
|
|
64737
|
+
ctx.warnings.push("Health: ~/.agents/AGENTS.md has orphaned content outside CAAMP blocks");
|
|
64738
|
+
}
|
|
64739
|
+
}
|
|
64740
|
+
} catch {
|
|
64741
|
+
}
|
|
64742
|
+
}
|
|
64653
64743
|
|
|
64654
64744
|
// packages/core/src/cleo.ts
|
|
64655
64745
|
import path from "node:path";
|
|
@@ -64724,7 +64814,10 @@ var Cleo = class _Cleo {
|
|
|
64724
64814
|
),
|
|
64725
64815
|
complete: (p) => completeTask({ taskId: p.taskId, notes: p.notes }, root, store),
|
|
64726
64816
|
delete: (p) => deleteTask({ taskId: p.taskId, force: p.force }, root, store),
|
|
64727
|
-
archive: (p) => archiveTasks({ before: p?.before, taskIds: p?.taskIds, dryRun: p?.dryRun }, root, store)
|
|
64817
|
+
archive: (p) => archiveTasks({ before: p?.before, taskIds: p?.taskIds, dryRun: p?.dryRun }, root, store),
|
|
64818
|
+
start: (taskId) => startTask(taskId, root, store),
|
|
64819
|
+
stop: () => stopTask(root, store),
|
|
64820
|
+
current: () => currentTask(root, store)
|
|
64728
64821
|
};
|
|
64729
64822
|
}
|
|
64730
64823
|
// === Sessions ===
|
|
@@ -64732,7 +64825,11 @@ var Cleo = class _Cleo {
|
|
|
64732
64825
|
const root = this.projectRoot;
|
|
64733
64826
|
const store = this._store ?? void 0;
|
|
64734
64827
|
return {
|
|
64735
|
-
start: (p) => startSession(
|
|
64828
|
+
start: (p) => startSession(
|
|
64829
|
+
{ name: p.name, scope: p.scope, agent: p.agent, startTask: p.startTask },
|
|
64830
|
+
root,
|
|
64831
|
+
store
|
|
64832
|
+
),
|
|
64736
64833
|
end: (p) => endSession({ note: p?.note }, root, store),
|
|
64737
64834
|
status: () => sessionStatus(root, store),
|
|
64738
64835
|
resume: (id) => resumeSession(id, root, store),
|
|
@@ -64870,6 +64967,35 @@ var Cleo = class _Cleo {
|
|
|
64870
64967
|
sharingStatus: () => getSharingStatus()
|
|
64871
64968
|
};
|
|
64872
64969
|
}
|
|
64970
|
+
// === Agents ===
|
|
64971
|
+
get agents() {
|
|
64972
|
+
const root = this.projectRoot;
|
|
64973
|
+
return {
|
|
64974
|
+
register: (opts) => registerAgent(opts, root),
|
|
64975
|
+
deregister: (agentId) => deregisterAgent(agentId, root),
|
|
64976
|
+
health: (agentId) => checkAgentHealth2(agentId, void 0, root),
|
|
64977
|
+
detectCrashed: (thresholdMs) => detectCrashedAgents(thresholdMs, root),
|
|
64978
|
+
recordHeartbeat: (agentId) => heartbeat(agentId, root),
|
|
64979
|
+
capacity: (agentId) => getAgentCapacity(agentId, root),
|
|
64980
|
+
isOverloaded: (threshold) => isOverloaded(threshold, root),
|
|
64981
|
+
list: (p) => listAgentInstances(
|
|
64982
|
+
{
|
|
64983
|
+
status: p?.status,
|
|
64984
|
+
agentType: p?.agentType
|
|
64985
|
+
},
|
|
64986
|
+
root
|
|
64987
|
+
)
|
|
64988
|
+
};
|
|
64989
|
+
}
|
|
64990
|
+
// === Intelligence ===
|
|
64991
|
+
get intelligence() {
|
|
64992
|
+
const root = this.projectRoot;
|
|
64993
|
+
const store = this._store ?? void 0;
|
|
64994
|
+
return {
|
|
64995
|
+
predictImpact: (change) => predictImpact(change, root, store ?? void 0),
|
|
64996
|
+
blastRadius: (taskId) => calculateBlastRadius(taskId, store ?? void 0, root)
|
|
64997
|
+
};
|
|
64998
|
+
}
|
|
64873
64999
|
// === Sync (Task Reconciliation) ===
|
|
64874
65000
|
get sync() {
|
|
64875
65001
|
const root = this.projectRoot;
|