@cleocode/core 2026.3.64 → 2026.3.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (823) hide show
  1. package/dist/agents/retry.d.ts.map +1 -1
  2. package/dist/cleo.d.ts +2 -2
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/index.d.ts +3 -3
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +128 -116
  7. package/dist/index.js.map +4 -4
  8. package/dist/tasks/complete.d.ts.map +1 -1
  9. package/dist/tasks/enforcement.d.ts.map +1 -1
  10. package/package.json +5 -5
  11. package/src/agents/retry.ts +18 -46
  12. package/src/cleo.ts +2 -2
  13. package/src/config.ts +13 -0
  14. package/src/index.ts +4 -1
  15. package/src/tasks/add.ts +5 -5
  16. package/src/tasks/complete.ts +14 -48
  17. package/src/tasks/enforcement.ts +12 -24
  18. package/dist/adapters/adapter-registry.js +0 -64
  19. package/dist/adapters/adapter-registry.js.map +0 -1
  20. package/dist/adapters/discovery.js +0 -83
  21. package/dist/adapters/discovery.js.map +0 -1
  22. package/dist/adapters/index.js +0 -9
  23. package/dist/adapters/index.js.map +0 -1
  24. package/dist/adapters/manager.js +0 -260
  25. package/dist/adapters/manager.js.map +0 -1
  26. package/dist/admin/export-tasks.js +0 -171
  27. package/dist/admin/export-tasks.js.map +0 -1
  28. package/dist/admin/export.js +0 -103
  29. package/dist/admin/export.js.map +0 -1
  30. package/dist/admin/help.js +0 -106
  31. package/dist/admin/help.js.map +0 -1
  32. package/dist/admin/import-tasks.js +0 -182
  33. package/dist/admin/import-tasks.js.map +0 -1
  34. package/dist/admin/import.js +0 -129
  35. package/dist/admin/import.js.map +0 -1
  36. package/dist/admin/index.js +0 -13
  37. package/dist/admin/index.js.map +0 -1
  38. package/dist/adrs/find.js +0 -134
  39. package/dist/adrs/find.js.map +0 -1
  40. package/dist/adrs/index.js +0 -15
  41. package/dist/adrs/index.js.map +0 -1
  42. package/dist/adrs/link-pipeline.js +0 -160
  43. package/dist/adrs/link-pipeline.js.map +0 -1
  44. package/dist/adrs/list.js +0 -43
  45. package/dist/adrs/list.js.map +0 -1
  46. package/dist/adrs/parse.js +0 -51
  47. package/dist/adrs/parse.js.map +0 -1
  48. package/dist/adrs/show.js +0 -22
  49. package/dist/adrs/show.js.map +0 -1
  50. package/dist/adrs/sync.js +0 -188
  51. package/dist/adrs/sync.js.map +0 -1
  52. package/dist/adrs/types.js +0 -9
  53. package/dist/adrs/types.js.map +0 -1
  54. package/dist/adrs/validate.js +0 -57
  55. package/dist/adrs/validate.js.map +0 -1
  56. package/dist/agents/agent-registry.js +0 -288
  57. package/dist/agents/agent-registry.js.map +0 -1
  58. package/dist/agents/agent-schema.js +0 -85
  59. package/dist/agents/agent-schema.js.map +0 -1
  60. package/dist/agents/capacity.js +0 -116
  61. package/dist/agents/capacity.js.map +0 -1
  62. package/dist/agents/execution-learning.js +0 -474
  63. package/dist/agents/execution-learning.js.map +0 -1
  64. package/dist/agents/health-monitor.js +0 -217
  65. package/dist/agents/health-monitor.js.map +0 -1
  66. package/dist/agents/index.js +0 -29
  67. package/dist/agents/index.js.map +0 -1
  68. package/dist/agents/registry.js +0 -314
  69. package/dist/agents/registry.js.map +0 -1
  70. package/dist/agents/retry.js +0 -229
  71. package/dist/agents/retry.js.map +0 -1
  72. package/dist/audit-prune.js +0 -94
  73. package/dist/audit-prune.js.map +0 -1
  74. package/dist/audit.js +0 -68
  75. package/dist/audit.js.map +0 -1
  76. package/dist/backfill/index.js +0 -229
  77. package/dist/backfill/index.js.map +0 -1
  78. package/dist/bootstrap.js +0 -367
  79. package/dist/bootstrap.js.map +0 -1
  80. package/dist/caamp/adapter.js +0 -434
  81. package/dist/caamp/adapter.js.map +0 -1
  82. package/dist/caamp/capability-check.js +0 -38
  83. package/dist/caamp/capability-check.js.map +0 -1
  84. package/dist/caamp/index.js +0 -23
  85. package/dist/caamp/index.js.map +0 -1
  86. package/dist/caamp-init.js +0 -16
  87. package/dist/caamp-init.js.map +0 -1
  88. package/dist/cleo.js +0 -302
  89. package/dist/cleo.js.map +0 -1
  90. package/dist/codebase-map/analyzers/architecture.js +0 -130
  91. package/dist/codebase-map/analyzers/architecture.js.map +0 -1
  92. package/dist/codebase-map/analyzers/concerns.js +0 -122
  93. package/dist/codebase-map/analyzers/concerns.js.map +0 -1
  94. package/dist/codebase-map/analyzers/conventions.js +0 -149
  95. package/dist/codebase-map/analyzers/conventions.js.map +0 -1
  96. package/dist/codebase-map/analyzers/integrations.js +0 -108
  97. package/dist/codebase-map/analyzers/integrations.js.map +0 -1
  98. package/dist/codebase-map/analyzers/stack.js +0 -117
  99. package/dist/codebase-map/analyzers/stack.js.map +0 -1
  100. package/dist/codebase-map/analyzers/structure.js +0 -137
  101. package/dist/codebase-map/analyzers/structure.js.map +0 -1
  102. package/dist/codebase-map/analyzers/testing.js +0 -118
  103. package/dist/codebase-map/analyzers/testing.js.map +0 -1
  104. package/dist/codebase-map/index.js +0 -57
  105. package/dist/codebase-map/index.js.map +0 -1
  106. package/dist/codebase-map/store.js +0 -122
  107. package/dist/codebase-map/store.js.map +0 -1
  108. package/dist/codebase-map/summary.js +0 -152
  109. package/dist/codebase-map/summary.js.map +0 -1
  110. package/dist/compliance/index.js +0 -288
  111. package/dist/compliance/index.js.map +0 -1
  112. package/dist/compliance/protocol-enforcement.js +0 -332
  113. package/dist/compliance/protocol-enforcement.js.map +0 -1
  114. package/dist/compliance/protocol-rules.js +0 -786
  115. package/dist/compliance/protocol-rules.js.map +0 -1
  116. package/dist/compliance/protocol-types.js +0 -80
  117. package/dist/compliance/protocol-types.js.map +0 -1
  118. package/dist/compliance/store.js +0 -53
  119. package/dist/compliance/store.js.map +0 -1
  120. package/dist/config/build-config.js +0 -29
  121. package/dist/config/build-config.js.map +0 -1
  122. package/dist/config.js +0 -370
  123. package/dist/config.js.map +0 -1
  124. package/dist/constants.js +0 -18
  125. package/dist/constants.js.map +0 -1
  126. package/dist/context/index.js +0 -137
  127. package/dist/context/index.js.map +0 -1
  128. package/dist/engine-result.js +0 -12
  129. package/dist/engine-result.js.map +0 -1
  130. package/dist/error-catalog.js +0 -404
  131. package/dist/error-catalog.js.map +0 -1
  132. package/dist/error-registry.js +0 -393
  133. package/dist/error-registry.js.map +0 -1
  134. package/dist/errors.js +0 -167
  135. package/dist/errors.js.map +0 -1
  136. package/dist/hooks/handlers/error-hooks.js +0 -43
  137. package/dist/hooks/handlers/error-hooks.js.map +0 -1
  138. package/dist/hooks/handlers/file-hooks.js +0 -80
  139. package/dist/hooks/handlers/file-hooks.js.map +0 -1
  140. package/dist/hooks/handlers/index.js +0 -19
  141. package/dist/hooks/handlers/index.js.map +0 -1
  142. package/dist/hooks/handlers/mcp-hooks.js +0 -80
  143. package/dist/hooks/handlers/mcp-hooks.js.map +0 -1
  144. package/dist/hooks/handlers/session-hooks.js +0 -73
  145. package/dist/hooks/handlers/session-hooks.js.map +0 -1
  146. package/dist/hooks/handlers/task-hooks.js +0 -63
  147. package/dist/hooks/handlers/task-hooks.js.map +0 -1
  148. package/dist/hooks/index.js +0 -13
  149. package/dist/hooks/index.js.map +0 -1
  150. package/dist/hooks/payload-schemas.js +0 -163
  151. package/dist/hooks/payload-schemas.js.map +0 -1
  152. package/dist/hooks/provider-hooks.js +0 -34
  153. package/dist/hooks/provider-hooks.js.map +0 -1
  154. package/dist/hooks/registry.js +0 -176
  155. package/dist/hooks/registry.js.map +0 -1
  156. package/dist/hooks/types.js +0 -62
  157. package/dist/hooks/types.js.map +0 -1
  158. package/dist/hooks.js +0 -136
  159. package/dist/hooks.js.map +0 -1
  160. package/dist/init.js +0 -711
  161. package/dist/init.js.map +0 -1
  162. package/dist/inject/index.js +0 -82
  163. package/dist/inject/index.js.map +0 -1
  164. package/dist/injection.js +0 -343
  165. package/dist/injection.js.map +0 -1
  166. package/dist/intelligence/adaptive-validation.js +0 -497
  167. package/dist/intelligence/adaptive-validation.js.map +0 -1
  168. package/dist/intelligence/impact.js +0 -675
  169. package/dist/intelligence/impact.js.map +0 -1
  170. package/dist/intelligence/index.js +0 -22
  171. package/dist/intelligence/index.js.map +0 -1
  172. package/dist/intelligence/patterns.js +0 -492
  173. package/dist/intelligence/patterns.js.map +0 -1
  174. package/dist/intelligence/prediction.js +0 -499
  175. package/dist/intelligence/prediction.js.map +0 -1
  176. package/dist/intelligence/types.js +0 -13
  177. package/dist/intelligence/types.js.map +0 -1
  178. package/dist/internal.js +0 -269
  179. package/dist/internal.js.map +0 -1
  180. package/dist/issue/create.js +0 -121
  181. package/dist/issue/create.js.map +0 -1
  182. package/dist/issue/diagnostics.js +0 -59
  183. package/dist/issue/diagnostics.js.map +0 -1
  184. package/dist/issue/index.js +0 -10
  185. package/dist/issue/index.js.map +0 -1
  186. package/dist/issue/template-parser.js +0 -267
  187. package/dist/issue/template-parser.js.map +0 -1
  188. package/dist/json-schema-validator.js +0 -76
  189. package/dist/json-schema-validator.js.map +0 -1
  190. package/dist/lib/index.js +0 -10
  191. package/dist/lib/index.js.map +0 -1
  192. package/dist/lib/retry.js +0 -152
  193. package/dist/lib/retry.js.map +0 -1
  194. package/dist/lifecycle/chain-composition.js +0 -152
  195. package/dist/lifecycle/chain-composition.js.map +0 -1
  196. package/dist/lifecycle/chain-store.js +0 -246
  197. package/dist/lifecycle/chain-store.js.map +0 -1
  198. package/dist/lifecycle/consolidate-rcasd.js +0 -352
  199. package/dist/lifecycle/consolidate-rcasd.js.map +0 -1
  200. package/dist/lifecycle/default-chain.js +0 -167
  201. package/dist/lifecycle/default-chain.js.map +0 -1
  202. package/dist/lifecycle/evidence.js +0 -180
  203. package/dist/lifecycle/evidence.js.map +0 -1
  204. package/dist/lifecycle/frontmatter.js +0 -363
  205. package/dist/lifecycle/frontmatter.js.map +0 -1
  206. package/dist/lifecycle/index.js +0 -753
  207. package/dist/lifecycle/index.js.map +0 -1
  208. package/dist/lifecycle/pipeline.js +0 -656
  209. package/dist/lifecycle/pipeline.js.map +0 -1
  210. package/dist/lifecycle/rcasd-index.js +0 -326
  211. package/dist/lifecycle/rcasd-index.js.map +0 -1
  212. package/dist/lifecycle/rcasd-paths.js +0 -220
  213. package/dist/lifecycle/rcasd-paths.js.map +0 -1
  214. package/dist/lifecycle/resume.js +0 -864
  215. package/dist/lifecycle/resume.js.map +0 -1
  216. package/dist/lifecycle/stage-artifacts.js +0 -94
  217. package/dist/lifecycle/stage-artifacts.js.map +0 -1
  218. package/dist/lifecycle/stages.js +0 -534
  219. package/dist/lifecycle/stages.js.map +0 -1
  220. package/dist/lifecycle/state-machine.js +0 -516
  221. package/dist/lifecycle/state-machine.js.map +0 -1
  222. package/dist/lifecycle/tessera-engine.js +0 -249
  223. package/dist/lifecycle/tessera-engine.js.map +0 -1
  224. package/dist/logger.js +0 -140
  225. package/dist/logger.js.map +0 -1
  226. package/dist/mcp/index.js +0 -146
  227. package/dist/mcp/index.js.map +0 -1
  228. package/dist/memory/auto-extract.js +0 -143
  229. package/dist/memory/auto-extract.js.map +0 -1
  230. package/dist/memory/brain-embedding.js +0 -49
  231. package/dist/memory/brain-embedding.js.map +0 -1
  232. package/dist/memory/brain-lifecycle.js +0 -298
  233. package/dist/memory/brain-lifecycle.js.map +0 -1
  234. package/dist/memory/brain-links.js +0 -148
  235. package/dist/memory/brain-links.js.map +0 -1
  236. package/dist/memory/brain-migration.js +0 -149
  237. package/dist/memory/brain-migration.js.map +0 -1
  238. package/dist/memory/brain-reasoning.js +0 -215
  239. package/dist/memory/brain-reasoning.js.map +0 -1
  240. package/dist/memory/brain-retrieval.js +0 -474
  241. package/dist/memory/brain-retrieval.js.map +0 -1
  242. package/dist/memory/brain-row-types.js +0 -10
  243. package/dist/memory/brain-row-types.js.map +0 -1
  244. package/dist/memory/brain-search.js +0 -519
  245. package/dist/memory/brain-search.js.map +0 -1
  246. package/dist/memory/brain-similarity.js +0 -145
  247. package/dist/memory/brain-similarity.js.map +0 -1
  248. package/dist/memory/claude-mem-migration.js +0 -277
  249. package/dist/memory/claude-mem-migration.js.map +0 -1
  250. package/dist/memory/decisions.js +0 -148
  251. package/dist/memory/decisions.js.map +0 -1
  252. package/dist/memory/engine-compat.js +0 -1030
  253. package/dist/memory/engine-compat.js.map +0 -1
  254. package/dist/memory/index.js +0 -773
  255. package/dist/memory/index.js.map +0 -1
  256. package/dist/memory/learnings.js +0 -121
  257. package/dist/memory/learnings.js.map +0 -1
  258. package/dist/memory/memory-bridge.js +0 -289
  259. package/dist/memory/memory-bridge.js.map +0 -1
  260. package/dist/memory/patterns.js +0 -122
  261. package/dist/memory/patterns.js.map +0 -1
  262. package/dist/memory/pipeline-manifest-sqlite.js +0 -975
  263. package/dist/memory/pipeline-manifest-sqlite.js.map +0 -1
  264. package/dist/memory/session-memory.js +0 -226
  265. package/dist/memory/session-memory.js.map +0 -1
  266. package/dist/metrics/ab-test.js +0 -260
  267. package/dist/metrics/ab-test.js.map +0 -1
  268. package/dist/metrics/aggregation.js +0 -363
  269. package/dist/metrics/aggregation.js.map +0 -1
  270. package/dist/metrics/common.js +0 -64
  271. package/dist/metrics/common.js.map +0 -1
  272. package/dist/metrics/enums.js +0 -78
  273. package/dist/metrics/enums.js.map +0 -1
  274. package/dist/metrics/index.js +0 -19
  275. package/dist/metrics/index.js.map +0 -1
  276. package/dist/metrics/model-provider-registry.js +0 -88
  277. package/dist/metrics/model-provider-registry.js.map +0 -1
  278. package/dist/metrics/otel-integration.js +0 -263
  279. package/dist/metrics/otel-integration.js.map +0 -1
  280. package/dist/metrics/provider-detection.js +0 -103
  281. package/dist/metrics/provider-detection.js.map +0 -1
  282. package/dist/metrics/token-estimation.js +0 -253
  283. package/dist/metrics/token-estimation.js.map +0 -1
  284. package/dist/metrics/token-service.js +0 -450
  285. package/dist/metrics/token-service.js.map +0 -1
  286. package/dist/migration/agent-outputs.js +0 -316
  287. package/dist/migration/agent-outputs.js.map +0 -1
  288. package/dist/migration/checksum.js +0 -92
  289. package/dist/migration/checksum.js.map +0 -1
  290. package/dist/migration/index.js +0 -282
  291. package/dist/migration/index.js.map +0 -1
  292. package/dist/migration/logger.js +0 -360
  293. package/dist/migration/logger.js.map +0 -1
  294. package/dist/migration/preflight.js +0 -9
  295. package/dist/migration/preflight.js.map +0 -1
  296. package/dist/migration/state.js +0 -421
  297. package/dist/migration/state.js.map +0 -1
  298. package/dist/migration/validate.js +0 -241
  299. package/dist/migration/validate.js.map +0 -1
  300. package/dist/nexus/deps.js +0 -375
  301. package/dist/nexus/deps.js.map +0 -1
  302. package/dist/nexus/discover.js +0 -288
  303. package/dist/nexus/discover.js.map +0 -1
  304. package/dist/nexus/hash.js +0 -10
  305. package/dist/nexus/hash.js.map +0 -1
  306. package/dist/nexus/index.js +0 -38
  307. package/dist/nexus/index.js.map +0 -1
  308. package/dist/nexus/migrate-json-to-sqlite.js +0 -115
  309. package/dist/nexus/migrate-json-to-sqlite.js.map +0 -1
  310. package/dist/nexus/permissions.js +0 -105
  311. package/dist/nexus/permissions.js.map +0 -1
  312. package/dist/nexus/query.js +0 -175
  313. package/dist/nexus/query.js.map +0 -1
  314. package/dist/nexus/registry.js +0 -584
  315. package/dist/nexus/registry.js.map +0 -1
  316. package/dist/nexus/sharing/index.js +0 -288
  317. package/dist/nexus/sharing/index.js.map +0 -1
  318. package/dist/nexus/transfer-types.js +0 -8
  319. package/dist/nexus/transfer-types.js.map +0 -1
  320. package/dist/nexus/transfer.js +0 -263
  321. package/dist/nexus/transfer.js.map +0 -1
  322. package/dist/observability/index.js +0 -103
  323. package/dist/observability/index.js.map +0 -1
  324. package/dist/observability/log-filter.js +0 -63
  325. package/dist/observability/log-filter.js.map +0 -1
  326. package/dist/observability/log-parser.js +0 -99
  327. package/dist/observability/log-parser.js.map +0 -1
  328. package/dist/observability/log-reader.js +0 -139
  329. package/dist/observability/log-reader.js.map +0 -1
  330. package/dist/observability/types.js +0 -19
  331. package/dist/observability/types.js.map +0 -1
  332. package/dist/orchestration/analyze.js +0 -107
  333. package/dist/orchestration/analyze.js.map +0 -1
  334. package/dist/orchestration/bootstrap.js +0 -132
  335. package/dist/orchestration/bootstrap.js.map +0 -1
  336. package/dist/orchestration/context.js +0 -56
  337. package/dist/orchestration/context.js.map +0 -1
  338. package/dist/orchestration/critical-path.js +0 -100
  339. package/dist/orchestration/critical-path.js.map +0 -1
  340. package/dist/orchestration/index.js +0 -286
  341. package/dist/orchestration/index.js.map +0 -1
  342. package/dist/orchestration/parallel.js +0 -89
  343. package/dist/orchestration/parallel.js.map +0 -1
  344. package/dist/orchestration/protocol-validators.js +0 -524
  345. package/dist/orchestration/protocol-validators.js.map +0 -1
  346. package/dist/orchestration/skill-ops.js +0 -98
  347. package/dist/orchestration/skill-ops.js.map +0 -1
  348. package/dist/orchestration/status.js +0 -107
  349. package/dist/orchestration/status.js.map +0 -1
  350. package/dist/orchestration/unblock.js +0 -103
  351. package/dist/orchestration/unblock.js.map +0 -1
  352. package/dist/orchestration/validate-spawn.js +0 -67
  353. package/dist/orchestration/validate-spawn.js.map +0 -1
  354. package/dist/orchestration/waves.js +0 -86
  355. package/dist/orchestration/waves.js.map +0 -1
  356. package/dist/otel/index.js +0 -163
  357. package/dist/otel/index.js.map +0 -1
  358. package/dist/output.js +0 -132
  359. package/dist/output.js.map +0 -1
  360. package/dist/pagination.js +0 -61
  361. package/dist/pagination.js.map +0 -1
  362. package/dist/paths.js +0 -337
  363. package/dist/paths.js.map +0 -1
  364. package/dist/phases/deps.js +0 -372
  365. package/dist/phases/deps.js.map +0 -1
  366. package/dist/phases/index.js +0 -349
  367. package/dist/phases/index.js.map +0 -1
  368. package/dist/pipeline/index.js +0 -10
  369. package/dist/pipeline/index.js.map +0 -1
  370. package/dist/pipeline/phase.js +0 -45
  371. package/dist/pipeline/phase.js.map +0 -1
  372. package/dist/platform.js +0 -211
  373. package/dist/platform.js.map +0 -1
  374. package/dist/project-info.js +0 -84
  375. package/dist/project-info.js.map +0 -1
  376. package/dist/reconciliation/index.js +0 -10
  377. package/dist/reconciliation/index.js.map +0 -1
  378. package/dist/reconciliation/link-store.js +0 -129
  379. package/dist/reconciliation/link-store.js.map +0 -1
  380. package/dist/reconciliation/reconciliation-engine.js +0 -298
  381. package/dist/reconciliation/reconciliation-engine.js.map +0 -1
  382. package/dist/release/artifacts.js +0 -427
  383. package/dist/release/artifacts.js.map +0 -1
  384. package/dist/release/changelog-writer.js +0 -151
  385. package/dist/release/changelog-writer.js.map +0 -1
  386. package/dist/release/channel.js +0 -144
  387. package/dist/release/channel.js.map +0 -1
  388. package/dist/release/ci.js +0 -166
  389. package/dist/release/ci.js.map +0 -1
  390. package/dist/release/github-pr.js +0 -225
  391. package/dist/release/github-pr.js.map +0 -1
  392. package/dist/release/guards.js +0 -116
  393. package/dist/release/guards.js.map +0 -1
  394. package/dist/release/index.js +0 -22
  395. package/dist/release/index.js.map +0 -1
  396. package/dist/release/release-config.js +0 -158
  397. package/dist/release/release-config.js.map +0 -1
  398. package/dist/release/release-manifest.js +0 -1019
  399. package/dist/release/release-manifest.js.map +0 -1
  400. package/dist/release/version-bump.js +0 -255
  401. package/dist/release/version-bump.js.map +0 -1
  402. package/dist/remote/index.js +0 -257
  403. package/dist/remote/index.js.map +0 -1
  404. package/dist/repair.js +0 -130
  405. package/dist/repair.js.map +0 -1
  406. package/dist/research/index.js +0 -2
  407. package/dist/research/index.js.map +0 -1
  408. package/dist/roadmap/index.js +0 -59
  409. package/dist/roadmap/index.js.map +0 -1
  410. package/dist/routing/capability-matrix.js +0 -1557
  411. package/dist/routing/capability-matrix.js.map +0 -1
  412. package/dist/routing/index.js +0 -9
  413. package/dist/routing/index.js.map +0 -1
  414. package/dist/scaffold.js +0 -1178
  415. package/dist/scaffold.js.map +0 -1
  416. package/dist/schema-management.js +0 -295
  417. package/dist/schema-management.js.map +0 -1
  418. package/dist/security/index.js +0 -9
  419. package/dist/security/index.js.map +0 -1
  420. package/dist/security/input-sanitization.js +0 -321
  421. package/dist/security/input-sanitization.js.map +0 -1
  422. package/dist/sequence/index.js +0 -295
  423. package/dist/sequence/index.js.map +0 -1
  424. package/dist/sessions/assumptions.js +0 -54
  425. package/dist/sessions/assumptions.js.map +0 -1
  426. package/dist/sessions/briefing.js +0 -377
  427. package/dist/sessions/briefing.js.map +0 -1
  428. package/dist/sessions/context-alert.js +0 -222
  429. package/dist/sessions/context-alert.js.map +0 -1
  430. package/dist/sessions/context-inject.js +0 -61
  431. package/dist/sessions/context-inject.js.map +0 -1
  432. package/dist/sessions/context-monitor.js +0 -98
  433. package/dist/sessions/context-monitor.js.map +0 -1
  434. package/dist/sessions/decisions.js +0 -65
  435. package/dist/sessions/decisions.js.map +0 -1
  436. package/dist/sessions/find.js +0 -63
  437. package/dist/sessions/find.js.map +0 -1
  438. package/dist/sessions/handoff.js +0 -328
  439. package/dist/sessions/handoff.js.map +0 -1
  440. package/dist/sessions/hitl-warnings.js +0 -254
  441. package/dist/sessions/hitl-warnings.js.map +0 -1
  442. package/dist/sessions/index.js +0 -318
  443. package/dist/sessions/index.js.map +0 -1
  444. package/dist/sessions/session-archive.js +0 -40
  445. package/dist/sessions/session-archive.js.map +0 -1
  446. package/dist/sessions/session-cleanup.js +0 -59
  447. package/dist/sessions/session-cleanup.js.map +0 -1
  448. package/dist/sessions/session-drift.js +0 -134
  449. package/dist/sessions/session-drift.js.map +0 -1
  450. package/dist/sessions/session-enforcement.js +0 -144
  451. package/dist/sessions/session-enforcement.js.map +0 -1
  452. package/dist/sessions/session-grade.js +0 -253
  453. package/dist/sessions/session-grade.js.map +0 -1
  454. package/dist/sessions/session-history.js +0 -42
  455. package/dist/sessions/session-history.js.map +0 -1
  456. package/dist/sessions/session-id.js +0 -81
  457. package/dist/sessions/session-id.js.map +0 -1
  458. package/dist/sessions/session-memory-bridge.js +0 -52
  459. package/dist/sessions/session-memory-bridge.js.map +0 -1
  460. package/dist/sessions/session-show.js +0 -24
  461. package/dist/sessions/session-show.js.map +0 -1
  462. package/dist/sessions/session-stats.js +0 -69
  463. package/dist/sessions/session-stats.js.map +0 -1
  464. package/dist/sessions/session-suspend.js +0 -39
  465. package/dist/sessions/session-suspend.js.map +0 -1
  466. package/dist/sessions/session-switch.js +0 -51
  467. package/dist/sessions/session-switch.js.map +0 -1
  468. package/dist/sessions/session-view.js +0 -76
  469. package/dist/sessions/session-view.js.map +0 -1
  470. package/dist/sessions/statusline-setup.js +0 -85
  471. package/dist/sessions/statusline-setup.js.map +0 -1
  472. package/dist/sessions/types.js +0 -8
  473. package/dist/sessions/types.js.map +0 -1
  474. package/dist/signaldock/claude-code-transport.js +0 -107
  475. package/dist/signaldock/claude-code-transport.js.map +0 -1
  476. package/dist/signaldock/factory.js +0 -25
  477. package/dist/signaldock/factory.js.map +0 -1
  478. package/dist/signaldock/index.js +0 -9
  479. package/dist/signaldock/index.js.map +0 -1
  480. package/dist/signaldock/signaldock-transport.js +0 -122
  481. package/dist/signaldock/signaldock-transport.js.map +0 -1
  482. package/dist/signaldock/transport.js +0 -11
  483. package/dist/signaldock/transport.js.map +0 -1
  484. package/dist/signaldock/types.js +0 -11
  485. package/dist/signaldock/types.js.map +0 -1
  486. package/dist/skills/agents/config.js +0 -94
  487. package/dist/skills/agents/config.js.map +0 -1
  488. package/dist/skills/agents/install.js +0 -116
  489. package/dist/skills/agents/install.js.map +0 -1
  490. package/dist/skills/agents/registry.js +0 -161
  491. package/dist/skills/agents/registry.js.map +0 -1
  492. package/dist/skills/discovery.js +0 -333
  493. package/dist/skills/discovery.js.map +0 -1
  494. package/dist/skills/dispatch.js +0 -347
  495. package/dist/skills/dispatch.js.map +0 -1
  496. package/dist/skills/dynamic-skill-generator.js +0 -100
  497. package/dist/skills/dynamic-skill-generator.js.map +0 -1
  498. package/dist/skills/index.js +0 -44
  499. package/dist/skills/index.js.map +0 -1
  500. package/dist/skills/injection/subagent.js +0 -195
  501. package/dist/skills/injection/subagent.js.map +0 -1
  502. package/dist/skills/injection/token.js +0 -260
  503. package/dist/skills/injection/token.js.map +0 -1
  504. package/dist/skills/install.js +0 -40
  505. package/dist/skills/install.js.map +0 -1
  506. package/dist/skills/manifests/contribution.js +0 -175
  507. package/dist/skills/manifests/contribution.js.map +0 -1
  508. package/dist/skills/manifests/research.js +0 -281
  509. package/dist/skills/manifests/research.js.map +0 -1
  510. package/dist/skills/manifests/resolver.js +0 -146
  511. package/dist/skills/manifests/resolver.js.map +0 -1
  512. package/dist/skills/marketplace.js +0 -90
  513. package/dist/skills/marketplace.js.map +0 -1
  514. package/dist/skills/orchestrator/spawn.js +0 -178
  515. package/dist/skills/orchestrator/spawn.js.map +0 -1
  516. package/dist/skills/orchestrator/startup.js +0 -451
  517. package/dist/skills/orchestrator/startup.js.map +0 -1
  518. package/dist/skills/orchestrator/validator.js +0 -301
  519. package/dist/skills/orchestrator/validator.js.map +0 -1
  520. package/dist/skills/precedence-integration.js +0 -73
  521. package/dist/skills/precedence-integration.js.map +0 -1
  522. package/dist/skills/precedence-types.js +0 -16
  523. package/dist/skills/precedence-types.js.map +0 -1
  524. package/dist/skills/routing-table.js +0 -63
  525. package/dist/skills/routing-table.js.map +0 -1
  526. package/dist/skills/skill-paths.js +0 -220
  527. package/dist/skills/skill-paths.js.map +0 -1
  528. package/dist/skills/test-utility.js +0 -55
  529. package/dist/skills/test-utility.js.map +0 -1
  530. package/dist/skills/types.js +0 -118
  531. package/dist/skills/types.js.map +0 -1
  532. package/dist/skills/validation.js +0 -183
  533. package/dist/skills/validation.js.map +0 -1
  534. package/dist/skills/version.js +0 -57
  535. package/dist/skills/version.js.map +0 -1
  536. package/dist/snapshot/index.js +0 -188
  537. package/dist/snapshot/index.js.map +0 -1
  538. package/dist/spawn/adapter-registry.js +0 -246
  539. package/dist/spawn/adapter-registry.js.map +0 -1
  540. package/dist/spawn/index.js +0 -10
  541. package/dist/spawn/index.js.map +0 -1
  542. package/dist/stats/index.js +0 -343
  543. package/dist/stats/index.js.map +0 -1
  544. package/dist/stats/workflow-telemetry.js +0 -400
  545. package/dist/stats/workflow-telemetry.js.map +0 -1
  546. package/dist/sticky/archive.js +0 -47
  547. package/dist/sticky/archive.js.map +0 -1
  548. package/dist/sticky/convert.js +0 -235
  549. package/dist/sticky/convert.js.map +0 -1
  550. package/dist/sticky/create.js +0 -48
  551. package/dist/sticky/create.js.map +0 -1
  552. package/dist/sticky/id.js +0 -35
  553. package/dist/sticky/id.js.map +0 -1
  554. package/dist/sticky/index.js +0 -16
  555. package/dist/sticky/index.js.map +0 -1
  556. package/dist/sticky/list.js +0 -44
  557. package/dist/sticky/list.js.map +0 -1
  558. package/dist/sticky/purge.js +0 -45
  559. package/dist/sticky/purge.js.map +0 -1
  560. package/dist/sticky/show.js +0 -42
  561. package/dist/sticky/show.js.map +0 -1
  562. package/dist/sticky/types.js +0 -10
  563. package/dist/sticky/types.js.map +0 -1
  564. package/dist/store/atomic.js +0 -167
  565. package/dist/store/atomic.js.map +0 -1
  566. package/dist/store/backup.js +0 -94
  567. package/dist/store/backup.js.map +0 -1
  568. package/dist/store/brain-accessor.js +0 -397
  569. package/dist/store/brain-accessor.js.map +0 -1
  570. package/dist/store/brain-schema.js +0 -215
  571. package/dist/store/brain-schema.js.map +0 -1
  572. package/dist/store/brain-sqlite.js +0 -271
  573. package/dist/store/brain-sqlite.js.map +0 -1
  574. package/dist/store/cache.js +0 -168
  575. package/dist/store/cache.js.map +0 -1
  576. package/dist/store/chain-schema.js +0 -51
  577. package/dist/store/chain-schema.js.map +0 -1
  578. package/dist/store/converters.js +0 -122
  579. package/dist/store/converters.js.map +0 -1
  580. package/dist/store/cross-db-cleanup.js +0 -169
  581. package/dist/store/cross-db-cleanup.js.map +0 -1
  582. package/dist/store/data-accessor.js +0 -26
  583. package/dist/store/data-accessor.js.map +0 -1
  584. package/dist/store/data-safety-central.js +0 -269
  585. package/dist/store/data-safety-central.js.map +0 -1
  586. package/dist/store/data-safety.js +0 -274
  587. package/dist/store/data-safety.js.map +0 -1
  588. package/dist/store/db-helpers.js +0 -223
  589. package/dist/store/db-helpers.js.map +0 -1
  590. package/dist/store/export.js +0 -155
  591. package/dist/store/export.js.map +0 -1
  592. package/dist/store/file-utils.js +0 -270
  593. package/dist/store/file-utils.js.map +0 -1
  594. package/dist/store/git-checkpoint.js +0 -365
  595. package/dist/store/git-checkpoint.js.map +0 -1
  596. package/dist/store/import-logging.js +0 -139
  597. package/dist/store/import-logging.js.map +0 -1
  598. package/dist/store/import-remap.js +0 -145
  599. package/dist/store/import-remap.js.map +0 -1
  600. package/dist/store/import-sort.js +0 -121
  601. package/dist/store/import-sort.js.map +0 -1
  602. package/dist/store/index.js +0 -28
  603. package/dist/store/index.js.map +0 -1
  604. package/dist/store/json.js +0 -208
  605. package/dist/store/json.js.map +0 -1
  606. package/dist/store/lifecycle-store.js +0 -249
  607. package/dist/store/lifecycle-store.js.map +0 -1
  608. package/dist/store/lock.js +0 -70
  609. package/dist/store/lock.js.map +0 -1
  610. package/dist/store/migration-sqlite.js +0 -676
  611. package/dist/store/migration-sqlite.js.map +0 -1
  612. package/dist/store/nexus-schema.js +0 -62
  613. package/dist/store/nexus-schema.js.map +0 -1
  614. package/dist/store/nexus-sqlite.js +0 -217
  615. package/dist/store/nexus-sqlite.js.map +0 -1
  616. package/dist/store/nexus-validation-schemas.js +0 -40
  617. package/dist/store/nexus-validation-schemas.js.map +0 -1
  618. package/dist/store/parsers.js +0 -37
  619. package/dist/store/parsers.js.map +0 -1
  620. package/dist/store/project-detect.js +0 -457
  621. package/dist/store/project-detect.js.map +0 -1
  622. package/dist/store/provider.js +0 -101
  623. package/dist/store/provider.js.map +0 -1
  624. package/dist/store/safety-data-accessor.js +0 -243
  625. package/dist/store/safety-data-accessor.js.map +0 -1
  626. package/dist/store/schema.js +0 -7
  627. package/dist/store/schema.js.map +0 -1
  628. package/dist/store/session-store.js +0 -219
  629. package/dist/store/session-store.js.map +0 -1
  630. package/dist/store/sqlite-backup.js +0 -105
  631. package/dist/store/sqlite-backup.js.map +0 -1
  632. package/dist/store/sqlite-data-accessor.js +0 -734
  633. package/dist/store/sqlite-data-accessor.js.map +0 -1
  634. package/dist/store/sqlite.js +0 -554
  635. package/dist/store/sqlite.js.map +0 -1
  636. package/dist/store/status-registry.js +0 -8
  637. package/dist/store/status-registry.js.map +0 -1
  638. package/dist/store/task-store.js +0 -348
  639. package/dist/store/task-store.js.map +0 -1
  640. package/dist/store/tasks-schema.js +0 -604
  641. package/dist/store/tasks-schema.js.map +0 -1
  642. package/dist/store/typed-query.js +0 -15
  643. package/dist/store/typed-query.js.map +0 -1
  644. package/dist/store/validation-schemas.js +0 -278
  645. package/dist/store/validation-schemas.js.map +0 -1
  646. package/dist/system/archive-analytics.js +0 -277
  647. package/dist/system/archive-analytics.js.map +0 -1
  648. package/dist/system/archive-stats.js +0 -64
  649. package/dist/system/archive-stats.js.map +0 -1
  650. package/dist/system/audit.js +0 -145
  651. package/dist/system/audit.js.map +0 -1
  652. package/dist/system/backup.js +0 -141
  653. package/dist/system/backup.js.map +0 -1
  654. package/dist/system/cleanup.js +0 -134
  655. package/dist/system/cleanup.js.map +0 -1
  656. package/dist/system/health.js +0 -1054
  657. package/dist/system/health.js.map +0 -1
  658. package/dist/system/index.js +0 -18
  659. package/dist/system/index.js.map +0 -1
  660. package/dist/system/inject-generate.js +0 -122
  661. package/dist/system/inject-generate.js.map +0 -1
  662. package/dist/system/labels.js +0 -38
  663. package/dist/system/labels.js.map +0 -1
  664. package/dist/system/metrics.js +0 -61
  665. package/dist/system/metrics.js.map +0 -1
  666. package/dist/system/migrate.js +0 -43
  667. package/dist/system/migrate.js.map +0 -1
  668. package/dist/system/platform-paths.js +0 -80
  669. package/dist/system/platform-paths.js.map +0 -1
  670. package/dist/system/runtime.js +0 -161
  671. package/dist/system/runtime.js.map +0 -1
  672. package/dist/system/safestop.js +0 -99
  673. package/dist/system/safestop.js.map +0 -1
  674. package/dist/system/storage-preflight.js +0 -123
  675. package/dist/system/storage-preflight.js.map +0 -1
  676. package/dist/task-work/index.js +0 -155
  677. package/dist/task-work/index.js.map +0 -1
  678. package/dist/tasks/add.js +0 -656
  679. package/dist/tasks/add.js.map +0 -1
  680. package/dist/tasks/analyze.js +0 -85
  681. package/dist/tasks/analyze.js.map +0 -1
  682. package/dist/tasks/archive.js +0 -90
  683. package/dist/tasks/archive.js.map +0 -1
  684. package/dist/tasks/atomicity.js +0 -83
  685. package/dist/tasks/atomicity.js.map +0 -1
  686. package/dist/tasks/cancel-ops.js +0 -83
  687. package/dist/tasks/cancel-ops.js.map +0 -1
  688. package/dist/tasks/complete.js +0 -235
  689. package/dist/tasks/complete.js.map +0 -1
  690. package/dist/tasks/crossref-extract.js +0 -73
  691. package/dist/tasks/crossref-extract.js.map +0 -1
  692. package/dist/tasks/delete-preview.js +0 -192
  693. package/dist/tasks/delete-preview.js.map +0 -1
  694. package/dist/tasks/delete.js +0 -120
  695. package/dist/tasks/delete.js.map +0 -1
  696. package/dist/tasks/deletion-strategy.js +0 -200
  697. package/dist/tasks/deletion-strategy.js.map +0 -1
  698. package/dist/tasks/dependency-check.js +0 -278
  699. package/dist/tasks/dependency-check.js.map +0 -1
  700. package/dist/tasks/deps-ready.js +0 -32
  701. package/dist/tasks/deps-ready.js.map +0 -1
  702. package/dist/tasks/enforcement.js +0 -89
  703. package/dist/tasks/enforcement.js.map +0 -1
  704. package/dist/tasks/epic-enforcement.js +0 -294
  705. package/dist/tasks/epic-enforcement.js.map +0 -1
  706. package/dist/tasks/find.js +0 -148
  707. package/dist/tasks/find.js.map +0 -1
  708. package/dist/tasks/graph-cache.js +0 -127
  709. package/dist/tasks/graph-cache.js.map +0 -1
  710. package/dist/tasks/graph-ops.js +0 -171
  711. package/dist/tasks/graph-ops.js.map +0 -1
  712. package/dist/tasks/graph-rag.js +0 -328
  713. package/dist/tasks/graph-rag.js.map +0 -1
  714. package/dist/tasks/hierarchy-policy.js +0 -149
  715. package/dist/tasks/hierarchy-policy.js.map +0 -1
  716. package/dist/tasks/hierarchy.js +0 -185
  717. package/dist/tasks/hierarchy.js.map +0 -1
  718. package/dist/tasks/id-generator.js +0 -65
  719. package/dist/tasks/id-generator.js.map +0 -1
  720. package/dist/tasks/index.js +0 -14
  721. package/dist/tasks/index.js.map +0 -1
  722. package/dist/tasks/labels.js +0 -52
  723. package/dist/tasks/labels.js.map +0 -1
  724. package/dist/tasks/list.js +0 -68
  725. package/dist/tasks/list.js.map +0 -1
  726. package/dist/tasks/phase-tracking.js +0 -133
  727. package/dist/tasks/phase-tracking.js.map +0 -1
  728. package/dist/tasks/pipeline-stage.js +0 -248
  729. package/dist/tasks/pipeline-stage.js.map +0 -1
  730. package/dist/tasks/plan.js +0 -268
  731. package/dist/tasks/plan.js.map +0 -1
  732. package/dist/tasks/relates.js +0 -89
  733. package/dist/tasks/relates.js.map +0 -1
  734. package/dist/tasks/reparent.d.ts +0 -38
  735. package/dist/tasks/reparent.d.ts.map +0 -1
  736. package/dist/tasks/show.js +0 -78
  737. package/dist/tasks/show.js.map +0 -1
  738. package/dist/tasks/size-weighting.js +0 -86
  739. package/dist/tasks/size-weighting.js.map +0 -1
  740. package/dist/tasks/staleness.js +0 -86
  741. package/dist/tasks/staleness.js.map +0 -1
  742. package/dist/tasks/task-ops.js +0 -1340
  743. package/dist/tasks/task-ops.js.map +0 -1
  744. package/dist/tasks/update.js +0 -271
  745. package/dist/tasks/update.js.map +0 -1
  746. package/dist/templates/index.js +0 -10
  747. package/dist/templates/index.js.map +0 -1
  748. package/dist/templates/parser.js +0 -254
  749. package/dist/templates/parser.js.map +0 -1
  750. package/dist/ui/aliases.js +0 -153
  751. package/dist/ui/aliases.js.map +0 -1
  752. package/dist/ui/changelog.js +0 -184
  753. package/dist/ui/changelog.js.map +0 -1
  754. package/dist/ui/command-registry.js +0 -168
  755. package/dist/ui/command-registry.js.map +0 -1
  756. package/dist/ui/flags.js +0 -94
  757. package/dist/ui/flags.js.map +0 -1
  758. package/dist/ui/index.js +0 -24
  759. package/dist/ui/index.js.map +0 -1
  760. package/dist/ui/injection-legacy.d.ts +0 -26
  761. package/dist/ui/injection-legacy.d.ts.map +0 -1
  762. package/dist/ui/injection-legacy.js +0 -42
  763. package/dist/ui/injection-legacy.js.map +0 -1
  764. package/dist/upgrade.js +0 -901
  765. package/dist/upgrade.js.map +0 -1
  766. package/dist/validation/chain-validation.js +0 -146
  767. package/dist/validation/chain-validation.js.map +0 -1
  768. package/dist/validation/compliance.js +0 -155
  769. package/dist/validation/compliance.js.map +0 -1
  770. package/dist/validation/docs-sync.js +0 -212
  771. package/dist/validation/docs-sync.js.map +0 -1
  772. package/dist/validation/doctor/checks.js +0 -1069
  773. package/dist/validation/doctor/checks.js.map +0 -1
  774. package/dist/validation/doctor/index.js +0 -9
  775. package/dist/validation/doctor/index.js.map +0 -1
  776. package/dist/validation/doctor/project-cache.js +0 -160
  777. package/dist/validation/doctor/project-cache.js.map +0 -1
  778. package/dist/validation/doctor/utils.js +0 -155
  779. package/dist/validation/doctor/utils.js.map +0 -1
  780. package/dist/validation/engine.js +0 -902
  781. package/dist/validation/engine.js.map +0 -1
  782. package/dist/validation/gap-check.js +0 -175
  783. package/dist/validation/gap-check.js.map +0 -1
  784. package/dist/validation/index.js +0 -40
  785. package/dist/validation/index.js.map +0 -1
  786. package/dist/validation/manifest.js +0 -237
  787. package/dist/validation/manifest.js.map +0 -1
  788. package/dist/validation/operation-gate-validators.js +0 -724
  789. package/dist/validation/operation-gate-validators.js.map +0 -1
  790. package/dist/validation/operation-verification-gates.js +0 -532
  791. package/dist/validation/operation-verification-gates.js.map +0 -1
  792. package/dist/validation/param-utils.js +0 -139
  793. package/dist/validation/param-utils.js.map +0 -1
  794. package/dist/validation/protocol-common.js +0 -300
  795. package/dist/validation/protocol-common.js.map +0 -1
  796. package/dist/validation/protocols/consensus.js +0 -71
  797. package/dist/validation/protocols/consensus.js.map +0 -1
  798. package/dist/validation/protocols/contribution.js +0 -59
  799. package/dist/validation/protocols/contribution.js.map +0 -1
  800. package/dist/validation/protocols/decomposition.js +0 -59
  801. package/dist/validation/protocols/decomposition.js.map +0 -1
  802. package/dist/validation/protocols/implementation.js +0 -59
  803. package/dist/validation/protocols/implementation.js.map +0 -1
  804. package/dist/validation/protocols/release-protocol.js +0 -60
  805. package/dist/validation/protocols/release-protocol.js.map +0 -1
  806. package/dist/validation/protocols/research.js +0 -77
  807. package/dist/validation/protocols/research.js.map +0 -1
  808. package/dist/validation/protocols/specification.js +0 -84
  809. package/dist/validation/protocols/specification.js.map +0 -1
  810. package/dist/validation/protocols/testing-protocol.js +0 -70
  811. package/dist/validation/protocols/testing-protocol.js.map +0 -1
  812. package/dist/validation/protocols/validation-protocol.js +0 -70
  813. package/dist/validation/protocols/validation-protocol.js.map +0 -1
  814. package/dist/validation/schema-integrity.js +0 -170
  815. package/dist/validation/schema-integrity.js.map +0 -1
  816. package/dist/validation/schema-validator.js +0 -176
  817. package/dist/validation/schema-validator.js.map +0 -1
  818. package/dist/validation/validate-ops.js +0 -937
  819. package/dist/validation/validate-ops.js.map +0 -1
  820. package/dist/validation/validation-rules.js +0 -226
  821. package/dist/validation/validation-rules.js.map +0 -1
  822. package/dist/validation/verification.js +0 -321
  823. package/dist/validation/verification.js.map +0 -1
package/dist/tasks/add.js DELETED
@@ -1,656 +0,0 @@
1
- /**
2
- * Task creation logic.
3
- * @task T4460
4
- * @epic T4454
5
- */
6
- import { randomBytes } from 'node:crypto';
7
- // setMetaValue now called via tx.setMetaValue inside transaction (T023)
8
- import { ExitCode, TASK_STATUSES } from '@cleocode/contracts';
9
- import { getRawConfigValue, loadConfig } from '../config.js';
10
- import { CleoError } from '../errors.js';
11
- import { allocateNextTaskId } from '../sequence/index.js';
12
- import { requireActiveSession } from '../sessions/session-enforcement.js';
13
- import { createAcceptanceEnforcement } from './enforcement.js';
14
- import { findEpicAncestor, getLifecycleMode, validateChildStageCeiling, validateEpicCreation, } from './epic-enforcement.js';
15
- import { resolveHierarchyPolicy } from './hierarchy-policy.js';
16
- import { resolveDefaultPipelineStage, validatePipelineStage } from './pipeline-stage.js';
17
- /**
18
- * Build the default verification metadata applied to every new task.
19
- * Gates are initialized to false (not yet passed). `passed` starts false
20
- * because no gates have been verified yet.
21
- * @task T061
22
- */
23
- export function buildDefaultVerification(initializedAt) {
24
- return {
25
- passed: false,
26
- round: 1,
27
- gates: {
28
- implemented: false,
29
- testsPassed: false,
30
- qaPassed: false,
31
- },
32
- lastAgent: null,
33
- lastUpdated: null,
34
- failureLog: [],
35
- initializedAt,
36
- };
37
- }
38
- /**
39
- * Validate a task title.
40
- * @task T4460
41
- */
42
- export function validateTitle(title) {
43
- if (!title || title.trim().length === 0) {
44
- throw new CleoError(ExitCode.INVALID_INPUT, 'Task title is required');
45
- }
46
- if (title.length > 200) {
47
- throw new CleoError(ExitCode.VALIDATION_ERROR, 'Task title must be 200 characters or less');
48
- }
49
- }
50
- /**
51
- * Validate task status.
52
- * @task T4460
53
- */
54
- export function validateStatus(status) {
55
- if (!TASK_STATUSES.includes(status)) {
56
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid status: ${status} (must be ${TASK_STATUSES.join('|')})`);
57
- }
58
- }
59
- /**
60
- * Mapping from numeric priority (1-9) to string priority names.
61
- * 1-2 = critical, 3-4 = high, 5-6 = medium, 7-9 = low.
62
- * @task T4572
63
- */
64
- const NUMERIC_PRIORITY_MAP = {
65
- 1: 'critical',
66
- 2: 'critical',
67
- 3: 'high',
68
- 4: 'high',
69
- 5: 'medium',
70
- 6: 'medium',
71
- 7: 'low',
72
- 8: 'low',
73
- 9: 'low',
74
- };
75
- /** Valid string priority values. */
76
- export const VALID_PRIORITIES = [
77
- 'critical',
78
- 'high',
79
- 'medium',
80
- 'low',
81
- ];
82
- /**
83
- * Normalize priority to canonical string format.
84
- * Accepts both string names ("critical","high","medium","low") and numeric (1-9).
85
- * Returns the canonical string format per todo.schema.json.
86
- * @task T4572
87
- */
88
- export function normalizePriority(priority) {
89
- // Handle numeric input
90
- if (typeof priority === 'number') {
91
- const mapped = NUMERIC_PRIORITY_MAP[priority];
92
- if (!mapped) {
93
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid numeric priority: ${priority} (must be 1-9)`);
94
- }
95
- return mapped;
96
- }
97
- // Handle string input - check for numeric string first
98
- const asNumber = Number(priority);
99
- if (!Number.isNaN(asNumber) && Number.isInteger(asNumber) && asNumber >= 1 && asNumber <= 9) {
100
- return NUMERIC_PRIORITY_MAP[asNumber];
101
- }
102
- // Canonical string validation
103
- const lower = priority.toLowerCase().trim();
104
- if (VALID_PRIORITIES.includes(lower)) {
105
- return lower;
106
- }
107
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid priority: ${priority} (must be ${VALID_PRIORITIES.join('|')} or numeric 1-9)`);
108
- }
109
- /**
110
- * Validate task priority.
111
- * @task T4460
112
- * @task T4572
113
- */
114
- export function validatePriority(priority) {
115
- normalizePriority(priority);
116
- }
117
- /**
118
- * Validate task type.
119
- * @task T4460
120
- */
121
- export function validateTaskType(type) {
122
- const valid = ['epic', 'task', 'subtask'];
123
- if (!valid.includes(type)) {
124
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid task type: ${type} (must be ${valid.join('|')})`);
125
- }
126
- }
127
- /**
128
- * Validate task size.
129
- * @task T4460
130
- */
131
- export function validateSize(size) {
132
- const valid = ['small', 'medium', 'large'];
133
- if (!valid.includes(size)) {
134
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid size: ${size} (must be ${valid.join('|')})`);
135
- }
136
- }
137
- /**
138
- * Validate label format.
139
- * @task T4460
140
- */
141
- export function validateLabels(labels) {
142
- for (const label of labels) {
143
- const trimmed = label.trim();
144
- if (!/^[a-z][a-z0-9.-]*$/.test(trimmed)) {
145
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid label format: '${trimmed}' (must be lowercase alphanumeric with hyphens/periods)`);
146
- }
147
- }
148
- }
149
- /**
150
- * Validate phase slug format.
151
- * @task T4460
152
- */
153
- export function validatePhaseFormat(phase) {
154
- if (!/^[a-z][a-z0-9-]*$/.test(phase)) {
155
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid phase format: ${phase} (must be lowercase alphanumeric with hyphens)`);
156
- }
157
- }
158
- /**
159
- * Validate dependency IDs exist.
160
- * @task T4460
161
- */
162
- export function validateDepends(depends, tasks) {
163
- const existingIds = new Set(tasks.map((t) => t.id));
164
- for (const depId of depends) {
165
- const trimmed = depId.trim();
166
- if (!/^T\d{3,}$/.test(trimmed)) {
167
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid dependency ID format: '${trimmed}' (must be T### format)`);
168
- }
169
- if (!existingIds.has(trimmed)) {
170
- throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`);
171
- }
172
- }
173
- }
174
- /**
175
- * Validate parent hierarchy constraints.
176
- * @task T4460
177
- */
178
- export function validateParent(parentId, tasks, maxDepth = 3, maxSiblings = 0) {
179
- // Check parent exists
180
- const parent = tasks.find((t) => t.id === parentId);
181
- if (!parent) {
182
- throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task not found: ${parentId}`, {
183
- fix: `Use 'cleo show ${parentId}' to check or create as standalone task`,
184
- });
185
- }
186
- // Check parent type allows children
187
- if (parent.type === 'subtask') {
188
- throw new CleoError(ExitCode.INVALID_PARENT_TYPE, `Cannot add child to ${parentId}: subtasks cannot have children`, { fix: `Create as standalone task or add to parent's parent instead` });
189
- }
190
- // Check depth
191
- const depth = getTaskDepth(parentId, tasks);
192
- if (depth >= maxDepth) {
193
- throw new CleoError(ExitCode.DEPTH_EXCEEDED, `Cannot add child to ${parentId}: max hierarchy depth (${maxDepth}) would be exceeded`);
194
- }
195
- // Check sibling count
196
- if (maxSiblings > 0) {
197
- const siblingCount = tasks.filter((t) => t.parentId === parentId).length;
198
- if (siblingCount >= maxSiblings) {
199
- throw new CleoError(ExitCode.SIBLING_LIMIT, `Cannot add child to ${parentId}: max siblings (${maxSiblings}) exceeded`, { fix: `Create as standalone task or increase hierarchy.maxSiblings in config` });
200
- }
201
- }
202
- }
203
- /**
204
- * Get the depth of a task in the hierarchy.
205
- * @task T4460
206
- */
207
- export function getTaskDepth(taskId, tasks) {
208
- let depth = 0;
209
- let currentId = taskId;
210
- const visited = new Set();
211
- while (currentId) {
212
- if (visited.has(currentId))
213
- break; // circular reference guard
214
- visited.add(currentId);
215
- const task = tasks.find((t) => t.id === currentId);
216
- if (!task?.parentId)
217
- break;
218
- depth++;
219
- currentId = task.parentId;
220
- }
221
- return depth;
222
- }
223
- /**
224
- * Infer task type from parent context.
225
- * @task T4460
226
- */
227
- export function inferTaskType(parentId, tasks) {
228
- if (!parentId)
229
- return 'task';
230
- const parent = tasks.find((t) => t.id === parentId);
231
- if (!parent)
232
- return 'task';
233
- if (parent.type === 'epic')
234
- return 'task';
235
- return 'subtask';
236
- }
237
- /**
238
- * Get the next position for a task within a parent scope.
239
- * @task T4460
240
- */
241
- export function getNextPosition(parentId, tasks) {
242
- const siblings = tasks.filter((t) => parentId ? t.parentId === parentId : !t.parentId || t.parentId === null);
243
- let maxPos = 0;
244
- for (const s of siblings) {
245
- if (s.position !== undefined && s.position !== null && s.position > maxPos) {
246
- maxPos = s.position;
247
- }
248
- }
249
- return maxPos + 1;
250
- }
251
- /**
252
- * Log an operation to the audit log.
253
- * @task T4460
254
- */
255
- export async function logOperation(operation, taskId, details, accessor) {
256
- const logId = `log-${Math.floor(Date.now() / 1000)}-${randomBytes(3).toString('hex')}`;
257
- const entry = {
258
- id: logId,
259
- timestamp: new Date().toISOString(),
260
- action: operation,
261
- taskId,
262
- actor: 'system',
263
- details,
264
- before: null,
265
- after: details,
266
- };
267
- try {
268
- if (accessor) {
269
- await accessor.appendLog(entry);
270
- }
271
- }
272
- catch {
273
- // Log failure is non-fatal
274
- }
275
- }
276
- /**
277
- * Check for recent duplicate task.
278
- * @task T4460
279
- */
280
- export function findRecentDuplicate(title, phase, tasks, windowSeconds = 60) {
281
- const now = Date.now();
282
- const cutoff = now - windowSeconds * 1000;
283
- for (const task of tasks) {
284
- if (task.title !== title)
285
- continue;
286
- if (phase) {
287
- if (task.phase !== phase)
288
- continue;
289
- }
290
- else {
291
- if (task.phase && task.phase !== '')
292
- continue;
293
- }
294
- const created = new Date(task.createdAt).getTime();
295
- if (created > cutoff)
296
- return task;
297
- }
298
- return null;
299
- }
300
- /**
301
- * Add a new task to the todo file.
302
- * @task T4460
303
- */
304
- export async function addTask(options, cwd, accessor) {
305
- // Validate title
306
- validateTitle(options.title);
307
- // Anti-hallucination: title and description must be different (T5698)
308
- if (options.description &&
309
- options.title.trim().toLowerCase() === options.description.trim().toLowerCase()) {
310
- throw new CleoError(ExitCode.VALIDATION_ERROR, 'Title and description must be different (anti-hallucination rule)');
311
- }
312
- await requireActiveSession('tasks.add', cwd);
313
- // Orphan prevention (T101): non-epic tasks must have a parent in strict mode.
314
- // Epics are root containers and are exempt. Only enforced in strict lifecycle mode.
315
- const parentId = options.parentId ?? null;
316
- if (!parentId && options.type !== 'epic') {
317
- const lifecycleMode = await getLifecycleMode(cwd);
318
- if (lifecycleMode === 'strict') {
319
- throw new CleoError(ExitCode.VALIDATION_ERROR, 'Tasks must have a parent (epic or task) in strict mode. Use --parent <epicId> or set lifecycle.mode to "advisory".', {
320
- fix: 'cleo add "Task title" --parent T### --acceptance "AC1|AC2|AC3"',
321
- });
322
- }
323
- }
324
- // Always use accessor (SQLite canonical storage per ADR-006)
325
- const dataAccessor = accessor ?? (await (await import('../store/data-accessor.js')).getAccessor(cwd));
326
- // Resolve defaults
327
- const status = options.status ?? 'pending';
328
- const priority = normalizePriority(options.priority ?? 'medium');
329
- const size = options.size ?? 'medium';
330
- let taskType = options.type;
331
- // Validate inputs
332
- validateStatus(status);
333
- // priority is already normalized above
334
- validateSize(size);
335
- if (options.labels?.length)
336
- validateLabels(options.labels);
337
- // Enforce Acceptance Criteria (general rule: min 3 for all task types)
338
- const enforcement = await createAcceptanceEnforcement(cwd);
339
- const acValidation = enforcement.validateCreation({
340
- acceptance: options.acceptance,
341
- priority: priority,
342
- });
343
- if (!acValidation.valid) {
344
- throw new CleoError(acValidation.exitCode ?? ExitCode.VALIDATION_ERROR, acValidation.error, {
345
- fix: acValidation.fix,
346
- });
347
- }
348
- // Epic-specific creation enforcement (T062): min 5 AC + non-empty description.
349
- // This runs after general AC enforcement so epics face both the general check
350
- // (min 3 from enforcement config) AND the stricter epic check (min 5).
351
- if (options.type === 'epic') {
352
- await validateEpicCreation({ acceptance: options.acceptance, description: options.description }, cwd);
353
- }
354
- // Validate dependency IDs exist using targeted queries
355
- if (options.depends?.length) {
356
- for (const depId of options.depends) {
357
- const trimmed = depId.trim();
358
- if (!/^T\d{3,}$/.test(trimmed)) {
359
- throw new CleoError(ExitCode.VALIDATION_ERROR, `Invalid dependency ID format: '${trimmed}' (must be T### format)`);
360
- }
361
- const exists = await dataAccessor.taskExists(trimmed);
362
- if (!exists) {
363
- throw new CleoError(ExitCode.NOT_FOUND, `Dependency task not found: ${trimmed}`);
364
- }
365
- }
366
- }
367
- // Phase validation using targeted metadata queries
368
- let phase = options.phase;
369
- const projectMeta = await dataAccessor.getMetaValue('project_meta');
370
- let updatedProjectMeta = null;
371
- if (phase) {
372
- validatePhaseFormat(phase);
373
- // Check if phase exists in project
374
- const phases = projectMeta?.phases ?? {};
375
- if (!phases[phase]) {
376
- if (!options.addPhase) {
377
- const validPhases = Object.keys(phases).join(', ');
378
- throw new CleoError(ExitCode.NOT_FOUND, `Phase '${phase}' not found. Valid phases: ${validPhases || 'none'}. Use --add-phase to create new.`);
379
- }
380
- // Create phase
381
- const order = Object.keys(phases).length + 1;
382
- const name = phase
383
- .split('-')
384
- .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
385
- .join(' ');
386
- updatedProjectMeta = projectMeta ?? { name: '', phases: {} };
387
- if (!updatedProjectMeta.phases)
388
- updatedProjectMeta.phases = {};
389
- updatedProjectMeta.phases[phase] = { order, name, status: 'pending' };
390
- }
391
- }
392
- else {
393
- // Inherit from project.currentPhase
394
- if (projectMeta?.currentPhase) {
395
- phase = projectMeta.currentPhase;
396
- }
397
- }
398
- // Parent hierarchy validation using targeted queries
399
- if (parentId) {
400
- if (!/^T\d{3,}$/.test(parentId)) {
401
- throw new CleoError(ExitCode.INVALID_INPUT, `Invalid parent ID format: ${parentId}`);
402
- }
403
- // Validate parent exists
404
- const parentTask = await dataAccessor.loadSingleTask(parentId);
405
- if (!parentTask) {
406
- throw new CleoError(ExitCode.PARENT_NOT_FOUND, `Parent task ${parentId} not found`);
407
- }
408
- // Read hierarchy limits from config via policy module
409
- const config = await loadConfig(cwd);
410
- const policy = resolveHierarchyPolicy(config);
411
- // Depth check using ancestor chain
412
- const ancestors = await dataAccessor.getAncestorChain(parentId);
413
- const parentDepth = ancestors.length;
414
- if (parentDepth + 1 >= policy.maxDepth) {
415
- throw new CleoError(ExitCode.DEPTH_EXCEEDED, `Maximum nesting depth ${policy.maxDepth} would be exceeded`);
416
- }
417
- // Sibling limit (0 = unlimited)
418
- if (policy.maxSiblings > 0) {
419
- const children = await dataAccessor.getChildren(parentId);
420
- const counted = policy.countDoneInLimit
421
- ? children.length
422
- : children.filter((t) => t.status !== 'done').length;
423
- if (counted >= policy.maxSiblings) {
424
- throw new CleoError(ExitCode.SIBLING_LIMIT, `Parent ${parentId} already has ${counted} children (limit: ${policy.maxSiblings})`);
425
- }
426
- }
427
- // Active siblings cap
428
- const activeCount = await dataAccessor.countActiveChildren(parentId);
429
- if (policy.maxActiveSiblings > 0 && activeCount >= policy.maxActiveSiblings) {
430
- throw new CleoError(ExitCode.SIBLING_LIMIT, `Parent ${parentId} already has ${activeCount} active children (maxActiveSiblings=${policy.maxActiveSiblings})`);
431
- }
432
- // Validate type constraints
433
- if (taskType === 'epic') {
434
- throw new CleoError(ExitCode.VALIDATION_ERROR, 'Epic tasks cannot have a parent - they must be root-level', { fix: 'Remove --parent flag or change --type to task|subtask' });
435
- }
436
- }
437
- if (taskType === 'subtask' && !parentId) {
438
- throw new CleoError(ExitCode.VALIDATION_ERROR, 'Subtask tasks require a parent - specify with --parent', { fix: 'Add --parent T### flag or change --type to task|epic' });
439
- }
440
- if (taskType) {
441
- validateTaskType(taskType);
442
- }
443
- else {
444
- // Infer type from parent using targeted query
445
- if (!parentId) {
446
- taskType = 'task';
447
- }
448
- else {
449
- const parent = await dataAccessor.loadSingleTask(parentId);
450
- if (!parent) {
451
- taskType = 'task';
452
- }
453
- else if (parent.type === 'epic') {
454
- taskType = 'task';
455
- }
456
- else {
457
- taskType = 'subtask';
458
- }
459
- }
460
- }
461
- // Validate explicit pipelineStage if provided (T060)
462
- if (options.pipelineStage) {
463
- validatePipelineStage(options.pipelineStage);
464
- }
465
- // Duplicate detection using targeted query
466
- const { tasks: candidateDupes } = await dataAccessor.queryTasks({
467
- search: options.title,
468
- limit: 50,
469
- });
470
- const duplicate = findRecentDuplicate(options.title, phase, candidateDupes);
471
- if (duplicate) {
472
- return { task: duplicate, duplicate: true };
473
- }
474
- // Dry run: build a preview task without allocating a sequence ID or writing to the DB.
475
- // Must be checked before allocateNextTaskId to avoid advancing the counter on no-op runs.
476
- if (options.dryRun) {
477
- const previewNow = new Date().toISOString();
478
- // Resolve pipeline stage for the preview without any DB writes
479
- let previewParentForStage = null;
480
- if (parentId) {
481
- const previewParentTask = await dataAccessor.loadSingleTask(parentId);
482
- previewParentForStage = previewParentTask
483
- ? { pipelineStage: previewParentTask.pipelineStage, type: previewParentTask.type }
484
- : null;
485
- }
486
- const previewPipelineStage = resolveDefaultPipelineStage({
487
- explicitStage: options.pipelineStage,
488
- taskType: taskType ?? null,
489
- parentTask: previewParentForStage,
490
- });
491
- const previewPosition = options.position !== undefined
492
- ? options.position
493
- : await dataAccessor.getNextPosition(parentId);
494
- const previewTask = {
495
- id: 'T???',
496
- title: options.title,
497
- description: options.description,
498
- status,
499
- priority,
500
- type: taskType,
501
- parentId: parentId || null,
502
- position: previewPosition,
503
- positionVersion: 0,
504
- size,
505
- pipelineStage: previewPipelineStage,
506
- createdAt: previewNow,
507
- updatedAt: previewNow,
508
- };
509
- if (phase)
510
- previewTask.phase = phase;
511
- if (options.labels?.length)
512
- previewTask.labels = options.labels.map((l) => l.trim());
513
- if (options.files?.length)
514
- previewTask.files = options.files.map((f) => f.trim());
515
- if (options.acceptance?.length)
516
- previewTask.acceptance = options.acceptance.map((a) => a.trim());
517
- if (options.depends?.length)
518
- previewTask.depends = options.depends.map((d) => d.trim());
519
- if (options.notes) {
520
- const previewNote = `${new Date()
521
- .toISOString()
522
- .replace('T', ' ')
523
- .replace(/\.\d+Z$/, ' UTC')}: ${options.notes}`;
524
- previewTask.notes = [previewNote];
525
- }
526
- if (status === 'blocked' && options.description) {
527
- previewTask.blockedBy = options.description;
528
- }
529
- if (status === 'done') {
530
- previewTask.completedAt = previewNow;
531
- }
532
- if (taskType !== 'epic') {
533
- const verificationEnabledRaw = await getRawConfigValue('verification.enabled', cwd);
534
- if (verificationEnabledRaw === true) {
535
- previewTask.verification = buildDefaultVerification(previewNow);
536
- }
537
- }
538
- return { task: previewTask, dryRun: true };
539
- }
540
- const taskId = await allocateNextTaskId(cwd);
541
- const now = new Date().toISOString();
542
- // Resolve pipeline stage: explicit > parent inheritance > type default (T060)
543
- let resolvedParentForStage = null;
544
- if (parentId) {
545
- // Re-use the already-validated parent task (loaded above)
546
- const parentForStage = await dataAccessor.loadSingleTask(parentId);
547
- resolvedParentForStage = parentForStage
548
- ? { pipelineStage: parentForStage.pipelineStage, type: parentForStage.type }
549
- : null;
550
- }
551
- const resolvedPipelineStage = resolveDefaultPipelineStage({
552
- explicitStage: options.pipelineStage,
553
- taskType: taskType ?? null,
554
- parentTask: resolvedParentForStage,
555
- });
556
- // Child stage ceiling check (T062): child stage must not exceed parent epic's stage.
557
- // If the direct parent is an epic, check against it; otherwise walk ancestors.
558
- if (parentId && taskType !== 'epic') {
559
- let epicToCheck = null;
560
- if (resolvedParentForStage?.type === 'epic') {
561
- // Direct parent is an epic — load its full record to pass to validateChildStageCeiling
562
- epicToCheck = await dataAccessor.loadSingleTask(parentId);
563
- }
564
- else {
565
- // Walk up from the parent to find the nearest epic ancestor
566
- epicToCheck = await findEpicAncestor(parentId, dataAccessor);
567
- }
568
- if (epicToCheck) {
569
- await validateChildStageCeiling({ childStage: resolvedPipelineStage, epicId: epicToCheck.id }, dataAccessor, cwd);
570
- }
571
- }
572
- // Compute next position using SQL-level allocation (race-safe, T024)
573
- let position;
574
- if (options.position !== undefined) {
575
- position = options.position;
576
- }
577
- else {
578
- position = await dataAccessor.getNextPosition(parentId);
579
- }
580
- // Build task object
581
- const task = {
582
- id: taskId,
583
- title: options.title,
584
- description: options.description,
585
- status,
586
- priority,
587
- type: taskType,
588
- parentId: parentId || null,
589
- position,
590
- positionVersion: 0,
591
- size,
592
- createdAt: now,
593
- updatedAt: now,
594
- };
595
- // Assign pipeline stage (always set — auto-assigned if not explicit) (T060)
596
- task.pipelineStage = resolvedPipelineStage;
597
- // Add optional fields
598
- if (phase)
599
- task.phase = phase;
600
- if (options.labels?.length)
601
- task.labels = options.labels.map((l) => l.trim());
602
- if (options.files?.length)
603
- task.files = options.files.map((f) => f.trim());
604
- if (options.acceptance?.length)
605
- task.acceptance = options.acceptance.map((a) => a.trim());
606
- if (options.depends?.length)
607
- task.depends = options.depends.map((d) => d.trim());
608
- if (options.notes) {
609
- const timestampedNote = `${new Date()
610
- .toISOString()
611
- .replace('T', ' ')
612
- .replace(/\.\d+Z$/, ' UTC')}: ${options.notes}`;
613
- task.notes = [timestampedNote];
614
- }
615
- if (status === 'blocked' && options.description) {
616
- task.blockedBy = options.description;
617
- }
618
- if (status === 'done') {
619
- task.completedAt = now;
620
- }
621
- // Auto-initialize verification metadata on task creation (T061).
622
- // Only for non-epic tasks when verification is enabled in config.
623
- // Epics are containers and do not go through verification gates themselves.
624
- if (taskType !== 'epic') {
625
- const verificationEnabledRaw = await getRawConfigValue('verification.enabled', cwd);
626
- if (verificationEnabledRaw === true) {
627
- task.verification = buildDefaultVerification(now);
628
- }
629
- }
630
- // Wrap all writes in a transaction for TOCTOU safety (T023)
631
- await dataAccessor.transaction(async (tx) => {
632
- // Position shuffling via bulk SQL update (T025)
633
- if (options.position !== undefined) {
634
- await dataAccessor.shiftPositions(parentId, options.position, 1);
635
- }
636
- // Insert the new task
637
- await tx.upsertSingleTask(task);
638
- // Update project metadata if a new phase was created
639
- if (options.addPhase && phase && updatedProjectMeta?.phases?.[phase]) {
640
- await tx.setMetaValue('project_meta', updatedProjectMeta);
641
- }
642
- // Audit log
643
- await tx.appendLog({
644
- id: `log-${Math.floor(Date.now() / 1000)}-${randomBytes(3).toString('hex')}`,
645
- timestamp: new Date().toISOString(),
646
- action: 'task_created',
647
- taskId,
648
- actor: 'system',
649
- details: { title: options.title, status, priority },
650
- before: null,
651
- after: { title: options.title, status, priority },
652
- });
653
- });
654
- return { task };
655
- }
656
- //# sourceMappingURL=add.js.map