@agimon-ai/doompi-task 0.0.1-alpha.75 → 0.0.1-alpha.76

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 (420) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/api-contracts.cjs +7 -0
  3. package/dist/api-contracts.d.cts +2 -0
  4. package/dist/api-contracts.d.mts +2 -0
  5. package/dist/api-contracts.mjs +2 -0
  6. package/dist/commands.cjs +4 -0
  7. package/dist/commands.d.cts +2 -0
  8. package/dist/commands.d.mts +2 -0
  9. package/dist/commands.mjs +2 -0
  10. package/dist/config.cjs +19 -0
  11. package/dist/config.d.cts +2 -0
  12. package/dist/config.d.mts +2 -0
  13. package/dist/config.mjs +2 -0
  14. package/dist/delegation-manager.cjs +10 -0
  15. package/dist/delegation-manager.d.cts +3 -0
  16. package/dist/delegation-manager.d.mts +3 -0
  17. package/dist/delegation-manager.mjs +3 -0
  18. package/dist/extensions/pi.cjs +50 -0
  19. package/dist/extensions/pi.cjs.map +1 -0
  20. package/dist/extensions/pi.d.cts +5 -0
  21. package/dist/extensions/pi.d.cts.map +1 -0
  22. package/dist/extensions/pi.d.mts +5 -0
  23. package/dist/extensions/pi.d.mts.map +1 -0
  24. package/dist/extensions/pi.mjs +45 -0
  25. package/dist/extensions/pi.mjs.map +1 -0
  26. package/dist/extensions/server.cjs +57 -0
  27. package/dist/extensions/server.cjs.map +1 -0
  28. package/dist/extensions/server.d.cts +5 -0
  29. package/dist/extensions/server.d.cts.map +1 -0
  30. package/dist/extensions/server.d.mts +5 -0
  31. package/dist/extensions/server.d.mts.map +1 -0
  32. package/dist/extensions/server.mjs +52 -0
  33. package/dist/extensions/server.mjs.map +1 -0
  34. package/dist/extensions/web.mjs +1013 -0
  35. package/dist/extensions/web.mjs.map +1 -0
  36. package/dist/index.cjs +106 -0
  37. package/dist/index.d.cts +16 -0
  38. package/dist/index.d.mts +16 -0
  39. package/dist/index.mjs +16 -0
  40. package/dist/logSinkTelemetry.cjs +6 -0
  41. package/dist/logSinkTelemetry.d.cts +3 -0
  42. package/dist/logSinkTelemetry.d.mts +3 -0
  43. package/dist/logSinkTelemetry.mjs +3 -0
  44. package/dist/src/constants/promptGuidelines.cjs +26 -0
  45. package/dist/src/constants/promptGuidelines.cjs.map +1 -0
  46. package/dist/src/constants/promptGuidelines.d.cts +13 -0
  47. package/dist/src/constants/promptGuidelines.d.cts.map +1 -0
  48. package/dist/src/constants/promptGuidelines.d.mts +13 -0
  49. package/dist/src/constants/promptGuidelines.d.mts.map +1 -0
  50. package/dist/src/constants/promptGuidelines.mjs +26 -0
  51. package/dist/src/constants/promptGuidelines.mjs.map +1 -0
  52. package/dist/src/constants/task.cjs +6 -0
  53. package/dist/src/constants/task.cjs.map +1 -0
  54. package/dist/src/constants/task.d.cts +4 -0
  55. package/dist/src/constants/task.d.cts.map +1 -0
  56. package/dist/src/constants/task.d.mts +4 -0
  57. package/dist/src/constants/task.d.mts.map +1 -0
  58. package/dist/src/constants/task.mjs +6 -0
  59. package/dist/src/constants/task.mjs.map +1 -0
  60. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs +90 -0
  61. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs.map +1 -0
  62. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs +89 -0
  63. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs.map +1 -0
  64. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs +7 -0
  65. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs.map +1 -0
  66. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs +8 -0
  67. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs.map +1 -0
  68. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs +317 -0
  69. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs.map +1 -0
  70. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts +39 -0
  71. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts.map +1 -0
  72. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts +39 -0
  73. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts.map +1 -0
  74. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs +317 -0
  75. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs.map +1 -0
  76. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs +95 -0
  77. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs.map +1 -0
  78. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs +95 -0
  79. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs.map +1 -0
  80. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs +30 -0
  81. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs.map +1 -0
  82. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts +20 -0
  83. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts.map +1 -0
  84. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts +20 -0
  85. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts.map +1 -0
  86. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs +29 -0
  87. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs.map +1 -0
  88. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs +19 -0
  89. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs.map +1 -0
  90. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs +19 -0
  91. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs.map +1 -0
  92. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs +8 -0
  93. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs.map +1 -0
  94. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs +9 -0
  95. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs.map +1 -0
  96. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs +7 -0
  97. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs.map +1 -0
  98. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs +8 -0
  99. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs.map +1 -0
  100. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs +6 -0
  101. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs.map +1 -0
  102. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs +6 -0
  103. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs.map +1 -0
  104. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs +6 -0
  105. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs.map +1 -0
  106. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs +6 -0
  107. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs.map +1 -0
  108. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs +6 -0
  109. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs.map +1 -0
  110. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs +6 -0
  111. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs.map +1 -0
  112. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs +6 -0
  113. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs.map +1 -0
  114. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs +6 -0
  115. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs.map +1 -0
  116. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs +7 -0
  117. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs.map +1 -0
  118. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs +8 -0
  119. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs.map +1 -0
  120. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +7 -0
  121. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +1 -0
  122. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +8 -0
  123. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +1 -0
  124. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs +7 -0
  125. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs.map +1 -0
  126. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs +8 -0
  127. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs.map +1 -0
  128. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs +7 -0
  129. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs.map +1 -0
  130. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs +8 -0
  131. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs.map +1 -0
  132. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs +20 -0
  133. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs.map +1 -0
  134. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs +20 -0
  135. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs.map +1 -0
  136. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs +7 -0
  137. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs.map +1 -0
  138. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs +8 -0
  139. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs.map +1 -0
  140. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +11 -0
  141. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
  142. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +12 -0
  143. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
  144. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +7 -0
  145. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
  146. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +8 -0
  147. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
  148. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs +160 -0
  149. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs.map +1 -0
  150. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts +25 -0
  151. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts.map +1 -0
  152. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts +25 -0
  153. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts.map +1 -0
  154. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs +157 -0
  155. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs.map +1 -0
  156. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs +109 -0
  157. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs.map +1 -0
  158. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs +107 -0
  159. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs.map +1 -0
  160. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs +7 -0
  161. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs.map +1 -0
  162. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs +8 -0
  163. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs.map +1 -0
  164. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs +7 -0
  165. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs.map +1 -0
  166. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs +8 -0
  167. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs.map +1 -0
  168. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs +333 -0
  169. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs.map +1 -0
  170. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts +61 -0
  171. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts.map +1 -0
  172. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts +61 -0
  173. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts.map +1 -0
  174. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs +322 -0
  175. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs.map +1 -0
  176. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs +9 -0
  177. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs.map +1 -0
  178. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs +9 -0
  179. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs.map +1 -0
  180. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs +149 -0
  181. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs.map +1 -0
  182. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts +59 -0
  183. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts.map +1 -0
  184. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts +59 -0
  185. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts.map +1 -0
  186. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs +142 -0
  187. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs.map +1 -0
  188. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs +358 -0
  189. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs.map +1 -0
  190. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts +61 -0
  191. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts.map +1 -0
  192. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts +61 -0
  193. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts.map +1 -0
  194. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs +355 -0
  195. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs.map +1 -0
  196. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs +165 -0
  197. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs.map +1 -0
  198. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts +39 -0
  199. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts.map +1 -0
  200. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts +39 -0
  201. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts.map +1 -0
  202. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs +164 -0
  203. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs.map +1 -0
  204. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs +13 -0
  205. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs.map +1 -0
  206. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs +13 -0
  207. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs.map +1 -0
  208. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs +7 -0
  209. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs.map +1 -0
  210. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs +8 -0
  211. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs.map +1 -0
  212. package/dist/src/models/task.cjs +29 -0
  213. package/dist/src/models/task.cjs.map +1 -0
  214. package/dist/src/models/task.d.cts +186 -0
  215. package/dist/src/models/task.d.cts.map +1 -0
  216. package/dist/src/models/task.d.mts +186 -0
  217. package/dist/src/models/task.d.mts.map +1 -0
  218. package/dist/src/models/task.mjs +26 -0
  219. package/dist/src/models/task.mjs.map +1 -0
  220. package/dist/src/models/taskGraph.cjs +67 -0
  221. package/dist/src/models/taskGraph.cjs.map +1 -0
  222. package/dist/src/models/taskGraph.d.cts +24 -0
  223. package/dist/src/models/taskGraph.d.cts.map +1 -0
  224. package/dist/src/models/taskGraph.d.mts +24 -0
  225. package/dist/src/models/taskGraph.d.mts.map +1 -0
  226. package/dist/src/models/taskGraph.mjs +63 -0
  227. package/dist/src/models/taskGraph.mjs.map +1 -0
  228. package/dist/src/schemas/apiContracts.cjs +51 -0
  229. package/dist/src/schemas/apiContracts.cjs.map +1 -0
  230. package/dist/src/schemas/apiContracts.d.cts +53 -0
  231. package/dist/src/schemas/apiContracts.d.cts.map +1 -0
  232. package/dist/src/schemas/apiContracts.d.mts +53 -0
  233. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  234. package/dist/src/schemas/apiContracts.mjs +49 -0
  235. package/dist/src/schemas/apiContracts.mjs.map +1 -0
  236. package/dist/src/schemas/task.cjs +130 -0
  237. package/dist/src/schemas/task.cjs.map +1 -0
  238. package/dist/src/schemas/task.d.cts +103 -0
  239. package/dist/src/schemas/task.d.cts.map +1 -0
  240. package/dist/src/schemas/task.d.mts +103 -0
  241. package/dist/src/schemas/task.d.mts.map +1 -0
  242. package/dist/src/schemas/task.mjs +117 -0
  243. package/dist/src/schemas/task.mjs.map +1 -0
  244. package/dist/src/services/config/index.cjs +88 -0
  245. package/dist/src/services/config/index.cjs.map +1 -0
  246. package/dist/src/services/config/index.d.cts +42 -0
  247. package/dist/src/services/config/index.d.cts.map +1 -0
  248. package/dist/src/services/config/index.d.mts +42 -0
  249. package/dist/src/services/config/index.d.mts.map +1 -0
  250. package/dist/src/services/config/index.mjs +72 -0
  251. package/dist/src/services/config/index.mjs.map +1 -0
  252. package/dist/src/services/contextContribution/index.cjs +51 -0
  253. package/dist/src/services/contextContribution/index.cjs.map +1 -0
  254. package/dist/src/services/contextContribution/index.mjs +46 -0
  255. package/dist/src/services/contextContribution/index.mjs.map +1 -0
  256. package/dist/src/services/delegation/index.cjs +629 -0
  257. package/dist/src/services/delegation/index.cjs.map +1 -0
  258. package/dist/src/services/delegation/index.d.cts +192 -0
  259. package/dist/src/services/delegation/index.d.cts.map +1 -0
  260. package/dist/src/services/delegation/index.d.mts +192 -0
  261. package/dist/src/services/delegation/index.d.mts.map +1 -0
  262. package/dist/src/services/delegation/index.mjs +623 -0
  263. package/dist/src/services/delegation/index.mjs.map +1 -0
  264. package/dist/src/services/delegationPlatform/index.cjs +23 -0
  265. package/dist/src/services/delegationPlatform/index.cjs.map +1 -0
  266. package/dist/src/services/delegationPlatform/index.mjs +21 -0
  267. package/dist/src/services/delegationPlatform/index.mjs.map +1 -0
  268. package/dist/src/services/invariants/index.cjs +64 -0
  269. package/dist/src/services/invariants/index.cjs.map +1 -0
  270. package/dist/src/services/invariants/index.d.cts +23 -0
  271. package/dist/src/services/invariants/index.d.cts.map +1 -0
  272. package/dist/src/services/invariants/index.d.mts +23 -0
  273. package/dist/src/services/invariants/index.d.mts.map +1 -0
  274. package/dist/src/services/invariants/index.mjs +62 -0
  275. package/dist/src/services/invariants/index.mjs.map +1 -0
  276. package/dist/src/services/logSinkTelemetry/index.cjs +43 -0
  277. package/dist/src/services/logSinkTelemetry/index.cjs.map +1 -0
  278. package/dist/src/services/logSinkTelemetry/index.d.cts +23 -0
  279. package/dist/src/services/logSinkTelemetry/index.d.cts.map +1 -0
  280. package/dist/src/services/logSinkTelemetry/index.d.mts +23 -0
  281. package/dist/src/services/logSinkTelemetry/index.d.mts.map +1 -0
  282. package/dist/src/services/logSinkTelemetry/index.mjs +41 -0
  283. package/dist/src/services/logSinkTelemetry/index.mjs.map +1 -0
  284. package/dist/src/services/paths/index.cjs +233 -0
  285. package/dist/src/services/paths/index.cjs.map +1 -0
  286. package/dist/src/services/paths/index.d.cts +25 -0
  287. package/dist/src/services/paths/index.d.cts.map +1 -0
  288. package/dist/src/services/paths/index.d.mts +25 -0
  289. package/dist/src/services/paths/index.d.mts.map +1 -0
  290. package/dist/src/services/paths/index.mjs +218 -0
  291. package/dist/src/services/paths/index.mjs.map +1 -0
  292. package/dist/src/services/processLiveness/index.cjs +20 -0
  293. package/dist/src/services/processLiveness/index.cjs.map +1 -0
  294. package/dist/src/services/processLiveness/index.d.cts +11 -0
  295. package/dist/src/services/processLiveness/index.d.cts.map +1 -0
  296. package/dist/src/services/processLiveness/index.d.mts +11 -0
  297. package/dist/src/services/processLiveness/index.d.mts.map +1 -0
  298. package/dist/src/services/processLiveness/index.mjs +20 -0
  299. package/dist/src/services/processLiveness/index.mjs.map +1 -0
  300. package/dist/src/services/reconcile/index.cjs +65 -0
  301. package/dist/src/services/reconcile/index.cjs.map +1 -0
  302. package/dist/src/services/reconcile/index.d.cts +33 -0
  303. package/dist/src/services/reconcile/index.d.cts.map +1 -0
  304. package/dist/src/services/reconcile/index.d.mts +33 -0
  305. package/dist/src/services/reconcile/index.d.mts.map +1 -0
  306. package/dist/src/services/reconcile/index.mjs +63 -0
  307. package/dist/src/services/reconcile/index.mjs.map +1 -0
  308. package/dist/src/services/reducer/index.cjs +350 -0
  309. package/dist/src/services/reducer/index.cjs.map +1 -0
  310. package/dist/src/services/reducer/index.d.cts +71 -0
  311. package/dist/src/services/reducer/index.d.cts.map +1 -0
  312. package/dist/src/services/reducer/index.d.mts +71 -0
  313. package/dist/src/services/reducer/index.d.mts.map +1 -0
  314. package/dist/src/services/reducer/index.mjs +345 -0
  315. package/dist/src/services/reducer/index.mjs.map +1 -0
  316. package/dist/src/services/taskNarration/index.cjs +32 -0
  317. package/dist/src/services/taskNarration/index.cjs.map +1 -0
  318. package/dist/src/services/taskNarration/index.mjs +32 -0
  319. package/dist/src/services/taskNarration/index.mjs.map +1 -0
  320. package/dist/src/services/taskResult/index.cjs +174 -0
  321. package/dist/src/services/taskResult/index.cjs.map +1 -0
  322. package/dist/src/services/taskResult/index.d.cts +50 -0
  323. package/dist/src/services/taskResult/index.d.cts.map +1 -0
  324. package/dist/src/services/taskResult/index.d.mts +50 -0
  325. package/dist/src/services/taskResult/index.d.mts.map +1 -0
  326. package/dist/src/services/taskResult/index.mjs +165 -0
  327. package/dist/src/services/taskResult/index.mjs.map +1 -0
  328. package/dist/src/services/taskStore/index.cjs +216 -0
  329. package/dist/src/services/taskStore/index.cjs.map +1 -0
  330. package/dist/src/services/taskStore/index.d.cts +69 -0
  331. package/dist/src/services/taskStore/index.d.cts.map +1 -0
  332. package/dist/src/services/taskStore/index.d.mts +69 -0
  333. package/dist/src/services/taskStore/index.d.mts.map +1 -0
  334. package/dist/src/services/taskStore/index.mjs +213 -0
  335. package/dist/src/services/taskStore/index.mjs.map +1 -0
  336. package/dist/src/types/delegation.cjs +7 -0
  337. package/dist/src/types/delegation.cjs.map +1 -0
  338. package/dist/src/types/delegation.d.cts +5 -0
  339. package/dist/src/types/delegation.d.cts.map +1 -0
  340. package/dist/src/types/delegation.d.mts +5 -0
  341. package/dist/src/types/delegation.d.mts.map +1 -0
  342. package/dist/src/types/delegation.mjs +7 -0
  343. package/dist/src/types/delegation.mjs.map +1 -0
  344. package/dist/src/types/telemetry.cjs +26 -0
  345. package/dist/src/types/telemetry.cjs.map +1 -0
  346. package/dist/src/types/telemetry.d.cts +35 -0
  347. package/dist/src/types/telemetry.d.cts.map +1 -0
  348. package/dist/src/types/telemetry.d.mts +35 -0
  349. package/dist/src/types/telemetry.d.mts.map +1 -0
  350. package/dist/src/types/telemetry.mjs +26 -0
  351. package/dist/src/types/telemetry.mjs.map +1 -0
  352. package/dist/src/types/webTasks.cjs +7 -0
  353. package/dist/src/types/webTasks.cjs.map +1 -0
  354. package/dist/src/types/webTasks.mjs +7 -0
  355. package/dist/src/types/webTasks.mjs.map +1 -0
  356. package/dist/store-invariants.cjs +5 -0
  357. package/dist/store-invariants.d.cts +2 -0
  358. package/dist/store-invariants.d.mts +2 -0
  359. package/dist/store-invariants.mjs +2 -0
  360. package/dist/store-paths.cjs +14 -0
  361. package/dist/store-paths.d.cts +2 -0
  362. package/dist/store-paths.d.mts +2 -0
  363. package/dist/store-paths.mjs +2 -0
  364. package/dist/store-process-liveness.cjs +3 -0
  365. package/dist/store-process-liveness.d.cts +2 -0
  366. package/dist/store-process-liveness.d.mts +2 -0
  367. package/dist/store-process-liveness.mjs +2 -0
  368. package/dist/store-reconcile.cjs +5 -0
  369. package/dist/store-reconcile.d.cts +2 -0
  370. package/dist/store-reconcile.d.mts +2 -0
  371. package/dist/store-reconcile.mjs +2 -0
  372. package/dist/store-reducer.cjs +8 -0
  373. package/dist/store-reducer.d.cts +2 -0
  374. package/dist/store-reducer.d.mts +2 -0
  375. package/dist/store-reducer.mjs +2 -0
  376. package/dist/store-task-graph.cjs +7 -0
  377. package/dist/store-task-graph.d.cts +2 -0
  378. package/dist/store-task-graph.d.mts +2 -0
  379. package/dist/store-task-graph.mjs +2 -0
  380. package/dist/store-task-store.cjs +3 -0
  381. package/dist/store-task-store.d.cts +2 -0
  382. package/dist/store-task-store.d.mts +2 -0
  383. package/dist/store-task-store.mjs +2 -0
  384. package/dist/store-types.cjs +6 -0
  385. package/dist/store-types.d.cts +2 -0
  386. package/dist/store-types.d.mts +2 -0
  387. package/dist/store-types.mjs +2 -0
  388. package/dist/tool-prompt-guidelines.cjs +3 -0
  389. package/dist/tool-prompt-guidelines.d.cts +2 -0
  390. package/dist/tool-prompt-guidelines.d.mts +2 -0
  391. package/dist/tool-prompt-guidelines.mjs +2 -0
  392. package/dist/tool-response-envelope.cjs +12 -0
  393. package/dist/tool-response-envelope.d.cts +2 -0
  394. package/dist/tool-response-envelope.d.mts +2 -0
  395. package/dist/tool-response-envelope.mjs +2 -0
  396. package/dist/tool-schema.cjs +17 -0
  397. package/dist/tool-schema.d.cts +3 -0
  398. package/dist/tool-schema.d.mts +3 -0
  399. package/dist/tool-schema.mjs +3 -0
  400. package/dist/tool-task-tool.cjs +6 -0
  401. package/dist/tool-task-tool.d.cts +3 -0
  402. package/dist/tool-task-tool.d.mts +3 -0
  403. package/dist/tool-task-tool.mjs +3 -0
  404. package/dist/tui-format.cjs +14 -0
  405. package/dist/tui-format.d.cts +2 -0
  406. package/dist/tui-format.d.mts +2 -0
  407. package/dist/tui-format.mjs +2 -0
  408. package/dist/tui-selectors.cjs +10 -0
  409. package/dist/tui-selectors.d.cts +2 -0
  410. package/dist/tui-selectors.d.mts +2 -0
  411. package/dist/tui-selectors.mjs +2 -0
  412. package/dist/tui-task-overlay.cjs +4 -0
  413. package/dist/tui-task-overlay.d.cts +2 -0
  414. package/dist/tui-task-overlay.d.mts +2 -0
  415. package/dist/tui-task-overlay.mjs +2 -0
  416. package/dist/tui-task-space.cjs +5 -0
  417. package/dist/tui-task-space.d.cts +2 -0
  418. package/dist/tui-task-space.d.mts +2 -0
  419. package/dist/tui-task-space.mjs +2 -0
  420. package/package.json +6 -6
@@ -0,0 +1,174 @@
1
+ const require_taskGraph = require("../../models/taskGraph.cjs");
2
+ //#region src/services/taskResult/index.ts
3
+ const MSG_ALL_COMPLETE_CLEAR = "All tasks are completed. Review the full task list once more, then close it with task {\"action\":\"clear\"}.";
4
+ /**
5
+ * Steering for a mixed batch. Unlike a batch of spawned subagents, a failed
6
+ * entry here had no side effect at all, so retrying the failures is the safe
7
+ * move and the model must be told so or it will do nothing. The hazard is the
8
+ * other half: resending an applied create would make a second task.
9
+ */
10
+ const MSG_UPSERT_PARTIAL = "The applied entries are committed. Resend only the failed entries, corrected — a failed entry changed nothing, so a corrected retry is safe. Do not resend an entry that already applied: an entry without an id creates a second task.";
11
+ const MSG_UPSERT_NONE_APPLIED = "No task changed, so the whole call can be resent once corrected.";
12
+ const MSG_ASSIGN_PARTIAL = "Successful assignments are already running. Retry only the failed entries after correcting their task state or arguments; do not resend successful entries.";
13
+ /** LLM-facing report for a native assignment batch. */
14
+ function formatAssignmentResults(items) {
15
+ if (items.length === 1) return items[0].message;
16
+ const succeeded = items.filter((item) => item.ok).length;
17
+ const failed = items.length - succeeded;
18
+ const lines = [`Assigned ${succeeded}/${items.length} tasks${failed > 0 ? `; ${failed} failed` : ""}.`, ...items.map((item) => item.ok ? `- [${item.index}] Delegated #${item.id} to ${item.agent}` : `- [${item.index}] Failed #${item.id} → ${item.agent}: ${item.message}`)];
19
+ if (failed > 0 && succeeded > 0) lines.push("", MSG_ASSIGN_PARTIAL);
20
+ if (failed === 0) lines.push("", "All assignments are running independently in the background. Continue non-overlapping work, or end your turn.");
21
+ return lines.join("\n");
22
+ }
23
+ /** `[status] #id subject (activeForm) [agent] ⛓ #dep` — the `list` line format. */
24
+ function formatListLine(task) {
25
+ const block = task.blockedBy?.length ? ` ⛓ ${task.blockedBy.map((id) => `#${id}`).join(",")}` : "";
26
+ const form = task.status === "in_progress" && task.activeForm ? ` (${task.activeForm})` : "";
27
+ const delegated = task.delegation && task.delegation.state !== "cancelled" ? ` [${task.delegation.agent}]` : "";
28
+ return `[${task.status}] #${task.id} ${task.subject}${form}${delegated}${block}`;
29
+ }
30
+ function formatDelegationLines(task) {
31
+ const delegation = task.delegation;
32
+ if (!delegation) return [];
33
+ const lines = [` delegated to: ${delegation.agent} (${delegation.state})`];
34
+ if (delegation.model) lines.push(` model: ${delegation.model}`);
35
+ if (delegation.result?.error) lines.push(` error: ${delegation.result.error}`);
36
+ if (delegation.result?.outputPath) lines.push(` output file: ${delegation.result.outputPath}`);
37
+ if (delegation.result?.output) lines.push(` output: ${delegation.result.output}`);
38
+ return lines;
39
+ }
40
+ function formatGetLines(task, document) {
41
+ const blocks = require_taskGraph.deriveBlocks(document.tasks).get(task.id) ?? [];
42
+ const lines = [`#${task.id} [${task.status}] ${task.subject}`];
43
+ if (task.description) lines.push(` description: ${task.description}`);
44
+ if (task.activeForm) lines.push(` activeForm: ${task.activeForm}`);
45
+ if (task.blockedBy?.length) lines.push(` blockedBy: ${task.blockedBy.map((id) => `#${id}`).join(", ")}`);
46
+ if (blocks.length) lines.push(` blocks: ${blocks.map((id) => `#${id}`).join(", ")}`);
47
+ if (task.owner) lines.push(` owner: ${task.owner}`);
48
+ lines.push(...formatDelegationLines(task));
49
+ return lines.join("\n");
50
+ }
51
+ /** One entry's outcome. Batch lines prefix this with `- [n] `. */
52
+ function formatUpsertItem(item) {
53
+ switch (item.kind) {
54
+ case "created": {
55
+ const ref = item.ref ? ` (ref "${item.ref}")` : "";
56
+ const deps = item.blockedBy?.length ? ` — blocked by ${item.blockedBy.map((id) => `#${id}`).join(", ")}` : "";
57
+ return `Created #${item.id}${ref}: ${item.subject} (${item.status})${deps}`;
58
+ }
59
+ case "updated": {
60
+ const transition = item.fromStatus === item.toStatus ? "" : ` (${item.fromStatus} -> ${item.toStatus})`;
61
+ return `Updated #${item.id}${transition}`;
62
+ }
63
+ case "unchanged": return `No change: #${item.id} already matches the requested values (status: ${item.status})`;
64
+ case "failed": return `Failed${item.id === void 0 ? "" : ` #${item.id}`}: ${item.message}`;
65
+ }
66
+ }
67
+ /**
68
+ * The thrown message when an upsert applied nothing. Kept separate from
69
+ * `formatContent` because the caller wraps it in the actionable Options block
70
+ * rather than returning it as a successful result.
71
+ */
72
+ function formatUpsertFailureText(op) {
73
+ if (op.items.length === 1) return op.items[0].kind === "failed" ? op.items[0].message : "no entry was applied";
74
+ return [
75
+ "no entry was applied.",
76
+ ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),
77
+ MSG_UPSERT_NONE_APPLIED
78
+ ].join("\n");
79
+ }
80
+ /**
81
+ * Pure formatter: `(op, document) -> string`. The switch is closed over `Op`,
82
+ * so a new reducer variant fails to compile until it is handled here.
83
+ */
84
+ function formatContent(op, document) {
85
+ switch (op.kind) {
86
+ case "upsert": {
87
+ const lines = op.items.length === 1 ? [formatUpsertItem(op.items[0])] : [
88
+ `Upsert applied ${op.applied}/${op.items.length} entries${op.failed > 0 ? `; ${op.failed} failed` : ""}.`,
89
+ ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),
90
+ ...op.failed > 0 ? ["", MSG_UPSERT_PARTIAL] : []
91
+ ];
92
+ if (op.applied > 0 && require_taskGraph.isTaskListComplete(document.tasks)) lines.push(MSG_ALL_COMPLETE_CLEAR);
93
+ return lines.join("\n");
94
+ }
95
+ case "delete": return `Deleted #${op.id}: ${op.subject}`;
96
+ case "clear": return `Closed task list (cleared ${op.count} tasks)`;
97
+ case "list": {
98
+ let view = document.tasks;
99
+ if (!op.includeDeleted) view = view.filter((task) => task.status !== "deleted");
100
+ if (op.statusFilter) view = view.filter((task) => task.status === op.statusFilter);
101
+ return view.length === 0 ? "No tasks" : view.map(formatListLine).join("\n");
102
+ }
103
+ case "get": return formatGetLines(op.task, document);
104
+ case "error": return `Error: ${op.message}`;
105
+ }
106
+ }
107
+ /** Build the LLM-facing envelope. `details` carries the post-mutation snapshot. */
108
+ function buildToolResult(action, params, document, op) {
109
+ return {
110
+ content: [{
111
+ type: "text",
112
+ text: formatContent(op, document)
113
+ }],
114
+ details: {
115
+ action,
116
+ params,
117
+ tasks: document.tasks,
118
+ nextId: document.nextId,
119
+ rev: document.rev,
120
+ ...op.kind === "error" ? { error: op.message } : {},
121
+ ...op.kind === "upsert" ? { upsert: {
122
+ applied: op.items.flatMap((item) => item.kind === "failed" ? [] : [item.id]),
123
+ failed: op.failed
124
+ } } : {}
125
+ }
126
+ };
127
+ }
128
+ /** Envelope for a native assignment batch, including ids used by the consolidated TUI result. */
129
+ function buildAssignmentResult(params, document, text, assignment) {
130
+ return {
131
+ content: [{
132
+ type: "text",
133
+ text
134
+ }],
135
+ details: {
136
+ action: "assign",
137
+ params,
138
+ tasks: document.tasks,
139
+ nextId: document.nextId,
140
+ rev: document.rev,
141
+ assignment
142
+ }
143
+ };
144
+ }
145
+ /** Envelope for delegation actions, which do not flow through the reducer. */
146
+ function buildTextResult(action, params, document, text, error) {
147
+ return {
148
+ content: [{
149
+ type: "text",
150
+ text: error ? `Error: ${error}` : text
151
+ }],
152
+ details: {
153
+ action,
154
+ params,
155
+ tasks: document.tasks,
156
+ nextId: document.nextId,
157
+ rev: document.rev,
158
+ ...error ? { error } : {}
159
+ }
160
+ };
161
+ }
162
+ //#endregion
163
+ exports.MSG_ALL_COMPLETE_CLEAR = MSG_ALL_COMPLETE_CLEAR;
164
+ exports.MSG_ASSIGN_PARTIAL = MSG_ASSIGN_PARTIAL;
165
+ exports.MSG_UPSERT_NONE_APPLIED = MSG_UPSERT_NONE_APPLIED;
166
+ exports.MSG_UPSERT_PARTIAL = MSG_UPSERT_PARTIAL;
167
+ exports.buildAssignmentResult = buildAssignmentResult;
168
+ exports.buildTextResult = buildTextResult;
169
+ exports.buildToolResult = buildToolResult;
170
+ exports.formatAssignmentResults = formatAssignmentResults;
171
+ exports.formatContent = formatContent;
172
+ exports.formatUpsertFailureText = formatUpsertFailureText;
173
+
174
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["deriveBlocks","isTaskListComplete"],"sources":["../../../../src/services/taskResult/index.ts"],"sourcesContent":["import type {\n AssignmentSummary,\n Task,\n TaskAction,\n TaskDetails,\n TaskDocument,\n TaskMutationParams,\n UpsertItemOutcome,\n} from '../../models/task';\nimport { deriveBlocks, isTaskListComplete } from '../../models/taskGraph';\nimport type { Op } from '../reducer';\n\nexport const MSG_ALL_COMPLETE_CLEAR =\n 'All tasks are completed. Review the full task list once more, then close it with task {\"action\":\"clear\"}.';\n\n/**\n * Steering for a mixed batch. Unlike a batch of spawned subagents, a failed\n * entry here had no side effect at all, so retrying the failures is the safe\n * move and the model must be told so or it will do nothing. The hazard is the\n * other half: resending an applied create would make a second task.\n */\nexport const MSG_UPSERT_PARTIAL =\n 'The applied entries are committed. Resend only the failed entries, corrected — a failed entry changed nothing, so a corrected retry is safe. Do not resend an entry that already applied: an entry without an id creates a second task.';\n\nexport const MSG_UPSERT_NONE_APPLIED = 'No task changed, so the whole call can be resent once corrected.';\n\nexport const MSG_ASSIGN_PARTIAL =\n 'Successful assignments are already running. Retry only the failed entries after correcting their task state or arguments; do not resend successful entries.';\n\nexport interface AssignmentItemResult {\n index: number;\n id: number;\n agent: string;\n ok: boolean;\n message: string;\n}\n\n/** LLM-facing report for a native assignment batch. */\nexport function formatAssignmentResults(items: readonly AssignmentItemResult[]): string {\n if (items.length === 1) return items[0].message;\n\n const succeeded = items.filter((item) => item.ok).length;\n const failed = items.length - succeeded;\n const lines = [\n `Assigned ${succeeded}/${items.length} tasks${failed > 0 ? `; ${failed} failed` : ''}.`,\n ...items.map((item) =>\n item.ok\n ? `- [${item.index}] Delegated #${item.id} to ${item.agent}`\n : `- [${item.index}] Failed #${item.id} → ${item.agent}: ${item.message}`,\n ),\n ];\n\n if (failed > 0 && succeeded > 0) lines.push('', MSG_ASSIGN_PARTIAL);\n if (failed === 0) {\n lines.push(\n '',\n 'All assignments are running independently in the background. Continue non-overlapping work, or end your turn.',\n );\n }\n return lines.join('\\n');\n}\n\n/** `[status] #id subject (activeForm) [agent] ⛓ #dep` — the `list` line format. */\nfunction formatListLine(task: Task): string {\n const block = task.blockedBy?.length ? ` ⛓ ${task.blockedBy.map((id) => `#${id}`).join(',')}` : '';\n const form = task.status === 'in_progress' && task.activeForm ? ` (${task.activeForm})` : '';\n const delegated = task.delegation && task.delegation.state !== 'cancelled' ? ` [${task.delegation.agent}]` : '';\n return `[${task.status}] #${task.id} ${task.subject}${form}${delegated}${block}`;\n}\n\nfunction formatDelegationLines(task: Task): string[] {\n const delegation = task.delegation;\n if (!delegation) return [];\n\n const lines = [` delegated to: ${delegation.agent} (${delegation.state})`];\n if (delegation.model) lines.push(` model: ${delegation.model}`);\n if (delegation.result?.error) lines.push(` error: ${delegation.result.error}`);\n if (delegation.result?.outputPath) lines.push(` output file: ${delegation.result.outputPath}`);\n if (delegation.result?.output) lines.push(` output: ${delegation.result.output}`);\n return lines;\n}\n\nfunction formatGetLines(task: Task, document: TaskDocument): string {\n const blocks = deriveBlocks(document.tasks).get(task.id) ?? [];\n const lines = [`#${task.id} [${task.status}] ${task.subject}`];\n if (task.description) lines.push(` description: ${task.description}`);\n if (task.activeForm) lines.push(` activeForm: ${task.activeForm}`);\n if (task.blockedBy?.length) lines.push(` blockedBy: ${task.blockedBy.map((id) => `#${id}`).join(', ')}`);\n if (blocks.length) lines.push(` blocks: ${blocks.map((id) => `#${id}`).join(', ')}`);\n if (task.owner) lines.push(` owner: ${task.owner}`);\n lines.push(...formatDelegationLines(task));\n return lines.join('\\n');\n}\n\n/** One entry's outcome. Batch lines prefix this with `- [n] `. */\nfunction formatUpsertItem(item: UpsertItemOutcome): string {\n switch (item.kind) {\n case 'created': {\n const ref = item.ref ? ` (ref \"${item.ref}\")` : '';\n const deps = item.blockedBy?.length ? ` — blocked by ${item.blockedBy.map((id) => `#${id}`).join(', ')}` : '';\n return `Created #${item.id}${ref}: ${item.subject} (${item.status})${deps}`;\n }\n case 'updated': {\n const transition = item.fromStatus === item.toStatus ? '' : ` (${item.fromStatus} -> ${item.toStatus})`;\n return `Updated #${item.id}${transition}`;\n }\n case 'unchanged':\n return `No change: #${item.id} already matches the requested values (status: ${item.status})`;\n case 'failed':\n return `Failed${item.id === undefined ? '' : ` #${item.id}`}: ${item.message}`;\n }\n}\n\n/**\n * The thrown message when an upsert applied nothing. Kept separate from\n * `formatContent` because the caller wraps it in the actionable Options block\n * rather than returning it as a successful result.\n */\nexport function formatUpsertFailureText(op: Extract<Op, { kind: 'upsert' }>): string {\n if (op.items.length === 1) return op.items[0].kind === 'failed' ? op.items[0].message : 'no entry was applied';\n return [\n 'no entry was applied.',\n ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),\n MSG_UPSERT_NONE_APPLIED,\n ].join('\\n');\n}\n\n/**\n * Pure formatter: `(op, document) -> string`. The switch is closed over `Op`,\n * so a new reducer variant fails to compile until it is handled here.\n */\nexport function formatContent(op: Op, document: TaskDocument): string {\n switch (op.kind) {\n case 'upsert': {\n // A batch of one is the common case and must not read like a bulk\n // report, so it keeps the exact single-line shape it has always had.\n const lines =\n op.items.length === 1\n ? [formatUpsertItem(op.items[0])]\n : [\n `Upsert applied ${op.applied}/${op.items.length} entries${op.failed > 0 ? `; ${op.failed} failed` : ''}.`,\n ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),\n ...(op.failed > 0 ? ['', MSG_UPSERT_PARTIAL] : []),\n ];\n // Once, last, and only when something landed: emitting it per entry\n // would repeat it for every completion in a batch.\n if (op.applied > 0 && isTaskListComplete(document.tasks)) lines.push(MSG_ALL_COMPLETE_CLEAR);\n return lines.join('\\n');\n }\n case 'delete':\n return `Deleted #${op.id}: ${op.subject}`;\n case 'clear':\n return `Closed task list (cleared ${op.count} tasks)`;\n case 'list': {\n let view = document.tasks;\n if (!op.includeDeleted) view = view.filter((task) => task.status !== 'deleted');\n if (op.statusFilter) view = view.filter((task) => task.status === op.statusFilter);\n return view.length === 0 ? 'No tasks' : view.map(formatListLine).join('\\n');\n }\n case 'get':\n return formatGetLines(op.task, document);\n case 'error':\n return `Error: ${op.message}`;\n }\n}\n\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n details: TaskDetails;\n}\n\n/** Build the LLM-facing envelope. `details` carries the post-mutation snapshot. */\nexport function buildToolResult(\n action: TaskAction,\n params: TaskMutationParams,\n document: TaskDocument,\n op: Op,\n): ToolResult {\n return {\n content: [{ type: 'text', text: formatContent(op, document) }],\n details: {\n action,\n params: params as Record<string, unknown>,\n tasks: document.tasks,\n nextId: document.nextId,\n rev: document.rev,\n ...(op.kind === 'error' ? { error: op.message } : {}),\n // Deliberately no `error` on a partial success: renderResult treats\n // `details.error` as total failure and would hide the rows for the\n // entries that did land.\n ...(op.kind === 'upsert'\n ? {\n upsert: {\n applied: op.items.flatMap((item) => (item.kind === 'failed' ? [] : [item.id])),\n failed: op.failed,\n },\n }\n : {}),\n },\n };\n}\n\n/** Envelope for a native assignment batch, including ids used by the consolidated TUI result. */\nexport function buildAssignmentResult(\n params: TaskMutationParams,\n document: TaskDocument,\n text: string,\n assignment: AssignmentSummary,\n): ToolResult {\n return {\n content: [{ type: 'text', text }],\n details: {\n action: 'assign',\n params: params as Record<string, unknown>,\n tasks: document.tasks,\n nextId: document.nextId,\n rev: document.rev,\n assignment,\n },\n };\n}\n\n/** Envelope for delegation actions, which do not flow through the reducer. */\nexport function buildTextResult(\n action: TaskAction,\n params: TaskMutationParams,\n document: TaskDocument,\n text: string,\n error?: string,\n): ToolResult {\n return {\n content: [{ type: 'text', text: error ? `Error: ${error}` : text }],\n details: {\n action,\n params: params as Record<string, unknown>,\n tasks: document.tasks,\n nextId: document.nextId,\n rev: document.rev,\n ...(error ? { error } : {}),\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { AssignmentSummary, TaskAction, TaskDetails, TaskDocument, TaskMutationParams } from "../../models/task.cjs";
2
+ import { Op } from "../reducer/index.cjs";
3
+ //#region src/services/taskResult/index.d.ts
4
+ export declare const MSG_ALL_COMPLETE_CLEAR = "All tasks are completed. Review the full task list once more, then close it with task {\"action\":\"clear\"}.";
5
+ /**
6
+ * Steering for a mixed batch. Unlike a batch of spawned subagents, a failed
7
+ * entry here had no side effect at all, so retrying the failures is the safe
8
+ * move and the model must be told so or it will do nothing. The hazard is the
9
+ * other half: resending an applied create would make a second task.
10
+ */
11
+ export declare const MSG_UPSERT_PARTIAL = "The applied entries are committed. Resend only the failed entries, corrected — a failed entry changed nothing, so a corrected retry is safe. Do not resend an entry that already applied: an entry without an id creates a second task.";
12
+ export declare const MSG_UPSERT_NONE_APPLIED = "No task changed, so the whole call can be resent once corrected.";
13
+ export declare const MSG_ASSIGN_PARTIAL = "Successful assignments are already running. Retry only the failed entries after correcting their task state or arguments; do not resend successful entries.";
14
+ export interface AssignmentItemResult {
15
+ index: number;
16
+ id: number;
17
+ agent: string;
18
+ ok: boolean;
19
+ message: string;
20
+ }
21
+ /** LLM-facing report for a native assignment batch. */
22
+ export declare function formatAssignmentResults(items: readonly AssignmentItemResult[]): string;
23
+ /**
24
+ * The thrown message when an upsert applied nothing. Kept separate from
25
+ * `formatContent` because the caller wraps it in the actionable Options block
26
+ * rather than returning it as a successful result.
27
+ */
28
+ export declare function formatUpsertFailureText(op: Extract<Op, {
29
+ kind: 'upsert';
30
+ }>): string;
31
+ /**
32
+ * Pure formatter: `(op, document) -> string`. The switch is closed over `Op`,
33
+ * so a new reducer variant fails to compile until it is handled here.
34
+ */
35
+ export declare function formatContent(op: Op, document: TaskDocument): string;
36
+ export interface ToolResult {
37
+ content: Array<{
38
+ type: 'text';
39
+ text: string;
40
+ }>;
41
+ details: TaskDetails;
42
+ }
43
+ /** Build the LLM-facing envelope. `details` carries the post-mutation snapshot. */
44
+ export declare function buildToolResult(action: TaskAction, params: TaskMutationParams, document: TaskDocument, op: Op): ToolResult;
45
+ /** Envelope for a native assignment batch, including ids used by the consolidated TUI result. */
46
+ export declare function buildAssignmentResult(params: TaskMutationParams, document: TaskDocument, text: string, assignment: AssignmentSummary): ToolResult;
47
+ /** Envelope for delegation actions, which do not flow through the reducer. */
48
+ export declare function buildTextResult(action: TaskAction, params: TaskMutationParams, document: TaskDocument, text: string, error?: string): ToolResult;
49
+ //#endregion
50
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/taskResult/index.ts"],"mappings":";;;qBAYa;;;;;;;qBASA;qBAGA;qBAEA;iBAGI;EACf;EACA;EACA;EACA;EACA;;;wBAIc,wBAAwB,gBAAgB;;;;;;wBAgFxC,wBAAwB,IAAI,QAAQ;EAAM;;;;;;wBAa1C,cAAc,IAAI,IAAI,UAAU;iBAmC/B;EACf,SAAS;IAAQ;IAAc;;EAC/B,SAAS;;;wBAIK,gBACd,QAAQ,YACR,QAAQ,oBACR,UAAU,cACV,IAAI,KACH;;wBA0Ba,sBACd,QAAQ,oBACR,UAAU,cACV,cACA,YAAY,oBACX;;wBAea,gBACd,QAAQ,YACR,QAAQ,oBACR,UAAU,cACV,cACA,iBACC"}
@@ -0,0 +1,50 @@
1
+ import { AssignmentSummary, TaskAction, TaskDetails, TaskDocument, TaskMutationParams } from "../../models/task.mjs";
2
+ import { Op } from "../reducer/index.mjs";
3
+ //#region src/services/taskResult/index.d.ts
4
+ export declare const MSG_ALL_COMPLETE_CLEAR = "All tasks are completed. Review the full task list once more, then close it with task {\"action\":\"clear\"}.";
5
+ /**
6
+ * Steering for a mixed batch. Unlike a batch of spawned subagents, a failed
7
+ * entry here had no side effect at all, so retrying the failures is the safe
8
+ * move and the model must be told so or it will do nothing. The hazard is the
9
+ * other half: resending an applied create would make a second task.
10
+ */
11
+ export declare const MSG_UPSERT_PARTIAL = "The applied entries are committed. Resend only the failed entries, corrected — a failed entry changed nothing, so a corrected retry is safe. Do not resend an entry that already applied: an entry without an id creates a second task.";
12
+ export declare const MSG_UPSERT_NONE_APPLIED = "No task changed, so the whole call can be resent once corrected.";
13
+ export declare const MSG_ASSIGN_PARTIAL = "Successful assignments are already running. Retry only the failed entries after correcting their task state or arguments; do not resend successful entries.";
14
+ export interface AssignmentItemResult {
15
+ index: number;
16
+ id: number;
17
+ agent: string;
18
+ ok: boolean;
19
+ message: string;
20
+ }
21
+ /** LLM-facing report for a native assignment batch. */
22
+ export declare function formatAssignmentResults(items: readonly AssignmentItemResult[]): string;
23
+ /**
24
+ * The thrown message when an upsert applied nothing. Kept separate from
25
+ * `formatContent` because the caller wraps it in the actionable Options block
26
+ * rather than returning it as a successful result.
27
+ */
28
+ export declare function formatUpsertFailureText(op: Extract<Op, {
29
+ kind: 'upsert';
30
+ }>): string;
31
+ /**
32
+ * Pure formatter: `(op, document) -> string`. The switch is closed over `Op`,
33
+ * so a new reducer variant fails to compile until it is handled here.
34
+ */
35
+ export declare function formatContent(op: Op, document: TaskDocument): string;
36
+ export interface ToolResult {
37
+ content: Array<{
38
+ type: 'text';
39
+ text: string;
40
+ }>;
41
+ details: TaskDetails;
42
+ }
43
+ /** Build the LLM-facing envelope. `details` carries the post-mutation snapshot. */
44
+ export declare function buildToolResult(action: TaskAction, params: TaskMutationParams, document: TaskDocument, op: Op): ToolResult;
45
+ /** Envelope for a native assignment batch, including ids used by the consolidated TUI result. */
46
+ export declare function buildAssignmentResult(params: TaskMutationParams, document: TaskDocument, text: string, assignment: AssignmentSummary): ToolResult;
47
+ /** Envelope for delegation actions, which do not flow through the reducer. */
48
+ export declare function buildTextResult(action: TaskAction, params: TaskMutationParams, document: TaskDocument, text: string, error?: string): ToolResult;
49
+ //#endregion
50
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/taskResult/index.ts"],"mappings":";;;qBAYa;;;;;;;qBASA;qBAGA;qBAEA;iBAGI;EACf;EACA;EACA;EACA;EACA;;;wBAIc,wBAAwB,gBAAgB;;;;;;wBAgFxC,wBAAwB,IAAI,QAAQ;EAAM;;;;;;wBAa1C,cAAc,IAAI,IAAI,UAAU;iBAmC/B;EACf,SAAS;IAAQ;IAAc;;EAC/B,SAAS;;;wBAIK,gBACd,QAAQ,YACR,QAAQ,oBACR,UAAU,cACV,IAAI,KACH;;wBA0Ba,sBACd,QAAQ,oBACR,UAAU,cACV,cACA,YAAY,oBACX;;wBAea,gBACd,QAAQ,YACR,QAAQ,oBACR,UAAU,cACV,cACA,iBACC"}
@@ -0,0 +1,165 @@
1
+ import { deriveBlocks, isTaskListComplete } from "../../models/taskGraph.mjs";
2
+ //#region src/services/taskResult/index.ts
3
+ const MSG_ALL_COMPLETE_CLEAR = "All tasks are completed. Review the full task list once more, then close it with task {\"action\":\"clear\"}.";
4
+ /**
5
+ * Steering for a mixed batch. Unlike a batch of spawned subagents, a failed
6
+ * entry here had no side effect at all, so retrying the failures is the safe
7
+ * move and the model must be told so or it will do nothing. The hazard is the
8
+ * other half: resending an applied create would make a second task.
9
+ */
10
+ const MSG_UPSERT_PARTIAL = "The applied entries are committed. Resend only the failed entries, corrected — a failed entry changed nothing, so a corrected retry is safe. Do not resend an entry that already applied: an entry without an id creates a second task.";
11
+ const MSG_UPSERT_NONE_APPLIED = "No task changed, so the whole call can be resent once corrected.";
12
+ const MSG_ASSIGN_PARTIAL = "Successful assignments are already running. Retry only the failed entries after correcting their task state or arguments; do not resend successful entries.";
13
+ /** LLM-facing report for a native assignment batch. */
14
+ function formatAssignmentResults(items) {
15
+ if (items.length === 1) return items[0].message;
16
+ const succeeded = items.filter((item) => item.ok).length;
17
+ const failed = items.length - succeeded;
18
+ const lines = [`Assigned ${succeeded}/${items.length} tasks${failed > 0 ? `; ${failed} failed` : ""}.`, ...items.map((item) => item.ok ? `- [${item.index}] Delegated #${item.id} to ${item.agent}` : `- [${item.index}] Failed #${item.id} → ${item.agent}: ${item.message}`)];
19
+ if (failed > 0 && succeeded > 0) lines.push("", MSG_ASSIGN_PARTIAL);
20
+ if (failed === 0) lines.push("", "All assignments are running independently in the background. Continue non-overlapping work, or end your turn.");
21
+ return lines.join("\n");
22
+ }
23
+ /** `[status] #id subject (activeForm) [agent] ⛓ #dep` — the `list` line format. */
24
+ function formatListLine(task) {
25
+ const block = task.blockedBy?.length ? ` ⛓ ${task.blockedBy.map((id) => `#${id}`).join(",")}` : "";
26
+ const form = task.status === "in_progress" && task.activeForm ? ` (${task.activeForm})` : "";
27
+ const delegated = task.delegation && task.delegation.state !== "cancelled" ? ` [${task.delegation.agent}]` : "";
28
+ return `[${task.status}] #${task.id} ${task.subject}${form}${delegated}${block}`;
29
+ }
30
+ function formatDelegationLines(task) {
31
+ const delegation = task.delegation;
32
+ if (!delegation) return [];
33
+ const lines = [` delegated to: ${delegation.agent} (${delegation.state})`];
34
+ if (delegation.model) lines.push(` model: ${delegation.model}`);
35
+ if (delegation.result?.error) lines.push(` error: ${delegation.result.error}`);
36
+ if (delegation.result?.outputPath) lines.push(` output file: ${delegation.result.outputPath}`);
37
+ if (delegation.result?.output) lines.push(` output: ${delegation.result.output}`);
38
+ return lines;
39
+ }
40
+ function formatGetLines(task, document) {
41
+ const blocks = deriveBlocks(document.tasks).get(task.id) ?? [];
42
+ const lines = [`#${task.id} [${task.status}] ${task.subject}`];
43
+ if (task.description) lines.push(` description: ${task.description}`);
44
+ if (task.activeForm) lines.push(` activeForm: ${task.activeForm}`);
45
+ if (task.blockedBy?.length) lines.push(` blockedBy: ${task.blockedBy.map((id) => `#${id}`).join(", ")}`);
46
+ if (blocks.length) lines.push(` blocks: ${blocks.map((id) => `#${id}`).join(", ")}`);
47
+ if (task.owner) lines.push(` owner: ${task.owner}`);
48
+ lines.push(...formatDelegationLines(task));
49
+ return lines.join("\n");
50
+ }
51
+ /** One entry's outcome. Batch lines prefix this with `- [n] `. */
52
+ function formatUpsertItem(item) {
53
+ switch (item.kind) {
54
+ case "created": {
55
+ const ref = item.ref ? ` (ref "${item.ref}")` : "";
56
+ const deps = item.blockedBy?.length ? ` — blocked by ${item.blockedBy.map((id) => `#${id}`).join(", ")}` : "";
57
+ return `Created #${item.id}${ref}: ${item.subject} (${item.status})${deps}`;
58
+ }
59
+ case "updated": {
60
+ const transition = item.fromStatus === item.toStatus ? "" : ` (${item.fromStatus} -> ${item.toStatus})`;
61
+ return `Updated #${item.id}${transition}`;
62
+ }
63
+ case "unchanged": return `No change: #${item.id} already matches the requested values (status: ${item.status})`;
64
+ case "failed": return `Failed${item.id === void 0 ? "" : ` #${item.id}`}: ${item.message}`;
65
+ }
66
+ }
67
+ /**
68
+ * The thrown message when an upsert applied nothing. Kept separate from
69
+ * `formatContent` because the caller wraps it in the actionable Options block
70
+ * rather than returning it as a successful result.
71
+ */
72
+ function formatUpsertFailureText(op) {
73
+ if (op.items.length === 1) return op.items[0].kind === "failed" ? op.items[0].message : "no entry was applied";
74
+ return [
75
+ "no entry was applied.",
76
+ ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),
77
+ MSG_UPSERT_NONE_APPLIED
78
+ ].join("\n");
79
+ }
80
+ /**
81
+ * Pure formatter: `(op, document) -> string`. The switch is closed over `Op`,
82
+ * so a new reducer variant fails to compile until it is handled here.
83
+ */
84
+ function formatContent(op, document) {
85
+ switch (op.kind) {
86
+ case "upsert": {
87
+ const lines = op.items.length === 1 ? [formatUpsertItem(op.items[0])] : [
88
+ `Upsert applied ${op.applied}/${op.items.length} entries${op.failed > 0 ? `; ${op.failed} failed` : ""}.`,
89
+ ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),
90
+ ...op.failed > 0 ? ["", MSG_UPSERT_PARTIAL] : []
91
+ ];
92
+ if (op.applied > 0 && isTaskListComplete(document.tasks)) lines.push(MSG_ALL_COMPLETE_CLEAR);
93
+ return lines.join("\n");
94
+ }
95
+ case "delete": return `Deleted #${op.id}: ${op.subject}`;
96
+ case "clear": return `Closed task list (cleared ${op.count} tasks)`;
97
+ case "list": {
98
+ let view = document.tasks;
99
+ if (!op.includeDeleted) view = view.filter((task) => task.status !== "deleted");
100
+ if (op.statusFilter) view = view.filter((task) => task.status === op.statusFilter);
101
+ return view.length === 0 ? "No tasks" : view.map(formatListLine).join("\n");
102
+ }
103
+ case "get": return formatGetLines(op.task, document);
104
+ case "error": return `Error: ${op.message}`;
105
+ }
106
+ }
107
+ /** Build the LLM-facing envelope. `details` carries the post-mutation snapshot. */
108
+ function buildToolResult(action, params, document, op) {
109
+ return {
110
+ content: [{
111
+ type: "text",
112
+ text: formatContent(op, document)
113
+ }],
114
+ details: {
115
+ action,
116
+ params,
117
+ tasks: document.tasks,
118
+ nextId: document.nextId,
119
+ rev: document.rev,
120
+ ...op.kind === "error" ? { error: op.message } : {},
121
+ ...op.kind === "upsert" ? { upsert: {
122
+ applied: op.items.flatMap((item) => item.kind === "failed" ? [] : [item.id]),
123
+ failed: op.failed
124
+ } } : {}
125
+ }
126
+ };
127
+ }
128
+ /** Envelope for a native assignment batch, including ids used by the consolidated TUI result. */
129
+ function buildAssignmentResult(params, document, text, assignment) {
130
+ return {
131
+ content: [{
132
+ type: "text",
133
+ text
134
+ }],
135
+ details: {
136
+ action: "assign",
137
+ params,
138
+ tasks: document.tasks,
139
+ nextId: document.nextId,
140
+ rev: document.rev,
141
+ assignment
142
+ }
143
+ };
144
+ }
145
+ /** Envelope for delegation actions, which do not flow through the reducer. */
146
+ function buildTextResult(action, params, document, text, error) {
147
+ return {
148
+ content: [{
149
+ type: "text",
150
+ text: error ? `Error: ${error}` : text
151
+ }],
152
+ details: {
153
+ action,
154
+ params,
155
+ tasks: document.tasks,
156
+ nextId: document.nextId,
157
+ rev: document.rev,
158
+ ...error ? { error } : {}
159
+ }
160
+ };
161
+ }
162
+ //#endregion
163
+ export { MSG_ALL_COMPLETE_CLEAR, MSG_ASSIGN_PARTIAL, MSG_UPSERT_NONE_APPLIED, MSG_UPSERT_PARTIAL, buildAssignmentResult, buildTextResult, buildToolResult, formatAssignmentResults, formatContent, formatUpsertFailureText };
164
+
165
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/taskResult/index.ts"],"sourcesContent":["import type {\n AssignmentSummary,\n Task,\n TaskAction,\n TaskDetails,\n TaskDocument,\n TaskMutationParams,\n UpsertItemOutcome,\n} from '../../models/task';\nimport { deriveBlocks, isTaskListComplete } from '../../models/taskGraph';\nimport type { Op } from '../reducer';\n\nexport const MSG_ALL_COMPLETE_CLEAR =\n 'All tasks are completed. Review the full task list once more, then close it with task {\"action\":\"clear\"}.';\n\n/**\n * Steering for a mixed batch. Unlike a batch of spawned subagents, a failed\n * entry here had no side effect at all, so retrying the failures is the safe\n * move and the model must be told so or it will do nothing. The hazard is the\n * other half: resending an applied create would make a second task.\n */\nexport const MSG_UPSERT_PARTIAL =\n 'The applied entries are committed. Resend only the failed entries, corrected — a failed entry changed nothing, so a corrected retry is safe. Do not resend an entry that already applied: an entry without an id creates a second task.';\n\nexport const MSG_UPSERT_NONE_APPLIED = 'No task changed, so the whole call can be resent once corrected.';\n\nexport const MSG_ASSIGN_PARTIAL =\n 'Successful assignments are already running. Retry only the failed entries after correcting their task state or arguments; do not resend successful entries.';\n\nexport interface AssignmentItemResult {\n index: number;\n id: number;\n agent: string;\n ok: boolean;\n message: string;\n}\n\n/** LLM-facing report for a native assignment batch. */\nexport function formatAssignmentResults(items: readonly AssignmentItemResult[]): string {\n if (items.length === 1) return items[0].message;\n\n const succeeded = items.filter((item) => item.ok).length;\n const failed = items.length - succeeded;\n const lines = [\n `Assigned ${succeeded}/${items.length} tasks${failed > 0 ? `; ${failed} failed` : ''}.`,\n ...items.map((item) =>\n item.ok\n ? `- [${item.index}] Delegated #${item.id} to ${item.agent}`\n : `- [${item.index}] Failed #${item.id} → ${item.agent}: ${item.message}`,\n ),\n ];\n\n if (failed > 0 && succeeded > 0) lines.push('', MSG_ASSIGN_PARTIAL);\n if (failed === 0) {\n lines.push(\n '',\n 'All assignments are running independently in the background. Continue non-overlapping work, or end your turn.',\n );\n }\n return lines.join('\\n');\n}\n\n/** `[status] #id subject (activeForm) [agent] ⛓ #dep` — the `list` line format. */\nfunction formatListLine(task: Task): string {\n const block = task.blockedBy?.length ? ` ⛓ ${task.blockedBy.map((id) => `#${id}`).join(',')}` : '';\n const form = task.status === 'in_progress' && task.activeForm ? ` (${task.activeForm})` : '';\n const delegated = task.delegation && task.delegation.state !== 'cancelled' ? ` [${task.delegation.agent}]` : '';\n return `[${task.status}] #${task.id} ${task.subject}${form}${delegated}${block}`;\n}\n\nfunction formatDelegationLines(task: Task): string[] {\n const delegation = task.delegation;\n if (!delegation) return [];\n\n const lines = [` delegated to: ${delegation.agent} (${delegation.state})`];\n if (delegation.model) lines.push(` model: ${delegation.model}`);\n if (delegation.result?.error) lines.push(` error: ${delegation.result.error}`);\n if (delegation.result?.outputPath) lines.push(` output file: ${delegation.result.outputPath}`);\n if (delegation.result?.output) lines.push(` output: ${delegation.result.output}`);\n return lines;\n}\n\nfunction formatGetLines(task: Task, document: TaskDocument): string {\n const blocks = deriveBlocks(document.tasks).get(task.id) ?? [];\n const lines = [`#${task.id} [${task.status}] ${task.subject}`];\n if (task.description) lines.push(` description: ${task.description}`);\n if (task.activeForm) lines.push(` activeForm: ${task.activeForm}`);\n if (task.blockedBy?.length) lines.push(` blockedBy: ${task.blockedBy.map((id) => `#${id}`).join(', ')}`);\n if (blocks.length) lines.push(` blocks: ${blocks.map((id) => `#${id}`).join(', ')}`);\n if (task.owner) lines.push(` owner: ${task.owner}`);\n lines.push(...formatDelegationLines(task));\n return lines.join('\\n');\n}\n\n/** One entry's outcome. Batch lines prefix this with `- [n] `. */\nfunction formatUpsertItem(item: UpsertItemOutcome): string {\n switch (item.kind) {\n case 'created': {\n const ref = item.ref ? ` (ref \"${item.ref}\")` : '';\n const deps = item.blockedBy?.length ? ` — blocked by ${item.blockedBy.map((id) => `#${id}`).join(', ')}` : '';\n return `Created #${item.id}${ref}: ${item.subject} (${item.status})${deps}`;\n }\n case 'updated': {\n const transition = item.fromStatus === item.toStatus ? '' : ` (${item.fromStatus} -> ${item.toStatus})`;\n return `Updated #${item.id}${transition}`;\n }\n case 'unchanged':\n return `No change: #${item.id} already matches the requested values (status: ${item.status})`;\n case 'failed':\n return `Failed${item.id === undefined ? '' : ` #${item.id}`}: ${item.message}`;\n }\n}\n\n/**\n * The thrown message when an upsert applied nothing. Kept separate from\n * `formatContent` because the caller wraps it in the actionable Options block\n * rather than returning it as a successful result.\n */\nexport function formatUpsertFailureText(op: Extract<Op, { kind: 'upsert' }>): string {\n if (op.items.length === 1) return op.items[0].kind === 'failed' ? op.items[0].message : 'no entry was applied';\n return [\n 'no entry was applied.',\n ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),\n MSG_UPSERT_NONE_APPLIED,\n ].join('\\n');\n}\n\n/**\n * Pure formatter: `(op, document) -> string`. The switch is closed over `Op`,\n * so a new reducer variant fails to compile until it is handled here.\n */\nexport function formatContent(op: Op, document: TaskDocument): string {\n switch (op.kind) {\n case 'upsert': {\n // A batch of one is the common case and must not read like a bulk\n // report, so it keeps the exact single-line shape it has always had.\n const lines =\n op.items.length === 1\n ? [formatUpsertItem(op.items[0])]\n : [\n `Upsert applied ${op.applied}/${op.items.length} entries${op.failed > 0 ? `; ${op.failed} failed` : ''}.`,\n ...op.items.map((item) => `- [${item.index}] ${formatUpsertItem(item)}`),\n ...(op.failed > 0 ? ['', MSG_UPSERT_PARTIAL] : []),\n ];\n // Once, last, and only when something landed: emitting it per entry\n // would repeat it for every completion in a batch.\n if (op.applied > 0 && isTaskListComplete(document.tasks)) lines.push(MSG_ALL_COMPLETE_CLEAR);\n return lines.join('\\n');\n }\n case 'delete':\n return `Deleted #${op.id}: ${op.subject}`;\n case 'clear':\n return `Closed task list (cleared ${op.count} tasks)`;\n case 'list': {\n let view = document.tasks;\n if (!op.includeDeleted) view = view.filter((task) => task.status !== 'deleted');\n if (op.statusFilter) view = view.filter((task) => task.status === op.statusFilter);\n return view.length === 0 ? 'No tasks' : view.map(formatListLine).join('\\n');\n }\n case 'get':\n return formatGetLines(op.task, document);\n case 'error':\n return `Error: ${op.message}`;\n }\n}\n\nexport interface ToolResult {\n content: Array<{ type: 'text'; text: string }>;\n details: TaskDetails;\n}\n\n/** Build the LLM-facing envelope. `details` carries the post-mutation snapshot. */\nexport function buildToolResult(\n action: TaskAction,\n params: TaskMutationParams,\n document: TaskDocument,\n op: Op,\n): ToolResult {\n return {\n content: [{ type: 'text', text: formatContent(op, document) }],\n details: {\n action,\n params: params as Record<string, unknown>,\n tasks: document.tasks,\n nextId: document.nextId,\n rev: document.rev,\n ...(op.kind === 'error' ? { error: op.message } : {}),\n // Deliberately no `error` on a partial success: renderResult treats\n // `details.error` as total failure and would hide the rows for the\n // entries that did land.\n ...(op.kind === 'upsert'\n ? {\n upsert: {\n applied: op.items.flatMap((item) => (item.kind === 'failed' ? [] : [item.id])),\n failed: op.failed,\n },\n }\n : {}),\n },\n };\n}\n\n/** Envelope for a native assignment batch, including ids used by the consolidated TUI result. */\nexport function buildAssignmentResult(\n params: TaskMutationParams,\n document: TaskDocument,\n text: string,\n assignment: AssignmentSummary,\n): ToolResult {\n return {\n content: [{ type: 'text', text }],\n details: {\n action: 'assign',\n params: params as Record<string, unknown>,\n tasks: document.tasks,\n nextId: document.nextId,\n rev: document.rev,\n assignment,\n },\n };\n}\n\n/** Envelope for delegation actions, which do not flow through the reducer. */\nexport function buildTextResult(\n action: TaskAction,\n params: TaskMutationParams,\n document: TaskDocument,\n text: string,\n error?: string,\n): ToolResult {\n return {\n content: [{ type: 'text', text: error ? `Error: ${error}` : text }],\n details: {\n action,\n params: params as Record<string, unknown>,\n tasks: document.tasks,\n nextId: document.nextId,\n rev: document.rev,\n ...(error ? { error } : {}),\n },\n };\n}\n"],"mappings":"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"}