@cleocode/core 2026.4.9 → 2026.4.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/adapter-registry.js +64 -0
- package/dist/adapters/adapter-registry.js.map +1 -0
- package/dist/adapters/discovery.js +83 -0
- package/dist/adapters/discovery.js.map +1 -0
- package/dist/adapters/index.js +9 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/manager.js +260 -0
- package/dist/adapters/manager.js.map +1 -0
- package/dist/admin/export-tasks.js +171 -0
- package/dist/admin/export-tasks.js.map +1 -0
- package/dist/admin/export.js +103 -0
- package/dist/admin/export.js.map +1 -0
- package/dist/admin/help.js +106 -0
- package/dist/admin/help.js.map +1 -0
- package/dist/admin/import-tasks.js +182 -0
- package/dist/admin/import-tasks.js.map +1 -0
- package/dist/admin/import.js +129 -0
- package/dist/admin/import.js.map +1 -0
- package/dist/admin/index.js +13 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/adrs/find.js +134 -0
- package/dist/adrs/find.js.map +1 -0
- package/dist/adrs/index.js +15 -0
- package/dist/adrs/index.js.map +1 -0
- package/dist/adrs/link-pipeline.js +160 -0
- package/dist/adrs/link-pipeline.js.map +1 -0
- package/dist/adrs/list.js +43 -0
- package/dist/adrs/list.js.map +1 -0
- package/dist/adrs/parse.js +51 -0
- package/dist/adrs/parse.js.map +1 -0
- package/dist/adrs/show.js +22 -0
- package/dist/adrs/show.js.map +1 -0
- package/dist/adrs/sync.js +188 -0
- package/dist/adrs/sync.js.map +1 -0
- package/dist/adrs/types.js +9 -0
- package/dist/adrs/types.js.map +1 -0
- package/dist/adrs/validate.js +57 -0
- package/dist/adrs/validate.js.map +1 -0
- package/dist/agents/agent-registry.js +288 -0
- package/dist/agents/agent-registry.js.map +1 -0
- package/dist/agents/agent-schema.d.ts +2 -2
- package/dist/agents/agent-schema.js +82 -0
- package/dist/agents/agent-schema.js.map +1 -0
- package/dist/agents/capacity.js +116 -0
- package/dist/agents/capacity.js.map +1 -0
- package/dist/agents/execution-learning.js +474 -0
- package/dist/agents/execution-learning.js.map +1 -0
- package/dist/agents/health-monitor.js +217 -0
- package/dist/agents/health-monitor.js.map +1 -0
- package/dist/agents/index.js +29 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/registry.js +314 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/retry.js +215 -0
- package/dist/agents/retry.js.map +1 -0
- package/dist/audit-prune.js +94 -0
- package/dist/audit-prune.js.map +1 -0
- package/dist/audit.js +68 -0
- package/dist/audit.js.map +1 -0
- package/dist/backfill/index.js +229 -0
- package/dist/backfill/index.js.map +1 -0
- package/dist/bootstrap.js +344 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/caamp/adapter.js +259 -0
- package/dist/caamp/adapter.js.map +1 -0
- package/dist/caamp/capability-check.js +38 -0
- package/dist/caamp/capability-check.js.map +1 -0
- package/dist/caamp/index.js +21 -0
- package/dist/caamp/index.js.map +1 -0
- package/dist/caamp-init.js +16 -0
- package/dist/caamp-init.js.map +1 -0
- package/dist/cleo.js +322 -0
- package/dist/cleo.js.map +1 -0
- package/dist/code/index.js +10 -0
- package/dist/code/index.js.map +1 -0
- package/dist/code/outline.js +165 -0
- package/dist/code/outline.js.map +1 -0
- package/dist/code/parser.js +295 -0
- package/dist/code/parser.js.map +1 -0
- package/dist/code/search.js +135 -0
- package/dist/code/search.js.map +1 -0
- package/dist/code/unfold.js +155 -0
- package/dist/code/unfold.js.map +1 -0
- package/dist/codebase-map/analyzers/architecture.d.ts.map +1 -1
- package/dist/codebase-map/analyzers/architecture.js +129 -0
- package/dist/codebase-map/analyzers/architecture.js.map +1 -0
- package/dist/codebase-map/analyzers/concerns.js +122 -0
- package/dist/codebase-map/analyzers/concerns.js.map +1 -0
- package/dist/codebase-map/analyzers/conventions.js +149 -0
- package/dist/codebase-map/analyzers/conventions.js.map +1 -0
- package/dist/codebase-map/analyzers/integrations.js +108 -0
- package/dist/codebase-map/analyzers/integrations.js.map +1 -0
- package/dist/codebase-map/analyzers/stack.js +117 -0
- package/dist/codebase-map/analyzers/stack.js.map +1 -0
- package/dist/codebase-map/analyzers/structure.js +137 -0
- package/dist/codebase-map/analyzers/structure.js.map +1 -0
- package/dist/codebase-map/analyzers/testing.js +118 -0
- package/dist/codebase-map/analyzers/testing.js.map +1 -0
- package/dist/codebase-map/index.js +57 -0
- package/dist/codebase-map/index.js.map +1 -0
- package/dist/codebase-map/store.js +122 -0
- package/dist/codebase-map/store.js.map +1 -0
- package/dist/codebase-map/summary.js +152 -0
- package/dist/codebase-map/summary.js.map +1 -0
- package/dist/compliance/index.js +288 -0
- package/dist/compliance/index.js.map +1 -0
- package/dist/compliance/protocol-enforcement.js +332 -0
- package/dist/compliance/protocol-enforcement.js.map +1 -0
- package/dist/compliance/protocol-rules.js +786 -0
- package/dist/compliance/protocol-rules.js.map +1 -0
- package/dist/compliance/protocol-types.js +79 -0
- package/dist/compliance/protocol-types.js.map +1 -0
- package/dist/compliance/store.js +53 -0
- package/dist/compliance/store.js.map +1 -0
- package/dist/conduit/conduit-client.js +107 -0
- package/dist/conduit/conduit-client.js.map +1 -0
- package/dist/conduit/factory.js +52 -0
- package/dist/conduit/factory.js.map +1 -0
- package/dist/conduit/http-transport.js +155 -0
- package/dist/conduit/http-transport.js.map +1 -0
- package/dist/conduit/index.js +15 -0
- package/dist/conduit/index.js.map +1 -0
- package/dist/conduit/local-transport.d.ts +18 -8
- package/dist/conduit/local-transport.d.ts.map +1 -1
- package/dist/conduit/local-transport.js +255 -0
- package/dist/conduit/local-transport.js.map +1 -0
- package/dist/conduit/sse-transport.js +299 -0
- package/dist/conduit/sse-transport.js.map +1 -0
- package/dist/config/build-config.js +29 -0
- package/dist/config/build-config.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +400 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -0
- package/dist/context/index.js +137 -0
- package/dist/context/index.js.map +1 -0
- package/dist/crypto/credentials.js +191 -0
- package/dist/crypto/credentials.js.map +1 -0
- package/dist/discovery.js +182 -0
- package/dist/discovery.js.map +1 -0
- package/dist/engine-result.js +12 -0
- package/dist/engine-result.js.map +1 -0
- package/dist/error-catalog.js +404 -0
- package/dist/error-catalog.js.map +1 -0
- package/dist/error-registry.js +393 -0
- package/dist/error-registry.js.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +173 -0
- package/dist/errors.js.map +1 -0
- package/dist/hooks/handlers/agent-hooks.js +106 -0
- package/dist/hooks/handlers/agent-hooks.js.map +1 -0
- package/dist/hooks/handlers/context-hooks.js +111 -0
- package/dist/hooks/handlers/context-hooks.js.map +1 -0
- package/dist/hooks/handlers/error-hooks.js +52 -0
- package/dist/hooks/handlers/error-hooks.js.map +1 -0
- package/dist/hooks/handlers/file-hooks.js +104 -0
- package/dist/hooks/handlers/file-hooks.js.map +1 -0
- package/dist/hooks/handlers/handler-helpers.js +61 -0
- package/dist/hooks/handlers/handler-helpers.js.map +1 -0
- package/dist/hooks/handlers/index.js +28 -0
- package/dist/hooks/handlers/index.js.map +1 -0
- package/dist/hooks/handlers/memory-bridge-refresh.js +42 -0
- package/dist/hooks/handlers/memory-bridge-refresh.js.map +1 -0
- package/dist/hooks/handlers/notification-hooks.js +62 -0
- package/dist/hooks/handlers/notification-hooks.js.map +1 -0
- package/dist/hooks/handlers/session-hooks.d.ts +21 -0
- package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
- package/dist/hooks/handlers/session-hooks.js +142 -0
- package/dist/hooks/handlers/session-hooks.js.map +1 -0
- package/dist/hooks/handlers/task-hooks.js +65 -0
- package/dist/hooks/handlers/task-hooks.js.map +1 -0
- package/dist/hooks/handlers/work-capture-hooks.js +165 -0
- package/dist/hooks/handlers/work-capture-hooks.js.map +1 -0
- package/dist/hooks/index.js +13 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/payload-schemas.d.ts +2 -2
- package/dist/hooks/payload-schemas.js +220 -0
- package/dist/hooks/payload-schemas.js.map +1 -0
- package/dist/hooks/provider-hooks.js +66 -0
- package/dist/hooks/provider-hooks.js.map +1 -0
- package/dist/hooks/registry.js +229 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.js +66 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/hooks.js +136 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.js +175 -68684
- package/dist/index.js.map +1 -7
- package/dist/init.d.ts +1 -2
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +851 -0
- package/dist/init.js.map +1 -0
- package/dist/inject/index.js +82 -0
- package/dist/inject/index.js.map +1 -0
- package/dist/injection.js +343 -0
- package/dist/injection.js.map +1 -0
- package/dist/intelligence/adaptive-validation.js +497 -0
- package/dist/intelligence/adaptive-validation.js.map +1 -0
- package/dist/intelligence/impact.js +675 -0
- package/dist/intelligence/impact.js.map +1 -0
- package/dist/intelligence/index.js +22 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/patterns.js +492 -0
- package/dist/intelligence/patterns.js.map +1 -0
- package/dist/intelligence/prediction.js +499 -0
- package/dist/intelligence/prediction.js.map +1 -0
- package/dist/intelligence/types.js +13 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/internal.d.ts +15 -5
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +306 -0
- package/dist/internal.js.map +1 -0
- package/dist/issue/create.js +121 -0
- package/dist/issue/create.js.map +1 -0
- package/dist/issue/diagnostics.js +59 -0
- package/dist/issue/diagnostics.js.map +1 -0
- package/dist/issue/index.js +10 -0
- package/dist/issue/index.js.map +1 -0
- package/dist/issue/template-parser.js +267 -0
- package/dist/issue/template-parser.js.map +1 -0
- package/dist/json-schema-validator.js +76 -0
- package/dist/json-schema-validator.js.map +1 -0
- package/dist/lib/index.js +11 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/retry.js +152 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/tree-sitter-languages.js +71 -0
- package/dist/lib/tree-sitter-languages.js.map +1 -0
- package/dist/lifecycle/chain-composition.js +152 -0
- package/dist/lifecycle/chain-composition.js.map +1 -0
- package/dist/lifecycle/chain-store.js +246 -0
- package/dist/lifecycle/chain-store.js.map +1 -0
- package/dist/lifecycle/consolidate-rcasd.js +352 -0
- package/dist/lifecycle/consolidate-rcasd.js.map +1 -0
- package/dist/lifecycle/default-chain.js +176 -0
- package/dist/lifecycle/default-chain.js.map +1 -0
- package/dist/lifecycle/evidence.js +180 -0
- package/dist/lifecycle/evidence.js.map +1 -0
- package/dist/lifecycle/frontmatter.js +363 -0
- package/dist/lifecycle/frontmatter.js.map +1 -0
- package/dist/lifecycle/index.js +756 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/pipeline.js +656 -0
- package/dist/lifecycle/pipeline.js.map +1 -0
- package/dist/lifecycle/rcasd-index.js +326 -0
- package/dist/lifecycle/rcasd-index.js.map +1 -0
- package/dist/lifecycle/rcasd-paths.js +220 -0
- package/dist/lifecycle/rcasd-paths.js.map +1 -0
- package/dist/lifecycle/resume.js +864 -0
- package/dist/lifecycle/resume.js.map +1 -0
- package/dist/lifecycle/stage-artifacts.js +94 -0
- package/dist/lifecycle/stage-artifacts.js.map +1 -0
- package/dist/lifecycle/stage-guidance.js +234 -0
- package/dist/lifecycle/stage-guidance.js.map +1 -0
- package/dist/lifecycle/stages.js +534 -0
- package/dist/lifecycle/stages.js.map +1 -0
- package/dist/lifecycle/state-machine.js +516 -0
- package/dist/lifecycle/state-machine.js.map +1 -0
- package/dist/lifecycle/tessera-engine.js +249 -0
- package/dist/lifecycle/tessera-engine.js.map +1 -0
- package/dist/logger.js +140 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory/auto-extract.js +177 -0
- package/dist/memory/auto-extract.js.map +1 -0
- package/dist/memory/brain-embedding.js +66 -0
- package/dist/memory/brain-embedding.js.map +1 -0
- package/dist/memory/brain-lifecycle.js +298 -0
- package/dist/memory/brain-lifecycle.js.map +1 -0
- package/dist/memory/brain-links.js +161 -0
- package/dist/memory/brain-links.js.map +1 -0
- package/dist/memory/brain-maintenance.js +114 -0
- package/dist/memory/brain-maintenance.js.map +1 -0
- package/dist/memory/brain-migration.js +149 -0
- package/dist/memory/brain-migration.js.map +1 -0
- package/dist/memory/brain-reasoning.js +215 -0
- package/dist/memory/brain-reasoning.js.map +1 -0
- package/dist/memory/brain-retrieval.js +542 -0
- package/dist/memory/brain-retrieval.js.map +1 -0
- package/dist/memory/brain-row-types.js +10 -0
- package/dist/memory/brain-row-types.js.map +1 -0
- package/dist/memory/brain-search.js +519 -0
- package/dist/memory/brain-search.js.map +1 -0
- package/dist/memory/brain-similarity.js +145 -0
- package/dist/memory/brain-similarity.js.map +1 -0
- package/dist/memory/claude-mem-migration.js +277 -0
- package/dist/memory/claude-mem-migration.js.map +1 -0
- package/dist/memory/decisions.js +162 -0
- package/dist/memory/decisions.js.map +1 -0
- package/dist/memory/embedding-local.js +97 -0
- package/dist/memory/embedding-local.js.map +1 -0
- package/dist/memory/embedding-queue.js +271 -0
- package/dist/memory/embedding-queue.js.map +1 -0
- package/dist/memory/embedding-worker.js +58 -0
- package/dist/memory/embedding-worker.js.map +1 -0
- package/dist/memory/engine-compat.js +1397 -0
- package/dist/memory/engine-compat.js.map +1 -0
- package/dist/memory/index.js +1140 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/learnings.d.ts +2 -2
- package/dist/memory/learnings.js +121 -0
- package/dist/memory/learnings.js.map +1 -0
- package/dist/memory/memory-bridge.js +370 -0
- package/dist/memory/memory-bridge.js.map +1 -0
- package/dist/memory/patterns.d.ts +4 -4
- package/dist/memory/patterns.js +122 -0
- package/dist/memory/patterns.js.map +1 -0
- package/dist/memory/pipeline-manifest-sqlite.js +975 -0
- package/dist/memory/pipeline-manifest-sqlite.js.map +1 -0
- package/dist/memory/session-memory.js +331 -0
- package/dist/memory/session-memory.js.map +1 -0
- package/dist/metrics/ab-test.js +260 -0
- package/dist/metrics/ab-test.js.map +1 -0
- package/dist/metrics/aggregation.js +363 -0
- package/dist/metrics/aggregation.js.map +1 -0
- package/dist/metrics/common.js +64 -0
- package/dist/metrics/common.js.map +1 -0
- package/dist/metrics/enums.js +78 -0
- package/dist/metrics/enums.js.map +1 -0
- package/dist/metrics/index.js +19 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/model-provider-registry.js +88 -0
- package/dist/metrics/model-provider-registry.js.map +1 -0
- package/dist/metrics/otel-integration.js +263 -0
- package/dist/metrics/otel-integration.js.map +1 -0
- package/dist/metrics/provider-detection.js +103 -0
- package/dist/metrics/provider-detection.js.map +1 -0
- package/dist/metrics/token-estimation.js +253 -0
- package/dist/metrics/token-estimation.js.map +1 -0
- package/dist/metrics/token-service.js +450 -0
- package/dist/metrics/token-service.js.map +1 -0
- package/dist/migration/agent-outputs.js +316 -0
- package/dist/migration/agent-outputs.js.map +1 -0
- package/dist/migration/checksum.js +92 -0
- package/dist/migration/checksum.js.map +1 -0
- package/dist/migration/index.js +282 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/logger.js +360 -0
- package/dist/migration/logger.js.map +1 -0
- package/dist/migration/preflight.js +9 -0
- package/dist/migration/preflight.js.map +1 -0
- package/dist/migration/state.js +421 -0
- package/dist/migration/state.js.map +1 -0
- package/dist/migration/validate.js +241 -0
- package/dist/migration/validate.js.map +1 -0
- package/dist/mvi-helpers.js +74 -0
- package/dist/mvi-helpers.js.map +1 -0
- package/dist/nexus/deps.js +375 -0
- package/dist/nexus/deps.js.map +1 -0
- package/dist/nexus/discover.js +288 -0
- package/dist/nexus/discover.js.map +1 -0
- package/dist/nexus/hash.js +10 -0
- package/dist/nexus/hash.js.map +1 -0
- package/dist/nexus/index.js +40 -0
- package/dist/nexus/index.js.map +1 -0
- package/dist/nexus/migrate-json-to-sqlite.js +115 -0
- package/dist/nexus/migrate-json-to-sqlite.js.map +1 -0
- package/dist/nexus/permissions.js +105 -0
- package/dist/nexus/permissions.js.map +1 -0
- package/dist/nexus/query.js +175 -0
- package/dist/nexus/query.js.map +1 -0
- package/dist/nexus/registry.js +584 -0
- package/dist/nexus/registry.js.map +1 -0
- package/dist/nexus/sharing/index.js +288 -0
- package/dist/nexus/sharing/index.js.map +1 -0
- package/dist/nexus/transfer-types.js +8 -0
- package/dist/nexus/transfer-types.js.map +1 -0
- package/dist/nexus/transfer.js +263 -0
- package/dist/nexus/transfer.js.map +1 -0
- package/dist/nexus/workspace.js +355 -0
- package/dist/nexus/workspace.js.map +1 -0
- package/dist/observability/index.js +103 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/log-filter.js +63 -0
- package/dist/observability/log-filter.js.map +1 -0
- package/dist/observability/log-parser.js +99 -0
- package/dist/observability/log-parser.js.map +1 -0
- package/dist/observability/log-reader.js +139 -0
- package/dist/observability/log-reader.js.map +1 -0
- package/dist/observability/types.js +19 -0
- package/dist/observability/types.js.map +1 -0
- package/dist/orchestration/analyze.js +107 -0
- package/dist/orchestration/analyze.js.map +1 -0
- package/dist/orchestration/bootstrap.js +132 -0
- package/dist/orchestration/bootstrap.js.map +1 -0
- package/dist/orchestration/context.js +56 -0
- package/dist/orchestration/context.js.map +1 -0
- package/dist/orchestration/critical-path.js +100 -0
- package/dist/orchestration/critical-path.js.map +1 -0
- package/dist/orchestration/hierarchy.js +183 -0
- package/dist/orchestration/hierarchy.js.map +1 -0
- package/dist/orchestration/index.js +287 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/parallel.js +89 -0
- package/dist/orchestration/parallel.js.map +1 -0
- package/dist/orchestration/protocol-validators.js +815 -0
- package/dist/orchestration/protocol-validators.js.map +1 -0
- package/dist/orchestration/skill-ops.js +98 -0
- package/dist/orchestration/skill-ops.js.map +1 -0
- package/dist/orchestration/status.js +107 -0
- package/dist/orchestration/status.js.map +1 -0
- package/dist/orchestration/unblock.js +103 -0
- package/dist/orchestration/unblock.js.map +1 -0
- package/dist/orchestration/validate-spawn.js +67 -0
- package/dist/orchestration/validate-spawn.js.map +1 -0
- package/dist/orchestration/waves.js +86 -0
- package/dist/orchestration/waves.js.map +1 -0
- package/dist/otel/index.js +163 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/output.d.ts +32 -11
- package/dist/output.d.ts.map +1 -1
- package/dist/output.js +164 -0
- package/dist/output.js.map +1 -0
- package/dist/pagination.js +64 -0
- package/dist/pagination.js.map +1 -0
- package/dist/paths.d.ts +39 -9
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +842 -0
- package/dist/paths.js.map +1 -0
- package/dist/phases/deps.js +372 -0
- package/dist/phases/deps.js.map +1 -0
- package/dist/phases/index.js +349 -0
- package/dist/phases/index.js.map +1 -0
- package/dist/pipeline/index.js +10 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/phase.js +45 -0
- package/dist/pipeline/phase.js.map +1 -0
- package/dist/platform.js +211 -0
- package/dist/platform.js.map +1 -0
- package/dist/project-info.js +84 -0
- package/dist/project-info.js.map +1 -0
- package/dist/reconciliation/index.js +10 -0
- package/dist/reconciliation/index.js.map +1 -0
- package/dist/reconciliation/link-store.js +129 -0
- package/dist/reconciliation/link-store.js.map +1 -0
- package/dist/reconciliation/reconciliation-engine.js +298 -0
- package/dist/reconciliation/reconciliation-engine.js.map +1 -0
- package/dist/release/artifacts.js +427 -0
- package/dist/release/artifacts.js.map +1 -0
- package/dist/release/changelog-writer.js +151 -0
- package/dist/release/changelog-writer.js.map +1 -0
- package/dist/release/channel.js +144 -0
- package/dist/release/channel.js.map +1 -0
- package/dist/release/ci.js +166 -0
- package/dist/release/ci.js.map +1 -0
- package/dist/release/github-pr.js +225 -0
- package/dist/release/github-pr.js.map +1 -0
- package/dist/release/guards.js +116 -0
- package/dist/release/guards.js.map +1 -0
- package/dist/release/index.js +22 -0
- package/dist/release/index.js.map +1 -0
- package/dist/release/release-config.js +158 -0
- package/dist/release/release-config.js.map +1 -0
- package/dist/release/release-manifest.js +1019 -0
- package/dist/release/release-manifest.js.map +1 -0
- package/dist/release/version-bump.js +255 -0
- package/dist/release/version-bump.js.map +1 -0
- package/dist/remote/index.js +257 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/repair.js +130 -0
- package/dist/repair.js.map +1 -0
- package/dist/research/index.js +2 -0
- package/dist/research/index.js.map +1 -0
- package/dist/roadmap/index.js +59 -0
- package/dist/roadmap/index.js.map +1 -0
- package/dist/routing/capability-matrix.js +1556 -0
- package/dist/routing/capability-matrix.js.map +1 -0
- package/dist/routing/index.js +9 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/scaffold.d.ts +15 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +1759 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/schema-management.js +295 -0
- package/dist/schema-management.js.map +1 -0
- package/dist/security/index.js +9 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/input-sanitization.js +321 -0
- package/dist/security/input-sanitization.js.map +1 -0
- package/dist/sequence/index.js +295 -0
- package/dist/sequence/index.js.map +1 -0
- package/dist/sessions/assumptions.js +54 -0
- package/dist/sessions/assumptions.js.map +1 -0
- package/dist/sessions/briefing.js +377 -0
- package/dist/sessions/briefing.js.map +1 -0
- package/dist/sessions/context-alert.js +222 -0
- package/dist/sessions/context-alert.js.map +1 -0
- package/dist/sessions/context-inject.js +61 -0
- package/dist/sessions/context-inject.js.map +1 -0
- package/dist/sessions/context-monitor.js +98 -0
- package/dist/sessions/context-monitor.js.map +1 -0
- package/dist/sessions/decisions.js +65 -0
- package/dist/sessions/decisions.js.map +1 -0
- package/dist/sessions/find.js +65 -0
- package/dist/sessions/find.js.map +1 -0
- package/dist/sessions/handoff.js +328 -0
- package/dist/sessions/handoff.js.map +1 -0
- package/dist/sessions/hitl-warnings.js +254 -0
- package/dist/sessions/hitl-warnings.js.map +1 -0
- package/dist/sessions/index.js +327 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/session-archive.js +40 -0
- package/dist/sessions/session-archive.js.map +1 -0
- package/dist/sessions/session-cleanup.js +59 -0
- package/dist/sessions/session-cleanup.js.map +1 -0
- package/dist/sessions/session-drift.js +134 -0
- package/dist/sessions/session-drift.js.map +1 -0
- package/dist/sessions/session-enforcement.js +144 -0
- package/dist/sessions/session-enforcement.js.map +1 -0
- package/dist/sessions/session-grade.js +253 -0
- package/dist/sessions/session-grade.js.map +1 -0
- package/dist/sessions/session-history.js +42 -0
- package/dist/sessions/session-history.js.map +1 -0
- package/dist/sessions/session-id.js +81 -0
- package/dist/sessions/session-id.js.map +1 -0
- package/dist/sessions/session-memory-bridge.js +52 -0
- package/dist/sessions/session-memory-bridge.js.map +1 -0
- package/dist/sessions/session-show.js +24 -0
- package/dist/sessions/session-show.js.map +1 -0
- package/dist/sessions/session-stats.js +69 -0
- package/dist/sessions/session-stats.js.map +1 -0
- package/dist/sessions/session-suspend.js +39 -0
- package/dist/sessions/session-suspend.js.map +1 -0
- package/dist/sessions/session-switch.js +51 -0
- package/dist/sessions/session-switch.js.map +1 -0
- package/dist/sessions/session-view.js +76 -0
- package/dist/sessions/session-view.js.map +1 -0
- package/dist/sessions/snapshot.js +213 -0
- package/dist/sessions/snapshot.js.map +1 -0
- package/dist/sessions/statusline-setup.js +85 -0
- package/dist/sessions/statusline-setup.js.map +1 -0
- package/dist/sessions/types.js +8 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/skills/agents/config.js +94 -0
- package/dist/skills/agents/config.js.map +1 -0
- package/dist/skills/agents/install.js +116 -0
- package/dist/skills/agents/install.js.map +1 -0
- package/dist/skills/agents/registry.js +161 -0
- package/dist/skills/agents/registry.js.map +1 -0
- package/dist/skills/discovery.js +333 -0
- package/dist/skills/discovery.js.map +1 -0
- package/dist/skills/dispatch.js +347 -0
- package/dist/skills/dispatch.js.map +1 -0
- package/dist/skills/dynamic-skill-generator.d.ts +0 -2
- package/dist/skills/dynamic-skill-generator.d.ts.map +1 -1
- package/dist/skills/dynamic-skill-generator.js +87 -0
- package/dist/skills/dynamic-skill-generator.js.map +1 -0
- package/dist/skills/index.js +44 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/injection/subagent.js +195 -0
- package/dist/skills/injection/subagent.js.map +1 -0
- package/dist/skills/injection/token.js +260 -0
- package/dist/skills/injection/token.js.map +1 -0
- package/dist/skills/install.js +40 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/skills/manifests/contribution.js +175 -0
- package/dist/skills/manifests/contribution.js.map +1 -0
- package/dist/skills/manifests/research.js +281 -0
- package/dist/skills/manifests/research.js.map +1 -0
- package/dist/skills/manifests/resolver.js +146 -0
- package/dist/skills/manifests/resolver.js.map +1 -0
- package/dist/skills/marketplace.js +90 -0
- package/dist/skills/marketplace.js.map +1 -0
- package/dist/skills/orchestrator/spawn.js +178 -0
- package/dist/skills/orchestrator/spawn.js.map +1 -0
- package/dist/skills/orchestrator/startup.js +451 -0
- package/dist/skills/orchestrator/startup.js.map +1 -0
- package/dist/skills/orchestrator/validator.js +301 -0
- package/dist/skills/orchestrator/validator.js.map +1 -0
- package/dist/skills/precedence-integration.js +73 -0
- package/dist/skills/precedence-integration.js.map +1 -0
- package/dist/skills/precedence-types.js +16 -0
- package/dist/skills/precedence-types.js.map +1 -0
- package/dist/skills/routing-table.js +63 -0
- package/dist/skills/routing-table.js.map +1 -0
- package/dist/skills/skill-paths.js +217 -0
- package/dist/skills/skill-paths.js.map +1 -0
- package/dist/skills/test-utility.js +55 -0
- package/dist/skills/test-utility.js.map +1 -0
- package/dist/skills/types.js +118 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validation.js +183 -0
- package/dist/skills/validation.js.map +1 -0
- package/dist/skills/version.js +57 -0
- package/dist/skills/version.js.map +1 -0
- package/dist/snapshot/index.js +188 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/spawn/adapter-registry.js +246 -0
- package/dist/spawn/adapter-registry.js.map +1 -0
- package/dist/spawn/index.js +10 -0
- package/dist/spawn/index.js.map +1 -0
- package/dist/stats/index.js +343 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/stats/workflow-telemetry.js +400 -0
- package/dist/stats/workflow-telemetry.js.map +1 -0
- package/dist/sticky/archive.js +47 -0
- package/dist/sticky/archive.js.map +1 -0
- package/dist/sticky/convert.js +235 -0
- package/dist/sticky/convert.js.map +1 -0
- package/dist/sticky/create.js +48 -0
- package/dist/sticky/create.js.map +1 -0
- package/dist/sticky/id.js +35 -0
- package/dist/sticky/id.js.map +1 -0
- package/dist/sticky/index.js +16 -0
- package/dist/sticky/index.js.map +1 -0
- package/dist/sticky/list.js +44 -0
- package/dist/sticky/list.js.map +1 -0
- package/dist/sticky/purge.js +45 -0
- package/dist/sticky/purge.js.map +1 -0
- package/dist/sticky/show.js +42 -0
- package/dist/sticky/show.js.map +1 -0
- package/dist/sticky/types.js +10 -0
- package/dist/sticky/types.js.map +1 -0
- package/dist/store/agent-registry-accessor.d.ts +203 -12
- package/dist/store/agent-registry-accessor.d.ts.map +1 -1
- package/dist/store/agent-registry-accessor.js +783 -0
- package/dist/store/agent-registry-accessor.js.map +1 -0
- package/dist/store/api-key-kdf.d.ts +73 -0
- package/dist/store/api-key-kdf.d.ts.map +1 -0
- package/dist/store/api-key-kdf.js +84 -0
- package/dist/store/api-key-kdf.js.map +1 -0
- package/dist/store/atomic.js +167 -0
- package/dist/store/atomic.js.map +1 -0
- package/dist/store/backup.js +94 -0
- package/dist/store/backup.js.map +1 -0
- package/dist/store/brain-accessor.js +397 -0
- package/dist/store/brain-accessor.js.map +1 -0
- package/dist/store/brain-schema.d.ts +8 -8
- package/dist/store/brain-schema.js +215 -0
- package/dist/store/brain-schema.js.map +1 -0
- package/dist/store/brain-sqlite.js +222 -0
- package/dist/store/brain-sqlite.js.map +1 -0
- package/dist/store/cache.js +168 -0
- package/dist/store/cache.js.map +1 -0
- package/dist/store/chain-schema.js +51 -0
- package/dist/store/chain-schema.js.map +1 -0
- package/dist/store/cleanup-legacy.d.ts +128 -0
- package/dist/store/cleanup-legacy.d.ts.map +1 -0
- package/dist/store/cleanup-legacy.js +171 -0
- package/dist/store/cleanup-legacy.js.map +1 -0
- package/dist/store/conduit-sqlite.d.ts +184 -0
- package/dist/store/conduit-sqlite.d.ts.map +1 -0
- package/dist/store/conduit-sqlite.js +570 -0
- package/dist/store/conduit-sqlite.js.map +1 -0
- package/dist/store/converters.js +124 -0
- package/dist/store/converters.js.map +1 -0
- package/dist/store/cross-db-cleanup.js +319 -0
- package/dist/store/cross-db-cleanup.js.map +1 -0
- package/dist/store/data-accessor.js +26 -0
- package/dist/store/data-accessor.js.map +1 -0
- package/dist/store/data-safety-central.js +269 -0
- package/dist/store/data-safety-central.js.map +1 -0
- package/dist/store/data-safety.js +274 -0
- package/dist/store/data-safety.js.map +1 -0
- package/dist/store/db-helpers.js +224 -0
- package/dist/store/db-helpers.js.map +1 -0
- package/dist/store/export.js +155 -0
- package/dist/store/export.js.map +1 -0
- package/dist/store/file-utils.js +270 -0
- package/dist/store/file-utils.js.map +1 -0
- package/dist/store/git-checkpoint.js +365 -0
- package/dist/store/git-checkpoint.js.map +1 -0
- package/dist/store/global-salt.d.ts +78 -0
- package/dist/store/global-salt.d.ts.map +1 -0
- package/dist/store/global-salt.js +147 -0
- package/dist/store/global-salt.js.map +1 -0
- package/dist/store/import-logging.js +139 -0
- package/dist/store/import-logging.js.map +1 -0
- package/dist/store/import-remap.js +145 -0
- package/dist/store/import-remap.js.map +1 -0
- package/dist/store/import-sort.js +121 -0
- package/dist/store/import-sort.js.map +1 -0
- package/dist/store/index.d.ts +1 -0
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +29 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/json.js +208 -0
- package/dist/store/json.js.map +1 -0
- package/dist/store/lifecycle-store.js +249 -0
- package/dist/store/lifecycle-store.js.map +1 -0
- package/dist/store/lock.js +70 -0
- package/dist/store/lock.js.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.d.ts +81 -0
- package/dist/store/migrate-signaldock-to-conduit.d.ts.map +1 -0
- package/dist/store/migrate-signaldock-to-conduit.js +555 -0
- package/dist/store/migrate-signaldock-to-conduit.js.map +1 -0
- package/dist/store/migration-manager.js +151 -0
- package/dist/store/migration-manager.js.map +1 -0
- package/dist/store/migration-sqlite.js +676 -0
- package/dist/store/migration-sqlite.js.map +1 -0
- package/dist/store/nexus-schema.js +62 -0
- package/dist/store/nexus-schema.js.map +1 -0
- package/dist/store/nexus-sqlite.d.ts +14 -2
- package/dist/store/nexus-sqlite.d.ts.map +1 -1
- package/dist/store/nexus-sqlite.js +242 -0
- package/dist/store/nexus-sqlite.js.map +1 -0
- package/dist/store/nexus-validation-schemas.js +40 -0
- package/dist/store/nexus-validation-schemas.js.map +1 -0
- package/dist/store/parsers.js +37 -0
- package/dist/store/parsers.js.map +1 -0
- package/dist/store/project-detect.js +457 -0
- package/dist/store/project-detect.js.map +1 -0
- package/dist/store/provider.js +101 -0
- package/dist/store/provider.js.map +1 -0
- package/dist/store/safety-data-accessor.js +257 -0
- package/dist/store/safety-data-accessor.js.map +1 -0
- package/dist/store/schema.js +7 -0
- package/dist/store/schema.js.map +1 -0
- package/dist/store/session-store.js +219 -0
- package/dist/store/session-store.js.map +1 -0
- package/dist/store/signaldock-sqlite.d.ts +122 -19
- package/dist/store/signaldock-sqlite.d.ts.map +1 -1
- package/dist/store/signaldock-sqlite.js +550 -0
- package/dist/store/signaldock-sqlite.js.map +1 -0
- package/dist/store/sqlite-backup.d.ts +121 -10
- package/dist/store/sqlite-backup.d.ts.map +1 -1
- package/dist/store/sqlite-backup.js +359 -0
- package/dist/store/sqlite-backup.js.map +1 -0
- package/dist/store/sqlite-data-accessor.js +787 -0
- package/dist/store/sqlite-data-accessor.js.map +1 -0
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +481 -0
- package/dist/store/sqlite.js.map +1 -0
- package/dist/store/status-registry.js +8 -0
- package/dist/store/status-registry.js.map +1 -0
- package/dist/store/task-store.js +358 -0
- package/dist/store/task-store.js.map +1 -0
- package/dist/store/tasks-schema.d.ts +8 -8
- package/dist/store/tasks-schema.js +610 -0
- package/dist/store/tasks-schema.js.map +1 -0
- package/dist/store/typed-query.js +15 -0
- package/dist/store/typed-query.js.map +1 -0
- package/dist/store/validation-schemas.d.ts +37 -37
- package/dist/store/validation-schemas.js +278 -0
- package/dist/store/validation-schemas.js.map +1 -0
- package/dist/system/archive-analytics.js +277 -0
- package/dist/system/archive-analytics.js.map +1 -0
- package/dist/system/archive-stats.js +64 -0
- package/dist/system/archive-stats.js.map +1 -0
- package/dist/system/audit.js +145 -0
- package/dist/system/audit.js.map +1 -0
- package/dist/system/backup.d.ts +65 -3
- package/dist/system/backup.d.ts.map +1 -1
- package/dist/system/backup.js +280 -0
- package/dist/system/backup.js.map +1 -0
- package/dist/system/cleanup.js +134 -0
- package/dist/system/cleanup.js.map +1 -0
- package/dist/system/health.js +1100 -0
- package/dist/system/health.js.map +1 -0
- package/dist/system/index.js +18 -0
- package/dist/system/index.js.map +1 -0
- package/dist/system/inject-generate.js +122 -0
- package/dist/system/inject-generate.js.map +1 -0
- package/dist/system/labels.js +38 -0
- package/dist/system/labels.js.map +1 -0
- package/dist/system/metrics.js +61 -0
- package/dist/system/metrics.js.map +1 -0
- package/dist/system/migrate.js +43 -0
- package/dist/system/migrate.js.map +1 -0
- package/dist/system/platform-paths.js +80 -0
- package/dist/system/platform-paths.js.map +1 -0
- package/dist/system/runtime.d.ts +0 -2
- package/dist/system/runtime.d.ts.map +1 -1
- package/dist/system/runtime.js +161 -0
- package/dist/system/runtime.js.map +1 -0
- package/dist/system/safestop.js +99 -0
- package/dist/system/safestop.js.map +1 -0
- package/dist/system/storage-preflight.js +123 -0
- package/dist/system/storage-preflight.js.map +1 -0
- package/dist/task-work/index.js +159 -0
- package/dist/task-work/index.js.map +1 -0
- package/dist/tasks/add.d.ts +1 -1
- package/dist/tasks/add.d.ts.map +1 -1
- package/dist/tasks/add.js +736 -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.d.ts.map +1 -1
- package/dist/tasks/complete.js +214 -0
- package/dist/tasks/complete.js.map +1 -0
- package/dist/tasks/crossref-extract.js +73 -0
- package/dist/tasks/crossref-extract.js.map +1 -0
- package/dist/tasks/delete-preview.js +192 -0
- package/dist/tasks/delete-preview.js.map +1 -0
- package/dist/tasks/delete.js +120 -0
- package/dist/tasks/delete.js.map +1 -0
- package/dist/tasks/deletion-strategy.js +200 -0
- package/dist/tasks/deletion-strategy.js.map +1 -0
- package/dist/tasks/dependency-check.js +278 -0
- package/dist/tasks/dependency-check.js.map +1 -0
- package/dist/tasks/deps-ready.js +32 -0
- package/dist/tasks/deps-ready.js.map +1 -0
- package/dist/tasks/enforcement.js +86 -0
- package/dist/tasks/enforcement.js.map +1 -0
- package/dist/tasks/epic-enforcement.js +294 -0
- package/dist/tasks/epic-enforcement.js.map +1 -0
- package/dist/tasks/find.d.ts.map +1 -1
- package/dist/tasks/find.js +157 -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.d.ts.map +1 -1
- package/dist/tasks/labels.js +55 -0
- package/dist/tasks/labels.js.map +1 -0
- package/dist/tasks/list.js +75 -0
- package/dist/tasks/list.js.map +1 -0
- package/dist/tasks/phase-tracking.js +133 -0
- package/dist/tasks/phase-tracking.js.map +1 -0
- package/dist/tasks/pipeline-stage.js +248 -0
- package/dist/tasks/pipeline-stage.js.map +1 -0
- package/dist/tasks/plan.js +268 -0
- package/dist/tasks/plan.js.map +1 -0
- package/dist/tasks/relates.d.ts.map +1 -1
- package/dist/tasks/relates.js +101 -0
- package/dist/tasks/relates.js.map +1 -0
- package/dist/tasks/show.d.ts.map +1 -1
- package/dist/tasks/show.js +83 -0
- package/dist/tasks/show.js.map +1 -0
- package/dist/tasks/size-weighting.js +86 -0
- package/dist/tasks/size-weighting.js.map +1 -0
- package/dist/tasks/staleness.js +86 -0
- package/dist/tasks/staleness.js.map +1 -0
- package/dist/tasks/task-ops.js +1741 -0
- package/dist/tasks/task-ops.js.map +1 -0
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +303 -0
- package/dist/tasks/update.js.map +1 -0
- package/dist/templates/index.js +10 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/parser.js +254 -0
- package/dist/templates/parser.js.map +1 -0
- package/dist/ui/aliases.js +153 -0
- package/dist/ui/aliases.js.map +1 -0
- package/dist/ui/changelog.js +184 -0
- package/dist/ui/changelog.js.map +1 -0
- package/dist/ui/command-registry.js +168 -0
- package/dist/ui/command-registry.js.map +1 -0
- package/dist/ui/flags.js +94 -0
- package/dist/ui/flags.js.map +1 -0
- package/dist/ui/index.js +24 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/upgrade.js +1148 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/validation/chain-validation.js +146 -0
- package/dist/validation/chain-validation.js.map +1 -0
- package/dist/validation/compliance.js +155 -0
- package/dist/validation/compliance.js.map +1 -0
- package/dist/validation/docs-sync.js +212 -0
- package/dist/validation/docs-sync.js.map +1 -0
- package/dist/validation/doctor/checks.js +1069 -0
- package/dist/validation/doctor/checks.js.map +1 -0
- package/dist/validation/doctor/index.js +9 -0
- package/dist/validation/doctor/index.js.map +1 -0
- package/dist/validation/doctor/project-cache.js +160 -0
- package/dist/validation/doctor/project-cache.js.map +1 -0
- package/dist/validation/doctor/utils.js +155 -0
- package/dist/validation/doctor/utils.js.map +1 -0
- package/dist/validation/engine.d.ts.map +1 -1
- package/dist/validation/engine.js +914 -0
- package/dist/validation/engine.js.map +1 -0
- package/dist/validation/gap-check.js +175 -0
- package/dist/validation/gap-check.js.map +1 -0
- package/dist/validation/index.js +40 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/manifest.js +237 -0
- package/dist/validation/manifest.js.map +1 -0
- package/dist/validation/operation-gate-validators.js +724 -0
- package/dist/validation/operation-gate-validators.js.map +1 -0
- package/dist/validation/operation-verification-gates.js +532 -0
- package/dist/validation/operation-verification-gates.js.map +1 -0
- package/dist/validation/param-utils.d.ts +5 -3
- package/dist/validation/param-utils.d.ts.map +1 -1
- package/dist/validation/param-utils.js +141 -0
- package/dist/validation/param-utils.js.map +1 -0
- package/dist/validation/protocol-common.js +300 -0
- package/dist/validation/protocol-common.js.map +1 -0
- package/dist/validation/protocols/_shared.d.ts.map +1 -1
- package/dist/validation/protocols/_shared.js +82 -0
- package/dist/validation/protocols/_shared.js.map +1 -0
- package/dist/validation/protocols/architecture-decision.js +31 -0
- package/dist/validation/protocols/architecture-decision.js.map +1 -0
- package/dist/validation/protocols/artifact-publish.js +28 -0
- package/dist/validation/protocols/artifact-publish.js.map +1 -0
- package/dist/validation/protocols/consensus.js +41 -0
- package/dist/validation/protocols/consensus.js.map +1 -0
- package/dist/validation/protocols/contribution.js +27 -0
- package/dist/validation/protocols/contribution.js.map +1 -0
- package/dist/validation/protocols/decomposition.js +28 -0
- package/dist/validation/protocols/decomposition.js.map +1 -0
- package/dist/validation/protocols/implementation.js +24 -0
- package/dist/validation/protocols/implementation.js.map +1 -0
- package/dist/validation/protocols/provenance.js +29 -0
- package/dist/validation/protocols/provenance.js.map +1 -0
- package/dist/validation/protocols/release.js +29 -0
- package/dist/validation/protocols/release.js.map +1 -0
- package/dist/validation/protocols/research.js +24 -0
- package/dist/validation/protocols/research.js.map +1 -0
- package/dist/validation/protocols/specification.js +27 -0
- package/dist/validation/protocols/specification.js.map +1 -0
- package/dist/validation/protocols/testing.js +30 -0
- package/dist/validation/protocols/testing.js.map +1 -0
- package/dist/validation/protocols/validation.js +30 -0
- package/dist/validation/protocols/validation.js.map +1 -0
- package/dist/validation/schema-integrity.js +170 -0
- package/dist/validation/schema-integrity.js.map +1 -0
- package/dist/validation/schema-validator.js +176 -0
- package/dist/validation/schema-validator.js.map +1 -0
- package/dist/validation/validate-ops.js +937 -0
- package/dist/validation/validate-ops.js.map +1 -0
- package/dist/validation/validation-rules.js +226 -0
- package/dist/validation/validation-rules.js.map +1 -0
- package/dist/validation/verification.js +321 -0
- package/dist/validation/verification.js.map +1 -0
- package/package.json +10 -8
- package/src/__tests__/paths-walkup.test.ts +305 -0
- package/src/__tests__/paths.test.ts +61 -17
- package/src/adapters/__tests__/manager.test.ts +0 -1
- package/src/codebase-map/analyzers/architecture.ts +0 -1
- package/src/conduit/__tests__/local-credential-flow.test.ts +20 -18
- package/src/conduit/__tests__/local-transport.test.ts +14 -12
- package/src/conduit/local-transport.ts +23 -13
- package/src/config.ts +0 -1
- package/src/errors.ts +24 -0
- package/src/hooks/handlers/__tests__/hook-automation-e2e.test.ts +2 -5
- package/src/hooks/handlers/session-hooks.ts +42 -0
- package/src/init.ts +1 -2
- package/src/internal.ts +67 -3
- package/src/lifecycle/cant/lifecycle-rcasd.cant +133 -0
- package/src/memory/__tests__/engine-compat.test.ts +2 -2
- package/src/memory/__tests__/pipeline-manifest-sqlite.test.ts +4 -4
- package/src/observability/__tests__/index.test.ts +4 -4
- package/src/observability/__tests__/log-filter.test.ts +4 -4
- package/src/output.ts +73 -75
- package/src/paths.ts +91 -14
- package/src/scaffold.ts +22 -3
- package/src/sessions/__tests__/session-grade.integration.test.ts +1 -1
- package/src/sessions/__tests__/session-grade.test.ts +2 -2
- package/src/skills/__tests__/dynamic-skill-generator.test.ts +0 -2
- package/src/skills/dynamic-skill-generator.ts +0 -2
- package/src/store/__tests__/agent-registry-accessor.test.ts +807 -0
- package/src/store/__tests__/api-key-kdf.test.ts +113 -0
- package/src/store/__tests__/cleanup-legacy.test.ts +268 -0
- package/src/store/__tests__/conduit-sqlite.test.ts +413 -0
- package/src/store/__tests__/database-topology-integration.test.ts +504 -0
- package/src/store/__tests__/global-salt.test.ts +195 -0
- package/src/store/__tests__/migrate-signaldock-to-conduit.test.ts +715 -0
- package/src/store/__tests__/signaldock-sqlite.test.ts +652 -0
- package/src/store/__tests__/sqlite-backup-global.test.ts +585 -0
- package/src/store/__tests__/sqlite-backup.test.ts +122 -10
- package/src/store/__tests__/t310-integration.test.ts +1150 -0
- package/src/store/agent-registry-accessor.ts +847 -140
- package/src/store/api-key-kdf.ts +104 -0
- package/src/store/cleanup-legacy.ts +208 -0
- package/src/store/conduit-sqlite.ts +655 -0
- package/src/store/global-salt.ts +175 -0
- package/src/store/index.ts +7 -0
- package/src/store/migrate-signaldock-to-conduit.ts +669 -0
- package/src/store/nexus-sqlite.ts +32 -3
- package/src/store/signaldock-sqlite.ts +431 -254
- package/src/store/sqlite-backup.ts +544 -38
- package/src/store/sqlite.ts +19 -3
- package/src/system/__tests__/backup.test.ts +237 -0
- package/src/system/backup.ts +186 -26
- package/src/system/runtime.ts +4 -6
- package/src/tasks/__tests__/error-hints.test.ts +256 -0
- package/src/tasks/add.ts +99 -9
- package/src/tasks/complete.ts +4 -1
- package/src/tasks/find.ts +4 -1
- package/src/tasks/labels.ts +4 -1
- package/src/tasks/relates.ts +16 -4
- package/src/tasks/show.ts +4 -1
- package/src/tasks/update.ts +32 -3
- package/src/validation/__tests__/error-hints.test.ts +97 -0
- package/src/validation/engine.ts +16 -1
- package/src/validation/param-utils.ts +10 -7
- package/src/validation/protocols/_shared.ts +14 -6
- package/src/validation/protocols/cant/architecture-decision.cant +80 -0
- package/src/validation/protocols/cant/artifact-publish.cant +95 -0
- package/src/validation/protocols/cant/consensus.cant +74 -0
- package/src/validation/protocols/cant/contribution.cant +82 -0
- package/src/validation/protocols/cant/decomposition.cant +92 -0
- package/src/validation/protocols/cant/implementation.cant +67 -0
- package/src/validation/protocols/cant/provenance.cant +88 -0
- package/src/validation/protocols/cant/release.cant +96 -0
- package/src/validation/protocols/cant/research.cant +66 -0
- package/src/validation/protocols/cant/specification.cant +67 -0
- package/src/validation/protocols/cant/testing.cant +88 -0
- package/src/validation/protocols/cant/validation.cant +65 -0
- package/src/validation/protocols/protocols-markdown/decomposition.md +0 -4
- package/templates/cleo-gitignore +19 -3
- package/templates/config.template.json +0 -1
- package/templates/global-config.template.json +0 -1
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Regression tests: CleoError fix hints on task-layer throws.
|
|
3
|
+
*
|
|
4
|
+
* Each test invokes a core function with invalid input and asserts that
|
|
5
|
+
* the thrown CleoError carries:
|
|
6
|
+
* - options.fix — a non-empty string with a concrete recovery action
|
|
7
|
+
* - options.details.field — the specific field that failed
|
|
8
|
+
*
|
|
9
|
+
* @task T341
|
|
10
|
+
* @epic T335
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
14
|
+
import { CleoError } from '../../errors.js';
|
|
15
|
+
import { createTestDb, type TestDbEnv } from '../../store/__tests__/test-db-helper.js';
|
|
16
|
+
import { resetDbState } from '../../store/sqlite.js';
|
|
17
|
+
import {
|
|
18
|
+
addTask,
|
|
19
|
+
validateDepends,
|
|
20
|
+
validateLabels,
|
|
21
|
+
validatePhaseFormat,
|
|
22
|
+
validateSize,
|
|
23
|
+
validateStatus,
|
|
24
|
+
validateTaskType,
|
|
25
|
+
validateTitle,
|
|
26
|
+
} from '../add.js';
|
|
27
|
+
import { findTasks } from '../find.js';
|
|
28
|
+
import { showLabelTasks } from '../labels.js';
|
|
29
|
+
import { showTask } from '../show.js';
|
|
30
|
+
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Helper: assert a CleoError has fix + details
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
function assertErrorHints(
|
|
36
|
+
fn: () => unknown,
|
|
37
|
+
opts: { fixIncludes?: string; detailsField?: string },
|
|
38
|
+
): void {
|
|
39
|
+
let caught: unknown;
|
|
40
|
+
try {
|
|
41
|
+
fn();
|
|
42
|
+
} catch (err) {
|
|
43
|
+
caught = err;
|
|
44
|
+
}
|
|
45
|
+
expect(caught).toBeInstanceOf(CleoError);
|
|
46
|
+
const e = caught as CleoError;
|
|
47
|
+
expect(e.fix).toBeTruthy();
|
|
48
|
+
if (opts.fixIncludes) {
|
|
49
|
+
expect(e.fix).toContain(opts.fixIncludes);
|
|
50
|
+
}
|
|
51
|
+
if (opts.detailsField) {
|
|
52
|
+
expect(e.details).toBeDefined();
|
|
53
|
+
expect(e.details!.field).toBe(opts.detailsField);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function assertAsyncErrorHints(
|
|
58
|
+
fn: () => Promise<unknown>,
|
|
59
|
+
opts: { fixIncludes?: string; detailsField?: string },
|
|
60
|
+
): Promise<void> {
|
|
61
|
+
let caught: unknown;
|
|
62
|
+
try {
|
|
63
|
+
await fn();
|
|
64
|
+
} catch (err) {
|
|
65
|
+
caught = err;
|
|
66
|
+
}
|
|
67
|
+
expect(caught).toBeInstanceOf(CleoError);
|
|
68
|
+
const e = caught as CleoError;
|
|
69
|
+
expect(e.fix).toBeTruthy();
|
|
70
|
+
if (opts.fixIncludes) {
|
|
71
|
+
expect(e.fix).toContain(opts.fixIncludes);
|
|
72
|
+
}
|
|
73
|
+
if (opts.detailsField) {
|
|
74
|
+
expect(e.details).toBeDefined();
|
|
75
|
+
expect(e.details!.field).toBe(opts.detailsField);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Tests
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
|
|
83
|
+
describe('error-hints: validateTitle', () => {
|
|
84
|
+
it('empty title — fix mentions cleo add, field=title', () => {
|
|
85
|
+
assertErrorHints(() => validateTitle(''), {
|
|
86
|
+
fixIncludes: 'cleo add',
|
|
87
|
+
detailsField: 'title',
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('whitespace-only title — fix mentions cleo add, field=title', () => {
|
|
92
|
+
assertErrorHints(() => validateTitle(' '), {
|
|
93
|
+
fixIncludes: 'cleo add',
|
|
94
|
+
detailsField: 'title',
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('title too long — fix mentions 200, field=title, details has expected/actual', () => {
|
|
99
|
+
let caught: unknown;
|
|
100
|
+
try {
|
|
101
|
+
validateTitle('a'.repeat(201));
|
|
102
|
+
} catch (err) {
|
|
103
|
+
caught = err;
|
|
104
|
+
}
|
|
105
|
+
expect(caught).toBeInstanceOf(CleoError);
|
|
106
|
+
const e = caught as CleoError;
|
|
107
|
+
expect(e.fix).toContain('200');
|
|
108
|
+
expect(e.details).toBeDefined();
|
|
109
|
+
expect(e.details!.field).toBe('title');
|
|
110
|
+
expect(e.details!.expected).toBe(200);
|
|
111
|
+
expect(e.details!.actual).toBe(201);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
describe('error-hints: validateStatus', () => {
|
|
116
|
+
it('invalid status — fix mentions --status, field=status', () => {
|
|
117
|
+
assertErrorHints(() => validateStatus('broken'), {
|
|
118
|
+
fixIncludes: '--status',
|
|
119
|
+
detailsField: 'status',
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
describe('error-hints: validateSize', () => {
|
|
125
|
+
it('invalid size — fix mentions --size, field=size', () => {
|
|
126
|
+
assertErrorHints(() => validateSize('giant'), {
|
|
127
|
+
fixIncludes: '--size',
|
|
128
|
+
detailsField: 'size',
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe('error-hints: validateTaskType', () => {
|
|
134
|
+
it('invalid type — fix mentions --type, field=type', () => {
|
|
135
|
+
assertErrorHints(() => validateTaskType('mega-task'), {
|
|
136
|
+
fixIncludes: '--type',
|
|
137
|
+
detailsField: 'type',
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
describe('error-hints: validateLabels', () => {
|
|
143
|
+
it('invalid label — fix mentions pattern, field=labels', () => {
|
|
144
|
+
assertErrorHints(() => validateLabels(['UPPERCASE']), {
|
|
145
|
+
fixIncludes: '^[a-z]',
|
|
146
|
+
detailsField: 'labels',
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
describe('error-hints: validatePhaseFormat', () => {
|
|
152
|
+
it('invalid phase — fix mentions pattern, field=phase', () => {
|
|
153
|
+
assertErrorHints(() => validatePhaseFormat('UPPER_CASE'), {
|
|
154
|
+
fixIncludes: '^[a-z]',
|
|
155
|
+
detailsField: 'phase',
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
describe('error-hints: validateDepends (sync helper)', () => {
|
|
161
|
+
it('invalid dep ID format — fix mentions T### format, field=depends', () => {
|
|
162
|
+
assertErrorHints(() => validateDepends(['invalid'], []), {
|
|
163
|
+
fixIncludes: 'T###',
|
|
164
|
+
detailsField: 'depends',
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('dep not found — fix mentions cleo find, field=depends', () => {
|
|
169
|
+
assertErrorHints(() => validateDepends(['T999'], []), {
|
|
170
|
+
fixIncludes: 'find',
|
|
171
|
+
detailsField: 'depends',
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
// Anti-hallucination throw (add.ts line ~436)
|
|
178
|
+
// ---------------------------------------------------------------------------
|
|
179
|
+
|
|
180
|
+
describe('error-hints: anti-hallucination (title === description)', () => {
|
|
181
|
+
let env: TestDbEnv;
|
|
182
|
+
|
|
183
|
+
beforeEach(async () => {
|
|
184
|
+
resetDbState();
|
|
185
|
+
env = await createTestDb();
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
afterEach(async () => {
|
|
189
|
+
await env.cleanup();
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
it('throws with fix mentioning --desc, field=description', async () => {
|
|
193
|
+
await assertAsyncErrorHints(
|
|
194
|
+
() =>
|
|
195
|
+
addTask(
|
|
196
|
+
{
|
|
197
|
+
title: 'same text',
|
|
198
|
+
description: 'same text',
|
|
199
|
+
},
|
|
200
|
+
env.tempDir,
|
|
201
|
+
env.accessor,
|
|
202
|
+
),
|
|
203
|
+
{ fixIncludes: '--desc', detailsField: 'description' },
|
|
204
|
+
);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// ---------------------------------------------------------------------------
|
|
209
|
+
// findTasks — query required
|
|
210
|
+
// ---------------------------------------------------------------------------
|
|
211
|
+
|
|
212
|
+
describe('error-hints: findTasks (query required)', () => {
|
|
213
|
+
it('missing query — fix mentions cleo find, field=query', async () => {
|
|
214
|
+
await assertAsyncErrorHints(() => findTasks({}), {
|
|
215
|
+
fixIncludes: 'cleo find',
|
|
216
|
+
detailsField: 'query',
|
|
217
|
+
});
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// ---------------------------------------------------------------------------
|
|
222
|
+
// showTask — task ID required
|
|
223
|
+
// ---------------------------------------------------------------------------
|
|
224
|
+
|
|
225
|
+
describe('error-hints: showTask (id required)', () => {
|
|
226
|
+
it('empty id — fix mentions cleo show, field=taskId', async () => {
|
|
227
|
+
await assertAsyncErrorHints(() => showTask(''), {
|
|
228
|
+
fixIncludes: 'cleo show',
|
|
229
|
+
detailsField: 'taskId',
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
// showLabelTasks — no tasks with label
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
|
|
238
|
+
describe('error-hints: showLabelTasks (label not found)', () => {
|
|
239
|
+
let env: TestDbEnv;
|
|
240
|
+
|
|
241
|
+
beforeEach(async () => {
|
|
242
|
+
resetDbState();
|
|
243
|
+
env = await createTestDb();
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
afterEach(async () => {
|
|
247
|
+
await env.cleanup();
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('no tasks with label — fix mentions cleo labels, field=label', async () => {
|
|
251
|
+
await assertAsyncErrorHints(
|
|
252
|
+
() => showLabelTasks('nonexistent-label', env.tempDir, env.accessor),
|
|
253
|
+
{ fixIncludes: 'cleo labels', detailsField: 'label' },
|
|
254
|
+
);
|
|
255
|
+
});
|
|
256
|
+
});
|
package/src/tasks/add.ts
CHANGED
|
@@ -39,7 +39,7 @@ import { resolveDefaultPipelineStage, validatePipelineStage } from './pipeline-s
|
|
|
39
39
|
*/
|
|
40
40
|
export interface AddTaskOptions {
|
|
41
41
|
title: string;
|
|
42
|
-
description
|
|
42
|
+
description?: string;
|
|
43
43
|
status?: TaskStatus;
|
|
44
44
|
priority?: TaskPriority;
|
|
45
45
|
type?: TaskType;
|
|
@@ -93,10 +93,16 @@ export function buildDefaultVerification(initializedAt: string): TaskVerificatio
|
|
|
93
93
|
*/
|
|
94
94
|
export function validateTitle(title: string): void {
|
|
95
95
|
if (!title || title.trim().length === 0) {
|
|
96
|
-
throw new CleoError(ExitCode.INVALID_INPUT, 'Task title is required'
|
|
96
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Task title is required', {
|
|
97
|
+
fix: 'Provide a title: cleo add "<title>"',
|
|
98
|
+
details: { field: 'title' },
|
|
99
|
+
});
|
|
97
100
|
}
|
|
98
101
|
if (title.length > 200) {
|
|
99
|
-
throw new CleoError(ExitCode.VALIDATION_ERROR, 'Task title must be 200 characters or less'
|
|
102
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, 'Task title must be 200 characters or less', {
|
|
103
|
+
fix: 'Shorten title to 200 characters or fewer',
|
|
104
|
+
details: { field: 'title', expected: 200, actual: title.length },
|
|
105
|
+
});
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
|
|
@@ -109,6 +115,10 @@ export function validateStatus(status: string): asserts status is TaskStatus {
|
|
|
109
115
|
throw new CleoError(
|
|
110
116
|
ExitCode.VALIDATION_ERROR,
|
|
111
117
|
`Invalid status: ${status} (must be ${TASK_STATUSES.join('|')})`,
|
|
118
|
+
{
|
|
119
|
+
fix: `cleo add ... --status <${TASK_STATUSES.join('|')}>`,
|
|
120
|
+
details: { field: 'status', expected: TASK_STATUSES, actual: status },
|
|
121
|
+
},
|
|
112
122
|
);
|
|
113
123
|
}
|
|
114
124
|
}
|
|
@@ -152,6 +162,10 @@ export function normalizePriority(priority: string | number): TaskPriority {
|
|
|
152
162
|
throw new CleoError(
|
|
153
163
|
ExitCode.VALIDATION_ERROR,
|
|
154
164
|
`Invalid numeric priority: ${priority} (must be 1-9)`,
|
|
165
|
+
{
|
|
166
|
+
fix: `Use a numeric priority 1-9 or one of: ${VALID_PRIORITIES.join('|')}`,
|
|
167
|
+
details: { field: 'priority', expected: '1-9', actual: priority },
|
|
168
|
+
},
|
|
155
169
|
);
|
|
156
170
|
}
|
|
157
171
|
return mapped;
|
|
@@ -172,6 +186,10 @@ export function normalizePriority(priority: string | number): TaskPriority {
|
|
|
172
186
|
throw new CleoError(
|
|
173
187
|
ExitCode.VALIDATION_ERROR,
|
|
174
188
|
`Invalid priority: ${priority} (must be ${VALID_PRIORITIES.join('|')} or numeric 1-9)`,
|
|
189
|
+
{
|
|
190
|
+
fix: `cleo add ... --priority <${VALID_PRIORITIES.join('|')}>`,
|
|
191
|
+
details: { field: 'priority', expected: VALID_PRIORITIES, actual: priority },
|
|
192
|
+
},
|
|
175
193
|
);
|
|
176
194
|
}
|
|
177
195
|
|
|
@@ -194,6 +212,10 @@ export function validateTaskType(type: string): asserts type is TaskType {
|
|
|
194
212
|
throw new CleoError(
|
|
195
213
|
ExitCode.VALIDATION_ERROR,
|
|
196
214
|
`Invalid task type: ${type} (must be ${valid.join('|')})`,
|
|
215
|
+
{
|
|
216
|
+
fix: `cleo add ... --type <${valid.join('|')}>`,
|
|
217
|
+
details: { field: 'type', expected: valid, actual: type },
|
|
218
|
+
},
|
|
197
219
|
);
|
|
198
220
|
}
|
|
199
221
|
}
|
|
@@ -208,6 +230,10 @@ export function validateSize(size: string): asserts size is TaskSize {
|
|
|
208
230
|
throw new CleoError(
|
|
209
231
|
ExitCode.VALIDATION_ERROR,
|
|
210
232
|
`Invalid size: ${size} (must be ${valid.join('|')})`,
|
|
233
|
+
{
|
|
234
|
+
fix: `cleo add ... --size <${valid.join('|')}>`,
|
|
235
|
+
details: { field: 'size', expected: valid, actual: size },
|
|
236
|
+
},
|
|
211
237
|
);
|
|
212
238
|
}
|
|
213
239
|
}
|
|
@@ -223,6 +249,10 @@ export function validateLabels(labels: string[]): void {
|
|
|
223
249
|
throw new CleoError(
|
|
224
250
|
ExitCode.VALIDATION_ERROR,
|
|
225
251
|
`Invalid label format: '${trimmed}' (must be lowercase alphanumeric with hyphens/periods)`,
|
|
252
|
+
{
|
|
253
|
+
fix: `Labels must match pattern ^[a-z][a-z0-9.-]*$ (e.g. my-label, v1.0)`,
|
|
254
|
+
details: { field: 'labels', expected: '^[a-z][a-z0-9.-]*$', actual: trimmed },
|
|
255
|
+
},
|
|
226
256
|
);
|
|
227
257
|
}
|
|
228
258
|
}
|
|
@@ -237,6 +267,10 @@ export function validatePhaseFormat(phase: string): void {
|
|
|
237
267
|
throw new CleoError(
|
|
238
268
|
ExitCode.VALIDATION_ERROR,
|
|
239
269
|
`Invalid phase format: ${phase} (must be lowercase alphanumeric with hyphens)`,
|
|
270
|
+
{
|
|
271
|
+
fix: `Phase slugs must match pattern ^[a-z][a-z0-9-]*$ (e.g. dev-phase-1)`,
|
|
272
|
+
details: { field: 'phase', expected: '^[a-z][a-z0-9-]*$', actual: phase },
|
|
273
|
+
},
|
|
240
274
|
);
|
|
241
275
|
}
|
|
242
276
|
}
|
|
@@ -253,10 +287,17 @@ export function validateDepends(depends: string[], tasks: Task[]): void {
|
|
|
253
287
|
throw new CleoError(
|
|
254
288
|
ExitCode.VALIDATION_ERROR,
|
|
255
289
|
`Invalid dependency ID format: '${trimmed}' (must be T### format)`,
|
|
290
|
+
{
|
|
291
|
+
fix: 'Dependency IDs must match T### format (e.g. T123, T4567)',
|
|
292
|
+
details: { field: 'depends', expected: 'T###', actual: trimmed },
|
|
293
|
+
},
|
|
256
294
|
);
|
|
257
295
|
}
|
|
258
296
|
if (!existingIds.has(trimmed)) {
|
|
259
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}
|
|
297
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`, {
|
|
298
|
+
fix: `cleo find "${trimmed}"`,
|
|
299
|
+
details: { field: 'depends', actual: trimmed },
|
|
300
|
+
});
|
|
260
301
|
}
|
|
261
302
|
}
|
|
262
303
|
}
|
|
@@ -294,6 +335,10 @@ export function validateParent(
|
|
|
294
335
|
throw new CleoError(
|
|
295
336
|
ExitCode.DEPTH_EXCEEDED,
|
|
296
337
|
`Cannot add child to ${parentId}: max hierarchy depth (${maxDepth}) would be exceeded`,
|
|
338
|
+
{
|
|
339
|
+
fix: 'Reparent this task under a higher-level epic',
|
|
340
|
+
details: { field: 'parentId', expected: `depth < ${maxDepth}`, actual: depth },
|
|
341
|
+
},
|
|
297
342
|
);
|
|
298
343
|
}
|
|
299
344
|
|
|
@@ -436,6 +481,10 @@ export async function addTask(
|
|
|
436
481
|
throw new CleoError(
|
|
437
482
|
ExitCode.VALIDATION_ERROR,
|
|
438
483
|
'Title and description must be different (anti-hallucination rule)',
|
|
484
|
+
{
|
|
485
|
+
fix: 'Provide --desc with a description different from the title',
|
|
486
|
+
details: { field: 'description' },
|
|
487
|
+
},
|
|
439
488
|
);
|
|
440
489
|
}
|
|
441
490
|
|
|
@@ -508,11 +557,18 @@ export async function addTask(
|
|
|
508
557
|
throw new CleoError(
|
|
509
558
|
ExitCode.VALIDATION_ERROR,
|
|
510
559
|
`Invalid dependency ID format: '${trimmed}' (must be T### format)`,
|
|
560
|
+
{
|
|
561
|
+
fix: 'Dependency IDs must match T### format (e.g. T123, T4567)',
|
|
562
|
+
details: { field: 'depends', expected: 'T###', actual: trimmed },
|
|
563
|
+
},
|
|
511
564
|
);
|
|
512
565
|
}
|
|
513
566
|
const exists = await dataAccessor.taskExists(trimmed);
|
|
514
567
|
if (!exists) {
|
|
515
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}
|
|
568
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`, {
|
|
569
|
+
fix: `cleo find "${trimmed}"`,
|
|
570
|
+
details: { field: 'depends', actual: trimmed },
|
|
571
|
+
});
|
|
516
572
|
}
|
|
517
573
|
}
|
|
518
574
|
}
|
|
@@ -532,6 +588,10 @@ export async function addTask(
|
|
|
532
588
|
throw new CleoError(
|
|
533
589
|
ExitCode.NOT_FOUND,
|
|
534
590
|
`Phase '${phase}' not found. Valid phases: ${validPhases || 'none'}. Use --add-phase to create new.`,
|
|
591
|
+
{
|
|
592
|
+
fix: `cleo add ... --add-phase to create '${phase}', or use one of: ${validPhases || 'none'}`,
|
|
593
|
+
details: { field: 'phase', expected: Object.keys(phases), actual: phase },
|
|
594
|
+
},
|
|
535
595
|
);
|
|
536
596
|
}
|
|
537
597
|
// Create phase
|
|
@@ -554,12 +614,18 @@ export async function addTask(
|
|
|
554
614
|
// Parent hierarchy validation using targeted queries
|
|
555
615
|
if (parentId) {
|
|
556
616
|
if (!/^T\d{3,}$/.test(parentId)) {
|
|
557
|
-
throw new CleoError(ExitCode.INVALID_INPUT, `Invalid parent ID format: ${parentId}
|
|
617
|
+
throw new CleoError(ExitCode.INVALID_INPUT, `Invalid parent ID format: ${parentId}`, {
|
|
618
|
+
fix: 'Parent IDs must match T### format (e.g. T123)',
|
|
619
|
+
details: { field: 'parentId', expected: 'T###', actual: parentId },
|
|
620
|
+
});
|
|
558
621
|
}
|
|
559
622
|
// Validate parent exists
|
|
560
623
|
const parentTask = await dataAccessor.loadSingleTask(parentId);
|
|
561
624
|
if (!parentTask) {
|
|
562
|
-
throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${parentId} not found
|
|
625
|
+
throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${parentId} not found`, {
|
|
626
|
+
fix: `Use 'cleo find "${parentId}"' to search or create as standalone task`,
|
|
627
|
+
details: { field: 'parentId', actual: parentId },
|
|
628
|
+
});
|
|
563
629
|
}
|
|
564
630
|
|
|
565
631
|
// Read hierarchy limits from config via policy module
|
|
@@ -573,6 +639,14 @@ export async function addTask(
|
|
|
573
639
|
throw new CleoError(
|
|
574
640
|
ExitCode.DEPTH_EXCEEDED,
|
|
575
641
|
`Maximum nesting depth ${policy.maxDepth} would be exceeded`,
|
|
642
|
+
{
|
|
643
|
+
fix: 'Reparent this task under a higher-level epic',
|
|
644
|
+
details: {
|
|
645
|
+
field: 'parentId',
|
|
646
|
+
expected: `depth < ${policy.maxDepth}`,
|
|
647
|
+
actual: parentDepth + 1,
|
|
648
|
+
},
|
|
649
|
+
},
|
|
576
650
|
);
|
|
577
651
|
}
|
|
578
652
|
|
|
@@ -586,6 +660,14 @@ export async function addTask(
|
|
|
586
660
|
throw new CleoError(
|
|
587
661
|
ExitCode.SIBLING_LIMIT,
|
|
588
662
|
`Parent ${parentId} already has ${counted} children (limit: ${policy.maxSiblings})`,
|
|
663
|
+
{
|
|
664
|
+
fix: 'Create as standalone task or increase hierarchy.maxSiblings in config',
|
|
665
|
+
details: {
|
|
666
|
+
field: 'parentId',
|
|
667
|
+
expected: `<= ${policy.maxSiblings} siblings`,
|
|
668
|
+
actual: counted,
|
|
669
|
+
},
|
|
670
|
+
},
|
|
589
671
|
);
|
|
590
672
|
}
|
|
591
673
|
}
|
|
@@ -596,6 +678,14 @@ export async function addTask(
|
|
|
596
678
|
throw new CleoError(
|
|
597
679
|
ExitCode.SIBLING_LIMIT,
|
|
598
680
|
`Parent ${parentId} already has ${activeCount} active children (maxActiveSiblings=${policy.maxActiveSiblings})`,
|
|
681
|
+
{
|
|
682
|
+
fix: 'Complete or cancel an active sibling before adding a new task here',
|
|
683
|
+
details: {
|
|
684
|
+
field: 'parentId',
|
|
685
|
+
expected: `<= ${policy.maxActiveSiblings} active siblings`,
|
|
686
|
+
actual: activeCount,
|
|
687
|
+
},
|
|
688
|
+
},
|
|
599
689
|
);
|
|
600
690
|
}
|
|
601
691
|
|
|
@@ -676,7 +766,7 @@ export async function addTask(
|
|
|
676
766
|
const previewTask: Task = {
|
|
677
767
|
id: 'T???',
|
|
678
768
|
title: options.title,
|
|
679
|
-
description: options.description,
|
|
769
|
+
description: options.description ?? '',
|
|
680
770
|
status,
|
|
681
771
|
priority,
|
|
682
772
|
type: taskType,
|
|
@@ -767,7 +857,7 @@ export async function addTask(
|
|
|
767
857
|
const task: Task = {
|
|
768
858
|
id: taskId,
|
|
769
859
|
title: options.title,
|
|
770
|
-
description: options.description,
|
|
860
|
+
description: options.description ?? '',
|
|
771
861
|
status,
|
|
772
862
|
priority,
|
|
773
863
|
type: taskType,
|
package/src/tasks/complete.ts
CHANGED
|
@@ -115,7 +115,10 @@ export async function completeTask(
|
|
|
115
115
|
|
|
116
116
|
// Already done
|
|
117
117
|
if (task.status === 'done') {
|
|
118
|
-
throw new CleoError(ExitCode.TASK_COMPLETED, `Task ${options.taskId} is already completed
|
|
118
|
+
throw new CleoError(ExitCode.TASK_COMPLETED, `Task ${options.taskId} is already completed`, {
|
|
119
|
+
fix: `To reopen, run cleo update ${options.taskId} --status active`,
|
|
120
|
+
details: { field: 'status', expected: 'not done', actual: 'done' },
|
|
121
|
+
});
|
|
119
122
|
}
|
|
120
123
|
|
|
121
124
|
// Check if task has incomplete dependencies
|
package/src/tasks/find.ts
CHANGED
|
@@ -100,7 +100,10 @@ export async function findTasks(
|
|
|
100
100
|
accessor?: DataAccessor,
|
|
101
101
|
): Promise<FindTasksResult> {
|
|
102
102
|
if (!options.query && !options.id) {
|
|
103
|
-
throw new CleoError(ExitCode.INVALID_INPUT, 'Search query or --id is required'
|
|
103
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Search query or --id is required', {
|
|
104
|
+
fix: 'cleo find "<query>"',
|
|
105
|
+
details: { field: 'query' },
|
|
106
|
+
});
|
|
104
107
|
}
|
|
105
108
|
|
|
106
109
|
const acc = accessor ?? (await getAccessor(cwd));
|
package/src/tasks/labels.ts
CHANGED
|
@@ -45,7 +45,10 @@ export async function showLabelTasks(
|
|
|
45
45
|
const { tasks } = await acc.queryTasks({ label });
|
|
46
46
|
|
|
47
47
|
if (tasks.length === 0) {
|
|
48
|
-
throw new CleoError(ExitCode.NOT_FOUND, `No tasks found with label '${label}'
|
|
48
|
+
throw new CleoError(ExitCode.NOT_FOUND, `No tasks found with label '${label}'`, {
|
|
49
|
+
fix: 'cleo labels list to see available labels',
|
|
50
|
+
details: { field: 'label', actual: label },
|
|
51
|
+
});
|
|
49
52
|
}
|
|
50
53
|
|
|
51
54
|
return {
|
package/src/tasks/relates.ts
CHANGED
|
@@ -20,7 +20,10 @@ export async function suggestRelated(
|
|
|
20
20
|
const { tasks: allTasks } = await acc.queryTasks({});
|
|
21
21
|
const task = allTasks.find((t) => t.id === taskId);
|
|
22
22
|
if (!task) {
|
|
23
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found
|
|
23
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`, {
|
|
24
|
+
fix: `cleo find "${taskId}"`,
|
|
25
|
+
details: { field: 'taskId', actual: taskId },
|
|
26
|
+
});
|
|
24
27
|
}
|
|
25
28
|
|
|
26
29
|
const suggestions: Array<Pick<TaskRef, 'id' | 'title'> & { score: number; reason: string }> = [];
|
|
@@ -80,12 +83,18 @@ export async function addRelation(
|
|
|
80
83
|
|
|
81
84
|
const fromExists = await acc.taskExists(from);
|
|
82
85
|
if (!fromExists) {
|
|
83
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Task ${from} not found
|
|
86
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Task ${from} not found`, {
|
|
87
|
+
fix: `cleo find "${from}"`,
|
|
88
|
+
details: { field: 'from', actual: from },
|
|
89
|
+
});
|
|
84
90
|
}
|
|
85
91
|
|
|
86
92
|
const toExists = await acc.taskExists(to);
|
|
87
93
|
if (!toExists) {
|
|
88
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Task ${to} not found
|
|
94
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Task ${to} not found`, {
|
|
95
|
+
fix: `cleo find "${to}"`,
|
|
96
|
+
details: { field: 'to', actual: to },
|
|
97
|
+
});
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
// Persist to task_relations table via accessor (T5168 fix)
|
|
@@ -112,7 +121,10 @@ export async function listRelations(
|
|
|
112
121
|
const acc = accessor ?? (await getAccessor(cwd));
|
|
113
122
|
const task = await acc.loadSingleTask(taskId);
|
|
114
123
|
if (!task) {
|
|
115
|
-
throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found
|
|
124
|
+
throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`, {
|
|
125
|
+
fix: `cleo find "${taskId}"`,
|
|
126
|
+
details: { field: 'taskId', actual: taskId },
|
|
127
|
+
});
|
|
116
128
|
}
|
|
117
129
|
|
|
118
130
|
// task.relates is populated from task_relations table by loadSingleTask
|
package/src/tasks/show.ts
CHANGED
|
@@ -35,7 +35,10 @@ export async function showTask(
|
|
|
35
35
|
accessor?: DataAccessor,
|
|
36
36
|
): Promise<TaskDetail> {
|
|
37
37
|
if (!taskId) {
|
|
38
|
-
throw new CleoError(ExitCode.INVALID_INPUT, 'Task ID is required'
|
|
38
|
+
throw new CleoError(ExitCode.INVALID_INPUT, 'Task ID is required', {
|
|
39
|
+
fix: 'cleo show T###',
|
|
40
|
+
details: { field: 'taskId' },
|
|
41
|
+
});
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
const acc = accessor ?? (await getAccessor(cwd));
|
package/src/tasks/update.ts
CHANGED
|
@@ -153,7 +153,14 @@ export async function updateTask(
|
|
|
153
153
|
const { validateStatusTransition } = await import('../validation/validation-rules.js');
|
|
154
154
|
const transitionViolations = validateStatusTransition(task.status, options.status);
|
|
155
155
|
if (transitionViolations.length > 0) {
|
|
156
|
-
throw new CleoError(ExitCode.VALIDATION_ERROR, transitionViolations[0].message
|
|
156
|
+
throw new CleoError(ExitCode.VALIDATION_ERROR, transitionViolations[0].message, {
|
|
157
|
+
fix: `Valid transitions from '${task.status}': see cleo update --help`,
|
|
158
|
+
details: {
|
|
159
|
+
field: transitionViolations[0].field ?? 'status',
|
|
160
|
+
expected: `valid transition from ${task.status}`,
|
|
161
|
+
actual: options.status,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
157
164
|
}
|
|
158
165
|
|
|
159
166
|
const oldStatus = task.status;
|
|
@@ -319,12 +326,19 @@ export async function updateTask(
|
|
|
319
326
|
// Validate target parent exists
|
|
320
327
|
const newParent = await acc.loadSingleTask(newParentId);
|
|
321
328
|
if (!newParent) {
|
|
322
|
-
throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${newParentId} not found
|
|
329
|
+
throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${newParentId} not found`, {
|
|
330
|
+
fix: `Use 'cleo find "${newParentId}"' to search or remove --parent flag`,
|
|
331
|
+
details: { field: 'parentId', actual: newParentId },
|
|
332
|
+
});
|
|
323
333
|
}
|
|
324
334
|
if (newParent.type === 'subtask') {
|
|
325
335
|
throw new CleoError(
|
|
326
336
|
ExitCode.INVALID_PARENT_TYPE,
|
|
327
337
|
`Cannot parent under subtask '${newParentId}'`,
|
|
338
|
+
{
|
|
339
|
+
fix: `Choose an epic or task as parent instead of subtask '${newParentId}'`,
|
|
340
|
+
details: { field: 'parentId', expected: 'epic or task', actual: 'subtask' },
|
|
341
|
+
},
|
|
328
342
|
);
|
|
329
343
|
}
|
|
330
344
|
|
|
@@ -334,6 +348,10 @@ export async function updateTask(
|
|
|
334
348
|
throw new CleoError(
|
|
335
349
|
ExitCode.CIRCULAR_REFERENCE,
|
|
336
350
|
`Moving '${options.taskId}' under '${newParentId}' would create a circular reference`,
|
|
351
|
+
{
|
|
352
|
+
fix: `Choose a parent that is not a descendant of ${options.taskId}`,
|
|
353
|
+
details: { field: 'parentId', actual: newParentId },
|
|
354
|
+
},
|
|
337
355
|
);
|
|
338
356
|
}
|
|
339
357
|
|
|
@@ -346,6 +364,14 @@ export async function updateTask(
|
|
|
346
364
|
throw new CleoError(
|
|
347
365
|
ExitCode.DEPTH_EXCEEDED,
|
|
348
366
|
`Maximum nesting depth ${policy.maxDepth} would be exceeded`,
|
|
367
|
+
{
|
|
368
|
+
fix: 'Choose a parent at a shallower level in the hierarchy',
|
|
369
|
+
details: {
|
|
370
|
+
field: 'parentId',
|
|
371
|
+
expected: `depth < ${policy.maxDepth}`,
|
|
372
|
+
actual: parentDepth + 1,
|
|
373
|
+
},
|
|
374
|
+
},
|
|
349
375
|
);
|
|
350
376
|
}
|
|
351
377
|
|
|
@@ -362,7 +388,10 @@ export async function updateTask(
|
|
|
362
388
|
}
|
|
363
389
|
|
|
364
390
|
if (changes.length === 0) {
|
|
365
|
-
throw new CleoError(ExitCode.NO_CHANGE, 'No changes specified'
|
|
391
|
+
throw new CleoError(ExitCode.NO_CHANGE, 'No changes specified', {
|
|
392
|
+
fix: `Provide at least one field to update (e.g. cleo update ${options.taskId} --status active)`,
|
|
393
|
+
details: { field: 'options' },
|
|
394
|
+
});
|
|
366
395
|
}
|
|
367
396
|
|
|
368
397
|
task.updatedAt = now;
|