@cleocode/cleo 2026.3.37 → 2026.3.39
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/LICENSE +21 -0
- package/README.md +565 -0
- package/bin/postinstall.js +0 -0
- package/completions/bash-completion.sh +0 -0
- package/completions/zsh-completion.zsh +0 -0
- package/dist/cli/index.js +3507 -3631
- package/dist/cli/index.js.map +4 -4
- package/dist/mcp/index.js +3311 -3215
- package/dist/mcp/index.js.map +4 -4
- package/migrations/drizzle-brain/20260318205549_initial/migration.sql +0 -0
- package/migrations/drizzle-brain/20260318205549_initial/snapshot.json +0 -0
- package/migrations/drizzle-nexus/20260318205558_initial/migration.sql +0 -0
- package/migrations/drizzle-nexus/20260318205558_initial/snapshot.json +0 -0
- package/migrations/drizzle-tasks/20260318205539_initial/migration.sql +0 -0
- package/migrations/drizzle-tasks/20260318205539_initial/snapshot.json +0 -0
- package/package.json +17 -12
- package/dist/cli/commander-shim.d.ts +0 -108
- package/dist/cli/commander-shim.d.ts.map +0 -1
- package/dist/cli/commander-shim.js +0 -229
- package/dist/cli/commander-shim.js.map +0 -1
- package/dist/cli/commands/add.d.ts +0 -12
- package/dist/cli/commands/add.d.ts.map +0 -1
- package/dist/cli/commands/add.js +0 -91
- package/dist/cli/commands/add.js.map +0 -1
- package/dist/cli/commands/adr.d.ts +0 -27
- package/dist/cli/commands/adr.d.ts.map +0 -1
- package/dist/cli/commands/adr.js +0 -79
- package/dist/cli/commands/adr.js.map +0 -1
- package/dist/cli/commands/analyze.d.ts +0 -12
- package/dist/cli/commands/analyze.d.ts.map +0 -1
- package/dist/cli/commands/analyze.js +0 -20
- package/dist/cli/commands/analyze.js.map +0 -1
- package/dist/cli/commands/archive-stats.d.ts +0 -18
- package/dist/cli/commands/archive-stats.d.ts.map +0 -1
- package/dist/cli/commands/archive-stats.js +0 -49
- package/dist/cli/commands/archive-stats.js.map +0 -1
- package/dist/cli/commands/archive.d.ts +0 -12
- package/dist/cli/commands/archive.d.ts.map +0 -1
- package/dist/cli/commands/archive.js +0 -32
- package/dist/cli/commands/archive.js.map +0 -1
- package/dist/cli/commands/backup.d.ts +0 -8
- package/dist/cli/commands/backup.d.ts.map +0 -1
- package/dist/cli/commands/backup.js +0 -35
- package/dist/cli/commands/backup.js.map +0 -1
- package/dist/cli/commands/blockers.d.ts +0 -7
- package/dist/cli/commands/blockers.d.ts.map +0 -1
- package/dist/cli/commands/blockers.js +0 -16
- package/dist/cli/commands/blockers.js.map +0 -1
- package/dist/cli/commands/briefing.d.ts +0 -22
- package/dist/cli/commands/briefing.d.ts.map +0 -1
- package/dist/cli/commands/briefing.js +0 -45
- package/dist/cli/commands/briefing.js.map +0 -1
- package/dist/cli/commands/bug.d.ts +0 -12
- package/dist/cli/commands/bug.d.ts.map +0 -1
- package/dist/cli/commands/bug.js +0 -81
- package/dist/cli/commands/bug.js.map +0 -1
- package/dist/cli/commands/checkpoint.d.ts +0 -15
- package/dist/cli/commands/checkpoint.d.ts.map +0 -1
- package/dist/cli/commands/checkpoint.js +0 -92
- package/dist/cli/commands/checkpoint.js.map +0 -1
- package/dist/cli/commands/commands.d.ts +0 -13
- package/dist/cli/commands/commands.d.ts.map +0 -1
- package/dist/cli/commands/commands.js +0 -30
- package/dist/cli/commands/commands.js.map +0 -1
- package/dist/cli/commands/complete.d.ts +0 -12
- package/dist/cli/commands/complete.d.ts.map +0 -1
- package/dist/cli/commands/complete.js +0 -43
- package/dist/cli/commands/complete.js.map +0 -1
- package/dist/cli/commands/compliance.d.ts +0 -8
- package/dist/cli/commands/compliance.d.ts.map +0 -1
- package/dist/cli/commands/compliance.js +0 -85
- package/dist/cli/commands/compliance.js.map +0 -1
- package/dist/cli/commands/config.d.ts +0 -9
- package/dist/cli/commands/config.d.ts.map +0 -1
- package/dist/cli/commands/config.js +0 -43
- package/dist/cli/commands/config.js.map +0 -1
- package/dist/cli/commands/consensus.d.ts +0 -13
- package/dist/cli/commands/consensus.d.ts.map +0 -1
- package/dist/cli/commands/consensus.js +0 -45
- package/dist/cli/commands/consensus.js.map +0 -1
- package/dist/cli/commands/context.d.ts +0 -8
- package/dist/cli/commands/context.d.ts.map +0 -1
- package/dist/cli/commands/context.js +0 -40
- package/dist/cli/commands/context.js.map +0 -1
- package/dist/cli/commands/contribution.d.ts +0 -13
- package/dist/cli/commands/contribution.d.ts.map +0 -1
- package/dist/cli/commands/contribution.js +0 -41
- package/dist/cli/commands/contribution.js.map +0 -1
- package/dist/cli/commands/current.d.ts +0 -13
- package/dist/cli/commands/current.d.ts.map +0 -1
- package/dist/cli/commands/current.js +0 -20
- package/dist/cli/commands/current.js.map +0 -1
- package/dist/cli/commands/dash.d.ts +0 -12
- package/dist/cli/commands/dash.d.ts.map +0 -1
- package/dist/cli/commands/dash.js +0 -24
- package/dist/cli/commands/dash.js.map +0 -1
- package/dist/cli/commands/decomposition.d.ts +0 -13
- package/dist/cli/commands/decomposition.d.ts.map +0 -1
- package/dist/cli/commands/decomposition.js +0 -45
- package/dist/cli/commands/decomposition.js.map +0 -1
- package/dist/cli/commands/delete.d.ts +0 -12
- package/dist/cli/commands/delete.d.ts.map +0 -1
- package/dist/cli/commands/delete.js +0 -37
- package/dist/cli/commands/delete.js.map +0 -1
- package/dist/cli/commands/deps.d.ts +0 -9
- package/dist/cli/commands/deps.d.ts.map +0 -1
- package/dist/cli/commands/deps.js +0 -73
- package/dist/cli/commands/deps.js.map +0 -1
- package/dist/cli/commands/detect-drift.d.ts +0 -15
- package/dist/cli/commands/detect-drift.d.ts.map +0 -1
- package/dist/cli/commands/detect-drift.js +0 -385
- package/dist/cli/commands/detect-drift.js.map +0 -1
- package/dist/cli/commands/docs.d.ts +0 -13
- package/dist/cli/commands/docs.d.ts.map +0 -1
- package/dist/cli/commands/docs.js +0 -170
- package/dist/cli/commands/docs.js.map +0 -1
- package/dist/cli/commands/doctor.d.ts +0 -11
- package/dist/cli/commands/doctor.d.ts.map +0 -1
- package/dist/cli/commands/doctor.js +0 -54
- package/dist/cli/commands/doctor.js.map +0 -1
- package/dist/cli/commands/dynamic.d.ts +0 -24
- package/dist/cli/commands/dynamic.d.ts.map +0 -1
- package/dist/cli/commands/dynamic.js +0 -27
- package/dist/cli/commands/dynamic.js.map +0 -1
- package/dist/cli/commands/env.d.ts +0 -12
- package/dist/cli/commands/env.d.ts.map +0 -1
- package/dist/cli/commands/env.js +0 -44
- package/dist/cli/commands/env.js.map +0 -1
- package/dist/cli/commands/exists.d.ts +0 -7
- package/dist/cli/commands/exists.d.ts.map +0 -1
- package/dist/cli/commands/exists.js +0 -33
- package/dist/cli/commands/exists.js.map +0 -1
- package/dist/cli/commands/export-tasks.d.ts +0 -10
- package/dist/cli/commands/export-tasks.d.ts.map +0 -1
- package/dist/cli/commands/export-tasks.js +0 -47
- package/dist/cli/commands/export-tasks.js.map +0 -1
- package/dist/cli/commands/export.d.ts +0 -9
- package/dist/cli/commands/export.d.ts.map +0 -1
- package/dist/cli/commands/export.js +0 -46
- package/dist/cli/commands/export.js.map +0 -1
- package/dist/cli/commands/extract.d.ts +0 -16
- package/dist/cli/commands/extract.d.ts.map +0 -1
- package/dist/cli/commands/extract.js +0 -43
- package/dist/cli/commands/extract.js.map +0 -1
- package/dist/cli/commands/find.d.ts +0 -14
- package/dist/cli/commands/find.d.ts.map +0 -1
- package/dist/cli/commands/find.js +0 -70
- package/dist/cli/commands/find.js.map +0 -1
- package/dist/cli/commands/generate-changelog.d.ts +0 -14
- package/dist/cli/commands/generate-changelog.d.ts.map +0 -1
- package/dist/cli/commands/generate-changelog.js +0 -252
- package/dist/cli/commands/generate-changelog.js.map +0 -1
- package/dist/cli/commands/grade.d.ts +0 -13
- package/dist/cli/commands/grade.d.ts.map +0 -1
- package/dist/cli/commands/grade.js +0 -16
- package/dist/cli/commands/grade.js.map +0 -1
- package/dist/cli/commands/history.d.ts +0 -9
- package/dist/cli/commands/history.d.ts.map +0 -1
- package/dist/cli/commands/history.js +0 -30
- package/dist/cli/commands/history.js.map +0 -1
- package/dist/cli/commands/implementation.d.ts +0 -13
- package/dist/cli/commands/implementation.d.ts.map +0 -1
- package/dist/cli/commands/implementation.js +0 -41
- package/dist/cli/commands/implementation.js.map +0 -1
- package/dist/cli/commands/import-tasks.d.ts +0 -10
- package/dist/cli/commands/import-tasks.d.ts.map +0 -1
- package/dist/cli/commands/import-tasks.js +0 -38
- package/dist/cli/commands/import-tasks.js.map +0 -1
- package/dist/cli/commands/import.d.ts +0 -9
- package/dist/cli/commands/import.d.ts.map +0 -1
- package/dist/cli/commands/import.js +0 -28
- package/dist/cli/commands/import.js.map +0 -1
- package/dist/cli/commands/init.d.ts +0 -34
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -94
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/inject.d.ts +0 -8
- package/dist/cli/commands/inject.d.ts.map +0 -1
- package/dist/cli/commands/inject.js +0 -28
- package/dist/cli/commands/inject.js.map +0 -1
- package/dist/cli/commands/install-global.d.ts +0 -19
- package/dist/cli/commands/install-global.d.ts.map +0 -1
- package/dist/cli/commands/install-global.js +0 -54
- package/dist/cli/commands/install-global.js.map +0 -1
- package/dist/cli/commands/issue.d.ts +0 -14
- package/dist/cli/commands/issue.d.ts.map +0 -1
- package/dist/cli/commands/issue.js +0 -105
- package/dist/cli/commands/issue.js.map +0 -1
- package/dist/cli/commands/labels.d.ts +0 -13
- package/dist/cli/commands/labels.d.ts.map +0 -1
- package/dist/cli/commands/labels.js +0 -44
- package/dist/cli/commands/labels.js.map +0 -1
- package/dist/cli/commands/lifecycle.d.ts +0 -8
- package/dist/cli/commands/lifecycle.d.ts.map +0 -1
- package/dist/cli/commands/lifecycle.js +0 -72
- package/dist/cli/commands/lifecycle.js.map +0 -1
- package/dist/cli/commands/list.d.ts +0 -14
- package/dist/cli/commands/list.d.ts.map +0 -1
- package/dist/cli/commands/list.js +0 -71
- package/dist/cli/commands/list.js.map +0 -1
- package/dist/cli/commands/log.d.ts +0 -12
- package/dist/cli/commands/log.d.ts.map +0 -1
- package/dist/cli/commands/log.js +0 -30
- package/dist/cli/commands/log.js.map +0 -1
- package/dist/cli/commands/map.d.ts +0 -10
- package/dist/cli/commands/map.d.ts.map +0 -1
- package/dist/cli/commands/map.js +0 -23
- package/dist/cli/commands/map.js.map +0 -1
- package/dist/cli/commands/mcp-install.d.ts +0 -17
- package/dist/cli/commands/mcp-install.d.ts.map +0 -1
- package/dist/cli/commands/mcp-install.js +0 -128
- package/dist/cli/commands/mcp-install.js.map +0 -1
- package/dist/cli/commands/memory-brain.d.ts +0 -14
- package/dist/cli/commands/memory-brain.d.ts.map +0 -1
- package/dist/cli/commands/memory-brain.js +0 -151
- package/dist/cli/commands/memory-brain.js.map +0 -1
- package/dist/cli/commands/migrate-claude-mem.d.ts +0 -18
- package/dist/cli/commands/migrate-claude-mem.d.ts.map +0 -1
- package/dist/cli/commands/migrate-claude-mem.js +0 -60
- package/dist/cli/commands/migrate-claude-mem.js.map +0 -1
- package/dist/cli/commands/next.d.ts +0 -9
- package/dist/cli/commands/next.d.ts.map +0 -1
- package/dist/cli/commands/next.js +0 -20
- package/dist/cli/commands/next.js.map +0 -1
- package/dist/cli/commands/nexus.d.ts +0 -16
- package/dist/cli/commands/nexus.d.ts.map +0 -1
- package/dist/cli/commands/nexus.js +0 -155
- package/dist/cli/commands/nexus.js.map +0 -1
- package/dist/cli/commands/observe.d.ts +0 -9
- package/dist/cli/commands/observe.d.ts.map +0 -1
- package/dist/cli/commands/observe.js +0 -39
- package/dist/cli/commands/observe.js.map +0 -1
- package/dist/cli/commands/ops.d.ts +0 -10
- package/dist/cli/commands/ops.d.ts.map +0 -1
- package/dist/cli/commands/ops.js +0 -19
- package/dist/cli/commands/ops.js.map +0 -1
- package/dist/cli/commands/orchestrate.d.ts +0 -8
- package/dist/cli/commands/orchestrate.d.ts.map +0 -1
- package/dist/cli/commands/orchestrate.js +0 -58
- package/dist/cli/commands/orchestrate.js.map +0 -1
- package/dist/cli/commands/otel.d.ts +0 -12
- package/dist/cli/commands/otel.d.ts.map +0 -1
- package/dist/cli/commands/otel.js +0 -128
- package/dist/cli/commands/otel.js.map +0 -1
- package/dist/cli/commands/phase.d.ts +0 -12
- package/dist/cli/commands/phase.d.ts.map +0 -1
- package/dist/cli/commands/phase.js +0 -88
- package/dist/cli/commands/phase.js.map +0 -1
- package/dist/cli/commands/phases.d.ts +0 -12
- package/dist/cli/commands/phases.d.ts.map +0 -1
- package/dist/cli/commands/phases.js +0 -37
- package/dist/cli/commands/phases.js.map +0 -1
- package/dist/cli/commands/plan.d.ts +0 -8
- package/dist/cli/commands/plan.d.ts.map +0 -1
- package/dist/cli/commands/plan.js +0 -15
- package/dist/cli/commands/plan.js.map +0 -1
- package/dist/cli/commands/promote.d.ts +0 -7
- package/dist/cli/commands/promote.d.ts.map +0 -1
- package/dist/cli/commands/promote.js +0 -15
- package/dist/cli/commands/promote.js.map +0 -1
- package/dist/cli/commands/refresh-memory.d.ts +0 -9
- package/dist/cli/commands/refresh-memory.d.ts.map +0 -1
- package/dist/cli/commands/refresh-memory.js +0 -24
- package/dist/cli/commands/refresh-memory.js.map +0 -1
- package/dist/cli/commands/relates.d.ts +0 -12
- package/dist/cli/commands/relates.d.ts.map +0 -1
- package/dist/cli/commands/relates.js +0 -53
- package/dist/cli/commands/relates.js.map +0 -1
- package/dist/cli/commands/release.d.ts +0 -8
- package/dist/cli/commands/release.d.ts.map +0 -1
- package/dist/cli/commands/release.js +0 -72
- package/dist/cli/commands/release.js.map +0 -1
- package/dist/cli/commands/remote.d.ts +0 -12
- package/dist/cli/commands/remote.d.ts.map +0 -1
- package/dist/cli/commands/remote.js +0 -207
- package/dist/cli/commands/remote.js.map +0 -1
- package/dist/cli/commands/reorder.d.ts +0 -7
- package/dist/cli/commands/reorder.d.ts.map +0 -1
- package/dist/cli/commands/reorder.js +0 -20
- package/dist/cli/commands/reorder.js.map +0 -1
- package/dist/cli/commands/reparent.d.ts +0 -10
- package/dist/cli/commands/reparent.d.ts.map +0 -1
- package/dist/cli/commands/reparent.js +0 -19
- package/dist/cli/commands/reparent.js.map +0 -1
- package/dist/cli/commands/research.d.ts +0 -8
- package/dist/cli/commands/research.d.ts.map +0 -1
- package/dist/cli/commands/research.js +0 -129
- package/dist/cli/commands/research.js.map +0 -1
- package/dist/cli/commands/restore.d.ts +0 -11
- package/dist/cli/commands/restore.d.ts.map +0 -1
- package/dist/cli/commands/restore.js +0 -225
- package/dist/cli/commands/restore.js.map +0 -1
- package/dist/cli/commands/roadmap.d.ts +0 -8
- package/dist/cli/commands/roadmap.d.ts.map +0 -1
- package/dist/cli/commands/roadmap.js +0 -21
- package/dist/cli/commands/roadmap.js.map +0 -1
- package/dist/cli/commands/safestop.d.ts +0 -14
- package/dist/cli/commands/safestop.d.ts.map +0 -1
- package/dist/cli/commands/safestop.js +0 -32
- package/dist/cli/commands/safestop.js.map +0 -1
- package/dist/cli/commands/self-update.d.ts +0 -15
- package/dist/cli/commands/self-update.d.ts.map +0 -1
- package/dist/cli/commands/self-update.js +0 -332
- package/dist/cli/commands/self-update.js.map +0 -1
- package/dist/cli/commands/sequence.d.ts +0 -8
- package/dist/cli/commands/sequence.d.ts.map +0 -1
- package/dist/cli/commands/sequence.js +0 -30
- package/dist/cli/commands/sequence.js.map +0 -1
- package/dist/cli/commands/session.d.ts +0 -12
- package/dist/cli/commands/session.d.ts.map +0 -1
- package/dist/cli/commands/session.js +0 -160
- package/dist/cli/commands/session.js.map +0 -1
- package/dist/cli/commands/show.d.ts +0 -13
- package/dist/cli/commands/show.d.ts.map +0 -1
- package/dist/cli/commands/show.js +0 -20
- package/dist/cli/commands/show.js.map +0 -1
- package/dist/cli/commands/skills.d.ts +0 -13
- package/dist/cli/commands/skills.d.ts.map +0 -1
- package/dist/cli/commands/skills.js +0 -131
- package/dist/cli/commands/skills.js.map +0 -1
- package/dist/cli/commands/snapshot.d.ts +0 -9
- package/dist/cli/commands/snapshot.d.ts.map +0 -1
- package/dist/cli/commands/snapshot.js +0 -50
- package/dist/cli/commands/snapshot.js.map +0 -1
- package/dist/cli/commands/specification.d.ts +0 -13
- package/dist/cli/commands/specification.d.ts.map +0 -1
- package/dist/cli/commands/specification.js +0 -45
- package/dist/cli/commands/specification.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -13
- package/dist/cli/commands/start.d.ts.map +0 -1
- package/dist/cli/commands/start.js +0 -20
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/stats.d.ts +0 -12
- package/dist/cli/commands/stats.d.ts.map +0 -1
- package/dist/cli/commands/stats.js +0 -23
- package/dist/cli/commands/stats.js.map +0 -1
- package/dist/cli/commands/sticky.d.ts +0 -16
- package/dist/cli/commands/sticky.d.ts.map +0 -1
- package/dist/cli/commands/sticky.js +0 -211
- package/dist/cli/commands/sticky.js.map +0 -1
- package/dist/cli/commands/stop.d.ts +0 -13
- package/dist/cli/commands/stop.d.ts.map +0 -1
- package/dist/cli/commands/stop.js +0 -20
- package/dist/cli/commands/stop.js.map +0 -1
- package/dist/cli/commands/sync.d.ts +0 -13
- package/dist/cli/commands/sync.d.ts.map +0 -1
- package/dist/cli/commands/sync.js +0 -48
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/testing.d.ts +0 -13
- package/dist/cli/commands/testing.d.ts.map +0 -1
- package/dist/cli/commands/testing.js +0 -64
- package/dist/cli/commands/testing.js.map +0 -1
- package/dist/cli/commands/token.d.ts +0 -10
- package/dist/cli/commands/token.d.ts.map +0 -1
- package/dist/cli/commands/token.js +0 -135
- package/dist/cli/commands/token.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -12
- package/dist/cli/commands/update.d.ts.map +0 -1
- package/dist/cli/commands/update.js +0 -77
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/upgrade.d.ts +0 -16
- package/dist/cli/commands/upgrade.d.ts.map +0 -1
- package/dist/cli/commands/upgrade.js +0 -74
- package/dist/cli/commands/upgrade.js.map +0 -1
- package/dist/cli/commands/validate.d.ts +0 -12
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -23
- package/dist/cli/commands/validate.js.map +0 -1
- package/dist/cli/commands/verify.d.ts +0 -8
- package/dist/cli/commands/verify.d.ts.map +0 -1
- package/dist/cli/commands/verify.js +0 -28
- package/dist/cli/commands/verify.js.map +0 -1
- package/dist/cli/commands/web.d.ts +0 -13
- package/dist/cli/commands/web.d.ts.map +0 -1
- package/dist/cli/commands/web.js +0 -264
- package/dist/cli/commands/web.js.map +0 -1
- package/dist/cli/field-context.d.ts +0 -32
- package/dist/cli/field-context.d.ts.map +0 -1
- package/dist/cli/field-context.js +0 -47
- package/dist/cli/field-context.js.map +0 -1
- package/dist/cli/format-context.d.ts +0 -32
- package/dist/cli/format-context.d.ts.map +0 -1
- package/dist/cli/format-context.js +0 -50
- package/dist/cli/format-context.js.map +0 -1
- package/dist/cli/index.d.ts +0 -12
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/logger-bootstrap.d.ts +0 -6
- package/dist/cli/logger-bootstrap.d.ts.map +0 -1
- package/dist/cli/logger-bootstrap.js +0 -10
- package/dist/cli/logger-bootstrap.js.map +0 -1
- package/dist/cli/middleware/output-format.d.ts +0 -30
- package/dist/cli/middleware/output-format.d.ts.map +0 -1
- package/dist/cli/middleware/output-format.js +0 -35
- package/dist/cli/middleware/output-format.js.map +0 -1
- package/dist/cli/progress.d.ts +0 -84
- package/dist/cli/progress.d.ts.map +0 -1
- package/dist/cli/progress.js +0 -169
- package/dist/cli/progress.js.map +0 -1
- package/dist/cli/renderers/colors.d.ts +0 -32
- package/dist/cli/renderers/colors.d.ts.map +0 -1
- package/dist/cli/renderers/colors.js +0 -141
- package/dist/cli/renderers/colors.js.map +0 -1
- package/dist/cli/renderers/error.d.ts +0 -13
- package/dist/cli/renderers/error.d.ts.map +0 -1
- package/dist/cli/renderers/error.js +0 -42
- package/dist/cli/renderers/error.js.map +0 -1
- package/dist/cli/renderers/index.d.ts +0 -59
- package/dist/cli/renderers/index.d.ts.map +0 -1
- package/dist/cli/renderers/index.js +0 -184
- package/dist/cli/renderers/index.js.map +0 -1
- package/dist/cli/renderers/normalizer.d.ts +0 -21
- package/dist/cli/renderers/normalizer.d.ts.map +0 -1
- package/dist/cli/renderers/normalizer.js +0 -106
- package/dist/cli/renderers/normalizer.js.map +0 -1
- package/dist/cli/renderers/system.d.ts +0 -25
- package/dist/cli/renderers/system.d.ts.map +0 -1
- package/dist/cli/renderers/system.js +0 -416
- package/dist/cli/renderers/system.js.map +0 -1
- package/dist/cli/renderers/tasks.d.ts +0 -28
- package/dist/cli/renderers/tasks.d.ts.map +0 -1
- package/dist/cli/renderers/tasks.js +0 -308
- package/dist/cli/renderers/tasks.js.map +0 -1
- package/dist/dispatch/adapters/cli.d.ts +0 -67
- package/dist/dispatch/adapters/cli.d.ts.map +0 -1
- package/dist/dispatch/adapters/cli.js +0 -205
- package/dist/dispatch/adapters/cli.js.map +0 -1
- package/dist/dispatch/adapters/mcp.d.ts +0 -37
- package/dist/dispatch/adapters/mcp.d.ts.map +0 -1
- package/dist/dispatch/adapters/mcp.js +0 -122
- package/dist/dispatch/adapters/mcp.js.map +0 -1
- package/dist/dispatch/context/session-context.d.ts +0 -54
- package/dist/dispatch/context/session-context.d.ts.map +0 -1
- package/dist/dispatch/context/session-context.js +0 -61
- package/dist/dispatch/context/session-context.js.map +0 -1
- package/dist/dispatch/dispatcher.d.ts +0 -23
- package/dist/dispatch/dispatcher.d.ts.map +0 -1
- package/dist/dispatch/dispatcher.js +0 -84
- package/dist/dispatch/dispatcher.js.map +0 -1
- package/dist/dispatch/domains/_base.d.ts +0 -59
- package/dist/dispatch/domains/_base.d.ts.map +0 -1
- package/dist/dispatch/domains/_base.js +0 -77
- package/dist/dispatch/domains/_base.js.map +0 -1
- package/dist/dispatch/domains/_meta.d.ts +0 -23
- package/dist/dispatch/domains/_meta.d.ts.map +0 -1
- package/dist/dispatch/domains/_meta.js +0 -25
- package/dist/dispatch/domains/_meta.js.map +0 -1
- package/dist/dispatch/domains/_routing.d.ts +0 -8
- package/dist/dispatch/domains/_routing.d.ts.map +0 -1
- package/dist/dispatch/domains/_routing.js +0 -20
- package/dist/dispatch/domains/_routing.js.map +0 -1
- package/dist/dispatch/domains/admin.d.ts +0 -27
- package/dist/dispatch/domains/admin.d.ts.map +0 -1
- package/dist/dispatch/domains/admin.js +0 -672
- package/dist/dispatch/domains/admin.js.map +0 -1
- package/dist/dispatch/domains/check.d.ts +0 -24
- package/dist/dispatch/domains/check.d.ts.map +0 -1
- package/dist/dispatch/domains/check.js +0 -281
- package/dist/dispatch/domains/check.js.map +0 -1
- package/dist/dispatch/domains/index.d.ts +0 -26
- package/dist/dispatch/domains/index.d.ts.map +0 -1
- package/dist/dispatch/domains/index.js +0 -38
- package/dist/dispatch/domains/index.js.map +0 -1
- package/dist/dispatch/domains/memory.d.ts +0 -24
- package/dist/dispatch/domains/memory.d.ts.map +0 -1
- package/dist/dispatch/domains/memory.js +0 -305
- package/dist/dispatch/domains/memory.js.map +0 -1
- package/dist/dispatch/domains/nexus.d.ts +0 -24
- package/dist/dispatch/domains/nexus.d.ts.map +0 -1
- package/dist/dispatch/domains/nexus.js +0 -252
- package/dist/dispatch/domains/nexus.js.map +0 -1
- package/dist/dispatch/domains/orchestrate.d.ts +0 -21
- package/dist/dispatch/domains/orchestrate.d.ts.map +0 -1
- package/dist/dispatch/domains/orchestrate.js +0 -261
- package/dist/dispatch/domains/orchestrate.js.map +0 -1
- package/dist/dispatch/domains/pipeline.d.ts +0 -36
- package/dist/dispatch/domains/pipeline.d.ts.map +0 -1
- package/dist/dispatch/domains/pipeline.js +0 -554
- package/dist/dispatch/domains/pipeline.js.map +0 -1
- package/dist/dispatch/domains/session.d.ts +0 -24
- package/dist/dispatch/domains/session.d.ts.map +0 -1
- package/dist/dispatch/domains/session.js +0 -257
- package/dist/dispatch/domains/session.js.map +0 -1
- package/dist/dispatch/domains/sticky.d.ts +0 -22
- package/dist/dispatch/domains/sticky.d.ts.map +0 -1
- package/dist/dispatch/domains/sticky.js +0 -166
- package/dist/dispatch/domains/sticky.js.map +0 -1
- package/dist/dispatch/domains/tasks.d.ts +0 -26
- package/dist/dispatch/domains/tasks.d.ts.map +0 -1
- package/dist/dispatch/domains/tasks.js +0 -352
- package/dist/dispatch/domains/tasks.js.map +0 -1
- package/dist/dispatch/domains/tools.d.ts +0 -40
- package/dist/dispatch/domains/tools.d.ts.map +0 -1
- package/dist/dispatch/domains/tools.js +0 -497
- package/dist/dispatch/domains/tools.js.map +0 -1
- package/dist/dispatch/engines/_error.d.ts +0 -42
- package/dist/dispatch/engines/_error.d.ts.map +0 -1
- package/dist/dispatch/engines/_error.js +0 -201
- package/dist/dispatch/engines/_error.js.map +0 -1
- package/dist/dispatch/engines/codebase-map-engine.d.ts +0 -17
- package/dist/dispatch/engines/codebase-map-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/codebase-map-engine.js +0 -29
- package/dist/dispatch/engines/codebase-map-engine.js.map +0 -1
- package/dist/dispatch/engines/config-engine.d.ts +0 -21
- package/dist/dispatch/engines/config-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/config-engine.js +0 -45
- package/dist/dispatch/engines/config-engine.js.map +0 -1
- package/dist/dispatch/engines/hooks-engine.d.ts +0 -47
- package/dist/dispatch/engines/hooks-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/hooks-engine.js +0 -57
- package/dist/dispatch/engines/hooks-engine.js.map +0 -1
- package/dist/dispatch/engines/init-engine.d.ts +0 -43
- package/dist/dispatch/engines/init-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/init-engine.js +0 -73
- package/dist/dispatch/engines/init-engine.js.map +0 -1
- package/dist/dispatch/engines/lifecycle-engine.d.ts +0 -66
- package/dist/dispatch/engines/lifecycle-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/lifecycle-engine.js +0 -213
- package/dist/dispatch/engines/lifecycle-engine.js.map +0 -1
- package/dist/dispatch/engines/memory-engine.d.ts +0 -10
- package/dist/dispatch/engines/memory-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/memory-engine.js +0 -10
- package/dist/dispatch/engines/memory-engine.js.map +0 -1
- package/dist/dispatch/engines/nexus-engine.d.ts +0 -159
- package/dist/dispatch/engines/nexus-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/nexus-engine.js +0 -329
- package/dist/dispatch/engines/nexus-engine.js.map +0 -1
- package/dist/dispatch/engines/orchestrate-engine.d.ts +0 -133
- package/dist/dispatch/engines/orchestrate-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/orchestrate-engine.js +0 -770
- package/dist/dispatch/engines/orchestrate-engine.js.map +0 -1
- package/dist/dispatch/engines/pipeline-engine.d.ts +0 -51
- package/dist/dispatch/engines/pipeline-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/pipeline-engine.js +0 -192
- package/dist/dispatch/engines/pipeline-engine.js.map +0 -1
- package/dist/dispatch/engines/release-engine.d.ts +0 -94
- package/dist/dispatch/engines/release-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/release-engine.js +0 -670
- package/dist/dispatch/engines/release-engine.js.map +0 -1
- package/dist/dispatch/engines/session-engine.d.ts +0 -326
- package/dist/dispatch/engines/session-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/session-engine.js +0 -869
- package/dist/dispatch/engines/session-engine.js.map +0 -1
- package/dist/dispatch/engines/sticky-engine.d.ts +0 -100
- package/dist/dispatch/engines/sticky-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/sticky-engine.js +0 -181
- package/dist/dispatch/engines/sticky-engine.js.map +0 -1
- package/dist/dispatch/engines/system-engine.d.ts +0 -377
- package/dist/dispatch/engines/system-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/system-engine.js +0 -980
- package/dist/dispatch/engines/system-engine.js.map +0 -1
- package/dist/dispatch/engines/task-engine.d.ts +0 -584
- package/dist/dispatch/engines/task-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/task-engine.js +0 -881
- package/dist/dispatch/engines/task-engine.js.map +0 -1
- package/dist/dispatch/engines/template-parser.d.ts +0 -34
- package/dist/dispatch/engines/template-parser.d.ts.map +0 -1
- package/dist/dispatch/engines/template-parser.js +0 -57
- package/dist/dispatch/engines/template-parser.js.map +0 -1
- package/dist/dispatch/engines/tools-engine.d.ts +0 -285
- package/dist/dispatch/engines/tools-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/tools-engine.js +0 -676
- package/dist/dispatch/engines/tools-engine.js.map +0 -1
- package/dist/dispatch/engines/validate-engine.d.ts +0 -154
- package/dist/dispatch/engines/validate-engine.d.ts.map +0 -1
- package/dist/dispatch/engines/validate-engine.js +0 -527
- package/dist/dispatch/engines/validate-engine.js.map +0 -1
- package/dist/dispatch/index.d.ts +0 -20
- package/dist/dispatch/index.d.ts.map +0 -1
- package/dist/dispatch/index.js +0 -19
- package/dist/dispatch/index.js.map +0 -1
- package/dist/dispatch/lib/capability-matrix.d.ts +0 -11
- package/dist/dispatch/lib/capability-matrix.d.ts.map +0 -1
- package/dist/dispatch/lib/capability-matrix.js +0 -10
- package/dist/dispatch/lib/capability-matrix.js.map +0 -1
- package/dist/dispatch/lib/config.d.ts +0 -16
- package/dist/dispatch/lib/config.d.ts.map +0 -1
- package/dist/dispatch/lib/config.js +0 -15
- package/dist/dispatch/lib/config.js.map +0 -1
- package/dist/dispatch/lib/engine.d.ts +0 -25
- package/dist/dispatch/lib/engine.d.ts.map +0 -1
- package/dist/dispatch/lib/engine.js +0 -44
- package/dist/dispatch/lib/engine.js.map +0 -1
- package/dist/dispatch/lib/meta.d.ts +0 -26
- package/dist/dispatch/lib/meta.d.ts.map +0 -1
- package/dist/dispatch/lib/meta.js +0 -37
- package/dist/dispatch/lib/meta.js.map +0 -1
- package/dist/dispatch/lib/param-utils.d.ts +0 -11
- package/dist/dispatch/lib/param-utils.d.ts.map +0 -1
- package/dist/dispatch/lib/param-utils.js +0 -10
- package/dist/dispatch/lib/param-utils.js.map +0 -1
- package/dist/dispatch/lib/projections.d.ts +0 -23
- package/dist/dispatch/lib/projections.d.ts.map +0 -1
- package/dist/dispatch/lib/projections.js +0 -48
- package/dist/dispatch/lib/projections.js.map +0 -1
- package/dist/dispatch/lib/schema-utils.d.ts +0 -42
- package/dist/dispatch/lib/schema-utils.d.ts.map +0 -1
- package/dist/dispatch/lib/schema-utils.js +0 -93
- package/dist/dispatch/lib/schema-utils.js.map +0 -1
- package/dist/dispatch/lib/security.d.ts +0 -12
- package/dist/dispatch/lib/security.d.ts.map +0 -1
- package/dist/dispatch/lib/security.js +0 -10
- package/dist/dispatch/lib/security.js.map +0 -1
- package/dist/dispatch/middleware/audit.d.ts +0 -23
- package/dist/dispatch/middleware/audit.d.ts.map +0 -1
- package/dist/dispatch/middleware/audit.js +0 -169
- package/dist/dispatch/middleware/audit.js.map +0 -1
- package/dist/dispatch/middleware/field-filter.d.ts +0 -24
- package/dist/dispatch/middleware/field-filter.d.ts.map +0 -1
- package/dist/dispatch/middleware/field-filter.js +0 -65
- package/dist/dispatch/middleware/field-filter.js.map +0 -1
- package/dist/dispatch/middleware/pipeline.d.ts +0 -20
- package/dist/dispatch/middleware/pipeline.d.ts.map +0 -1
- package/dist/dispatch/middleware/pipeline.js +0 -47
- package/dist/dispatch/middleware/pipeline.js.map +0 -1
- package/dist/dispatch/middleware/projection.d.ts +0 -35
- package/dist/dispatch/middleware/projection.d.ts.map +0 -1
- package/dist/dispatch/middleware/projection.js +0 -145
- package/dist/dispatch/middleware/projection.js.map +0 -1
- package/dist/dispatch/middleware/protocol-enforcement.d.ts +0 -12
- package/dist/dispatch/middleware/protocol-enforcement.d.ts.map +0 -1
- package/dist/dispatch/middleware/protocol-enforcement.js +0 -30
- package/dist/dispatch/middleware/protocol-enforcement.js.map +0 -1
- package/dist/dispatch/middleware/rate-limiter.d.ts +0 -30
- package/dist/dispatch/middleware/rate-limiter.d.ts.map +0 -1
- package/dist/dispatch/middleware/rate-limiter.js +0 -101
- package/dist/dispatch/middleware/rate-limiter.js.map +0 -1
- package/dist/dispatch/middleware/sanitizer.d.ts +0 -10
- package/dist/dispatch/middleware/sanitizer.d.ts.map +0 -1
- package/dist/dispatch/middleware/sanitizer.js +0 -42
- package/dist/dispatch/middleware/sanitizer.js.map +0 -1
- package/dist/dispatch/middleware/session-resolver.d.ts +0 -26
- package/dist/dispatch/middleware/session-resolver.d.ts.map +0 -1
- package/dist/dispatch/middleware/session-resolver.js +0 -65
- package/dist/dispatch/middleware/session-resolver.js.map +0 -1
- package/dist/dispatch/middleware/verification-gates.d.ts +0 -3
- package/dist/dispatch/middleware/verification-gates.d.ts.map +0 -1
- package/dist/dispatch/middleware/verification-gates.js +0 -40
- package/dist/dispatch/middleware/verification-gates.js.map +0 -1
- package/dist/dispatch/registry.d.ts +0 -91
- package/dist/dispatch/registry.d.ts.map +0 -1
- package/dist/dispatch/registry.js +0 -2693
- package/dist/dispatch/registry.js.map +0 -1
- package/dist/dispatch/types.d.ts +0 -218
- package/dist/dispatch/types.d.ts.map +0 -1
- package/dist/dispatch/types.js +0 -25
- package/dist/dispatch/types.js.map +0 -1
- package/dist/mcp/gateways/mutate.d.ts +0 -146
- package/dist/mcp/gateways/mutate.d.ts.map +0 -1
- package/dist/mcp/gateways/mutate.js +0 -1016
- package/dist/mcp/gateways/mutate.js.map +0 -1
- package/dist/mcp/gateways/query.d.ts +0 -138
- package/dist/mcp/gateways/query.d.ts.map +0 -1
- package/dist/mcp/gateways/query.js +0 -186
- package/dist/mcp/gateways/query.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -16
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/lib/background-jobs.d.ts +0 -86
- package/dist/mcp/lib/background-jobs.d.ts.map +0 -1
- package/dist/mcp/lib/background-jobs.js +0 -183
- package/dist/mcp/lib/background-jobs.js.map +0 -1
- package/dist/mcp/lib/budget.d.ts +0 -35
- package/dist/mcp/lib/budget.d.ts.map +0 -1
- package/dist/mcp/lib/budget.js +0 -102
- package/dist/mcp/lib/budget.js.map +0 -1
- package/dist/mcp/lib/cache.d.ts +0 -78
- package/dist/mcp/lib/cache.d.ts.map +0 -1
- package/dist/mcp/lib/cache.js +0 -207
- package/dist/mcp/lib/cache.js.map +0 -1
- package/dist/mcp/lib/config.d.ts +0 -42
- package/dist/mcp/lib/config.d.ts.map +0 -1
- package/dist/mcp/lib/config.js +0 -241
- package/dist/mcp/lib/config.js.map +0 -1
- package/dist/mcp/lib/defaults.d.ts +0 -115
- package/dist/mcp/lib/defaults.d.ts.map +0 -1
- package/dist/mcp/lib/defaults.js +0 -61
- package/dist/mcp/lib/defaults.js.map +0 -1
- package/dist/mcp/lib/exit-codes.d.ts +0 -197
- package/dist/mcp/lib/exit-codes.d.ts.map +0 -1
- package/dist/mcp/lib/exit-codes.js +0 -1016
- package/dist/mcp/lib/exit-codes.js.map +0 -1
- package/dist/mcp/lib/gate-validators.d.ts +0 -13
- package/dist/mcp/lib/gate-validators.d.ts.map +0 -1
- package/dist/mcp/lib/gate-validators.js +0 -13
- package/dist/mcp/lib/gate-validators.js.map +0 -1
- package/dist/mcp/lib/gateway-meta.d.ts +0 -37
- package/dist/mcp/lib/gateway-meta.d.ts.map +0 -1
- package/dist/mcp/lib/gateway-meta.js +0 -50
- package/dist/mcp/lib/gateway-meta.js.map +0 -1
- package/dist/mcp/lib/job-manager-accessor.d.ts +0 -10
- package/dist/mcp/lib/job-manager-accessor.d.ts.map +0 -1
- package/dist/mcp/lib/job-manager-accessor.js +0 -14
- package/dist/mcp/lib/job-manager-accessor.js.map +0 -1
- package/dist/mcp/lib/protocol-enforcement.d.ts +0 -12
- package/dist/mcp/lib/protocol-enforcement.d.ts.map +0 -1
- package/dist/mcp/lib/protocol-enforcement.js +0 -12
- package/dist/mcp/lib/protocol-enforcement.js.map +0 -1
- package/dist/mcp/lib/protocol-rules.d.ts +0 -12
- package/dist/mcp/lib/protocol-rules.d.ts.map +0 -1
- package/dist/mcp/lib/protocol-rules.js +0 -12
- package/dist/mcp/lib/protocol-rules.js.map +0 -1
- package/dist/mcp/lib/rate-limiter.d.ts +0 -110
- package/dist/mcp/lib/rate-limiter.d.ts.map +0 -1
- package/dist/mcp/lib/rate-limiter.js +0 -208
- package/dist/mcp/lib/rate-limiter.js.map +0 -1
- package/dist/mcp/lib/router.d.ts +0 -58
- package/dist/mcp/lib/router.d.ts.map +0 -1
- package/dist/mcp/lib/router.js +0 -12
- package/dist/mcp/lib/router.js.map +0 -1
- package/dist/mcp/lib/security.d.ts +0 -161
- package/dist/mcp/lib/security.d.ts.map +0 -1
- package/dist/mcp/lib/security.js +0 -361
- package/dist/mcp/lib/security.js.map +0 -1
- package/dist/mcp/lib/verification-gates.d.ts +0 -13
- package/dist/mcp/lib/verification-gates.d.ts.map +0 -1
- package/dist/mcp/lib/verification-gates.js +0 -12
- package/dist/mcp/lib/verification-gates.js.map +0 -1
- package/dist/mcp/resources/budget.d.ts +0 -22
- package/dist/mcp/resources/budget.d.ts.map +0 -1
- package/dist/mcp/resources/budget.js +0 -46
- package/dist/mcp/resources/budget.js.map +0 -1
- package/dist/mcp/resources/index.d.ts +0 -53
- package/dist/mcp/resources/index.d.ts.map +0 -1
- package/dist/mcp/resources/index.js +0 -278
- package/dist/mcp/resources/index.js.map +0 -1
|
@@ -1,881 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task Engine
|
|
3
|
-
*
|
|
4
|
-
* Native TypeScript implementation of core task CRUD operations.
|
|
5
|
-
* Uses StoreProvider (via getStore()) for task/session data access,
|
|
6
|
-
* falling back to direct JSON for config and specialized operations.
|
|
7
|
-
*
|
|
8
|
-
* CRUD operations (show, list, find, exists, create, update, complete, delete, archive)
|
|
9
|
-
* delegate to src/core/tasks/*.
|
|
10
|
-
*
|
|
11
|
-
* Non-CRUD operations delegate to src/core/tasks/task-ops.ts.
|
|
12
|
-
*
|
|
13
|
-
* @task T4657
|
|
14
|
-
* @task T4790
|
|
15
|
-
* @epic T4654
|
|
16
|
-
*/
|
|
17
|
-
// validation-rules.js still used by other engines; core modules handle their own validation
|
|
18
|
-
// Core module imports for accessor-based operations
|
|
19
|
-
import { addTask as coreAddTask, archiveTasks as coreArchiveTasks, completeTask as coreCompleteTask, deleteTask as coreDeleteTask, findTasks as coreFindTasks, listTasks as coreListTasks, showTask as coreShowTask, coreTaskAnalyze, coreTaskBatchValidate, coreTaskBlockers, coreTaskCancel, coreTaskComplexityEstimate, coreTaskDepends, coreTaskDeps, coreTaskDepsCycles, coreTaskDepsOverview, coreTaskExport, coreTaskHistory, coreTaskImport, coreTaskLint, coreTaskNext, coreTaskPromote, coreTaskRelates, coreTaskRelatesAdd, coreTaskReopen, coreTaskReorder, coreTaskReparent, coreTaskRestore, coreTaskStats, coreTaskTree, coreTaskUnarchive, updateTask as coreUpdateTask, toCompact, } from '@cleocode/core/internal';
|
|
20
|
-
import { getAccessor } from '@cleocode/core/internal';
|
|
21
|
-
import { engineError } from './_error.js';
|
|
22
|
-
const TASK_COMPLETE_EXIT_TO_ENGINE_CODE = {
|
|
23
|
-
4: 'E_NOT_FOUND',
|
|
24
|
-
5: 'E_DEPENDENCY_ERROR',
|
|
25
|
-
6: 'E_VALIDATION_FAILED',
|
|
26
|
-
16: 'E_HAS_CHILDREN',
|
|
27
|
-
17: 'E_TASK_COMPLETED',
|
|
28
|
-
40: 'E_VERIFICATION_INIT_FAILED',
|
|
29
|
-
44: 'E_MAX_ROUNDS_EXCEEDED',
|
|
30
|
-
45: 'E_GATE_DEPENDENCY',
|
|
31
|
-
80: 'E_LIFECYCLE_GATE_FAILED',
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Convert a core Task to a TaskRecord for backward compatibility.
|
|
35
|
-
* TaskRecord has string-typed status/priority; Task has union types.
|
|
36
|
-
*
|
|
37
|
-
* @task T4657
|
|
38
|
-
* @epic T4654
|
|
39
|
-
*/
|
|
40
|
-
function taskToRecord(task) {
|
|
41
|
-
// Task union-typed fields (status, priority, origin, etc.) widen to string in TaskRecord.
|
|
42
|
-
// Some fields have structural mismatches (blockedBy: string vs string[], etc.)
|
|
43
|
-
// so we explicitly map each field rather than relying on spread.
|
|
44
|
-
return {
|
|
45
|
-
id: task.id,
|
|
46
|
-
title: task.title,
|
|
47
|
-
description: task.description ?? '',
|
|
48
|
-
status: task.status,
|
|
49
|
-
priority: task.priority,
|
|
50
|
-
type: task.type,
|
|
51
|
-
phase: task.phase,
|
|
52
|
-
createdAt: task.createdAt,
|
|
53
|
-
updatedAt: task.updatedAt ?? null,
|
|
54
|
-
completedAt: task.completedAt ?? null,
|
|
55
|
-
cancelledAt: task.cancelledAt ?? null,
|
|
56
|
-
parentId: task.parentId,
|
|
57
|
-
position: task.position,
|
|
58
|
-
positionVersion: task.positionVersion,
|
|
59
|
-
depends: task.depends,
|
|
60
|
-
relates: task.relates,
|
|
61
|
-
files: task.files,
|
|
62
|
-
acceptance: task.acceptance,
|
|
63
|
-
notes: task.notes,
|
|
64
|
-
labels: task.labels,
|
|
65
|
-
size: task.size ?? null,
|
|
66
|
-
epicLifecycle: task.epicLifecycle ?? null,
|
|
67
|
-
noAutoComplete: task.noAutoComplete ?? null,
|
|
68
|
-
verification: task.verification ? { ...task.verification } : null,
|
|
69
|
-
origin: task.origin ?? null,
|
|
70
|
-
cancellationReason: task.cancellationReason,
|
|
71
|
-
blockedBy: task.blockedBy ? [task.blockedBy] : undefined,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Convert an array of core Tasks to TaskRecords.
|
|
76
|
-
*
|
|
77
|
-
* @task T4657
|
|
78
|
-
* @epic T4654
|
|
79
|
-
*/
|
|
80
|
-
function tasksToRecords(tasks) {
|
|
81
|
-
return tasks.map(taskToRecord);
|
|
82
|
-
}
|
|
83
|
-
// loadTaskFile and saveTaskFile removed — all operations now use DataAccessor.
|
|
84
|
-
// Config reads (hierarchy limits, phase meta) still use readJsonFile directly
|
|
85
|
-
// since they are NOT domain data (they don't go through the accessor).
|
|
86
|
-
// Priority normalization moved to core/tasks/add.ts (normalizePriority)
|
|
87
|
-
// ===== Query Operations =====
|
|
88
|
-
/**
|
|
89
|
-
* Get a single task by ID
|
|
90
|
-
* @task T4657
|
|
91
|
-
* @epic T4654
|
|
92
|
-
*/
|
|
93
|
-
export async function taskShow(projectRoot, taskId) {
|
|
94
|
-
try {
|
|
95
|
-
const accessor = await getAccessor(projectRoot);
|
|
96
|
-
const detail = await coreShowTask(taskId, projectRoot, accessor);
|
|
97
|
-
return { success: true, data: { task: taskToRecord(detail) } };
|
|
98
|
-
}
|
|
99
|
-
catch (err) {
|
|
100
|
-
const code = err?.code;
|
|
101
|
-
if (code === 4 /* NOT_FOUND */) {
|
|
102
|
-
return engineError('E_NOT_FOUND', err.message || `Task '${taskId}' not found`);
|
|
103
|
-
}
|
|
104
|
-
if (code === 2 /* INVALID_INPUT */) {
|
|
105
|
-
return engineError('E_INVALID_INPUT', err.message || 'Invalid input');
|
|
106
|
-
}
|
|
107
|
-
return engineError('E_NOT_INITIALIZED', err.message || 'Task database not initialized');
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* List tasks with optional filters
|
|
112
|
-
* @task T4657
|
|
113
|
-
* @epic T4654
|
|
114
|
-
*/
|
|
115
|
-
export async function taskList(projectRoot, params) {
|
|
116
|
-
try {
|
|
117
|
-
const accessor = await getAccessor(projectRoot);
|
|
118
|
-
const result = await coreListTasks({
|
|
119
|
-
parentId: params?.parent ?? undefined,
|
|
120
|
-
status: params?.status,
|
|
121
|
-
priority: params?.priority,
|
|
122
|
-
type: params?.type,
|
|
123
|
-
phase: params?.phase,
|
|
124
|
-
label: params?.label,
|
|
125
|
-
children: params?.children,
|
|
126
|
-
limit: params?.limit,
|
|
127
|
-
offset: params?.offset,
|
|
128
|
-
}, projectRoot, accessor);
|
|
129
|
-
const tasks = params?.compact
|
|
130
|
-
? result.tasks.map((t) => toCompact(t))
|
|
131
|
-
: tasksToRecords(result.tasks);
|
|
132
|
-
if (params?.compact) {
|
|
133
|
-
return {
|
|
134
|
-
success: true,
|
|
135
|
-
data: { tasks, total: result.total, filtered: result.filtered },
|
|
136
|
-
page: result.page,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
success: true,
|
|
141
|
-
data: { tasks, total: result.total, filtered: result.filtered },
|
|
142
|
-
page: result.page,
|
|
143
|
-
};
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Fuzzy search tasks by title/description/ID
|
|
151
|
-
* @task T4657
|
|
152
|
-
* @epic T4654
|
|
153
|
-
*/
|
|
154
|
-
export async function taskFind(projectRoot, query, limit, options) {
|
|
155
|
-
try {
|
|
156
|
-
const accessor = await getAccessor(projectRoot);
|
|
157
|
-
const findResult = await coreFindTasks({
|
|
158
|
-
query,
|
|
159
|
-
id: options?.id,
|
|
160
|
-
exact: options?.exact,
|
|
161
|
-
status: options?.status,
|
|
162
|
-
includeArchive: options?.includeArchive,
|
|
163
|
-
limit: limit ?? 20,
|
|
164
|
-
offset: options?.offset,
|
|
165
|
-
}, projectRoot, accessor);
|
|
166
|
-
const results = findResult.results.map((r) => ({
|
|
167
|
-
id: r.id,
|
|
168
|
-
title: r.title,
|
|
169
|
-
status: r.status,
|
|
170
|
-
priority: r.priority,
|
|
171
|
-
parentId: r.parentId,
|
|
172
|
-
}));
|
|
173
|
-
return { success: true, data: { results, total: results.length } };
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Check if a task exists
|
|
181
|
-
* @task T4657
|
|
182
|
-
* @epic T4654
|
|
183
|
-
*/
|
|
184
|
-
export async function taskExists(projectRoot, taskId) {
|
|
185
|
-
try {
|
|
186
|
-
const accessor = await getAccessor(projectRoot);
|
|
187
|
-
const exists = await accessor.taskExists(taskId);
|
|
188
|
-
return { success: true, data: { exists, taskId } };
|
|
189
|
-
}
|
|
190
|
-
catch {
|
|
191
|
-
return { success: true, data: { exists: false, taskId } };
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
// ===== Mutate Operations =====
|
|
195
|
-
/**
|
|
196
|
-
* Create a new task
|
|
197
|
-
*/
|
|
198
|
-
export async function taskCreate(projectRoot, params) {
|
|
199
|
-
try {
|
|
200
|
-
const accessor = await getAccessor(projectRoot);
|
|
201
|
-
const result = await coreAddTask({
|
|
202
|
-
title: params.title,
|
|
203
|
-
description: params.description,
|
|
204
|
-
parentId: params.parent || null,
|
|
205
|
-
depends: params.depends,
|
|
206
|
-
priority: params.priority || 'medium',
|
|
207
|
-
labels: params.labels,
|
|
208
|
-
type: params.type || undefined,
|
|
209
|
-
phase: params.phase,
|
|
210
|
-
size: params.size,
|
|
211
|
-
acceptance: params.acceptance,
|
|
212
|
-
notes: params.notes,
|
|
213
|
-
files: params.files,
|
|
214
|
-
}, projectRoot, accessor);
|
|
215
|
-
return {
|
|
216
|
-
success: true,
|
|
217
|
-
data: { task: taskToRecord(result.task), duplicate: result.duplicate ?? false },
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
catch (err) {
|
|
221
|
-
const cleoErr = err;
|
|
222
|
-
// Map CleoError exit codes to engine error codes (see src/types/exit-codes.ts)
|
|
223
|
-
if (cleoErr.code === 10 /* PARENT_NOT_FOUND */) {
|
|
224
|
-
return engineError('E_PARENT_NOT_FOUND', cleoErr.message ?? 'Parent task not found');
|
|
225
|
-
}
|
|
226
|
-
if (cleoErr.code === 11 /* DEPTH_EXCEEDED */) {
|
|
227
|
-
return engineError('E_DEPTH_EXCEEDED', cleoErr.message ?? 'Max hierarchy depth exceeded');
|
|
228
|
-
}
|
|
229
|
-
if (cleoErr.code === 12 /* SIBLING_LIMIT */) {
|
|
230
|
-
return engineError('E_SIBLING_LIMIT', cleoErr.message ?? 'Max siblings exceeded');
|
|
231
|
-
}
|
|
232
|
-
if (cleoErr.code === 13 /* INVALID_PARENT_TYPE */) {
|
|
233
|
-
return engineError('E_INVALID_PARENT', cleoErr.message ?? 'Invalid parent type');
|
|
234
|
-
}
|
|
235
|
-
if (cleoErr.code === 14 /* CIRCULAR_REFERENCE */) {
|
|
236
|
-
return engineError('E_CIRCULAR_REFERENCE', cleoErr.message ?? 'Circular reference detected');
|
|
237
|
-
}
|
|
238
|
-
if (cleoErr.code === 6 /* VALIDATION_ERROR */ || cleoErr.code === 2 /* INVALID_INPUT */) {
|
|
239
|
-
return engineError('E_VALIDATION_FAILED', cleoErr.message ?? 'Validation failed');
|
|
240
|
-
}
|
|
241
|
-
if (cleoErr.code === 4 /* NOT_FOUND */) {
|
|
242
|
-
return engineError('E_NOT_FOUND', cleoErr.message ?? 'Task not found');
|
|
243
|
-
}
|
|
244
|
-
return engineError('E_NOT_INITIALIZED', cleoErr.message ?? 'Task database not initialized');
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
/**
|
|
248
|
-
* Update a task
|
|
249
|
-
*/
|
|
250
|
-
export async function taskUpdate(projectRoot, taskId, updates) {
|
|
251
|
-
try {
|
|
252
|
-
const accessor = await getAccessor(projectRoot);
|
|
253
|
-
const result = await coreUpdateTask({
|
|
254
|
-
taskId,
|
|
255
|
-
title: updates.title,
|
|
256
|
-
description: updates.description,
|
|
257
|
-
status: updates.status,
|
|
258
|
-
priority: updates.priority,
|
|
259
|
-
notes: updates.notes,
|
|
260
|
-
labels: updates.labels,
|
|
261
|
-
addLabels: updates.addLabels,
|
|
262
|
-
removeLabels: updates.removeLabels,
|
|
263
|
-
depends: updates.depends,
|
|
264
|
-
addDepends: updates.addDepends,
|
|
265
|
-
removeDepends: updates.removeDepends,
|
|
266
|
-
acceptance: updates.acceptance,
|
|
267
|
-
parentId: updates.parent,
|
|
268
|
-
type: updates.type,
|
|
269
|
-
size: updates.size,
|
|
270
|
-
}, projectRoot, accessor);
|
|
271
|
-
return { success: true, data: { task: taskToRecord(result.task), changes: result.changes } };
|
|
272
|
-
}
|
|
273
|
-
catch (err) {
|
|
274
|
-
const cleoErr = err;
|
|
275
|
-
if (cleoErr.code === 4 /* NOT_FOUND */) {
|
|
276
|
-
return engineError('E_NOT_FOUND', cleoErr.message ?? `Task '${taskId}' not found`);
|
|
277
|
-
}
|
|
278
|
-
if (cleoErr.code === 6 /* VALIDATION_ERROR */ || cleoErr.code === 2 /* INVALID_INPUT */) {
|
|
279
|
-
return engineError('E_VALIDATION_FAILED', cleoErr.message ?? 'Validation failed');
|
|
280
|
-
}
|
|
281
|
-
if (cleoErr.code === 102 /* NO_CHANGE */) {
|
|
282
|
-
return engineError('E_NO_CHANGE', cleoErr.message ?? 'No changes specified');
|
|
283
|
-
}
|
|
284
|
-
return engineError('E_NOT_INITIALIZED', cleoErr.message ?? 'Task database not initialized');
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Complete a task (set status to done)
|
|
289
|
-
*/
|
|
290
|
-
export async function taskComplete(projectRoot, taskId, notes) {
|
|
291
|
-
try {
|
|
292
|
-
const accessor = await getAccessor(projectRoot);
|
|
293
|
-
const result = await coreCompleteTask({ taskId, notes }, projectRoot, accessor);
|
|
294
|
-
return {
|
|
295
|
-
success: true,
|
|
296
|
-
data: {
|
|
297
|
-
task: result.task,
|
|
298
|
-
...(result.autoCompleted && { autoCompleted: result.autoCompleted }),
|
|
299
|
-
...(result.unblockedTasks && { unblockedTasks: result.unblockedTasks }),
|
|
300
|
-
},
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
catch (err) {
|
|
304
|
-
const cleoErr = err;
|
|
305
|
-
const message = cleoErr.message ?? 'Failed to complete task';
|
|
306
|
-
if (typeof cleoErr.code === 'number') {
|
|
307
|
-
const mappedCode = TASK_COMPLETE_EXIT_TO_ENGINE_CODE[cleoErr.code];
|
|
308
|
-
if (mappedCode) {
|
|
309
|
-
return engineError(mappedCode, message);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
return engineError('E_INTERNAL', message);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Delete a task
|
|
317
|
-
*/
|
|
318
|
-
export async function taskDelete(projectRoot, taskId, force) {
|
|
319
|
-
try {
|
|
320
|
-
const accessor = await getAccessor(projectRoot);
|
|
321
|
-
const result = await coreDeleteTask({
|
|
322
|
-
taskId,
|
|
323
|
-
force: force ?? false,
|
|
324
|
-
cascade: force ?? false,
|
|
325
|
-
}, projectRoot, accessor);
|
|
326
|
-
return {
|
|
327
|
-
success: true,
|
|
328
|
-
data: {
|
|
329
|
-
deletedTask: taskToRecord(result.deletedTask),
|
|
330
|
-
deleted: true,
|
|
331
|
-
cascadeDeleted: result.cascadeDeleted,
|
|
332
|
-
},
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
catch (err) {
|
|
336
|
-
const cleoErr = err;
|
|
337
|
-
if (cleoErr.code === 4 /* NOT_FOUND */) {
|
|
338
|
-
return engineError('E_NOT_FOUND', cleoErr.message ?? `Task '${taskId}' not found`);
|
|
339
|
-
}
|
|
340
|
-
if (cleoErr.code === 16 /* HAS_CHILDREN */) {
|
|
341
|
-
return engineError('E_HAS_CHILDREN', cleoErr.message ?? `Task '${taskId}' has children`);
|
|
342
|
-
}
|
|
343
|
-
return engineError('E_NOT_INITIALIZED', cleoErr.message ?? 'Task database not initialized');
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* Archive completed tasks.
|
|
348
|
-
* Moves done/cancelled tasks from active task data to archive.
|
|
349
|
-
*/
|
|
350
|
-
export async function taskArchive(projectRoot, taskId, before) {
|
|
351
|
-
try {
|
|
352
|
-
const accessor = await getAccessor(projectRoot);
|
|
353
|
-
const result = await coreArchiveTasks({
|
|
354
|
-
taskIds: taskId ? [taskId] : undefined,
|
|
355
|
-
before,
|
|
356
|
-
}, projectRoot, accessor);
|
|
357
|
-
return {
|
|
358
|
-
success: true,
|
|
359
|
-
data: {
|
|
360
|
-
archivedCount: result.archived.length,
|
|
361
|
-
archivedTasks: result.archived.map((id) => ({ id })),
|
|
362
|
-
},
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
catch (err) {
|
|
366
|
-
const cleoErr = err;
|
|
367
|
-
if (cleoErr.code === 4 /* NOT_FOUND */) {
|
|
368
|
-
return engineError('E_NOT_FOUND', cleoErr.message ?? 'Task not found');
|
|
369
|
-
}
|
|
370
|
-
return engineError('E_NOT_INITIALIZED', cleoErr.message ?? 'Task database not initialized');
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
// ===== Non-CRUD Operations (delegated to core/tasks/task-ops.ts) =====
|
|
374
|
-
/**
|
|
375
|
-
* Suggest next task to work on based on priority, phase alignment, age, and dependency readiness.
|
|
376
|
-
* @task T4657
|
|
377
|
-
* @task T4790
|
|
378
|
-
* @epic T4654
|
|
379
|
-
*/
|
|
380
|
-
export async function taskNext(projectRoot, params) {
|
|
381
|
-
try {
|
|
382
|
-
const result = await coreTaskNext(projectRoot, params);
|
|
383
|
-
return { success: true, data: result };
|
|
384
|
-
}
|
|
385
|
-
catch {
|
|
386
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
/**
|
|
390
|
-
* Show blocked tasks and analyze blocking chains.
|
|
391
|
-
* @task T4657
|
|
392
|
-
* @task T4790
|
|
393
|
-
* @epic T4654
|
|
394
|
-
*/
|
|
395
|
-
export async function taskBlockers(projectRoot, params) {
|
|
396
|
-
try {
|
|
397
|
-
const result = await coreTaskBlockers(projectRoot, params);
|
|
398
|
-
return { success: true, data: result };
|
|
399
|
-
}
|
|
400
|
-
catch {
|
|
401
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Build hierarchy tree.
|
|
406
|
-
* @task T4657
|
|
407
|
-
* @task T4790
|
|
408
|
-
* @epic T4654
|
|
409
|
-
*/
|
|
410
|
-
export async function taskTree(projectRoot, taskId) {
|
|
411
|
-
try {
|
|
412
|
-
const result = await coreTaskTree(projectRoot, taskId);
|
|
413
|
-
return { success: true, data: result };
|
|
414
|
-
}
|
|
415
|
-
catch (err) {
|
|
416
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
417
|
-
if (message.includes('not found')) {
|
|
418
|
-
return engineError('E_NOT_FOUND', message);
|
|
419
|
-
}
|
|
420
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
/**
|
|
424
|
-
* Show dependencies for a task - both what it depends on and what depends on it.
|
|
425
|
-
* @task T4657
|
|
426
|
-
* @task T4790
|
|
427
|
-
* @epic T4654
|
|
428
|
-
*/
|
|
429
|
-
export async function taskDeps(projectRoot, taskId) {
|
|
430
|
-
try {
|
|
431
|
-
const result = await coreTaskDeps(projectRoot, taskId);
|
|
432
|
-
return { success: true, data: result };
|
|
433
|
-
}
|
|
434
|
-
catch (err) {
|
|
435
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
436
|
-
if (message.includes('not found')) {
|
|
437
|
-
return engineError('E_NOT_FOUND', message);
|
|
438
|
-
}
|
|
439
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Show task relations (existing relates entries).
|
|
444
|
-
* @task T4657
|
|
445
|
-
* @task T4790
|
|
446
|
-
* @epic T4654
|
|
447
|
-
*/
|
|
448
|
-
export async function taskRelates(projectRoot, taskId) {
|
|
449
|
-
try {
|
|
450
|
-
const result = await coreTaskRelates(projectRoot, taskId);
|
|
451
|
-
return { success: true, data: result };
|
|
452
|
-
}
|
|
453
|
-
catch (err) {
|
|
454
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
455
|
-
if (message.includes('not found')) {
|
|
456
|
-
return engineError('E_NOT_FOUND', message);
|
|
457
|
-
}
|
|
458
|
-
return engineError('E_GENERAL', `Failed to read task relations: ${message}`);
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Add a relation between two tasks.
|
|
463
|
-
* @task T4790
|
|
464
|
-
*/
|
|
465
|
-
export async function taskRelatesAdd(projectRoot, taskId, relatedId, type, reason) {
|
|
466
|
-
try {
|
|
467
|
-
const result = await coreTaskRelatesAdd(projectRoot, taskId, relatedId, type, reason);
|
|
468
|
-
return { success: true, data: result };
|
|
469
|
-
}
|
|
470
|
-
catch (err) {
|
|
471
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
472
|
-
if (message.includes('not found')) {
|
|
473
|
-
return engineError('E_NOT_FOUND', message);
|
|
474
|
-
}
|
|
475
|
-
if (message.includes('Invalid relation type')) {
|
|
476
|
-
return engineError('E_VALIDATION', message, {
|
|
477
|
-
fix: 'Use a valid relation type: related, blocks, duplicates, absorbs, fixes, extends, supersedes',
|
|
478
|
-
});
|
|
479
|
-
}
|
|
480
|
-
return engineError('E_GENERAL', `Failed to update task relations: ${message}`);
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
/**
|
|
484
|
-
* Analyze a task for description quality, missing fields, and dependency health.
|
|
485
|
-
* @task T4657
|
|
486
|
-
* @task T4790
|
|
487
|
-
* @epic T4654
|
|
488
|
-
*/
|
|
489
|
-
export async function taskAnalyze(projectRoot, taskId, params) {
|
|
490
|
-
try {
|
|
491
|
-
const result = await coreTaskAnalyze(projectRoot, taskId, params);
|
|
492
|
-
return { success: true, data: result };
|
|
493
|
-
}
|
|
494
|
-
catch (err) {
|
|
495
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
496
|
-
if (message.includes('not found')) {
|
|
497
|
-
return engineError('E_NOT_FOUND', message);
|
|
498
|
-
}
|
|
499
|
-
return engineError('E_GENERAL', `Task analysis failed: ${message}`);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* Restore a cancelled task back to pending.
|
|
504
|
-
* @task T4790
|
|
505
|
-
*/
|
|
506
|
-
export async function taskRestore(projectRoot, taskId, params) {
|
|
507
|
-
try {
|
|
508
|
-
const result = await coreTaskRestore(projectRoot, taskId, params);
|
|
509
|
-
return { success: true, data: result };
|
|
510
|
-
}
|
|
511
|
-
catch (err) {
|
|
512
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
513
|
-
if (message.includes('not found')) {
|
|
514
|
-
return engineError('E_NOT_FOUND', message);
|
|
515
|
-
}
|
|
516
|
-
if (message.includes('not cancelled')) {
|
|
517
|
-
return engineError('E_INVALID_INPUT', message);
|
|
518
|
-
}
|
|
519
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to restore task');
|
|
520
|
-
}
|
|
521
|
-
}
|
|
522
|
-
/**
|
|
523
|
-
* Move an archived task back to active task data with status 'done' (or specified status).
|
|
524
|
-
* @task T4790
|
|
525
|
-
*/
|
|
526
|
-
export async function taskUnarchive(projectRoot, taskId, params) {
|
|
527
|
-
try {
|
|
528
|
-
const result = await coreTaskUnarchive(projectRoot, taskId, params);
|
|
529
|
-
return { success: true, data: result };
|
|
530
|
-
}
|
|
531
|
-
catch (err) {
|
|
532
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
533
|
-
if (message.includes('not found')) {
|
|
534
|
-
return engineError('E_NOT_FOUND', message);
|
|
535
|
-
}
|
|
536
|
-
if (message.includes('already exists')) {
|
|
537
|
-
return engineError('E_ID_COLLISION', message);
|
|
538
|
-
}
|
|
539
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to unarchive task');
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
/**
|
|
543
|
-
* Change task position within its sibling group.
|
|
544
|
-
* @task T4790
|
|
545
|
-
*/
|
|
546
|
-
export async function taskReorder(projectRoot, taskId, position) {
|
|
547
|
-
try {
|
|
548
|
-
const result = await coreTaskReorder(projectRoot, taskId, position);
|
|
549
|
-
return { success: true, data: result };
|
|
550
|
-
}
|
|
551
|
-
catch (err) {
|
|
552
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
553
|
-
if (message.includes('not found')) {
|
|
554
|
-
return engineError('E_NOT_FOUND', message);
|
|
555
|
-
}
|
|
556
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to reorder task');
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
/**
|
|
560
|
-
* Move task under a different parent.
|
|
561
|
-
* @task T4790
|
|
562
|
-
*/
|
|
563
|
-
export async function taskReparent(projectRoot, taskId, newParentId) {
|
|
564
|
-
try {
|
|
565
|
-
const result = await coreTaskReparent(projectRoot, taskId, newParentId);
|
|
566
|
-
return { success: true, data: result };
|
|
567
|
-
}
|
|
568
|
-
catch (err) {
|
|
569
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
570
|
-
if (message.includes('not found')) {
|
|
571
|
-
const code = message.includes('Parent') ? 'E_PARENT_NOT_FOUND' : 'E_NOT_FOUND';
|
|
572
|
-
return engineError(code, message);
|
|
573
|
-
}
|
|
574
|
-
if (message.includes('subtask')) {
|
|
575
|
-
return engineError('E_INVALID_PARENT_TYPE', message);
|
|
576
|
-
}
|
|
577
|
-
if (message.includes('circular')) {
|
|
578
|
-
return engineError('E_CIRCULAR_REFERENCE', message);
|
|
579
|
-
}
|
|
580
|
-
if (message.includes('depth')) {
|
|
581
|
-
return engineError('E_DEPTH_EXCEEDED', message);
|
|
582
|
-
}
|
|
583
|
-
if (message.includes('siblings')) {
|
|
584
|
-
return engineError('E_SIBLING_LIMIT', message);
|
|
585
|
-
}
|
|
586
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to reparent task');
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
/**
|
|
590
|
-
* Promote a subtask to task or task to root (remove parent).
|
|
591
|
-
* @task T4790
|
|
592
|
-
*/
|
|
593
|
-
export async function taskPromote(projectRoot, taskId) {
|
|
594
|
-
try {
|
|
595
|
-
const result = await coreTaskPromote(projectRoot, taskId);
|
|
596
|
-
return { success: true, data: result };
|
|
597
|
-
}
|
|
598
|
-
catch (err) {
|
|
599
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
600
|
-
if (message.includes('not found')) {
|
|
601
|
-
return engineError('E_NOT_FOUND', message);
|
|
602
|
-
}
|
|
603
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to promote task');
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
/**
|
|
607
|
-
* Reopen a completed task (set status back to pending).
|
|
608
|
-
* @task T4790
|
|
609
|
-
*/
|
|
610
|
-
export async function taskReopen(projectRoot, taskId, params) {
|
|
611
|
-
try {
|
|
612
|
-
const result = await coreTaskReopen(projectRoot, taskId, params);
|
|
613
|
-
return { success: true, data: result };
|
|
614
|
-
}
|
|
615
|
-
catch (err) {
|
|
616
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
617
|
-
if (message.includes('not found')) {
|
|
618
|
-
return engineError('E_NOT_FOUND', message);
|
|
619
|
-
}
|
|
620
|
-
if (message.includes('not completed')) {
|
|
621
|
-
return engineError('E_INVALID_INPUT', message);
|
|
622
|
-
}
|
|
623
|
-
if (message.includes('Invalid target')) {
|
|
624
|
-
return engineError('E_INVALID_INPUT', message);
|
|
625
|
-
}
|
|
626
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to reopen task');
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
/**
|
|
630
|
-
* Cancel a task (soft terminal state — reversible via restore).
|
|
631
|
-
* @task T4529
|
|
632
|
-
*/
|
|
633
|
-
export async function taskCancel(projectRoot, taskId, reason) {
|
|
634
|
-
try {
|
|
635
|
-
const result = await coreTaskCancel(projectRoot, taskId, { reason });
|
|
636
|
-
return { success: true, data: result };
|
|
637
|
-
}
|
|
638
|
-
catch (err) {
|
|
639
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
640
|
-
if (message.includes('not found'))
|
|
641
|
-
return engineError('E_NOT_FOUND', message);
|
|
642
|
-
if (message.includes('already cancelled') || message.includes('completed'))
|
|
643
|
-
return engineError('E_INVALID_INPUT', message);
|
|
644
|
-
return engineError('E_INTERNAL', message);
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
/**
|
|
648
|
-
* Deterministic complexity scoring from task metadata.
|
|
649
|
-
* @task T4657
|
|
650
|
-
* @task T4790
|
|
651
|
-
* @epic T4654
|
|
652
|
-
*/
|
|
653
|
-
export async function taskComplexityEstimate(projectRoot, params) {
|
|
654
|
-
try {
|
|
655
|
-
const result = await coreTaskComplexityEstimate(projectRoot, params);
|
|
656
|
-
return { success: true, data: result };
|
|
657
|
-
}
|
|
658
|
-
catch (err) {
|
|
659
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
660
|
-
if (message.includes('not found')) {
|
|
661
|
-
return engineError('E_NOT_FOUND', message);
|
|
662
|
-
}
|
|
663
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
/**
|
|
667
|
-
* List dependencies for a task in a given direction.
|
|
668
|
-
* @task T4657
|
|
669
|
-
* @task T4790
|
|
670
|
-
* @epic T4654
|
|
671
|
-
*/
|
|
672
|
-
export async function taskDepends(projectRoot, taskId, direction = 'both', tree) {
|
|
673
|
-
try {
|
|
674
|
-
const result = await coreTaskDepends(projectRoot, taskId, direction, tree ? { tree } : undefined);
|
|
675
|
-
return { success: true, data: result };
|
|
676
|
-
}
|
|
677
|
-
catch (err) {
|
|
678
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
679
|
-
if (message.includes('not found')) {
|
|
680
|
-
return engineError('E_NOT_FOUND', message);
|
|
681
|
-
}
|
|
682
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
683
|
-
}
|
|
684
|
-
}
|
|
685
|
-
/**
|
|
686
|
-
* Overview of all dependencies across the project.
|
|
687
|
-
* @task T5157
|
|
688
|
-
*/
|
|
689
|
-
export async function taskDepsOverview(projectRoot) {
|
|
690
|
-
try {
|
|
691
|
-
const result = await coreTaskDepsOverview(projectRoot);
|
|
692
|
-
return { success: true, data: result };
|
|
693
|
-
}
|
|
694
|
-
catch (err) {
|
|
695
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
696
|
-
return engineError('E_NOT_INITIALIZED', message);
|
|
697
|
-
}
|
|
698
|
-
}
|
|
699
|
-
/**
|
|
700
|
-
* Detect circular dependencies across the project.
|
|
701
|
-
* @task T5157
|
|
702
|
-
*/
|
|
703
|
-
export async function taskDepsCycles(projectRoot) {
|
|
704
|
-
try {
|
|
705
|
-
const result = await coreTaskDepsCycles(projectRoot);
|
|
706
|
-
return { success: true, data: result };
|
|
707
|
-
}
|
|
708
|
-
catch (err) {
|
|
709
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
710
|
-
return engineError('E_NOT_INITIALIZED', message);
|
|
711
|
-
}
|
|
712
|
-
}
|
|
713
|
-
/**
|
|
714
|
-
* Compute task statistics, optionally scoped to an epic.
|
|
715
|
-
* @task T4657
|
|
716
|
-
* @task T4790
|
|
717
|
-
* @epic T4654
|
|
718
|
-
*/
|
|
719
|
-
export async function taskStats(projectRoot, epicId) {
|
|
720
|
-
try {
|
|
721
|
-
const result = await coreTaskStats(projectRoot, epicId);
|
|
722
|
-
return { success: true, data: result };
|
|
723
|
-
}
|
|
724
|
-
catch {
|
|
725
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
/**
|
|
729
|
-
* Export tasks as JSON or CSV.
|
|
730
|
-
* @task T4657
|
|
731
|
-
* @task T4790
|
|
732
|
-
* @epic T4654
|
|
733
|
-
*/
|
|
734
|
-
export async function taskExport(projectRoot, params) {
|
|
735
|
-
try {
|
|
736
|
-
const result = await coreTaskExport(projectRoot, params);
|
|
737
|
-
return { success: true, data: result };
|
|
738
|
-
}
|
|
739
|
-
catch {
|
|
740
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
/**
|
|
744
|
-
* Get task history from the log file.
|
|
745
|
-
* @task T4657
|
|
746
|
-
* @task T4790
|
|
747
|
-
* @epic T4654
|
|
748
|
-
*/
|
|
749
|
-
export async function taskHistory(projectRoot, taskId, limit) {
|
|
750
|
-
try {
|
|
751
|
-
const result = await coreTaskHistory(projectRoot, taskId, limit);
|
|
752
|
-
return { success: true, data: result };
|
|
753
|
-
}
|
|
754
|
-
catch {
|
|
755
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to read task history');
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
/**
|
|
759
|
-
* Lint tasks for common issues.
|
|
760
|
-
* @task T4657
|
|
761
|
-
* @task T4790
|
|
762
|
-
* @epic T4654
|
|
763
|
-
*/
|
|
764
|
-
export async function taskLint(projectRoot, taskId) {
|
|
765
|
-
try {
|
|
766
|
-
const result = await coreTaskLint(projectRoot, taskId);
|
|
767
|
-
return { success: true, data: result };
|
|
768
|
-
}
|
|
769
|
-
catch (err) {
|
|
770
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
771
|
-
if (message.includes('not found')) {
|
|
772
|
-
return engineError('E_NOT_FOUND', message);
|
|
773
|
-
}
|
|
774
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
/**
|
|
778
|
-
* Validate multiple tasks at once.
|
|
779
|
-
* @task T4657
|
|
780
|
-
* @task T4790
|
|
781
|
-
* @epic T4654
|
|
782
|
-
*/
|
|
783
|
-
export async function taskBatchValidate(projectRoot, taskIds, checkMode = 'full') {
|
|
784
|
-
try {
|
|
785
|
-
const result = await coreTaskBatchValidate(projectRoot, taskIds, checkMode);
|
|
786
|
-
return { success: true, data: result };
|
|
787
|
-
}
|
|
788
|
-
catch {
|
|
789
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
/**
|
|
793
|
-
* Import tasks from a JSON source string or export package.
|
|
794
|
-
* @task T4790
|
|
795
|
-
*/
|
|
796
|
-
export async function taskImport(projectRoot, source, overwrite) {
|
|
797
|
-
try {
|
|
798
|
-
const result = await coreTaskImport(projectRoot, source, overwrite);
|
|
799
|
-
return { success: true, data: result };
|
|
800
|
-
}
|
|
801
|
-
catch (err) {
|
|
802
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
803
|
-
if (message.includes('Invalid JSON')) {
|
|
804
|
-
return engineError('E_INVALID_INPUT', message);
|
|
805
|
-
}
|
|
806
|
-
return engineError('E_NOT_INITIALIZED', 'Failed to import tasks');
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
/**
|
|
810
|
-
* Compute a ranked plan: in-progress epics, ready tasks, blockers, bugs.
|
|
811
|
-
* @task T4815
|
|
812
|
-
*/
|
|
813
|
-
export async function taskPlan(projectRoot) {
|
|
814
|
-
const { coreTaskPlan } = await import('@cleocode/core/internal');
|
|
815
|
-
try {
|
|
816
|
-
const result = await coreTaskPlan(projectRoot);
|
|
817
|
-
return { success: true, data: result };
|
|
818
|
-
}
|
|
819
|
-
catch {
|
|
820
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
821
|
-
}
|
|
822
|
-
}
|
|
823
|
-
/**
|
|
824
|
-
* Find related tasks using semantic search or keyword matching.
|
|
825
|
-
* @task T5672
|
|
826
|
-
*/
|
|
827
|
-
export async function taskRelatesFind(projectRoot, taskId, params) {
|
|
828
|
-
try {
|
|
829
|
-
const { suggestRelated, discoverRelated } = await import('@cleocode/core/internal');
|
|
830
|
-
const accessor = await getAccessor(projectRoot);
|
|
831
|
-
const mode = params?.mode ?? 'suggest';
|
|
832
|
-
let result;
|
|
833
|
-
if (mode === 'discover') {
|
|
834
|
-
result = await discoverRelated(taskId, undefined, accessor);
|
|
835
|
-
}
|
|
836
|
-
else {
|
|
837
|
-
const threshold = params?.threshold ?? 50;
|
|
838
|
-
result = await suggestRelated(taskId, { threshold }, accessor);
|
|
839
|
-
}
|
|
840
|
-
return { success: true, data: result };
|
|
841
|
-
}
|
|
842
|
-
catch (err) {
|
|
843
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
844
|
-
if (message.includes('not found')) {
|
|
845
|
-
return engineError('E_NOT_FOUND', message);
|
|
846
|
-
}
|
|
847
|
-
return engineError('E_INTERNAL', message);
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
/**
|
|
851
|
-
* List all labels used in tasks.
|
|
852
|
-
* @task T5672
|
|
853
|
-
*/
|
|
854
|
-
export async function taskLabelList(projectRoot) {
|
|
855
|
-
try {
|
|
856
|
-
const { listLabels } = await import('@cleocode/core/internal');
|
|
857
|
-
const accessor = await getAccessor(projectRoot);
|
|
858
|
-
const labels = await listLabels(projectRoot, accessor);
|
|
859
|
-
return { success: true, data: { labels, count: labels.length } };
|
|
860
|
-
}
|
|
861
|
-
catch {
|
|
862
|
-
return engineError('E_NOT_INITIALIZED', 'Task database not initialized');
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
/**
|
|
866
|
-
* Show tasks associated with a label.
|
|
867
|
-
* @task T5672
|
|
868
|
-
*/
|
|
869
|
-
export async function taskLabelShow(projectRoot, label) {
|
|
870
|
-
try {
|
|
871
|
-
const { showLabelTasks } = await import('@cleocode/core/internal');
|
|
872
|
-
const accessor = await getAccessor(projectRoot);
|
|
873
|
-
const result = await showLabelTasks(label, projectRoot, accessor);
|
|
874
|
-
return { success: true, data: result };
|
|
875
|
-
}
|
|
876
|
-
catch (err) {
|
|
877
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
878
|
-
return engineError('E_INTERNAL', message);
|
|
879
|
-
}
|
|
880
|
-
}
|
|
881
|
-
//# sourceMappingURL=task-engine.js.map
|