@agimon-ai/doompi-task 0.0.1-alpha.80 → 0.0.1-alpha.82

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 (547) hide show
  1. package/dist/{src/schemas/apiContracts.cjs → apiContracts.cjs} +6 -3
  2. package/dist/apiContracts.cjs.map +1 -0
  3. package/dist/{src/schemas/apiContracts.d.mts.map → apiContracts.d.mts.map} +1 -1
  4. package/dist/{src/schemas/apiContracts.mjs → apiContracts.mjs} +2 -2
  5. package/dist/apiContracts.mjs.map +1 -0
  6. package/dist/commands.cjs +1 -1
  7. package/dist/commands.d.mts +20 -2
  8. package/dist/commands.d.mts.map +1 -0
  9. package/dist/commands.mjs +1 -1
  10. package/dist/{src/services/config/index.cjs → config-BPNE_wEU.cjs} +103 -18
  11. package/dist/config-BPNE_wEU.cjs.map +1 -0
  12. package/dist/{src/services/config/index.mjs → config-DmsCPDuF.mjs} +2 -2
  13. package/dist/config-DmsCPDuF.mjs.map +1 -0
  14. package/dist/config.cjs +18 -18
  15. package/dist/config.d.mts +1 -1
  16. package/dist/config.mjs +1 -1
  17. package/dist/{src/types/delegation.mjs → delegation-BiOy3_7g.mjs} +2 -2
  18. package/dist/delegation-BiOy3_7g.mjs.map +1 -0
  19. package/dist/{src/services/delegation/index.cjs → delegation-BtzyLnYM.cjs} +43 -14
  20. package/dist/delegation-BtzyLnYM.cjs.map +1 -0
  21. package/dist/{src/services/delegation/index.mjs → delegation-CTFGZtwp.mjs} +7 -7
  22. package/dist/delegation-CTFGZtwp.mjs.map +1 -0
  23. package/dist/delegation-LDpHP2CC.cjs +12 -0
  24. package/dist/delegation-LDpHP2CC.cjs.map +1 -0
  25. package/dist/delegation-Ot2xltLi.d.mts +6 -0
  26. package/dist/delegation-Ot2xltLi.d.mts.map +1 -0
  27. package/dist/delegationManager.cjs +10 -0
  28. package/dist/delegationManager.d.mts +3 -0
  29. package/dist/delegationManager.mjs +3 -0
  30. package/dist/{src/services/contextContribution/index.cjs → delegationPlatform-Cfn-Lqew.cjs} +51 -7
  31. package/dist/delegationPlatform-Cfn-Lqew.cjs.map +1 -0
  32. package/dist/{src/services/contextContribution/index.mjs → delegationPlatform-DZ4SZ8a5.mjs} +20 -2
  33. package/dist/delegationPlatform-DZ4SZ8a5.mjs.map +1 -0
  34. package/dist/extensions/mcp.cjs +7 -7
  35. package/dist/extensions/mcp.cjs.map +1 -1
  36. package/dist/extensions/mcp.d.mts +1 -1
  37. package/dist/extensions/mcp.d.mts.map +1 -1
  38. package/dist/extensions/mcp.mjs +2 -2
  39. package/dist/extensions/mcp.mjs.map +1 -1
  40. package/dist/extensions/pi.cjs +408 -21
  41. package/dist/extensions/pi.cjs.map +1 -1
  42. package/dist/extensions/pi.d.mts +1 -1
  43. package/dist/extensions/pi.d.mts.map +1 -1
  44. package/dist/extensions/pi.mjs +399 -12
  45. package/dist/extensions/pi.mjs.map +1 -1
  46. package/dist/extensions/server.cjs +339 -16
  47. package/dist/extensions/server.cjs.map +1 -1
  48. package/dist/extensions/server.d.mts +1 -1
  49. package/dist/extensions/server.d.mts.map +1 -1
  50. package/dist/extensions/server.mjs +330 -7
  51. package/dist/extensions/server.mjs.map +1 -1
  52. package/dist/{src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs → format.cli-CKxfl-lR.cjs} +76 -16
  53. package/dist/format.cli-CKxfl-lR.cjs.map +1 -0
  54. package/dist/{src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs → format.cli-CuTlvk8J.mjs} +4 -4
  55. package/dist/format.cli-CuTlvk8J.mjs.map +1 -0
  56. package/dist/{src/services/taskStore/index.d.cts → index-B7oVjSey.d.mts} +7 -6
  57. package/dist/index-B7oVjSey.d.mts.map +1 -0
  58. package/dist/{src/services/reconcile/index.d.cts → index-BNMm9g0K.d.mts} +8 -7
  59. package/dist/index-BNMm9g0K.d.mts.map +1 -0
  60. package/dist/{src/services/delegation/index.d.cts → index-BUmf786V.d.mts} +17 -18
  61. package/dist/index-BUmf786V.d.mts.map +1 -0
  62. package/dist/index-C3DgOhEm.d.mts +51 -0
  63. package/dist/index-C3DgOhEm.d.mts.map +1 -0
  64. package/dist/index-D4goIk4Z.d.mts +43 -0
  65. package/dist/index-D4goIk4Z.d.mts.map +1 -0
  66. package/dist/{src/services/reducer/index.d.cts → index-DIpc6_uJ.d.mts} +12 -11
  67. package/dist/index-DIpc6_uJ.d.mts.map +1 -0
  68. package/dist/index-XY9VPmfm.d.mts +26 -0
  69. package/dist/index-XY9VPmfm.d.mts.map +1 -0
  70. package/dist/index.cjs +88 -88
  71. package/dist/index.d.mts +15 -15
  72. package/dist/index.mjs +15 -15
  73. package/dist/{src/services/invariants/index.cjs → invariants-DhjEjBPU.cjs} +19 -4
  74. package/dist/invariants-DhjEjBPU.cjs.map +1 -0
  75. package/dist/{src/services/invariants/index.mjs → invariants-q_UamF7D.mjs} +2 -2
  76. package/dist/invariants-q_UamF7D.mjs.map +1 -0
  77. package/dist/{src/services/logSinkTelemetry/index.mjs → logSinkTelemetry-C5QjZipw.mjs} +3 -3
  78. package/dist/logSinkTelemetry-C5QjZipw.mjs.map +1 -0
  79. package/dist/{src/services/logSinkTelemetry/index.cjs → logSinkTelemetry-CqiTuh3a.cjs} +14 -5
  80. package/dist/logSinkTelemetry-CqiTuh3a.cjs.map +1 -0
  81. package/dist/logSinkTelemetry.cjs +4 -4
  82. package/dist/logSinkTelemetry.d.mts +23 -3
  83. package/dist/logSinkTelemetry.d.mts.map +1 -0
  84. package/dist/logSinkTelemetry.mjs +2 -2
  85. package/dist/{src/services/paths/index.mjs → paths-Bg8EEbk1.mjs} +4 -4
  86. package/dist/paths-Bg8EEbk1.mjs.map +1 -0
  87. package/dist/{src/services/paths/index.cjs → paths-BsFVRulr.cjs} +109 -22
  88. package/dist/paths-BsFVRulr.cjs.map +1 -0
  89. package/dist/{src/services/processLiveness/index.mjs → processLiveness-Ccd9wenT.mjs} +2 -2
  90. package/dist/processLiveness-Ccd9wenT.mjs.map +1 -0
  91. package/dist/{src/services/processLiveness/index.cjs → processLiveness-umpNgsPR.cjs} +7 -2
  92. package/dist/processLiveness-umpNgsPR.cjs.map +1 -0
  93. package/dist/{src/constants/promptGuidelines.d.cts → promptGuidelines-DaxWrqud.d.mts} +3 -2
  94. package/dist/promptGuidelines-DaxWrqud.d.mts.map +1 -0
  95. package/dist/{src/constants/promptGuidelines.mjs → promptGuidelines-g4QT8GNM.mjs} +2 -2
  96. package/dist/promptGuidelines-g4QT8GNM.mjs.map +1 -0
  97. package/dist/{src/constants/promptGuidelines.cjs → promptGuidelines-j_SZTzlH.cjs} +7 -2
  98. package/dist/promptGuidelines-j_SZTzlH.cjs.map +1 -0
  99. package/dist/{src/services/reconcile/index.mjs → reconcile-BcD-hTbd.mjs} +4 -4
  100. package/dist/reconcile-BcD-hTbd.mjs.map +1 -0
  101. package/dist/{src/services/reconcile/index.cjs → reconcile-cRL0NjDr.cjs} +22 -7
  102. package/dist/reconcile-cRL0NjDr.cjs.map +1 -0
  103. package/dist/{src/services/reducer/index.mjs → reducer-BEfJFM5L.mjs} +5 -5
  104. package/dist/reducer-BEfJFM5L.mjs.map +1 -0
  105. package/dist/{src/services/reducer/index.cjs → reducer-BV0YIZ2o.cjs} +41 -11
  106. package/dist/reducer-BV0YIZ2o.cjs.map +1 -0
  107. package/dist/root.cli-BfEKqt8s.d.mts +56 -0
  108. package/dist/root.cli-BfEKqt8s.d.mts.map +1 -0
  109. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs → selectors-BaS6dObz.mjs} +3 -3
  110. package/dist/selectors-BaS6dObz.mjs.map +1 -0
  111. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts → selectors-DPDPPjH3.d.mts} +15 -14
  112. package/dist/selectors-DPDPPjH3.d.mts.map +1 -0
  113. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs → selectors-b-69vb4W.cjs} +52 -12
  114. package/dist/selectors-b-69vb4W.cjs.map +1 -0
  115. package/dist/storeInvariants.cjs +5 -0
  116. package/dist/{src/services/invariants/index.d.cts → storeInvariants.d.mts} +2 -2
  117. package/dist/storeInvariants.d.mts.map +1 -0
  118. package/dist/storeInvariants.mjs +2 -0
  119. package/dist/storePaths.cjs +14 -0
  120. package/dist/storePaths.d.mts +2 -0
  121. package/dist/storePaths.mjs +2 -0
  122. package/dist/storeProcessLiveness.cjs +3 -0
  123. package/dist/{src/services/processLiveness/index.d.mts → storeProcessLiveness.d.mts} +1 -1
  124. package/dist/storeProcessLiveness.d.mts.map +1 -0
  125. package/dist/storeProcessLiveness.mjs +2 -0
  126. package/dist/storeReconcile.cjs +5 -0
  127. package/dist/storeReconcile.d.mts +2 -0
  128. package/dist/storeReconcile.mjs +2 -0
  129. package/dist/storeReducer.cjs +8 -0
  130. package/dist/storeReducer.d.mts +2 -0
  131. package/dist/storeReducer.mjs +2 -0
  132. package/dist/{store-task-graph.cjs → storeTaskGraph.cjs} +1 -1
  133. package/dist/storeTaskGraph.d.mts +2 -0
  134. package/dist/storeTaskGraph.mjs +2 -0
  135. package/dist/storeTaskStore.cjs +3 -0
  136. package/dist/storeTaskStore.d.mts +2 -0
  137. package/dist/storeTaskStore.mjs +2 -0
  138. package/dist/{store-types.cjs → storeTypes.cjs} +1 -1
  139. package/dist/storeTypes.d.mts +2 -0
  140. package/dist/storeTypes.mjs +2 -0
  141. package/dist/{src/constants/task.mjs → task-B4aF5J9s.mjs} +2 -2
  142. package/dist/task-B4aF5J9s.mjs.map +1 -0
  143. package/dist/{src/models/task.cjs → task-CXF9VULl.cjs} +25 -5
  144. package/dist/task-CXF9VULl.cjs.map +1 -0
  145. package/dist/task-CkFjC3Fo.d.mts +5 -0
  146. package/dist/task-CkFjC3Fo.d.mts.map +1 -0
  147. package/dist/{src/schemas/task.d.cts → task-DHSvdK6E.d.mts} +19 -20
  148. package/dist/task-DHSvdK6E.d.mts.map +1 -0
  149. package/dist/{src/schemas/task.mjs → task-DKHKuems.mjs} +3 -4
  150. package/dist/task-DKHKuems.mjs.map +1 -0
  151. package/dist/task-DaagqdPK.cjs +11 -0
  152. package/dist/task-DaagqdPK.cjs.map +1 -0
  153. package/dist/{src/schemas/task.cjs → task-Dqy88_rr.cjs} +80 -17
  154. package/dist/task-Dqy88_rr.cjs.map +1 -0
  155. package/dist/{src/models/task.mjs → task-giCbpKzV.mjs} +2 -2
  156. package/dist/task-giCbpKzV.mjs.map +1 -0
  157. package/dist/{src/models/task.d.mts → task-hLh4BOO7.d.mts} +21 -20
  158. package/dist/task-hLh4BOO7.d.mts.map +1 -0
  159. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs → task-space.cli-BdDqn-_h.cjs} +33 -19
  160. package/dist/task-space.cli-BdDqn-_h.cjs.map +1 -0
  161. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs → task-space.cli-DowNll0k.mjs} +9 -9
  162. package/dist/task-space.cli-DowNll0k.mjs.map +1 -0
  163. package/dist/{src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs → task.cli-BM34E7GG.mjs} +10 -10
  164. package/dist/task.cli-BM34E7GG.mjs.map +1 -0
  165. package/dist/{src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs → task.cli-CiTkjUaX.cjs} +37 -23
  166. package/dist/task.cli-CiTkjUaX.cjs.map +1 -0
  167. package/dist/{src/models/taskGraph.mjs → taskGraph-BOQvT0-M.mjs} +2 -2
  168. package/dist/taskGraph-BOQvT0-M.mjs.map +1 -0
  169. package/dist/{src/models/taskGraph.cjs → taskGraph-BskRslrr.cjs} +31 -6
  170. package/dist/taskGraph-BskRslrr.cjs.map +1 -0
  171. package/dist/{src/models/taskGraph.d.mts → taskGraph-YQXCfXTn.d.mts} +8 -7
  172. package/dist/taskGraph-YQXCfXTn.d.mts.map +1 -0
  173. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs → taskOverlay-BKiu4cVj.cjs} +19 -9
  174. package/dist/taskOverlay-BKiu4cVj.cjs.map +1 -0
  175. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs → taskOverlay-DVvLdTtf.mjs} +5 -5
  176. package/dist/taskOverlay-DVvLdTtf.mjs.map +1 -0
  177. package/dist/{src/services/taskResult/index.cjs → taskResult-D2G7b4w-.cjs} +62 -12
  178. package/dist/taskResult-D2G7b4w-.cjs.map +1 -0
  179. package/dist/{src/services/taskResult/index.mjs → taskResult-edBAAKSH.mjs} +3 -3
  180. package/dist/taskResult-edBAAKSH.mjs.map +1 -0
  181. package/dist/{src/services/taskStore/index.mjs → taskStore-CFx12KJk.mjs} +8 -8
  182. package/dist/taskStore-CFx12KJk.mjs.map +1 -0
  183. package/dist/{src/services/taskStore/index.cjs → taskStore-T1pPy-UJ.cjs} +21 -17
  184. package/dist/{src/services/taskStore/index.mjs.map → taskStore-T1pPy-UJ.cjs.map} +1 -1
  185. package/dist/{src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs → tasks.cli-8VvuN9YQ.cjs} +15 -5
  186. package/dist/tasks.cli-8VvuN9YQ.cjs.map +1 -0
  187. package/dist/{src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs → tasks.cli-BZj83YD_.mjs} +4 -4
  188. package/dist/tasks.cli-BZj83YD_.mjs.map +1 -0
  189. package/dist/{src/types/telemetry.d.mts → telemetry-DOyZLj8E.d.mts} +8 -7
  190. package/dist/telemetry-DOyZLj8E.d.mts.map +1 -0
  191. package/dist/{src/types/telemetry.cjs → telemetry-I4md7Xzz.cjs} +7 -2
  192. package/dist/telemetry-I4md7Xzz.cjs.map +1 -0
  193. package/dist/{src/types/telemetry.mjs → telemetry-PmX_1Y8a.mjs} +2 -2
  194. package/dist/telemetry-PmX_1Y8a.mjs.map +1 -0
  195. package/dist/{tool-prompt-guidelines.cjs → toolPromptGuidelines.cjs} +1 -1
  196. package/dist/toolPromptGuidelines.d.mts +2 -0
  197. package/dist/toolPromptGuidelines.mjs +2 -0
  198. package/dist/toolResponseEnvelope.cjs +12 -0
  199. package/dist/toolResponseEnvelope.d.mts +2 -0
  200. package/dist/toolResponseEnvelope.mjs +2 -0
  201. package/dist/{tool-schema.cjs → toolSchema.cjs} +2 -2
  202. package/dist/toolSchema.d.mts +3 -0
  203. package/dist/toolSchema.mjs +3 -0
  204. package/dist/{tool-task-tool.cjs → toolTaskTool.cjs} +2 -2
  205. package/dist/toolTaskTool.d.mts +3 -0
  206. package/dist/toolTaskTool.mjs +3 -0
  207. package/dist/{tui-format.cjs → tuiFormat.cjs} +1 -1
  208. package/dist/{src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts → tuiFormat.d.mts} +4 -4
  209. package/dist/tuiFormat.d.mts.map +1 -0
  210. package/dist/tuiFormat.mjs +2 -0
  211. package/dist/{tui-selectors.cjs → tuiSelectors.cjs} +1 -1
  212. package/dist/tuiSelectors.d.mts +2 -0
  213. package/dist/tuiSelectors.mjs +2 -0
  214. package/dist/{tui-task-overlay.cjs → tuiTaskOverlay.cjs} +1 -1
  215. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts → tuiTaskOverlay.d.mts} +3 -3
  216. package/dist/tuiTaskOverlay.d.mts.map +1 -0
  217. package/dist/tuiTaskOverlay.mjs +2 -0
  218. package/dist/{tui-task-space.cjs → tuiTaskSpace.cjs} +2 -2
  219. package/dist/{src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts → tuiTaskSpace.d.mts} +3 -4
  220. package/dist/tuiTaskSpace.d.mts.map +1 -0
  221. package/dist/tuiTaskSpace.mjs +2 -0
  222. package/package.json +95 -94
  223. package/dist/_virtual/_rolldown/runtime.cjs +0 -23
  224. package/dist/api-contracts.cjs +0 -7
  225. package/dist/api-contracts.d.cts +0 -2
  226. package/dist/api-contracts.d.mts +0 -2
  227. package/dist/api-contracts.mjs +0 -2
  228. package/dist/commands.d.cts +0 -2
  229. package/dist/config.d.cts +0 -2
  230. package/dist/delegation-manager.cjs +0 -10
  231. package/dist/delegation-manager.d.cts +0 -3
  232. package/dist/delegation-manager.d.mts +0 -3
  233. package/dist/delegation-manager.mjs +0 -3
  234. package/dist/extensions/mcp.d.cts +0 -5
  235. package/dist/extensions/mcp.d.cts.map +0 -1
  236. package/dist/extensions/pi.d.cts +0 -5
  237. package/dist/extensions/pi.d.cts.map +0 -1
  238. package/dist/extensions/server.d.cts +0 -5
  239. package/dist/extensions/server.d.cts.map +0 -1
  240. package/dist/index.d.cts +0 -16
  241. package/dist/logSinkTelemetry.d.cts +0 -3
  242. package/dist/src/constants/promptGuidelines.cjs.map +0 -1
  243. package/dist/src/constants/promptGuidelines.d.cts.map +0 -1
  244. package/dist/src/constants/promptGuidelines.d.mts +0 -13
  245. package/dist/src/constants/promptGuidelines.d.mts.map +0 -1
  246. package/dist/src/constants/promptGuidelines.mjs.map +0 -1
  247. package/dist/src/constants/task.cjs +0 -6
  248. package/dist/src/constants/task.cjs.map +0 -1
  249. package/dist/src/constants/task.d.cts +0 -4
  250. package/dist/src/constants/task.d.cts.map +0 -1
  251. package/dist/src/constants/task.d.mts +0 -4
  252. package/dist/src/constants/task.d.mts.map +0 -1
  253. package/dist/src/constants/task.mjs.map +0 -1
  254. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs +0 -90
  255. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs.map +0 -1
  256. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs +0 -89
  257. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs.map +0 -1
  258. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs +0 -7
  259. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs.map +0 -1
  260. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs +0 -8
  261. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs.map +0 -1
  262. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs +0 -317
  263. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs.map +0 -1
  264. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts +0 -39
  265. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts.map +0 -1
  266. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts +0 -39
  267. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts.map +0 -1
  268. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs +0 -317
  269. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs.map +0 -1
  270. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs +0 -95
  271. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs.map +0 -1
  272. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs +0 -95
  273. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs.map +0 -1
  274. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs.map +0 -1
  275. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts +0 -20
  276. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts.map +0 -1
  277. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts +0 -20
  278. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts.map +0 -1
  279. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs.map +0 -1
  280. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs +0 -19
  281. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs.map +0 -1
  282. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs +0 -19
  283. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs.map +0 -1
  284. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs +0 -8
  285. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs.map +0 -1
  286. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs +0 -9
  287. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs.map +0 -1
  288. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs +0 -7
  289. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs.map +0 -1
  290. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs +0 -8
  291. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs.map +0 -1
  292. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs +0 -6
  293. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs.map +0 -1
  294. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs +0 -6
  295. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs.map +0 -1
  296. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs +0 -6
  297. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs.map +0 -1
  298. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs +0 -6
  299. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs.map +0 -1
  300. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs +0 -6
  301. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs.map +0 -1
  302. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs +0 -6
  303. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs.map +0 -1
  304. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs +0 -6
  305. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs.map +0 -1
  306. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs +0 -6
  307. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs.map +0 -1
  308. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs +0 -7
  309. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs.map +0 -1
  310. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs +0 -8
  311. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs.map +0 -1
  312. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +0 -7
  313. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +0 -1
  314. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +0 -8
  315. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +0 -1
  316. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs +0 -7
  317. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs.map +0 -1
  318. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs +0 -8
  319. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs.map +0 -1
  320. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs +0 -7
  321. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs.map +0 -1
  322. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs +0 -8
  323. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs.map +0 -1
  324. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs +0 -20
  325. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs.map +0 -1
  326. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs +0 -20
  327. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs.map +0 -1
  328. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs +0 -7
  329. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs.map +0 -1
  330. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs +0 -8
  331. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs.map +0 -1
  332. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +0 -11
  333. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +0 -1
  334. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +0 -12
  335. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +0 -1
  336. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +0 -7
  337. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +0 -1
  338. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +0 -8
  339. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +0 -1
  340. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs.map +0 -1
  341. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts +0 -25
  342. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts.map +0 -1
  343. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts +0 -25
  344. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts.map +0 -1
  345. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs.map +0 -1
  346. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs +0 -7
  347. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs.map +0 -1
  348. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs +0 -8
  349. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs.map +0 -1
  350. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs +0 -7
  351. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs.map +0 -1
  352. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs +0 -8
  353. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs.map +0 -1
  354. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs +0 -7
  355. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs.map +0 -1
  356. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs +0 -8
  357. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs.map +0 -1
  358. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs.map +0 -1
  359. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts.map +0 -1
  360. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts +0 -61
  361. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts.map +0 -1
  362. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs.map +0 -1
  363. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs +0 -9
  364. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs.map +0 -1
  365. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs +0 -9
  366. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs.map +0 -1
  367. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs.map +0 -1
  368. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts +0 -59
  369. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts.map +0 -1
  370. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts.map +0 -1
  371. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs.map +0 -1
  372. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs.map +0 -1
  373. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts +0 -61
  374. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts.map +0 -1
  375. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts.map +0 -1
  376. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs.map +0 -1
  377. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs.map +0 -1
  378. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts.map +0 -1
  379. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts +0 -39
  380. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts.map +0 -1
  381. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs.map +0 -1
  382. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs +0 -13
  383. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs.map +0 -1
  384. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs +0 -13
  385. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs.map +0 -1
  386. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs +0 -7
  387. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs.map +0 -1
  388. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs +0 -8
  389. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs.map +0 -1
  390. package/dist/src/models/task.cjs.map +0 -1
  391. package/dist/src/models/task.d.cts +0 -186
  392. package/dist/src/models/task.d.cts.map +0 -1
  393. package/dist/src/models/task.d.mts.map +0 -1
  394. package/dist/src/models/task.mjs.map +0 -1
  395. package/dist/src/models/taskGraph.cjs.map +0 -1
  396. package/dist/src/models/taskGraph.d.cts +0 -24
  397. package/dist/src/models/taskGraph.d.cts.map +0 -1
  398. package/dist/src/models/taskGraph.d.mts.map +0 -1
  399. package/dist/src/models/taskGraph.mjs.map +0 -1
  400. package/dist/src/schemas/apiContracts.cjs.map +0 -1
  401. package/dist/src/schemas/apiContracts.d.cts +0 -53
  402. package/dist/src/schemas/apiContracts.d.cts.map +0 -1
  403. package/dist/src/schemas/apiContracts.mjs.map +0 -1
  404. package/dist/src/schemas/task.cjs.map +0 -1
  405. package/dist/src/schemas/task.d.cts.map +0 -1
  406. package/dist/src/schemas/task.d.mts +0 -103
  407. package/dist/src/schemas/task.d.mts.map +0 -1
  408. package/dist/src/schemas/task.mjs.map +0 -1
  409. package/dist/src/services/config/index.cjs.map +0 -1
  410. package/dist/src/services/config/index.d.cts +0 -42
  411. package/dist/src/services/config/index.d.cts.map +0 -1
  412. package/dist/src/services/config/index.d.mts +0 -42
  413. package/dist/src/services/config/index.d.mts.map +0 -1
  414. package/dist/src/services/config/index.mjs.map +0 -1
  415. package/dist/src/services/contextContribution/index.cjs.map +0 -1
  416. package/dist/src/services/contextContribution/index.mjs.map +0 -1
  417. package/dist/src/services/delegation/index.cjs.map +0 -1
  418. package/dist/src/services/delegation/index.d.cts.map +0 -1
  419. package/dist/src/services/delegation/index.d.mts +0 -192
  420. package/dist/src/services/delegation/index.d.mts.map +0 -1
  421. package/dist/src/services/delegation/index.mjs.map +0 -1
  422. package/dist/src/services/delegationPlatform/index.cjs +0 -23
  423. package/dist/src/services/delegationPlatform/index.cjs.map +0 -1
  424. package/dist/src/services/delegationPlatform/index.mjs +0 -21
  425. package/dist/src/services/delegationPlatform/index.mjs.map +0 -1
  426. package/dist/src/services/invariants/index.cjs.map +0 -1
  427. package/dist/src/services/invariants/index.d.cts.map +0 -1
  428. package/dist/src/services/invariants/index.d.mts +0 -23
  429. package/dist/src/services/invariants/index.d.mts.map +0 -1
  430. package/dist/src/services/invariants/index.mjs.map +0 -1
  431. package/dist/src/services/logSinkTelemetry/index.cjs.map +0 -1
  432. package/dist/src/services/logSinkTelemetry/index.d.cts +0 -23
  433. package/dist/src/services/logSinkTelemetry/index.d.cts.map +0 -1
  434. package/dist/src/services/logSinkTelemetry/index.d.mts +0 -23
  435. package/dist/src/services/logSinkTelemetry/index.d.mts.map +0 -1
  436. package/dist/src/services/logSinkTelemetry/index.mjs.map +0 -1
  437. package/dist/src/services/paths/index.cjs.map +0 -1
  438. package/dist/src/services/paths/index.d.cts +0 -25
  439. package/dist/src/services/paths/index.d.cts.map +0 -1
  440. package/dist/src/services/paths/index.d.mts +0 -25
  441. package/dist/src/services/paths/index.d.mts.map +0 -1
  442. package/dist/src/services/paths/index.mjs.map +0 -1
  443. package/dist/src/services/processLiveness/index.cjs.map +0 -1
  444. package/dist/src/services/processLiveness/index.d.cts +0 -11
  445. package/dist/src/services/processLiveness/index.d.cts.map +0 -1
  446. package/dist/src/services/processLiveness/index.d.mts.map +0 -1
  447. package/dist/src/services/processLiveness/index.mjs.map +0 -1
  448. package/dist/src/services/reconcile/index.cjs.map +0 -1
  449. package/dist/src/services/reconcile/index.d.cts.map +0 -1
  450. package/dist/src/services/reconcile/index.d.mts +0 -33
  451. package/dist/src/services/reconcile/index.d.mts.map +0 -1
  452. package/dist/src/services/reconcile/index.mjs.map +0 -1
  453. package/dist/src/services/reducer/index.cjs.map +0 -1
  454. package/dist/src/services/reducer/index.d.cts.map +0 -1
  455. package/dist/src/services/reducer/index.d.mts +0 -71
  456. package/dist/src/services/reducer/index.d.mts.map +0 -1
  457. package/dist/src/services/reducer/index.mjs.map +0 -1
  458. package/dist/src/services/taskNarration/index.cjs +0 -32
  459. package/dist/src/services/taskNarration/index.cjs.map +0 -1
  460. package/dist/src/services/taskNarration/index.mjs +0 -32
  461. package/dist/src/services/taskNarration/index.mjs.map +0 -1
  462. package/dist/src/services/taskResult/index.cjs.map +0 -1
  463. package/dist/src/services/taskResult/index.d.cts +0 -50
  464. package/dist/src/services/taskResult/index.d.cts.map +0 -1
  465. package/dist/src/services/taskResult/index.d.mts +0 -50
  466. package/dist/src/services/taskResult/index.d.mts.map +0 -1
  467. package/dist/src/services/taskResult/index.mjs.map +0 -1
  468. package/dist/src/services/taskStore/index.cjs.map +0 -1
  469. package/dist/src/services/taskStore/index.d.cts.map +0 -1
  470. package/dist/src/services/taskStore/index.d.mts +0 -69
  471. package/dist/src/services/taskStore/index.d.mts.map +0 -1
  472. package/dist/src/services/taskTool/index.cjs +0 -106
  473. package/dist/src/services/taskTool/index.cjs.map +0 -1
  474. package/dist/src/services/taskTool/index.mjs +0 -105
  475. package/dist/src/services/taskTool/index.mjs.map +0 -1
  476. package/dist/src/types/delegation.cjs +0 -7
  477. package/dist/src/types/delegation.cjs.map +0 -1
  478. package/dist/src/types/delegation.d.cts +0 -5
  479. package/dist/src/types/delegation.d.cts.map +0 -1
  480. package/dist/src/types/delegation.d.mts +0 -5
  481. package/dist/src/types/delegation.d.mts.map +0 -1
  482. package/dist/src/types/delegation.mjs.map +0 -1
  483. package/dist/src/types/telemetry.cjs.map +0 -1
  484. package/dist/src/types/telemetry.d.cts +0 -35
  485. package/dist/src/types/telemetry.d.cts.map +0 -1
  486. package/dist/src/types/telemetry.d.mts.map +0 -1
  487. package/dist/src/types/telemetry.mjs.map +0 -1
  488. package/dist/src/types/webTasks.cjs +0 -7
  489. package/dist/src/types/webTasks.cjs.map +0 -1
  490. package/dist/src/types/webTasks.mjs +0 -7
  491. package/dist/src/types/webTasks.mjs.map +0 -1
  492. package/dist/store-invariants.cjs +0 -5
  493. package/dist/store-invariants.d.cts +0 -2
  494. package/dist/store-invariants.d.mts +0 -2
  495. package/dist/store-invariants.mjs +0 -2
  496. package/dist/store-paths.cjs +0 -14
  497. package/dist/store-paths.d.cts +0 -2
  498. package/dist/store-paths.d.mts +0 -2
  499. package/dist/store-paths.mjs +0 -2
  500. package/dist/store-process-liveness.cjs +0 -3
  501. package/dist/store-process-liveness.d.cts +0 -2
  502. package/dist/store-process-liveness.d.mts +0 -2
  503. package/dist/store-process-liveness.mjs +0 -2
  504. package/dist/store-reconcile.cjs +0 -5
  505. package/dist/store-reconcile.d.cts +0 -2
  506. package/dist/store-reconcile.d.mts +0 -2
  507. package/dist/store-reconcile.mjs +0 -2
  508. package/dist/store-reducer.cjs +0 -8
  509. package/dist/store-reducer.d.cts +0 -2
  510. package/dist/store-reducer.d.mts +0 -2
  511. package/dist/store-reducer.mjs +0 -2
  512. package/dist/store-task-graph.d.cts +0 -2
  513. package/dist/store-task-graph.d.mts +0 -2
  514. package/dist/store-task-graph.mjs +0 -2
  515. package/dist/store-task-store.cjs +0 -3
  516. package/dist/store-task-store.d.cts +0 -2
  517. package/dist/store-task-store.d.mts +0 -2
  518. package/dist/store-task-store.mjs +0 -2
  519. package/dist/store-types.d.cts +0 -2
  520. package/dist/store-types.d.mts +0 -2
  521. package/dist/store-types.mjs +0 -2
  522. package/dist/tool-prompt-guidelines.d.cts +0 -2
  523. package/dist/tool-prompt-guidelines.d.mts +0 -2
  524. package/dist/tool-prompt-guidelines.mjs +0 -2
  525. package/dist/tool-response-envelope.cjs +0 -12
  526. package/dist/tool-response-envelope.d.cts +0 -2
  527. package/dist/tool-response-envelope.d.mts +0 -2
  528. package/dist/tool-response-envelope.mjs +0 -2
  529. package/dist/tool-schema.d.cts +0 -3
  530. package/dist/tool-schema.d.mts +0 -3
  531. package/dist/tool-schema.mjs +0 -3
  532. package/dist/tool-task-tool.d.cts +0 -3
  533. package/dist/tool-task-tool.d.mts +0 -3
  534. package/dist/tool-task-tool.mjs +0 -3
  535. package/dist/tui-format.d.cts +0 -2
  536. package/dist/tui-format.d.mts +0 -2
  537. package/dist/tui-format.mjs +0 -2
  538. package/dist/tui-selectors.d.cts +0 -2
  539. package/dist/tui-selectors.d.mts +0 -2
  540. package/dist/tui-selectors.mjs +0 -2
  541. package/dist/tui-task-overlay.d.cts +0 -2
  542. package/dist/tui-task-overlay.d.mts +0 -2
  543. package/dist/tui-task-overlay.mjs +0 -2
  544. package/dist/tui-task-space.d.cts +0 -2
  545. package/dist/tui-task-space.d.mts +0 -2
  546. package/dist/tui-task-space.mjs +0 -2
  547. /package/dist/{src/schemas/apiContracts.d.mts → apiContracts.d.mts} +0 -0
@@ -1,12 +1,33 @@
1
- const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
2
- let node_path = require("node:path");
3
- node_path = require_runtime.__toESM(node_path, 1);
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
4
23
  let node_child_process = require("node:child_process");
5
24
  let node_fs = require("node:fs");
6
- node_fs = require_runtime.__toESM(node_fs, 1);
25
+ node_fs = __toESM(node_fs, 1);
7
26
  let node_os = require("node:os");
8
- node_os = require_runtime.__toESM(node_os, 1);
9
- let _agimon_ai_doompi_core_child_process = require("@agimon-ai/doompi-core/child-process");
27
+ node_os = __toESM(node_os, 1);
28
+ let node_path = require("node:path");
29
+ node_path = __toESM(node_path, 1);
30
+ let _agimon_ai_doompi_core_childProcess = require("@agimon-ai/doompi-core/childProcess");
10
31
  //#region src/services/paths/index.ts
11
32
  const STORE_PATH_ENV = "DOOM_TASK_STORE";
12
33
  const STORE_DIR_NAME = "doom-task";
@@ -61,9 +82,9 @@ function isWithin(root, candidate) {
61
82
  }
62
83
  /** Resolve the tree root without relying on extension startup order. */
63
84
  function resolveSessionKey(rootSessionId, env = process.env) {
64
- if (!env[_agimon_ai_doompi_core_child_process.SUBAGENT_CHILD_ENV]) return rootSessionId;
65
- const parentSessionId = env[_agimon_ai_doompi_core_child_process.SUBAGENT_PARENT_SESSION_ENV]?.trim();
66
- if (!parentSessionId) throw new Error(`${_agimon_ai_doompi_core_child_process.SUBAGENT_PARENT_SESSION_ENV} is required in a subagent child`);
85
+ if (!env[_agimon_ai_doompi_core_childProcess.SUBAGENT_CHILD_ENV]) return rootSessionId;
86
+ const parentSessionId = env[_agimon_ai_doompi_core_childProcess.SUBAGENT_PARENT_SESSION_ENV]?.trim();
87
+ if (!parentSessionId) throw new Error(`${_agimon_ai_doompi_core_childProcess.SUBAGENT_PARENT_SESSION_ENV} is required in a subagent child`);
67
88
  return parentSessionId;
68
89
  }
69
90
  /** Resolve one root session tree to a task document under the Pi agent directory. */
@@ -217,17 +238,83 @@ function tempPathFor(storePath, pid = process.pid) {
217
238
  return `${storePath}.tmp.${pid}`;
218
239
  }
219
240
  //#endregion
220
- exports.STORE_PATH_ENV = STORE_PATH_ENV;
221
- exports.hasStorePathOverride = hasStorePathOverride;
222
- exports.lockPathFor = lockPathFor;
223
- exports.removeLegacyStoreDirectory = removeLegacyStoreDirectory;
224
- exports.removeLegacyStoreDirectoryAsync = removeLegacyStoreDirectoryAsync;
225
- exports.resolveLegacyStoreDirectory = resolveLegacyStoreDirectory;
226
- exports.resolveLegacyStoreDirectoryAsync = resolveLegacyStoreDirectoryAsync;
227
- exports.resolveSessionKey = resolveSessionKey;
228
- exports.resolveStorePath = resolveStorePath;
229
- exports.sweepStoreFiles = sweepStoreFiles;
230
- exports.sweepStoreFilesAsync = sweepStoreFilesAsync;
231
- exports.tempPathFor = tempPathFor;
241
+ Object.defineProperty(exports, "STORE_PATH_ENV", {
242
+ enumerable: true,
243
+ get: function() {
244
+ return STORE_PATH_ENV;
245
+ }
246
+ });
247
+ Object.defineProperty(exports, "__toESM", {
248
+ enumerable: true,
249
+ get: function() {
250
+ return __toESM;
251
+ }
252
+ });
253
+ Object.defineProperty(exports, "hasStorePathOverride", {
254
+ enumerable: true,
255
+ get: function() {
256
+ return hasStorePathOverride;
257
+ }
258
+ });
259
+ Object.defineProperty(exports, "lockPathFor", {
260
+ enumerable: true,
261
+ get: function() {
262
+ return lockPathFor;
263
+ }
264
+ });
265
+ Object.defineProperty(exports, "removeLegacyStoreDirectory", {
266
+ enumerable: true,
267
+ get: function() {
268
+ return removeLegacyStoreDirectory;
269
+ }
270
+ });
271
+ Object.defineProperty(exports, "removeLegacyStoreDirectoryAsync", {
272
+ enumerable: true,
273
+ get: function() {
274
+ return removeLegacyStoreDirectoryAsync;
275
+ }
276
+ });
277
+ Object.defineProperty(exports, "resolveLegacyStoreDirectory", {
278
+ enumerable: true,
279
+ get: function() {
280
+ return resolveLegacyStoreDirectory;
281
+ }
282
+ });
283
+ Object.defineProperty(exports, "resolveLegacyStoreDirectoryAsync", {
284
+ enumerable: true,
285
+ get: function() {
286
+ return resolveLegacyStoreDirectoryAsync;
287
+ }
288
+ });
289
+ Object.defineProperty(exports, "resolveSessionKey", {
290
+ enumerable: true,
291
+ get: function() {
292
+ return resolveSessionKey;
293
+ }
294
+ });
295
+ Object.defineProperty(exports, "resolveStorePath", {
296
+ enumerable: true,
297
+ get: function() {
298
+ return resolveStorePath;
299
+ }
300
+ });
301
+ Object.defineProperty(exports, "sweepStoreFiles", {
302
+ enumerable: true,
303
+ get: function() {
304
+ return sweepStoreFiles;
305
+ }
306
+ });
307
+ Object.defineProperty(exports, "sweepStoreFilesAsync", {
308
+ enumerable: true,
309
+ get: function() {
310
+ return sweepStoreFilesAsync;
311
+ }
312
+ });
313
+ Object.defineProperty(exports, "tempPathFor", {
314
+ enumerable: true,
315
+ get: function() {
316
+ return tempPathFor;
317
+ }
318
+ });
232
319
 
233
- //# sourceMappingURL=index.cjs.map
320
+ //# sourceMappingURL=paths-BsFVRulr.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths-BsFVRulr.cjs","names":["execFileSync","os","path","SUBAGENT_CHILD_ENV","SUBAGENT_PARENT_SESSION_ENV","fs"],"sources":["../src/services/paths/index.ts"],"sourcesContent":["import { execFile, execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { SUBAGENT_CHILD_ENV, SUBAGENT_PARENT_SESSION_ENV } from '@agimon-ai/doompi-core/childProcess';\n\nexport const STORE_PATH_ENV = 'DOOM_TASK_STORE';\n\nconst STORE_DIR_NAME = 'doom-task';\nconst STORE_FILE_NAME = 'tasks.json';\nconst DEFAULT_CONFIG_DIR_NAME = '.pi';\nconst AGENT_DIR_NAME = 'agent';\nconst PI_CODING_AGENT_DIR_ENV = 'PI_CODING_AGENT_DIR';\nconst HOME_ALIAS = '~';\nconst HOME_ALIAS_PREFIX = '~/';\nconst FILE_ENCODING = 'utf8';\nconst NOT_FOUND_ERROR_CODE = 'ENOENT';\n\nfunction git(args: string[], cwd: string): string | undefined {\n try {\n const output = execFileSync('git', args, {\n cwd,\n encoding: FILE_ENCODING,\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n const trimmed = output.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function gitAsync(args: string[], cwd: string): Promise<string | undefined> {\n return new Promise((resolve) => {\n execFile('git', args, { cwd, encoding: FILE_ENCODING }, (error, stdout) => {\n if (error) {\n resolve(undefined);\n return;\n }\n const trimmed = stdout.trim();\n resolve(trimmed.length > 0 ? trimmed : undefined);\n });\n });\n}\n\nfunction resolveAgentDirectory(env: Readonly<Record<string, string | undefined>>): string {\n const configured = env[PI_CODING_AGENT_DIR_ENV]?.trim();\n if (configured === HOME_ALIAS) return os.homedir();\n if (configured?.startsWith(HOME_ALIAS_PREFIX)) {\n return path.join(os.homedir(), configured.slice(HOME_ALIAS_PREFIX.length));\n }\n return configured ? path.resolve(configured) : path.join(os.homedir(), DEFAULT_CONFIG_DIR_NAME, AGENT_DIR_NAME);\n}\n\nfunction isWithin(root: string, candidate: string): boolean {\n const relative = path.relative(path.resolve(root), path.resolve(candidate));\n return relative === '' || (!relative.startsWith('..') && !path.isAbsolute(relative));\n}\n\n/** Resolve the tree root without relying on extension startup order. */\nexport function resolveSessionKey(\n rootSessionId: string,\n env: Readonly<Record<string, string | undefined>> = process.env,\n): string {\n if (!env[SUBAGENT_CHILD_ENV]) return rootSessionId;\n const parentSessionId = env[SUBAGENT_PARENT_SESSION_ENV]?.trim();\n if (!parentSessionId) throw new Error(`${SUBAGENT_PARENT_SESSION_ENV} is required in a subagent child`);\n return parentSessionId;\n}\n\n/** Resolve one root session tree to a task document under the Pi agent directory. */\nexport function resolveStorePath(\n _cwd: string = process.cwd(),\n env: Readonly<Record<string, string | undefined>> = process.env,\n sessionKey: string = 'standalone',\n): string {\n const override = env[STORE_PATH_ENV]?.trim();\n if (override) return path.resolve(override);\n\n const trimmedSessionKey = sessionKey.trim();\n if (!trimmedSessionKey) throw new Error('doom-task session id cannot be blank');\n return path.join(resolveAgentDirectory(env), STORE_DIR_NAME, trimmedSessionKey, STORE_FILE_NAME);\n}\n\n/** Whether a deliberate unscoped task-store override is active. */\nexport function hasStorePathOverride(env: Readonly<Record<string, string | undefined>> = process.env): boolean {\n return Boolean(env[STORE_PATH_ENV]?.trim());\n}\n\n/** Exact legacy Git-directory store, if the current working tree has one. */\nexport function resolveLegacyStoreDirectory(cwd: string = process.cwd()): string | undefined {\n const commonDirectory = git(['rev-parse', '--path-format=absolute', '--git-common-dir'], cwd);\n return commonDirectory ? path.join(commonDirectory, STORE_DIR_NAME) : undefined;\n}\n\nexport async function resolveLegacyStoreDirectoryAsync(cwd: string = process.cwd()): Promise<string | undefined> {\n const commonDirectory = await gitAsync(['rev-parse', '--path-format=absolute', '--git-common-dir'], cwd);\n return commonDirectory ? path.join(commonDirectory, STORE_DIR_NAME) : undefined;\n}\n\nexport interface StoreSweepResult {\n removed: string[];\n errors: string[];\n}\n\n/** Remove only the validated legacy Git store unless it contains the active override. */\nexport function removeLegacyStoreDirectory(currentStorePath: string, cwd: string = process.cwd()): StoreSweepResult {\n const result: StoreSweepResult = { removed: [], errors: [] };\n const target = resolveLegacyStoreDirectory(cwd);\n if (!target || path.basename(target) !== STORE_DIR_NAME || isWithin(target, currentStorePath)) return result;\n\n try {\n if (!fs.existsSync(target)) return result;\n fs.rmSync(target, { recursive: true, force: true });\n result.removed.push(target);\n } catch (error) {\n result.errors.push(`Could not remove legacy task store ${target}: ${String(error)}`);\n }\n return result;\n}\n\nexport async function removeLegacyStoreDirectoryAsync(\n currentStorePath: string,\n cwd: string = process.cwd(),\n): Promise<StoreSweepResult> {\n const result: StoreSweepResult = { removed: [], errors: [] };\n const target = await resolveLegacyStoreDirectoryAsync(cwd);\n if (!target || path.basename(target) !== STORE_DIR_NAME || isWithin(target, currentStorePath)) return result;\n\n try {\n await fs.promises.access(target);\n await fs.promises.rm(target, { recursive: true, force: true });\n result.removed.push(target);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== NOT_FOUND_ERROR_CODE) {\n result.errors.push(`Could not remove legacy task store ${target}: ${String(error)}`);\n }\n }\n return result;\n}\n\n/** Delete expired sibling session stores while preserving active or unreadable stores. */\nexport function sweepStoreFiles(currentStorePath: string, ttlMs: number, now: number = Date.now()): StoreSweepResult {\n const result: StoreSweepResult = { removed: [], errors: [] };\n const currentSessionDirectory = path.dirname(currentStorePath);\n const storeDirectory = path.dirname(currentSessionDirectory);\n let entries: string[];\n try {\n entries = fs.readdirSync(storeDirectory);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === NOT_FOUND_ERROR_CODE) return result;\n result.errors.push(`Could not read task store directory ${storeDirectory}: ${String(error)}`);\n return result;\n }\n\n for (const entry of entries) {\n const sessionDirectory = path.join(storeDirectory, entry);\n const candidate = path.join(sessionDirectory, STORE_FILE_NAME);\n if (sessionDirectory === currentSessionDirectory || !fs.existsSync(candidate)) continue;\n try {\n if (fs.existsSync(lockPathFor(candidate))) continue;\n JSON.parse(fs.readFileSync(candidate, FILE_ENCODING));\n if (now - fs.statSync(candidate).mtimeMs <= ttlMs) continue;\n fs.rmSync(sessionDirectory, { recursive: true, force: true });\n result.removed.push(sessionDirectory);\n } catch (error) {\n result.errors.push(`Could not sweep task store ${candidate}: ${String(error)}`);\n }\n }\n return result;\n}\n\nexport async function sweepStoreFilesAsync(\n currentStorePath: string,\n ttlMs: number,\n now: number = Date.now(),\n): Promise<StoreSweepResult> {\n const result: StoreSweepResult = { removed: [], errors: [] };\n const currentSessionDirectory = path.dirname(currentStorePath);\n const storeDirectory = path.dirname(currentSessionDirectory);\n let entries: string[];\n try {\n entries = await fs.promises.readdir(storeDirectory);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === NOT_FOUND_ERROR_CODE) return result;\n result.errors.push(`Could not read task store directory ${storeDirectory}: ${String(error)}`);\n return result;\n }\n\n for (const entry of entries) {\n const sessionDirectory = path.join(storeDirectory, entry);\n const candidate = path.join(sessionDirectory, STORE_FILE_NAME);\n if (sessionDirectory === currentSessionDirectory) continue;\n try {\n await fs.promises.access(candidate);\n try {\n await fs.promises.access(lockPathFor(candidate));\n continue;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== NOT_FOUND_ERROR_CODE) throw error;\n }\n JSON.parse(await fs.promises.readFile(candidate, FILE_ENCODING));\n if (now - (await fs.promises.stat(candidate)).mtimeMs <= ttlMs) continue;\n await fs.promises.rm(sessionDirectory, { recursive: true, force: true });\n result.removed.push(sessionDirectory);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === NOT_FOUND_ERROR_CODE) continue;\n result.errors.push(`Could not sweep task store ${candidate}: ${String(error)}`);\n }\n }\n return result;\n}\n\nexport function lockPathFor(storePath: string): string {\n return `${storePath}.lock`;\n}\n\nexport function tempPathFor(storePath: string, pid: number = process.pid): string {\n return `${storePath}.tmp.${pid}`;\n}\n"],"mappings":"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"}
@@ -15,6 +15,6 @@ function isProcessAlive(pid) {
15
15
  }
16
16
  }
17
17
  //#endregion
18
- export { isProcessAlive };
18
+ export { isProcessAlive as t };
19
19
 
20
- //# sourceMappingURL=index.mjs.map
20
+ //# sourceMappingURL=processLiveness-Ccd9wenT.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processLiveness-Ccd9wenT.mjs","names":[],"sources":["../src/services/processLiveness/index.ts"],"sourcesContent":["/**\n * Is a process still running?\n *\n * Signal 0 performs the permission and existence check without delivering a\n * signal. EPERM means the process exists but belongs to another user, which\n * still counts as alive.\n */\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return (error as NodeJS.ErrnoException).code === 'EPERM';\n }\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,eAAe,KAAsB;CACnD,IAAI;EACF,QAAQ,KAAK,KAAK,CAAC;EACnB,OAAO;CACT,SAAS,OAAO;EACd,OAAQ,MAAgC,SAAS;CACnD;AACF"}
@@ -15,6 +15,11 @@ function isProcessAlive(pid) {
15
15
  }
16
16
  }
17
17
  //#endregion
18
- exports.isProcessAlive = isProcessAlive;
18
+ Object.defineProperty(exports, "isProcessAlive", {
19
+ enumerable: true,
20
+ get: function() {
21
+ return isProcessAlive;
22
+ }
23
+ });
19
24
 
20
- //# sourceMappingURL=index.cjs.map
25
+ //# sourceMappingURL=processLiveness-umpNgsPR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processLiveness-umpNgsPR.cjs","names":[],"sources":["../src/services/processLiveness/index.ts"],"sourcesContent":["/**\n * Is a process still running?\n *\n * Signal 0 performs the permission and existence check without delivering a\n * signal. EPERM means the process exists but belongs to another user, which\n * still counts as alive.\n */\nexport function isProcessAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return (error as NodeJS.ErrnoException).code === 'EPERM';\n }\n}\n"],"mappings":";;;;;;;;AAOA,SAAgB,eAAe,KAAsB;CACnD,IAAI;EACF,QAAQ,KAAK,KAAK,CAAC;EACnB,OAAO;CACT,SAAS,OAAO;EACd,OAAQ,MAAgC,SAAS;CACnD;AACF"}
@@ -8,6 +8,7 @@
8
8
  * judgement belongs to the Team orchestrator prompt. What is left here is what
9
9
  * none of those three can carry: how calls should be sequenced across a turn.
10
10
  */
11
- export declare const DEFAULT_PROMPT_GUIDELINES: string[];
11
+ declare const DEFAULT_PROMPT_GUIDELINES: string[];
12
12
  //#endregion
13
- //# sourceMappingURL=promptGuidelines.d.cts.map
13
+ export { DEFAULT_PROMPT_GUIDELINES as t };
14
+ //# sourceMappingURL=promptGuidelines-DaxWrqud.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptGuidelines-DaxWrqud.d.mts","names":[],"sources":["../src/constants/promptGuidelines.ts"],"mappings":";;;;;;;;;;cASa"}
@@ -21,6 +21,6 @@ const DEFAULT_PROMPT_GUIDELINES = [
21
21
  "When a delegated task completes and unblocks another, reconsider it promptly. If a child asks for a decision or an assignment fails to start, respond, rescope or retry instead of leaving it pending. Doom Task records delegated lifecycle and results on the task itself."
22
22
  ];
23
23
  //#endregion
24
- export { DEFAULT_PROMPT_GUIDELINES };
24
+ export { DEFAULT_PROMPT_GUIDELINES as t };
25
25
 
26
- //# sourceMappingURL=promptGuidelines.mjs.map
26
+ //# sourceMappingURL=promptGuidelines-g4QT8GNM.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptGuidelines-g4QT8GNM.mjs","names":[],"sources":["../src/constants/promptGuidelines.ts"],"sourcesContent":["/**\n * Cross-call behaviour the schema cannot express.\n *\n * Every rule lives in exactly one surface. Argument-site mechanics belong to\n * the parameter descriptions in `schemas/task.ts`, the use/do-not-use policy\n * and session scoping belong to the tool description, and general delegation\n * judgement belongs to the Team orchestrator prompt. What is left here is what\n * none of those three can carry: how calls should be sequenced across a turn.\n */\nexport const DEFAULT_PROMPT_GUIDELINES: string[] = [\n 'Batch the whole plan in one upsert: {\"action\":\"upsert\",\"tasks\":[{\"subject\":\"Research the store\"},{\"subject\":\"Write the reducer\"}]}. Report progress one call at a time: mark a task in_progress before you start it and completed the moment it lands, never batched at the end of a turn. Keep one task in_progress for your own work; delegated tasks run in parallel and do not count.',\n 'Never mark a task completed while tests fail or the work is partial. Use failed, or keep it in_progress and add a task for the blocker in the same upsert.',\n 'When every non-deleted task is completed, review the list once and call {\"action\":\"clear\"}.',\n \"Status flow: pending, in_progress, completed. failed is recoverable, deleted is a tombstone. Pass activeForm (e.g. 'writing tests') when marking in_progress.\",\n 'upsert applies each entry independently: passing entries commit and failures are reported by array index. Resend only the corrected failures, because resending an applied entry with no id creates a duplicate task.',\n 'Apply the session delegation criteria before choosing what to delegate, then call subagent {\"action\":\"agents\"} and use an exact discovered name. Prefer a general-purpose write-capable agent such as delegate or worker when no specialist fits, and use a focused inlineAgent only for read-only work.',\n 'Assign through assignments[] even for a single task: {\"action\":\"assign\",\"assignments\":[{\"id\":1,\"agent\":\"researcher\"}]}. Put independent ready tasks in one batch rather than repeated calls or multi_tool, and do not start a direct subagent run for work already on the task list. Successful entries keep running when another entry fails, so retry only the failures.',\n 'Fill relevantFiles only with files you actually read or located, and priorFindings only with verified facts in a few lines, not directives. A guessed path costs more than an omitted one.',\n 'Subject stays short and imperative. description is the durable brief handed to the subagent, extended at assign time by instructions, relevantFiles and priorFindings, so do not repeat one in the other.',\n 'When a delegated task completes and unblocks another, reconsider it promptly. If a child asks for a decision or an assignment fails to start, respond, rescope or retry instead of leaving it pending. Doom Task records delegated lifecycle and results on the task itself.',\n];\n"],"mappings":";;;;;;;;;;AASA,MAAa,4BAAsC;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -21,6 +21,11 @@ const DEFAULT_PROMPT_GUIDELINES = [
21
21
  "When a delegated task completes and unblocks another, reconsider it promptly. If a child asks for a decision or an assignment fails to start, respond, rescope or retry instead of leaving it pending. Doom Task records delegated lifecycle and results on the task itself."
22
22
  ];
23
23
  //#endregion
24
- exports.DEFAULT_PROMPT_GUIDELINES = DEFAULT_PROMPT_GUIDELINES;
24
+ Object.defineProperty(exports, "DEFAULT_PROMPT_GUIDELINES", {
25
+ enumerable: true,
26
+ get: function() {
27
+ return DEFAULT_PROMPT_GUIDELINES;
28
+ }
29
+ });
25
30
 
26
- //# sourceMappingURL=promptGuidelines.cjs.map
31
+ //# sourceMappingURL=promptGuidelines-j_SZTzlH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptGuidelines-j_SZTzlH.cjs","names":[],"sources":["../src/constants/promptGuidelines.ts"],"sourcesContent":["/**\n * Cross-call behaviour the schema cannot express.\n *\n * Every rule lives in exactly one surface. Argument-site mechanics belong to\n * the parameter descriptions in `schemas/task.ts`, the use/do-not-use policy\n * and session scoping belong to the tool description, and general delegation\n * judgement belongs to the Team orchestrator prompt. What is left here is what\n * none of those three can carry: how calls should be sequenced across a turn.\n */\nexport const DEFAULT_PROMPT_GUIDELINES: string[] = [\n 'Batch the whole plan in one upsert: {\"action\":\"upsert\",\"tasks\":[{\"subject\":\"Research the store\"},{\"subject\":\"Write the reducer\"}]}. Report progress one call at a time: mark a task in_progress before you start it and completed the moment it lands, never batched at the end of a turn. Keep one task in_progress for your own work; delegated tasks run in parallel and do not count.',\n 'Never mark a task completed while tests fail or the work is partial. Use failed, or keep it in_progress and add a task for the blocker in the same upsert.',\n 'When every non-deleted task is completed, review the list once and call {\"action\":\"clear\"}.',\n \"Status flow: pending, in_progress, completed. failed is recoverable, deleted is a tombstone. Pass activeForm (e.g. 'writing tests') when marking in_progress.\",\n 'upsert applies each entry independently: passing entries commit and failures are reported by array index. Resend only the corrected failures, because resending an applied entry with no id creates a duplicate task.',\n 'Apply the session delegation criteria before choosing what to delegate, then call subagent {\"action\":\"agents\"} and use an exact discovered name. Prefer a general-purpose write-capable agent such as delegate or worker when no specialist fits, and use a focused inlineAgent only for read-only work.',\n 'Assign through assignments[] even for a single task: {\"action\":\"assign\",\"assignments\":[{\"id\":1,\"agent\":\"researcher\"}]}. Put independent ready tasks in one batch rather than repeated calls or multi_tool, and do not start a direct subagent run for work already on the task list. Successful entries keep running when another entry fails, so retry only the failures.',\n 'Fill relevantFiles only with files you actually read or located, and priorFindings only with verified facts in a few lines, not directives. A guessed path costs more than an omitted one.',\n 'Subject stays short and imperative. description is the durable brief handed to the subagent, extended at assign time by instructions, relevantFiles and priorFindings, so do not repeat one in the other.',\n 'When a delegated task completes and unblocks another, reconsider it promptly. If a child asks for a decision or an assignment fails to start, respond, rescope or retry instead of leaving it pending. Doom Task records delegated lifecycle and results on the task itself.',\n];\n"],"mappings":";;;;;;;;;;AASA,MAAa,4BAAsC;CACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -1,5 +1,5 @@
1
- import { isDelegationActive } from "../../models/task.mjs";
2
- import { isProcessAlive } from "../processLiveness/index.mjs";
1
+ import { i as isDelegationActive } from "./task-giCbpKzV.mjs";
2
+ import { t as isProcessAlive } from "./processLiveness-Ccd9wenT.mjs";
3
3
  //#region src/services/reconcile/index.ts
4
4
  const ERR_ORPHANED_BY_RESTART = "Delegation orphaned by harness restart";
5
5
  const ERR_ORPHANED_BY_SESSION = "Delegation orphaned by session restart";
@@ -58,6 +58,6 @@ function reconcileOrphanedDelegations(document, now = (/* @__PURE__ */ new Date(
58
58
  };
59
59
  }
60
60
  //#endregion
61
- export { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, reconcileOrphanedDelegations };
61
+ export { ERR_ORPHANED_BY_SESSION as n, reconcileOrphanedDelegations as r, ERR_ORPHANED_BY_RESTART as t };
62
62
 
63
- //# sourceMappingURL=index.mjs.map
63
+ //# sourceMappingURL=reconcile-BcD-hTbd.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-BcD-hTbd.mjs","names":[],"sources":["../src/services/reconcile/index.ts"],"sourcesContent":["import { isDelegationActive, type Task, type TaskDocument } from '../../models/task';\nimport { isProcessAlive } from '../processLiveness';\n\nexport const ERR_ORPHANED_BY_RESTART = 'Delegation orphaned by harness restart';\nexport const ERR_ORPHANED_BY_SESSION = 'Delegation orphaned by session restart';\n\nexport interface ReconcileResult {\n document: TaskDocument;\n orphaned: Task[];\n}\n\n/** The delegations this process can still settle, used to spot its own leftovers. */\nexport interface ReconcileSelf {\n pid: number;\n liveRequestIds: ReadonlySet<string>;\n}\n\n/**\n * Recover tasks that no longer have anyone able to finish them.\n *\n * A subagent run dies with the harness that spawned it, but the store file\n * outlives both, so a crash leaves tasks stuck in `in_progress` forever. Two\n * kinds of delegation qualify as dead:\n *\n * - the owning pid is gone, so nothing is left to report a result;\n * - the owning pid is *this* process, yet the request is absent from the live\n * set. Settling requires an in-memory record, so an in-process session\n * restart (which clears that map without writing to the store) leaves rows\n * nothing can ever resolve. Checking pid liveness alone misses these, because\n * the pid is our own and very much alive.\n *\n * Delegations owned by a different, still-running pid belong to a parallel\n * session and are left untouched.\n */\nexport function reconcileOrphanedDelegations(\n document: TaskDocument,\n now: string = new Date().toISOString(),\n isAlive: (pid: number) => boolean = isProcessAlive,\n self?: ReconcileSelf,\n): ReconcileResult {\n const orphaned: Task[] = [];\n\n const tasks = document.tasks.map((task) => {\n if (!isDelegationActive(task)) return task;\n const pid = task.delegation?.pid;\n if (pid === undefined) return task;\n\n const ownedByThisSession = self !== undefined && pid === self.pid;\n const abandonedHere = ownedByThisSession && !self.liveRequestIds.has(task.delegation!.requestId);\n if (!abandonedHere && isAlive(pid)) return task;\n\n const recovered: Task = {\n ...task,\n status: 'pending',\n updatedAt: now,\n delegation: {\n ...task.delegation!,\n state: 'failed',\n endedAt: now,\n result: {\n status: 'failed',\n error: abandonedHere ? ERR_ORPHANED_BY_SESSION : ERR_ORPHANED_BY_RESTART,\n },\n },\n };\n orphaned.push(recovered);\n return recovered;\n });\n\n if (orphaned.length === 0) return { document, orphaned };\n return { document: { ...document, tasks }, orphaned };\n}\n"],"mappings":";;;AAGA,MAAa,0BAA0B;AACvC,MAAa,0BAA0B;;;;;;;;;;;;;;;;;;AA8BvC,SAAgB,6BACd,UACA,uBAAc,IAAI,KAAK,EAAA,CAAE,YAAY,GACrC,UAAoC,gBACpC,MACiB;CACjB,MAAM,WAAmB,CAAC;CAE1B,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS;EACzC,IAAI,CAAC,mBAAmB,IAAI,GAAG,OAAO;EACtC,MAAM,MAAM,KAAK,YAAY;EAC7B,IAAI,QAAQ,KAAA,GAAW,OAAO;EAG9B,MAAM,gBADqB,SAAS,KAAA,KAAa,QAAQ,KAAK,OAClB,CAAC,KAAK,eAAe,IAAI,KAAK,WAAY,SAAS;EAC/F,IAAI,CAAC,iBAAiB,QAAQ,GAAG,GAAG,OAAO;EAE3C,MAAM,YAAkB;GACtB,GAAG;GACH,QAAQ;GACR,WAAW;GACX,YAAY;IACV,GAAG,KAAK;IACR,OAAO;IACP,SAAS;IACT,QAAQ;KACN,QAAQ;KACR,OAAO,gBAAgB,0BAA0B;IACnD;GACF;EACF;EACA,SAAS,KAAK,SAAS;EACvB,OAAO;CACT,CAAC;CAED,IAAI,SAAS,WAAW,GAAG,OAAO;EAAE;EAAU;CAAS;CACvD,OAAO;EAAE,UAAU;GAAE,GAAG;GAAU;EAAM;EAAG;CAAS;AACtD"}
@@ -1,5 +1,5 @@
1
- const require_task = require("../../models/task.cjs");
2
- const require_index = require("../processLiveness/index.cjs");
1
+ const require_task = require("./task-CXF9VULl.cjs");
2
+ const require_processLiveness = require("./processLiveness-umpNgsPR.cjs");
3
3
  //#region src/services/reconcile/index.ts
4
4
  const ERR_ORPHANED_BY_RESTART = "Delegation orphaned by harness restart";
5
5
  const ERR_ORPHANED_BY_SESSION = "Delegation orphaned by session restart";
@@ -20,7 +20,7 @@ const ERR_ORPHANED_BY_SESSION = "Delegation orphaned by session restart";
20
20
  * Delegations owned by a different, still-running pid belong to a parallel
21
21
  * session and are left untouched.
22
22
  */
23
- function reconcileOrphanedDelegations(document, now = (/* @__PURE__ */ new Date()).toISOString(), isAlive = require_index.isProcessAlive, self) {
23
+ function reconcileOrphanedDelegations(document, now = (/* @__PURE__ */ new Date()).toISOString(), isAlive = require_processLiveness.isProcessAlive, self) {
24
24
  const orphaned = [];
25
25
  const tasks = document.tasks.map((task) => {
26
26
  if (!require_task.isDelegationActive(task)) return task;
@@ -58,8 +58,23 @@ function reconcileOrphanedDelegations(document, now = (/* @__PURE__ */ new Date(
58
58
  };
59
59
  }
60
60
  //#endregion
61
- exports.ERR_ORPHANED_BY_RESTART = ERR_ORPHANED_BY_RESTART;
62
- exports.ERR_ORPHANED_BY_SESSION = ERR_ORPHANED_BY_SESSION;
63
- exports.reconcileOrphanedDelegations = reconcileOrphanedDelegations;
61
+ Object.defineProperty(exports, "ERR_ORPHANED_BY_RESTART", {
62
+ enumerable: true,
63
+ get: function() {
64
+ return ERR_ORPHANED_BY_RESTART;
65
+ }
66
+ });
67
+ Object.defineProperty(exports, "ERR_ORPHANED_BY_SESSION", {
68
+ enumerable: true,
69
+ get: function() {
70
+ return ERR_ORPHANED_BY_SESSION;
71
+ }
72
+ });
73
+ Object.defineProperty(exports, "reconcileOrphanedDelegations", {
74
+ enumerable: true,
75
+ get: function() {
76
+ return reconcileOrphanedDelegations;
77
+ }
78
+ });
64
79
 
65
- //# sourceMappingURL=index.cjs.map
80
+ //# sourceMappingURL=reconcile-cRL0NjDr.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile-cRL0NjDr.cjs","names":["isProcessAlive","isDelegationActive"],"sources":["../src/services/reconcile/index.ts"],"sourcesContent":["import { isDelegationActive, type Task, type TaskDocument } from '../../models/task';\nimport { isProcessAlive } from '../processLiveness';\n\nexport const ERR_ORPHANED_BY_RESTART = 'Delegation orphaned by harness restart';\nexport const ERR_ORPHANED_BY_SESSION = 'Delegation orphaned by session restart';\n\nexport interface ReconcileResult {\n document: TaskDocument;\n orphaned: Task[];\n}\n\n/** The delegations this process can still settle, used to spot its own leftovers. */\nexport interface ReconcileSelf {\n pid: number;\n liveRequestIds: ReadonlySet<string>;\n}\n\n/**\n * Recover tasks that no longer have anyone able to finish them.\n *\n * A subagent run dies with the harness that spawned it, but the store file\n * outlives both, so a crash leaves tasks stuck in `in_progress` forever. Two\n * kinds of delegation qualify as dead:\n *\n * - the owning pid is gone, so nothing is left to report a result;\n * - the owning pid is *this* process, yet the request is absent from the live\n * set. Settling requires an in-memory record, so an in-process session\n * restart (which clears that map without writing to the store) leaves rows\n * nothing can ever resolve. Checking pid liveness alone misses these, because\n * the pid is our own and very much alive.\n *\n * Delegations owned by a different, still-running pid belong to a parallel\n * session and are left untouched.\n */\nexport function reconcileOrphanedDelegations(\n document: TaskDocument,\n now: string = new Date().toISOString(),\n isAlive: (pid: number) => boolean = isProcessAlive,\n self?: ReconcileSelf,\n): ReconcileResult {\n const orphaned: Task[] = [];\n\n const tasks = document.tasks.map((task) => {\n if (!isDelegationActive(task)) return task;\n const pid = task.delegation?.pid;\n if (pid === undefined) return task;\n\n const ownedByThisSession = self !== undefined && pid === self.pid;\n const abandonedHere = ownedByThisSession && !self.liveRequestIds.has(task.delegation!.requestId);\n if (!abandonedHere && isAlive(pid)) return task;\n\n const recovered: Task = {\n ...task,\n status: 'pending',\n updatedAt: now,\n delegation: {\n ...task.delegation!,\n state: 'failed',\n endedAt: now,\n result: {\n status: 'failed',\n error: abandonedHere ? ERR_ORPHANED_BY_SESSION : ERR_ORPHANED_BY_RESTART,\n },\n },\n };\n orphaned.push(recovered);\n return recovered;\n });\n\n if (orphaned.length === 0) return { document, orphaned };\n return { document: { ...document, tasks }, orphaned };\n}\n"],"mappings":";;;AAGA,MAAa,0BAA0B;AACvC,MAAa,0BAA0B;;;;;;;;;;;;;;;;;;AA8BvC,SAAgB,6BACd,UACA,uBAAc,IAAI,KAAK,EAAA,CAAE,YAAY,GACrC,UAAoCA,wBAAAA,gBACpC,MACiB;CACjB,MAAM,WAAmB,CAAC;CAE1B,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS;EACzC,IAAI,CAACC,aAAAA,mBAAmB,IAAI,GAAG,OAAO;EACtC,MAAM,MAAM,KAAK,YAAY;EAC7B,IAAI,QAAQ,KAAA,GAAW,OAAO;EAG9B,MAAM,gBADqB,SAAS,KAAA,KAAa,QAAQ,KAAK,OAClB,CAAC,KAAK,eAAe,IAAI,KAAK,WAAY,SAAS;EAC/F,IAAI,CAAC,iBAAiB,QAAQ,GAAG,GAAG,OAAO;EAE3C,MAAM,YAAkB;GACtB,GAAG;GACH,QAAQ;GACR,WAAW;GACX,YAAY;IACV,GAAG,KAAK;IACR,OAAO;IACP,SAAS;IACT,QAAQ;KACN,QAAQ;KACR,OAAO,gBAAgB,0BAA0B;IACnD;GACF;EACF;EACA,SAAS,KAAK,SAAS;EACvB,OAAO;CACT,CAAC;CAED,IAAI,SAAS,WAAW,GAAG,OAAO;EAAE;EAAU;CAAS;CACvD,OAAO;EAAE,UAAU;GAAE,GAAG;GAAU;EAAM;EAAG;CAAS;AACtD"}
@@ -1,6 +1,6 @@
1
- import { detectCycle } from "../../models/taskGraph.mjs";
2
- import { DELETED_STATUS, isDelegationActive } from "../../models/task.mjs";
3
- import { isTransitionValid } from "../invariants/index.mjs";
1
+ import { n as detectCycle } from "./taskGraph-BOQvT0-M.mjs";
2
+ import { i as isDelegationActive, t as DELETED_STATUS } from "./task-giCbpKzV.mjs";
3
+ import { r as isTransitionValid } from "./invariants-q_UamF7D.mjs";
4
4
  //#region src/services/reducer/index.ts
5
5
  /** Default board capacity when a caller does not provide a configured limit. */
6
6
  const DEFAULT_REDUCER_MAX_TASKS = 15;
@@ -340,6 +340,6 @@ function applyTaskMutation(document, action, params, now = (/* @__PURE__ */ new
340
340
  }
341
341
  }
342
342
  //#endregion
343
- export { MAX_UPSERT_ITEMS, REF_PATTERN, applyTaskMutation, formatUpsertFailure, isCommittingOp, singleItemOutcome };
343
+ export { isCommittingOp as a, formatUpsertFailure as i, REF_PATTERN as n, singleItemOutcome as o, applyTaskMutation as r, MAX_UPSERT_ITEMS as t };
344
344
 
345
- //# sourceMappingURL=index.mjs.map
345
+ //# sourceMappingURL=reducer-BEfJFM5L.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer-BEfJFM5L.mjs","names":[],"sources":["../src/services/reducer/index.ts"],"sourcesContent":["import {\n DELETED_STATUS,\n type DepToken,\n isDelegationActive,\n type Task,\n type TaskAction,\n type TaskDocument,\n type TaskItemMutation,\n type TaskMutationParams,\n type TaskStatus,\n type UpsertItemOutcome,\n} from '../../models/task';\nimport { detectCycle } from '../../models/taskGraph';\nimport { isTransitionValid } from '../invariants';\n\n/** Default board capacity when a caller does not provide a configured limit. */\nconst DEFAULT_REDUCER_MAX_TASKS = 15;\n\n/** Bounds the work one call can do, and with it the size of one committed write. */\nexport const MAX_UPSERT_ITEMS = 100;\n\n/**\n * A ref must start with a letter, which makes it structurally unconfusable with\n * a stringified id. That is why resolving a dependency token is just a `typeof`\n * check with no coercion heuristics.\n */\nexport const REF_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{0,31}$/;\n\n/**\n * Reducer outcome. Closed tagged union: adding an action requires extending\n * this union and the response formatter, which the compiler enforces.\n *\n * `upsert` carries one outcome per request item. It is returned even when every\n * item failed — `error` is reserved for whole-call faults — so the tool layer\n * still has the per-item messages to report.\n */\nexport type Op =\n | { kind: 'upsert'; items: UpsertItemOutcome[]; applied: number; failed: number }\n | { kind: 'delete'; id: number; subject: string }\n | { kind: 'list'; statusFilter?: TaskStatus; includeDeleted: boolean }\n | { kind: 'get'; task: Task }\n | { kind: 'clear'; count: number }\n | { kind: 'error'; message: string };\n\nexport interface ApplyResult {\n document: TaskDocument;\n op: Op;\n}\n\n/** Actions the reducer owns. `assign`/`cancel` are handled by the delegation manager. */\nexport type ReducerAction = Exclude<TaskAction, 'assign' | 'cancel'>;\n\n/**\n * Does this op represent state that must reach disk?\n *\n * The exhaustive switch is the point: a future `Op` variant cannot be added\n * without declaring its persistence intent, so nothing silently starts or stops\n * bumping `rev`.\n */\nexport function isCommittingOp(op: Op): boolean {\n switch (op.kind) {\n case 'error':\n case 'list':\n case 'get':\n return false;\n case 'upsert':\n return op.items.some((item) => item.kind === 'created' || item.kind === 'updated');\n case 'delete':\n case 'clear':\n return true;\n }\n}\n\n/** Joined per-item failures, for the thrown error when an upsert applied nothing. */\nexport function formatUpsertFailure(op: Extract<Op, { kind: 'upsert' }>): string {\n return op.items\n .filter((item) => item.kind === 'failed')\n .map((item) => `item[${item.index}]: ${item.message}`)\n .join('\\n');\n}\n\n/** The single item's outcome, for callers that only ever send a batch of one. */\nexport function singleItemOutcome(op: Op): UpsertItemOutcome | undefined {\n return op.kind === 'upsert' ? op.items[0] : undefined;\n}\n\nfunction errorResult(document: TaskDocument, message: string): ApplyResult {\n return { document, op: { kind: 'error', message } };\n}\n\nfunction sameNumberList(a: number[] | undefined, b: number[] | undefined): boolean {\n const x = a ?? [];\n const y = b ?? [];\n return x.length === y.length && x.every((value, index) => value === y[index]);\n}\n\nfunction sameRecord(a: Record<string, unknown> | undefined, b: Record<string, unknown> | undefined): boolean {\n return JSON.stringify(a ?? null) === JSON.stringify(b ?? null);\n}\n\n/**\n * Did this update change anything? A no-effect update (status re-set to its\n * current value, fields re-sent unchanged) reports \"No change\" rather than\n * \"Updated #N\" — without the distinction a model can loop re-issuing the same\n * call believing it never landed.\n */\nfunction taskChanged(before: Task, after: Task): boolean {\n return (\n before.subject !== after.subject ||\n before.status !== after.status ||\n before.description !== after.description ||\n before.activeForm !== after.activeForm ||\n before.owner !== after.owner ||\n !sameNumberList(before.blockedBy, after.blockedBy) ||\n !sameRecord(before.metadata, after.metadata)\n );\n}\n\nfunction withTasks(document: TaskDocument, tasks: Task[], nextId = document.nextId): TaskDocument {\n return { ...document, tasks, nextId };\n}\n\n/** Merge incoming metadata over a base; a `null` value deletes its key. */\nfunction mergeMetadata(\n base: Record<string, unknown> | undefined,\n incoming: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const merged: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(incoming)) {\n if (value === null) delete merged[key];\n else merged[key] = value;\n }\n return Object.keys(merged).length ? merged : undefined;\n}\n\n/** Copy the optional scalar fields an item may set onto a task, in place. */\nfunction assignScalars(target: Task, item: TaskItemMutation): void {\n if (item.subject !== undefined) target.subject = item.subject;\n if (item.description !== undefined) target.description = item.description;\n if (item.activeForm !== undefined) target.activeForm = item.activeForm;\n if (item.owner !== undefined) target.owner = item.owner;\n if (item.metadata !== undefined) {\n const merged = mergeMetadata(target.metadata, item.metadata);\n if (merged === undefined) delete target.metadata;\n else target.metadata = merged;\n }\n}\n\n/**\n * Working state threaded item to item, so entry N observes every effect of\n * entries 1..N-1. `refIds` and `failedRefs` are what make the cascade work:\n * refs resolve backward only, so an entry that names a failed sibling is always\n * processed after the failure that killed it.\n */\ninterface UpsertContext {\n tasks: Task[];\n nextId: number;\n maxTasks: number;\n refIds: Map<string, number>;\n failedRefs: Map<string, number>;\n}\n\ntype Resolved = { ok: true; id: number } | { ok: false; message: string };\n\nfunction resolveDep(context: UpsertContext, field: string, token: DepToken): Resolved {\n if (typeof token === 'number') return { ok: true, id: token };\n if (!REF_PATTERN.test(token)) {\n return { ok: false, message: `${field}: \"${token}\" is not a valid ref; pass an existing task id as a number` };\n }\n const id = context.refIds.get(token);\n if (id !== undefined) return { ok: true, id };\n const failedAt = context.failedRefs.get(token);\n if (failedAt !== undefined) {\n return { ok: false, message: `${field}: ref \"${token}\" refers to item[${failedAt}], which failed` };\n }\n return {\n ok: false,\n message: `${field}: unknown ref \"${token}\" — a ref must be declared by an earlier entry in the same call`,\n };\n}\n\ntype ItemResult = { ok: true; outcome: UpsertItemOutcome } | { ok: false; message: string };\n\nfunction fail(message: string): ItemResult {\n return { ok: false, message };\n}\n\n/** Structural checks that apply to every entry, whichever kind it is. */\nfunction checkShape(context: UpsertContext, item: TaskItemMutation): string | undefined {\n if (item.ref !== undefined) {\n if (item.id !== undefined) return 'ref is only valid when creating a task; drop the id, or drop the ref';\n if (!REF_PATTERN.test(item.ref)) {\n return `ref \"${item.ref}\" is invalid: a ref must start with a letter and contain only letters, digits, - or _`;\n }\n const owner = context.refIds.get(item.ref) !== undefined || context.failedRefs.has(item.ref);\n if (owner) return `duplicate ref \"${item.ref}\": it was already declared by an earlier entry`;\n }\n return undefined;\n}\n\nfunction applyCreateItem(context: UpsertContext, item: TaskItemMutation, index: number, now: string): ItemResult {\n if (item.subject === undefined) return fail('subject is required when the entry has no id');\n if (!item.subject.trim()) return fail('subject must not be blank');\n if (item.addBlockedBy !== undefined || item.removeBlockedBy !== undefined) {\n return fail('addBlockedBy / removeBlockedBy are only for an entry with an id; a new task uses blockedBy');\n }\n // A task created as a tombstone is invisible to every view and can never\n // leave `deleted`, so it would be a write-only black hole.\n if (item.status === DELETED_STATUS) {\n return fail('cannot create a task with status deleted; create it, then use action delete');\n }\n\n const taskCount = context.tasks.filter((task) => task.status !== DELETED_STATUS).length;\n if (taskCount >= context.maxTasks) {\n return fail(`task limit of ${context.maxTasks} reached; delete completed tasks first before creating new tasks`);\n }\n\n const blockedBy: number[] = [];\n for (const token of item.blockedBy ?? []) {\n const resolved = resolveDep(context, 'blockedBy', token);\n if (!resolved.ok) return fail(resolved.message);\n const dep = context.tasks.find((task) => task.id === resolved.id);\n if (!dep) return fail(`blockedBy: #${resolved.id} not found`);\n if (dep.status === DELETED_STATUS) return fail(`blockedBy: #${resolved.id} is deleted`);\n if (!blockedBy.includes(resolved.id)) blockedBy.push(resolved.id);\n }\n\n // No cycle check is needed: the id is freshly allocated, so nothing already\n // in the document can point at it yet.\n const created: Task = {\n id: context.nextId,\n subject: item.subject,\n status: item.status ?? 'pending',\n createdAt: now,\n updatedAt: now,\n };\n assignScalars(created, item);\n if (blockedBy.length) created.blockedBy = blockedBy;\n\n context.nextId += 1;\n context.tasks.push(created);\n if (item.ref) context.refIds.set(item.ref, created.id);\n\n return {\n ok: true,\n outcome: {\n index,\n kind: 'created',\n id: created.id,\n subject: created.subject,\n status: created.status,\n ...(item.ref ? { ref: item.ref } : {}),\n ...(blockedBy.length ? { blockedBy } : {}),\n },\n };\n}\n\nfunction applyUpdateItem(context: UpsertContext, item: TaskItemMutation, index: number, now: string): ItemResult {\n const id = item.id as number;\n const at = context.tasks.findIndex((task) => task.id === id);\n if (at === -1) return fail(`#${id} not found`);\n if (item.blockedBy !== undefined) {\n return fail('blockedBy is only for a new entry; use addBlockedBy / removeBlockedBy on an entry that has an id');\n }\n\n const hasMutation =\n item.subject !== undefined ||\n item.description !== undefined ||\n item.activeForm !== undefined ||\n item.status !== undefined ||\n item.owner !== undefined ||\n item.metadata !== undefined ||\n Boolean(item.addBlockedBy?.length) ||\n Boolean(item.removeBlockedBy?.length);\n if (!hasMutation) {\n return fail(\n 'nothing to change: provide at least one of subject, description, activeForm, status, owner, metadata, addBlockedBy, or removeBlockedBy',\n );\n }\n\n const current = context.tasks[at];\n\n // The Task Space overlay commits free text from an inline editor, so a blank\n // subject reaches the reducer as a real update rather than as a missing\n // field. Persisting it would leave an unidentifiable row.\n if (item.subject !== undefined && !item.subject.trim()) return fail('subject must not be blank');\n\n let newStatus = current.status;\n if (item.status !== undefined) {\n if (!isTransitionValid(current.status, item.status)) {\n return fail(`illegal transition ${current.status} -> ${item.status}`);\n }\n newStatus = item.status;\n }\n\n let newBlockedBy = current.blockedBy ? [...current.blockedBy] : [];\n for (const token of item.removeBlockedBy ?? []) {\n const resolved = resolveDep(context, 'removeBlockedBy', token);\n if (!resolved.ok) return fail(resolved.message);\n // Removing an id that is not there is a well-defined no-op, so unlike the\n // add path this deliberately skips the existence check.\n newBlockedBy = newBlockedBy.filter((dep) => dep !== resolved.id);\n }\n for (const token of item.addBlockedBy ?? []) {\n const resolved = resolveDep(context, 'addBlockedBy', token);\n if (!resolved.ok) return fail(resolved.message);\n if (resolved.id === id) return fail(`cannot block #${id} on itself`);\n const dep = context.tasks.find((task) => task.id === resolved.id);\n if (!dep) return fail(`addBlockedBy: #${resolved.id} not found`);\n if (dep.status === DELETED_STATUS) return fail(`addBlockedBy: #${resolved.id} is deleted`);\n if (!newBlockedBy.includes(resolved.id)) newBlockedBy.push(resolved.id);\n }\n\n const updated: Task = { ...current, status: newStatus };\n assignScalars(updated, item);\n if (newBlockedBy.length) updated.blockedBy = newBlockedBy;\n else delete updated.blockedBy;\n\n // The candidate is written before the check because `detectCycle` unions the\n // node's stored edges with the ones passed in: checking against the old array\n // would resurrect an edge `removeBlockedBy` just stripped and reject a\n // remove+add that legitimately breaks a cycle.\n const candidate = [...context.tasks];\n candidate[at] = updated;\n if (item.addBlockedBy?.length && detectCycle(candidate, id, newBlockedBy)) {\n return fail('addBlockedBy would create a cycle in the blockedBy graph');\n }\n\n const changed = taskChanged(current, updated);\n if (changed) updated.updatedAt = now;\n context.tasks = candidate;\n\n return {\n ok: true,\n outcome: changed\n ? { index, kind: 'updated', id, fromStatus: current.status, toStatus: newStatus }\n : { index, kind: 'unchanged', id, status: newStatus },\n };\n}\n\n/**\n * Apply every entry in request order, threading the document.\n *\n * Each entry lands completely or not at all: a create whose dependencies fail\n * is not kept dependency-free, because handing back an unblocked task the\n * caller asked to be blocked is a lie it may immediately act on.\n */\nfunction applyUpsert(document: TaskDocument, items: TaskItemMutation[], now: string, maxTasks: number): ApplyResult {\n const context: UpsertContext = {\n tasks: [...document.tasks],\n nextId: document.nextId,\n maxTasks,\n refIds: new Map(),\n failedRefs: new Map(),\n };\n const outcomes: UpsertItemOutcome[] = [];\n let applied = 0;\n\n for (const [index, item] of items.entries()) {\n const shapeError = checkShape(context, item);\n const result = shapeError\n ? fail(shapeError)\n : item.id === undefined\n ? applyCreateItem(context, item, index, now)\n : applyUpdateItem(context, item, index, now);\n\n if (result.ok) {\n outcomes.push(result.outcome);\n applied += 1;\n continue;\n }\n // A ref whose owner failed must not read as a typo to the entries that\n // depend on it, so the dead ref is recorded rather than left unknown.\n if (item.ref && REF_PATTERN.test(item.ref) && !context.refIds.has(item.ref)) {\n context.failedRefs.set(item.ref, index);\n }\n outcomes.push({\n index,\n kind: 'failed',\n message: result.message,\n ...(item.id === undefined ? {} : { id: item.id }),\n ...(item.ref ? { ref: item.ref } : {}),\n });\n }\n\n return {\n // Nothing applied means nothing to write: returning the original object by\n // reference keeps the caller's write-skip path identical to a hard error.\n document: applied > 0 ? withTasks(document, context.tasks, context.nextId) : document,\n op: { kind: 'upsert', items: outcomes, applied, failed: outcomes.length - applied },\n };\n}\n\n/**\n * Pure reducer: (document, action, params) -> (document, op).\n *\n * All validation is in-line: structural guards plus state-aware checks\n * (transition legality, dangling or deleted blockedBy, self-block, cycles,\n * in-flight delegations). The caller owns persistence and formatting.\n */\nexport function applyTaskMutation(\n document: TaskDocument,\n action: ReducerAction,\n params: TaskMutationParams,\n now: string = new Date().toISOString(),\n maxTasks = DEFAULT_REDUCER_MAX_TASKS,\n): ApplyResult {\n switch (action) {\n case 'upsert': {\n const items = params.tasks;\n if (!Array.isArray(items) || items.length === 0) {\n return errorResult(\n document,\n 'upsert requires a non-empty tasks array, e.g. {\"action\":\"upsert\",\"tasks\":[{\"subject\":\"Write tests\"}]}',\n );\n }\n if (items.length > MAX_UPSERT_ITEMS) {\n return errorResult(\n document,\n `upsert accepts at most ${MAX_UPSERT_ITEMS} entries per call (received ${items.length})`,\n );\n }\n return applyUpsert(document, items, now, maxTasks);\n }\n\n case 'list': {\n return {\n document,\n op: {\n kind: 'list',\n includeDeleted: params.includeDeleted === true,\n ...(params.status !== undefined ? { statusFilter: params.status } : {}),\n },\n };\n }\n\n case 'get': {\n if (params.id === undefined) return errorResult(document, 'id required for get');\n const task = document.tasks.find((candidate) => candidate.id === params.id);\n if (!task) return errorResult(document, `#${params.id} not found`);\n return { document, op: { kind: 'get', task } };\n }\n\n case 'delete': {\n if (params.id === undefined) return errorResult(document, 'id required for delete');\n const index = document.tasks.findIndex((task) => task.id === params.id);\n if (index === -1) return errorResult(document, `#${params.id} not found`);\n const current = document.tasks[index];\n if (current.status === DELETED_STATUS) return errorResult(document, `#${current.id} is already deleted`);\n if (isDelegationActive(current)) {\n return errorResult(document, `#${current.id} has a running delegation — cancel it before deleting`);\n }\n\n const tasks = [...document.tasks];\n tasks[index] = { ...current, status: DELETED_STATUS, updatedAt: now };\n return {\n document: withTasks(document, tasks),\n op: { kind: 'delete', id: current.id, subject: current.subject },\n };\n }\n\n case 'clear': {\n const active = document.tasks.filter(isDelegationActive);\n if (active.length > 0) {\n const ids = active.map((task) => `#${task.id}`).join(', ');\n return errorResult(document, `cannot clear while delegations are running (${ids}) — cancel them first`);\n }\n const count = document.tasks.length;\n return {\n document: withTasks(document, [], 1),\n op: { kind: 'clear', count },\n };\n }\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- const require_taskGraph = require("../../models/taskGraph.cjs");
2
- const require_task = require("../../models/task.cjs");
3
- const require_index = require("../invariants/index.cjs");
1
+ const require_taskGraph = require("./taskGraph-BskRslrr.cjs");
2
+ const require_task = require("./task-CXF9VULl.cjs");
3
+ const require_invariants = require("./invariants-DhjEjBPU.cjs");
4
4
  //#region src/services/reducer/index.ts
5
5
  /** Default board capacity when a caller does not provide a configured limit. */
6
6
  const DEFAULT_REDUCER_MAX_TASKS = 15;
@@ -177,7 +177,7 @@ function applyUpdateItem(context, item, index, now) {
177
177
  if (item.subject !== void 0 && !item.subject.trim()) return fail("subject must not be blank");
178
178
  let newStatus = current.status;
179
179
  if (item.status !== void 0) {
180
- if (!require_index.isTransitionValid(current.status, item.status)) return fail(`illegal transition ${current.status} -> ${item.status}`);
180
+ if (!require_invariants.isTransitionValid(current.status, item.status)) return fail(`illegal transition ${current.status} -> ${item.status}`);
181
181
  newStatus = item.status;
182
182
  }
183
183
  let newBlockedBy = current.blockedBy ? [...current.blockedBy] : [];
@@ -340,11 +340,41 @@ function applyTaskMutation(document, action, params, now = (/* @__PURE__ */ new
340
340
  }
341
341
  }
342
342
  //#endregion
343
- exports.MAX_UPSERT_ITEMS = MAX_UPSERT_ITEMS;
344
- exports.REF_PATTERN = REF_PATTERN;
345
- exports.applyTaskMutation = applyTaskMutation;
346
- exports.formatUpsertFailure = formatUpsertFailure;
347
- exports.isCommittingOp = isCommittingOp;
348
- exports.singleItemOutcome = singleItemOutcome;
343
+ Object.defineProperty(exports, "MAX_UPSERT_ITEMS", {
344
+ enumerable: true,
345
+ get: function() {
346
+ return MAX_UPSERT_ITEMS;
347
+ }
348
+ });
349
+ Object.defineProperty(exports, "REF_PATTERN", {
350
+ enumerable: true,
351
+ get: function() {
352
+ return REF_PATTERN;
353
+ }
354
+ });
355
+ Object.defineProperty(exports, "applyTaskMutation", {
356
+ enumerable: true,
357
+ get: function() {
358
+ return applyTaskMutation;
359
+ }
360
+ });
361
+ Object.defineProperty(exports, "formatUpsertFailure", {
362
+ enumerable: true,
363
+ get: function() {
364
+ return formatUpsertFailure;
365
+ }
366
+ });
367
+ Object.defineProperty(exports, "isCommittingOp", {
368
+ enumerable: true,
369
+ get: function() {
370
+ return isCommittingOp;
371
+ }
372
+ });
373
+ Object.defineProperty(exports, "singleItemOutcome", {
374
+ enumerable: true,
375
+ get: function() {
376
+ return singleItemOutcome;
377
+ }
378
+ });
349
379
 
350
- //# sourceMappingURL=index.cjs.map
380
+ //# sourceMappingURL=reducer-BV0YIZ2o.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reducer-BV0YIZ2o.cjs","names":["isTransitionValid","detectCycle","isDelegationActive","DELETED_STATUS"],"sources":["../src/services/reducer/index.ts"],"sourcesContent":["import {\n DELETED_STATUS,\n type DepToken,\n isDelegationActive,\n type Task,\n type TaskAction,\n type TaskDocument,\n type TaskItemMutation,\n type TaskMutationParams,\n type TaskStatus,\n type UpsertItemOutcome,\n} from '../../models/task';\nimport { detectCycle } from '../../models/taskGraph';\nimport { isTransitionValid } from '../invariants';\n\n/** Default board capacity when a caller does not provide a configured limit. */\nconst DEFAULT_REDUCER_MAX_TASKS = 15;\n\n/** Bounds the work one call can do, and with it the size of one committed write. */\nexport const MAX_UPSERT_ITEMS = 100;\n\n/**\n * A ref must start with a letter, which makes it structurally unconfusable with\n * a stringified id. That is why resolving a dependency token is just a `typeof`\n * check with no coercion heuristics.\n */\nexport const REF_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{0,31}$/;\n\n/**\n * Reducer outcome. Closed tagged union: adding an action requires extending\n * this union and the response formatter, which the compiler enforces.\n *\n * `upsert` carries one outcome per request item. It is returned even when every\n * item failed — `error` is reserved for whole-call faults — so the tool layer\n * still has the per-item messages to report.\n */\nexport type Op =\n | { kind: 'upsert'; items: UpsertItemOutcome[]; applied: number; failed: number }\n | { kind: 'delete'; id: number; subject: string }\n | { kind: 'list'; statusFilter?: TaskStatus; includeDeleted: boolean }\n | { kind: 'get'; task: Task }\n | { kind: 'clear'; count: number }\n | { kind: 'error'; message: string };\n\nexport interface ApplyResult {\n document: TaskDocument;\n op: Op;\n}\n\n/** Actions the reducer owns. `assign`/`cancel` are handled by the delegation manager. */\nexport type ReducerAction = Exclude<TaskAction, 'assign' | 'cancel'>;\n\n/**\n * Does this op represent state that must reach disk?\n *\n * The exhaustive switch is the point: a future `Op` variant cannot be added\n * without declaring its persistence intent, so nothing silently starts or stops\n * bumping `rev`.\n */\nexport function isCommittingOp(op: Op): boolean {\n switch (op.kind) {\n case 'error':\n case 'list':\n case 'get':\n return false;\n case 'upsert':\n return op.items.some((item) => item.kind === 'created' || item.kind === 'updated');\n case 'delete':\n case 'clear':\n return true;\n }\n}\n\n/** Joined per-item failures, for the thrown error when an upsert applied nothing. */\nexport function formatUpsertFailure(op: Extract<Op, { kind: 'upsert' }>): string {\n return op.items\n .filter((item) => item.kind === 'failed')\n .map((item) => `item[${item.index}]: ${item.message}`)\n .join('\\n');\n}\n\n/** The single item's outcome, for callers that only ever send a batch of one. */\nexport function singleItemOutcome(op: Op): UpsertItemOutcome | undefined {\n return op.kind === 'upsert' ? op.items[0] : undefined;\n}\n\nfunction errorResult(document: TaskDocument, message: string): ApplyResult {\n return { document, op: { kind: 'error', message } };\n}\n\nfunction sameNumberList(a: number[] | undefined, b: number[] | undefined): boolean {\n const x = a ?? [];\n const y = b ?? [];\n return x.length === y.length && x.every((value, index) => value === y[index]);\n}\n\nfunction sameRecord(a: Record<string, unknown> | undefined, b: Record<string, unknown> | undefined): boolean {\n return JSON.stringify(a ?? null) === JSON.stringify(b ?? null);\n}\n\n/**\n * Did this update change anything? A no-effect update (status re-set to its\n * current value, fields re-sent unchanged) reports \"No change\" rather than\n * \"Updated #N\" — without the distinction a model can loop re-issuing the same\n * call believing it never landed.\n */\nfunction taskChanged(before: Task, after: Task): boolean {\n return (\n before.subject !== after.subject ||\n before.status !== after.status ||\n before.description !== after.description ||\n before.activeForm !== after.activeForm ||\n before.owner !== after.owner ||\n !sameNumberList(before.blockedBy, after.blockedBy) ||\n !sameRecord(before.metadata, after.metadata)\n );\n}\n\nfunction withTasks(document: TaskDocument, tasks: Task[], nextId = document.nextId): TaskDocument {\n return { ...document, tasks, nextId };\n}\n\n/** Merge incoming metadata over a base; a `null` value deletes its key. */\nfunction mergeMetadata(\n base: Record<string, unknown> | undefined,\n incoming: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n const merged: Record<string, unknown> = { ...base };\n for (const [key, value] of Object.entries(incoming)) {\n if (value === null) delete merged[key];\n else merged[key] = value;\n }\n return Object.keys(merged).length ? merged : undefined;\n}\n\n/** Copy the optional scalar fields an item may set onto a task, in place. */\nfunction assignScalars(target: Task, item: TaskItemMutation): void {\n if (item.subject !== undefined) target.subject = item.subject;\n if (item.description !== undefined) target.description = item.description;\n if (item.activeForm !== undefined) target.activeForm = item.activeForm;\n if (item.owner !== undefined) target.owner = item.owner;\n if (item.metadata !== undefined) {\n const merged = mergeMetadata(target.metadata, item.metadata);\n if (merged === undefined) delete target.metadata;\n else target.metadata = merged;\n }\n}\n\n/**\n * Working state threaded item to item, so entry N observes every effect of\n * entries 1..N-1. `refIds` and `failedRefs` are what make the cascade work:\n * refs resolve backward only, so an entry that names a failed sibling is always\n * processed after the failure that killed it.\n */\ninterface UpsertContext {\n tasks: Task[];\n nextId: number;\n maxTasks: number;\n refIds: Map<string, number>;\n failedRefs: Map<string, number>;\n}\n\ntype Resolved = { ok: true; id: number } | { ok: false; message: string };\n\nfunction resolveDep(context: UpsertContext, field: string, token: DepToken): Resolved {\n if (typeof token === 'number') return { ok: true, id: token };\n if (!REF_PATTERN.test(token)) {\n return { ok: false, message: `${field}: \"${token}\" is not a valid ref; pass an existing task id as a number` };\n }\n const id = context.refIds.get(token);\n if (id !== undefined) return { ok: true, id };\n const failedAt = context.failedRefs.get(token);\n if (failedAt !== undefined) {\n return { ok: false, message: `${field}: ref \"${token}\" refers to item[${failedAt}], which failed` };\n }\n return {\n ok: false,\n message: `${field}: unknown ref \"${token}\" — a ref must be declared by an earlier entry in the same call`,\n };\n}\n\ntype ItemResult = { ok: true; outcome: UpsertItemOutcome } | { ok: false; message: string };\n\nfunction fail(message: string): ItemResult {\n return { ok: false, message };\n}\n\n/** Structural checks that apply to every entry, whichever kind it is. */\nfunction checkShape(context: UpsertContext, item: TaskItemMutation): string | undefined {\n if (item.ref !== undefined) {\n if (item.id !== undefined) return 'ref is only valid when creating a task; drop the id, or drop the ref';\n if (!REF_PATTERN.test(item.ref)) {\n return `ref \"${item.ref}\" is invalid: a ref must start with a letter and contain only letters, digits, - or _`;\n }\n const owner = context.refIds.get(item.ref) !== undefined || context.failedRefs.has(item.ref);\n if (owner) return `duplicate ref \"${item.ref}\": it was already declared by an earlier entry`;\n }\n return undefined;\n}\n\nfunction applyCreateItem(context: UpsertContext, item: TaskItemMutation, index: number, now: string): ItemResult {\n if (item.subject === undefined) return fail('subject is required when the entry has no id');\n if (!item.subject.trim()) return fail('subject must not be blank');\n if (item.addBlockedBy !== undefined || item.removeBlockedBy !== undefined) {\n return fail('addBlockedBy / removeBlockedBy are only for an entry with an id; a new task uses blockedBy');\n }\n // A task created as a tombstone is invisible to every view and can never\n // leave `deleted`, so it would be a write-only black hole.\n if (item.status === DELETED_STATUS) {\n return fail('cannot create a task with status deleted; create it, then use action delete');\n }\n\n const taskCount = context.tasks.filter((task) => task.status !== DELETED_STATUS).length;\n if (taskCount >= context.maxTasks) {\n return fail(`task limit of ${context.maxTasks} reached; delete completed tasks first before creating new tasks`);\n }\n\n const blockedBy: number[] = [];\n for (const token of item.blockedBy ?? []) {\n const resolved = resolveDep(context, 'blockedBy', token);\n if (!resolved.ok) return fail(resolved.message);\n const dep = context.tasks.find((task) => task.id === resolved.id);\n if (!dep) return fail(`blockedBy: #${resolved.id} not found`);\n if (dep.status === DELETED_STATUS) return fail(`blockedBy: #${resolved.id} is deleted`);\n if (!blockedBy.includes(resolved.id)) blockedBy.push(resolved.id);\n }\n\n // No cycle check is needed: the id is freshly allocated, so nothing already\n // in the document can point at it yet.\n const created: Task = {\n id: context.nextId,\n subject: item.subject,\n status: item.status ?? 'pending',\n createdAt: now,\n updatedAt: now,\n };\n assignScalars(created, item);\n if (blockedBy.length) created.blockedBy = blockedBy;\n\n context.nextId += 1;\n context.tasks.push(created);\n if (item.ref) context.refIds.set(item.ref, created.id);\n\n return {\n ok: true,\n outcome: {\n index,\n kind: 'created',\n id: created.id,\n subject: created.subject,\n status: created.status,\n ...(item.ref ? { ref: item.ref } : {}),\n ...(blockedBy.length ? { blockedBy } : {}),\n },\n };\n}\n\nfunction applyUpdateItem(context: UpsertContext, item: TaskItemMutation, index: number, now: string): ItemResult {\n const id = item.id as number;\n const at = context.tasks.findIndex((task) => task.id === id);\n if (at === -1) return fail(`#${id} not found`);\n if (item.blockedBy !== undefined) {\n return fail('blockedBy is only for a new entry; use addBlockedBy / removeBlockedBy on an entry that has an id');\n }\n\n const hasMutation =\n item.subject !== undefined ||\n item.description !== undefined ||\n item.activeForm !== undefined ||\n item.status !== undefined ||\n item.owner !== undefined ||\n item.metadata !== undefined ||\n Boolean(item.addBlockedBy?.length) ||\n Boolean(item.removeBlockedBy?.length);\n if (!hasMutation) {\n return fail(\n 'nothing to change: provide at least one of subject, description, activeForm, status, owner, metadata, addBlockedBy, or removeBlockedBy',\n );\n }\n\n const current = context.tasks[at];\n\n // The Task Space overlay commits free text from an inline editor, so a blank\n // subject reaches the reducer as a real update rather than as a missing\n // field. Persisting it would leave an unidentifiable row.\n if (item.subject !== undefined && !item.subject.trim()) return fail('subject must not be blank');\n\n let newStatus = current.status;\n if (item.status !== undefined) {\n if (!isTransitionValid(current.status, item.status)) {\n return fail(`illegal transition ${current.status} -> ${item.status}`);\n }\n newStatus = item.status;\n }\n\n let newBlockedBy = current.blockedBy ? [...current.blockedBy] : [];\n for (const token of item.removeBlockedBy ?? []) {\n const resolved = resolveDep(context, 'removeBlockedBy', token);\n if (!resolved.ok) return fail(resolved.message);\n // Removing an id that is not there is a well-defined no-op, so unlike the\n // add path this deliberately skips the existence check.\n newBlockedBy = newBlockedBy.filter((dep) => dep !== resolved.id);\n }\n for (const token of item.addBlockedBy ?? []) {\n const resolved = resolveDep(context, 'addBlockedBy', token);\n if (!resolved.ok) return fail(resolved.message);\n if (resolved.id === id) return fail(`cannot block #${id} on itself`);\n const dep = context.tasks.find((task) => task.id === resolved.id);\n if (!dep) return fail(`addBlockedBy: #${resolved.id} not found`);\n if (dep.status === DELETED_STATUS) return fail(`addBlockedBy: #${resolved.id} is deleted`);\n if (!newBlockedBy.includes(resolved.id)) newBlockedBy.push(resolved.id);\n }\n\n const updated: Task = { ...current, status: newStatus };\n assignScalars(updated, item);\n if (newBlockedBy.length) updated.blockedBy = newBlockedBy;\n else delete updated.blockedBy;\n\n // The candidate is written before the check because `detectCycle` unions the\n // node's stored edges with the ones passed in: checking against the old array\n // would resurrect an edge `removeBlockedBy` just stripped and reject a\n // remove+add that legitimately breaks a cycle.\n const candidate = [...context.tasks];\n candidate[at] = updated;\n if (item.addBlockedBy?.length && detectCycle(candidate, id, newBlockedBy)) {\n return fail('addBlockedBy would create a cycle in the blockedBy graph');\n }\n\n const changed = taskChanged(current, updated);\n if (changed) updated.updatedAt = now;\n context.tasks = candidate;\n\n return {\n ok: true,\n outcome: changed\n ? { index, kind: 'updated', id, fromStatus: current.status, toStatus: newStatus }\n : { index, kind: 'unchanged', id, status: newStatus },\n };\n}\n\n/**\n * Apply every entry in request order, threading the document.\n *\n * Each entry lands completely or not at all: a create whose dependencies fail\n * is not kept dependency-free, because handing back an unblocked task the\n * caller asked to be blocked is a lie it may immediately act on.\n */\nfunction applyUpsert(document: TaskDocument, items: TaskItemMutation[], now: string, maxTasks: number): ApplyResult {\n const context: UpsertContext = {\n tasks: [...document.tasks],\n nextId: document.nextId,\n maxTasks,\n refIds: new Map(),\n failedRefs: new Map(),\n };\n const outcomes: UpsertItemOutcome[] = [];\n let applied = 0;\n\n for (const [index, item] of items.entries()) {\n const shapeError = checkShape(context, item);\n const result = shapeError\n ? fail(shapeError)\n : item.id === undefined\n ? applyCreateItem(context, item, index, now)\n : applyUpdateItem(context, item, index, now);\n\n if (result.ok) {\n outcomes.push(result.outcome);\n applied += 1;\n continue;\n }\n // A ref whose owner failed must not read as a typo to the entries that\n // depend on it, so the dead ref is recorded rather than left unknown.\n if (item.ref && REF_PATTERN.test(item.ref) && !context.refIds.has(item.ref)) {\n context.failedRefs.set(item.ref, index);\n }\n outcomes.push({\n index,\n kind: 'failed',\n message: result.message,\n ...(item.id === undefined ? {} : { id: item.id }),\n ...(item.ref ? { ref: item.ref } : {}),\n });\n }\n\n return {\n // Nothing applied means nothing to write: returning the original object by\n // reference keeps the caller's write-skip path identical to a hard error.\n document: applied > 0 ? withTasks(document, context.tasks, context.nextId) : document,\n op: { kind: 'upsert', items: outcomes, applied, failed: outcomes.length - applied },\n };\n}\n\n/**\n * Pure reducer: (document, action, params) -> (document, op).\n *\n * All validation is in-line: structural guards plus state-aware checks\n * (transition legality, dangling or deleted blockedBy, self-block, cycles,\n * in-flight delegations). The caller owns persistence and formatting.\n */\nexport function applyTaskMutation(\n document: TaskDocument,\n action: ReducerAction,\n params: TaskMutationParams,\n now: string = new Date().toISOString(),\n maxTasks = DEFAULT_REDUCER_MAX_TASKS,\n): ApplyResult {\n switch (action) {\n case 'upsert': {\n const items = params.tasks;\n if (!Array.isArray(items) || items.length === 0) {\n return errorResult(\n document,\n 'upsert requires a non-empty tasks array, e.g. {\"action\":\"upsert\",\"tasks\":[{\"subject\":\"Write tests\"}]}',\n );\n }\n if (items.length > MAX_UPSERT_ITEMS) {\n return errorResult(\n document,\n `upsert accepts at most ${MAX_UPSERT_ITEMS} entries per call (received ${items.length})`,\n );\n }\n return applyUpsert(document, items, now, maxTasks);\n }\n\n case 'list': {\n return {\n document,\n op: {\n kind: 'list',\n includeDeleted: params.includeDeleted === true,\n ...(params.status !== undefined ? { statusFilter: params.status } : {}),\n },\n };\n }\n\n case 'get': {\n if (params.id === undefined) return errorResult(document, 'id required for get');\n const task = document.tasks.find((candidate) => candidate.id === params.id);\n if (!task) return errorResult(document, `#${params.id} not found`);\n return { document, op: { kind: 'get', task } };\n }\n\n case 'delete': {\n if (params.id === undefined) return errorResult(document, 'id required for delete');\n const index = document.tasks.findIndex((task) => task.id === params.id);\n if (index === -1) return errorResult(document, `#${params.id} not found`);\n const current = document.tasks[index];\n if (current.status === DELETED_STATUS) return errorResult(document, `#${current.id} is already deleted`);\n if (isDelegationActive(current)) {\n return errorResult(document, `#${current.id} has a running delegation — cancel it before deleting`);\n }\n\n const tasks = [...document.tasks];\n tasks[index] = { ...current, status: DELETED_STATUS, updatedAt: now };\n return {\n document: withTasks(document, tasks),\n op: { kind: 'delete', id: current.id, subject: current.subject },\n };\n }\n\n case 'clear': {\n const active = document.tasks.filter(isDelegationActive);\n if (active.length > 0) {\n const ids = active.map((task) => `#${task.id}`).join(', ');\n return errorResult(document, `cannot clear while delegations are running (${ids}) — cancel them first`);\n }\n const count = document.tasks.length;\n return {\n document: withTasks(document, [], 1),\n op: { kind: 'clear', count },\n };\n }\n }\n}\n"],"mappings":"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"}