@agimon-ai/doompi-task 0.0.1-alpha.9 → 0.0.1-alpha.91

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 (383) hide show
  1. package/README.md +123 -15
  2. package/dist/apiContracts.cjs +54 -0
  3. package/dist/apiContracts.cjs.map +1 -0
  4. package/dist/apiContracts.d.mts +53 -0
  5. package/dist/apiContracts.d.mts.map +1 -0
  6. package/dist/apiContracts.mjs +49 -0
  7. package/dist/apiContracts.mjs.map +1 -0
  8. package/dist/commands.cjs +4 -2
  9. package/dist/commands.d.mts +12 -6
  10. package/dist/commands.d.mts.map +1 -1
  11. package/dist/commands.mjs +2 -2
  12. package/dist/config-BPNE_wEU.cjs +173 -0
  13. package/dist/config-BPNE_wEU.cjs.map +1 -0
  14. package/dist/config-DmsCPDuF.mjs +72 -0
  15. package/dist/config-DmsCPDuF.mjs.map +1 -0
  16. package/dist/config.cjs +19 -2
  17. package/dist/config.d.mts +2 -38
  18. package/dist/config.mjs +2 -2
  19. package/dist/delegation-3hMdTFXF.cjs +661 -0
  20. package/dist/delegation-3hMdTFXF.cjs.map +1 -0
  21. package/dist/delegation-BiOy3_7g.mjs +7 -0
  22. package/dist/delegation-BiOy3_7g.mjs.map +1 -0
  23. package/dist/delegation-CkGbRaOl.mjs +626 -0
  24. package/dist/delegation-CkGbRaOl.mjs.map +1 -0
  25. package/dist/delegation-LDpHP2CC.cjs +12 -0
  26. package/dist/delegation-LDpHP2CC.cjs.map +1 -0
  27. package/dist/delegation-Ot2xltLi.d.mts +6 -0
  28. package/dist/delegation-Ot2xltLi.d.mts.map +1 -0
  29. package/dist/delegationManager.cjs +10 -0
  30. package/dist/delegationManager.d.mts +3 -0
  31. package/dist/delegationManager.mjs +3 -0
  32. package/dist/delegationPlatform-Cfn-Lqew.cjs +95 -0
  33. package/dist/delegationPlatform-Cfn-Lqew.cjs.map +1 -0
  34. package/dist/delegationPlatform-DZ4SZ8a5.mjs +64 -0
  35. package/dist/delegationPlatform-DZ4SZ8a5.mjs.map +1 -0
  36. package/dist/extensions/mcp-ui.mjs +23 -0
  37. package/dist/extensions/mcp-ui.mjs.map +1 -0
  38. package/dist/extensions/mcp.cjs +1876 -0
  39. package/dist/extensions/mcp.cjs.map +1 -0
  40. package/dist/extensions/mcp.d.mts +5 -0
  41. package/dist/extensions/mcp.d.mts.map +1 -0
  42. package/dist/extensions/mcp.mjs +1846 -0
  43. package/dist/extensions/mcp.mjs.map +1 -0
  44. package/dist/extensions/pi.cjs +437 -1
  45. package/dist/extensions/pi.cjs.map +1 -1
  46. package/dist/extensions/pi.d.mts +5 -2
  47. package/dist/extensions/pi.d.mts.map +1 -0
  48. package/dist/extensions/pi.mjs +432 -1
  49. package/dist/extensions/pi.mjs.map +1 -1
  50. package/dist/extensions/server.cjs +380 -0
  51. package/dist/extensions/server.cjs.map +1 -0
  52. package/dist/extensions/server.d.mts +5 -0
  53. package/dist/extensions/server.d.mts.map +1 -0
  54. package/dist/extensions/server.mjs +375 -0
  55. package/dist/extensions/server.mjs.map +1 -0
  56. package/dist/extensions/web.mjs +1013 -0
  57. package/dist/extensions/web.mjs.map +1 -0
  58. package/dist/format.cli-ChQsP1MQ.cjs +393 -0
  59. package/dist/format.cli-ChQsP1MQ.cjs.map +1 -0
  60. package/dist/format.cli-Cnc591eb.mjs +322 -0
  61. package/dist/format.cli-Cnc591eb.mjs.map +1 -0
  62. package/dist/{delegation/manager.d.cts → index-3-3ZJlaH.d.mts} +42 -39
  63. package/dist/index-3-3ZJlaH.d.mts.map +1 -0
  64. package/dist/{store/taskStore.d.cts → index-B7oVjSey.d.mts} +16 -23
  65. package/dist/index-B7oVjSey.d.mts.map +1 -0
  66. package/dist/{store/reconcile.d.cts → index-BNMm9g0K.d.mts} +4 -4
  67. package/dist/index-BNMm9g0K.d.mts.map +1 -0
  68. package/dist/{tool/responseEnvelope.d.cts → index-C3DgOhEm.d.mts} +17 -5
  69. package/dist/index-C3DgOhEm.d.mts.map +1 -0
  70. package/dist/{config.d.cts → index-D4goIk4Z.d.mts} +8 -3
  71. package/dist/index-D4goIk4Z.d.mts.map +1 -0
  72. package/dist/{store/reducer.d.mts → index-DIpc6_uJ.d.mts} +5 -5
  73. package/dist/index-DIpc6_uJ.d.mts.map +1 -0
  74. package/dist/{store/paths.d.cts → index-XY9VPmfm.d.mts} +9 -6
  75. package/dist/index-XY9VPmfm.d.mts.map +1 -0
  76. package/dist/index.cjs +106 -1
  77. package/dist/index.d.mts +16 -15
  78. package/dist/index.mjs +16 -1
  79. package/dist/invariants-DhjEjBPU.cjs +79 -0
  80. package/dist/invariants-DhjEjBPU.cjs.map +1 -0
  81. package/dist/invariants-q_UamF7D.mjs +62 -0
  82. package/dist/invariants-q_UamF7D.mjs.map +1 -0
  83. package/dist/logSinkTelemetry-C5QjZipw.mjs +41 -0
  84. package/dist/logSinkTelemetry-C5QjZipw.mjs.map +1 -0
  85. package/dist/logSinkTelemetry-CqiTuh3a.cjs +52 -0
  86. package/dist/logSinkTelemetry-CqiTuh3a.cjs.map +1 -0
  87. package/dist/logSinkTelemetry.cjs +6 -2
  88. package/dist/logSinkTelemetry.d.mts +7 -35
  89. package/dist/logSinkTelemetry.d.mts.map +1 -1
  90. package/dist/logSinkTelemetry.mjs +3 -2
  91. package/dist/paths-Bg8EEbk1.mjs +218 -0
  92. package/dist/paths-Bg8EEbk1.mjs.map +1 -0
  93. package/dist/paths-BsFVRulr.cjs +320 -0
  94. package/dist/paths-BsFVRulr.cjs.map +1 -0
  95. package/dist/processLiveness-Ccd9wenT.mjs +20 -0
  96. package/dist/processLiveness-Ccd9wenT.mjs.map +1 -0
  97. package/dist/processLiveness-umpNgsPR.cjs +25 -0
  98. package/dist/processLiveness-umpNgsPR.cjs.map +1 -0
  99. package/dist/promptGuidelines-DaxWrqud.d.mts +14 -0
  100. package/dist/promptGuidelines-DaxWrqud.d.mts.map +1 -0
  101. package/dist/promptGuidelines-g4QT8GNM.mjs +26 -0
  102. package/dist/promptGuidelines-g4QT8GNM.mjs.map +1 -0
  103. package/dist/promptGuidelines-j_SZTzlH.cjs +31 -0
  104. package/dist/promptGuidelines-j_SZTzlH.cjs.map +1 -0
  105. package/dist/reconcile-BcD-hTbd.mjs +63 -0
  106. package/dist/reconcile-BcD-hTbd.mjs.map +1 -0
  107. package/dist/reconcile-cRL0NjDr.cjs +80 -0
  108. package/dist/reconcile-cRL0NjDr.cjs.map +1 -0
  109. package/dist/reducer-BEfJFM5L.mjs +345 -0
  110. package/dist/reducer-BEfJFM5L.mjs.map +1 -0
  111. package/dist/reducer-BV0YIZ2o.cjs +380 -0
  112. package/dist/reducer-BV0YIZ2o.cjs.map +1 -0
  113. package/dist/root.cli-swHZqusx.d.mts +56 -0
  114. package/dist/root.cli-swHZqusx.d.mts.map +1 -0
  115. package/dist/selectors-BaS6dObz.mjs +142 -0
  116. package/dist/selectors-BaS6dObz.mjs.map +1 -0
  117. package/dist/{tui/selectors.d.cts → selectors-DPDPPjH3.d.mts} +11 -4
  118. package/dist/selectors-DPDPPjH3.d.mts.map +1 -0
  119. package/dist/selectors-b-69vb4W.cjs +189 -0
  120. package/dist/selectors-b-69vb4W.cjs.map +1 -0
  121. package/dist/storeInvariants.cjs +5 -0
  122. package/dist/storeInvariants.d.mts +23 -0
  123. package/dist/storeInvariants.d.mts.map +1 -0
  124. package/dist/storeInvariants.mjs +2 -0
  125. package/dist/storePaths.cjs +14 -0
  126. package/dist/storePaths.d.mts +2 -0
  127. package/dist/storePaths.mjs +2 -0
  128. package/dist/storeProcessLiveness.cjs +3 -0
  129. package/dist/{store/processLiveness.d.mts → storeProcessLiveness.d.mts} +3 -4
  130. package/dist/storeProcessLiveness.d.mts.map +1 -0
  131. package/dist/storeProcessLiveness.mjs +2 -0
  132. package/dist/storeReconcile.cjs +5 -0
  133. package/dist/storeReconcile.d.mts +2 -0
  134. package/dist/storeReconcile.mjs +2 -0
  135. package/dist/storeReducer.cjs +8 -0
  136. package/dist/storeReducer.d.mts +2 -0
  137. package/dist/storeReducer.mjs +2 -0
  138. package/dist/storeTaskGraph.cjs +7 -0
  139. package/dist/storeTaskGraph.d.mts +2 -0
  140. package/dist/storeTaskGraph.mjs +2 -0
  141. package/dist/storeTaskStore.cjs +3 -0
  142. package/dist/storeTaskStore.d.mts +2 -0
  143. package/dist/storeTaskStore.mjs +2 -0
  144. package/dist/storeTypes.cjs +6 -0
  145. package/dist/storeTypes.d.mts +2 -0
  146. package/dist/storeTypes.mjs +2 -0
  147. package/dist/task-B4aF5J9s.mjs +6 -0
  148. package/dist/task-B4aF5J9s.mjs.map +1 -0
  149. package/dist/task-CXF9VULl.cjs +49 -0
  150. package/dist/task-CXF9VULl.cjs.map +1 -0
  151. package/dist/task-CkFjC3Fo.d.mts +5 -0
  152. package/dist/task-CkFjC3Fo.d.mts.map +1 -0
  153. package/dist/{tool/schema.d.cts → task-DHSvdK6E.d.mts} +34 -18
  154. package/dist/task-DHSvdK6E.d.mts.map +1 -0
  155. package/dist/task-DKHKuems.mjs +116 -0
  156. package/dist/task-DKHKuems.mjs.map +1 -0
  157. package/dist/task-DaagqdPK.cjs +11 -0
  158. package/dist/task-DaagqdPK.cjs.map +1 -0
  159. package/dist/task-Dqy88_rr.cjs +193 -0
  160. package/dist/task-Dqy88_rr.cjs.map +1 -0
  161. package/dist/task-giCbpKzV.mjs +26 -0
  162. package/dist/task-giCbpKzV.mjs.map +1 -0
  163. package/dist/{store/types.d.mts → task-hLh4BOO7.d.mts} +37 -15
  164. package/dist/task-hLh4BOO7.d.mts.map +1 -0
  165. package/dist/task-space.cli-BH4Iy_7m.cjs +372 -0
  166. package/dist/task-space.cli-BH4Iy_7m.cjs.map +1 -0
  167. package/dist/task-space.cli-CMYNjgOW.mjs +355 -0
  168. package/dist/task-space.cli-CMYNjgOW.mjs.map +1 -0
  169. package/dist/task.cli-BM34E7GG.mjs +157 -0
  170. package/dist/task.cli-BM34E7GG.mjs.map +1 -0
  171. package/dist/task.cli-CiTkjUaX.cjs +174 -0
  172. package/dist/task.cli-CiTkjUaX.cjs.map +1 -0
  173. package/dist/taskGraph-BOQvT0-M.mjs +63 -0
  174. package/dist/taskGraph-BOQvT0-M.mjs.map +1 -0
  175. package/dist/taskGraph-BskRslrr.cjs +92 -0
  176. package/dist/taskGraph-BskRslrr.cjs.map +1 -0
  177. package/dist/{store/taskGraph.d.cts → taskGraph-YQXCfXTn.d.mts} +4 -4
  178. package/dist/taskGraph-YQXCfXTn.d.mts.map +1 -0
  179. package/dist/taskOverlay-B5wJHiml.cjs +175 -0
  180. package/dist/taskOverlay-B5wJHiml.cjs.map +1 -0
  181. package/dist/taskOverlay-CljDoTj_.mjs +164 -0
  182. package/dist/taskOverlay-CljDoTj_.mjs.map +1 -0
  183. package/dist/taskResult-D2G7b4w-.cjs +224 -0
  184. package/dist/taskResult-D2G7b4w-.cjs.map +1 -0
  185. package/dist/taskResult-edBAAKSH.mjs +165 -0
  186. package/dist/taskResult-edBAAKSH.mjs.map +1 -0
  187. package/dist/taskStore-CFx12KJk.mjs +213 -0
  188. package/dist/taskStore-CFx12KJk.mjs.map +1 -0
  189. package/dist/taskStore-T1pPy-UJ.cjs +220 -0
  190. package/dist/taskStore-T1pPy-UJ.cjs.map +1 -0
  191. package/dist/tasks.cli-8VvuN9YQ.cjs +40 -0
  192. package/dist/tasks.cli-8VvuN9YQ.cjs.map +1 -0
  193. package/dist/tasks.cli-BZj83YD_.mjs +29 -0
  194. package/dist/tasks.cli-BZj83YD_.mjs.map +1 -0
  195. package/dist/telemetry-DOyZLj8E.d.mts +36 -0
  196. package/dist/telemetry-DOyZLj8E.d.mts.map +1 -0
  197. package/dist/telemetry-I4md7Xzz.cjs +31 -0
  198. package/dist/telemetry-I4md7Xzz.cjs.map +1 -0
  199. package/dist/telemetry-PmX_1Y8a.mjs +26 -0
  200. package/dist/telemetry-PmX_1Y8a.mjs.map +1 -0
  201. package/dist/toolPromptGuidelines.cjs +3 -0
  202. package/dist/toolPromptGuidelines.d.mts +2 -0
  203. package/dist/toolPromptGuidelines.mjs +2 -0
  204. package/dist/toolResponseEnvelope.cjs +12 -0
  205. package/dist/toolResponseEnvelope.d.mts +2 -0
  206. package/dist/toolResponseEnvelope.mjs +2 -0
  207. package/dist/toolSchema.cjs +17 -0
  208. package/dist/toolSchema.d.mts +3 -0
  209. package/dist/toolSchema.mjs +3 -0
  210. package/dist/toolTaskTool.cjs +6 -0
  211. package/dist/toolTaskTool.d.mts +3 -0
  212. package/dist/toolTaskTool.mjs +3 -0
  213. package/dist/tuiFormat.cjs +14 -0
  214. package/dist/tuiFormat.d.mts +61 -0
  215. package/dist/tuiFormat.d.mts.map +1 -0
  216. package/dist/tuiFormat.mjs +2 -0
  217. package/dist/tuiSelectors.cjs +10 -0
  218. package/dist/tuiSelectors.d.mts +2 -0
  219. package/dist/tuiSelectors.mjs +2 -0
  220. package/dist/tuiTaskOverlay.cjs +4 -0
  221. package/dist/{tui/taskOverlay.d.cts → tuiTaskOverlay.d.mts} +9 -8
  222. package/dist/tuiTaskOverlay.d.mts.map +1 -0
  223. package/dist/tuiTaskOverlay.mjs +2 -0
  224. package/dist/tuiTaskSpace.cjs +5 -0
  225. package/dist/{tui/taskSpace.d.cts → tuiTaskSpace.d.mts} +11 -12
  226. package/dist/tuiTaskSpace.d.mts.map +1 -0
  227. package/dist/tuiTaskSpace.mjs +2 -0
  228. package/package.json +175 -109
  229. package/src/types/webTasks.ts +24 -0
  230. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  231. package/dist/commands.cjs.map +0 -1
  232. package/dist/commands.d.cts +0 -14
  233. package/dist/commands.d.cts.map +0 -1
  234. package/dist/commands.mjs.map +0 -1
  235. package/dist/config.cjs.map +0 -1
  236. package/dist/config.d.cts.map +0 -1
  237. package/dist/config.d.mts.map +0 -1
  238. package/dist/config.mjs.map +0 -1
  239. package/dist/delegation/manager.cjs +0 -6
  240. package/dist/delegation/manager.cjs.map +0 -1
  241. package/dist/delegation/manager.d.cts.map +0 -1
  242. package/dist/delegation/manager.d.mts +0 -189
  243. package/dist/delegation/manager.d.mts.map +0 -1
  244. package/dist/delegation/manager.mjs +0 -6
  245. package/dist/delegation/manager.mjs.map +0 -1
  246. package/dist/extension.cjs +0 -3
  247. package/dist/extension.cjs.map +0 -1
  248. package/dist/extension.d.cts +0 -12
  249. package/dist/extension.d.cts.map +0 -1
  250. package/dist/extension.d.mts +0 -12
  251. package/dist/extension.d.mts.map +0 -1
  252. package/dist/extension.mjs +0 -3
  253. package/dist/extension.mjs.map +0 -1
  254. package/dist/extensions/doom.cjs +0 -2
  255. package/dist/extensions/doom.cjs.map +0 -1
  256. package/dist/extensions/doom.d.cts +0 -6
  257. package/dist/extensions/doom.d.cts.map +0 -1
  258. package/dist/extensions/doom.d.mts +0 -7
  259. package/dist/extensions/doom.d.mts.map +0 -1
  260. package/dist/extensions/doom.mjs +0 -2
  261. package/dist/extensions/doom.mjs.map +0 -1
  262. package/dist/extensions/pi.d.cts +0 -2
  263. package/dist/index.d.cts +0 -15
  264. package/dist/logSinkTelemetry.cjs.map +0 -1
  265. package/dist/logSinkTelemetry.d.cts +0 -51
  266. package/dist/logSinkTelemetry.d.cts.map +0 -1
  267. package/dist/logSinkTelemetry.mjs.map +0 -1
  268. package/dist/store/invariants.cjs +0 -2
  269. package/dist/store/invariants.cjs.map +0 -1
  270. package/dist/store/invariants.d.cts +0 -14
  271. package/dist/store/invariants.d.cts.map +0 -1
  272. package/dist/store/invariants.d.mts +0 -14
  273. package/dist/store/invariants.d.mts.map +0 -1
  274. package/dist/store/invariants.mjs +0 -2
  275. package/dist/store/invariants.mjs.map +0 -1
  276. package/dist/store/paths.cjs +0 -2
  277. package/dist/store/paths.cjs.map +0 -1
  278. package/dist/store/paths.d.cts.map +0 -1
  279. package/dist/store/paths.d.mts +0 -23
  280. package/dist/store/paths.d.mts.map +0 -1
  281. package/dist/store/paths.mjs +0 -2
  282. package/dist/store/paths.mjs.map +0 -1
  283. package/dist/store/processLiveness.cjs +0 -2
  284. package/dist/store/processLiveness.cjs.map +0 -1
  285. package/dist/store/processLiveness.d.cts +0 -12
  286. package/dist/store/processLiveness.d.cts.map +0 -1
  287. package/dist/store/processLiveness.d.mts.map +0 -1
  288. package/dist/store/processLiveness.mjs +0 -2
  289. package/dist/store/processLiveness.mjs.map +0 -1
  290. package/dist/store/reconcile.cjs +0 -2
  291. package/dist/store/reconcile.cjs.map +0 -1
  292. package/dist/store/reconcile.d.cts.map +0 -1
  293. package/dist/store/reconcile.d.mts +0 -34
  294. package/dist/store/reconcile.d.mts.map +0 -1
  295. package/dist/store/reconcile.mjs +0 -2
  296. package/dist/store/reconcile.mjs.map +0 -1
  297. package/dist/store/reducer.cjs +0 -3
  298. package/dist/store/reducer.cjs.map +0 -1
  299. package/dist/store/reducer.d.cts +0 -72
  300. package/dist/store/reducer.d.cts.map +0 -1
  301. package/dist/store/reducer.d.mts.map +0 -1
  302. package/dist/store/reducer.mjs +0 -3
  303. package/dist/store/reducer.mjs.map +0 -1
  304. package/dist/store/taskGraph.cjs +0 -2
  305. package/dist/store/taskGraph.cjs.map +0 -1
  306. package/dist/store/taskGraph.d.cts.map +0 -1
  307. package/dist/store/taskGraph.d.mts +0 -25
  308. package/dist/store/taskGraph.d.mts.map +0 -1
  309. package/dist/store/taskGraph.mjs +0 -2
  310. package/dist/store/taskGraph.mjs.map +0 -1
  311. package/dist/store/taskStore.cjs +0 -2
  312. package/dist/store/taskStore.cjs.map +0 -1
  313. package/dist/store/taskStore.d.cts.map +0 -1
  314. package/dist/store/taskStore.d.mts +0 -77
  315. package/dist/store/taskStore.d.mts.map +0 -1
  316. package/dist/store/taskStore.mjs +0 -2
  317. package/dist/store/taskStore.mjs.map +0 -1
  318. package/dist/store/types.cjs +0 -2
  319. package/dist/store/types.cjs.map +0 -1
  320. package/dist/store/types.d.cts +0 -165
  321. package/dist/store/types.d.cts.map +0 -1
  322. package/dist/store/types.d.mts.map +0 -1
  323. package/dist/store/types.mjs +0 -2
  324. package/dist/store/types.mjs.map +0 -1
  325. package/dist/tool/promptGuidelines.cjs +0 -2
  326. package/dist/tool/promptGuidelines.cjs.map +0 -1
  327. package/dist/tool/promptGuidelines.d.cts +0 -5
  328. package/dist/tool/promptGuidelines.d.cts.map +0 -1
  329. package/dist/tool/promptGuidelines.d.mts +0 -5
  330. package/dist/tool/promptGuidelines.d.mts.map +0 -1
  331. package/dist/tool/promptGuidelines.mjs +0 -2
  332. package/dist/tool/promptGuidelines.mjs.map +0 -1
  333. package/dist/tool/responseEnvelope.cjs +0 -6
  334. package/dist/tool/responseEnvelope.cjs.map +0 -1
  335. package/dist/tool/responseEnvelope.d.cts.map +0 -1
  336. package/dist/tool/responseEnvelope.d.mts +0 -39
  337. package/dist/tool/responseEnvelope.d.mts.map +0 -1
  338. package/dist/tool/responseEnvelope.mjs +0 -6
  339. package/dist/tool/responseEnvelope.mjs.map +0 -1
  340. package/dist/tool/schema.cjs +0 -2
  341. package/dist/tool/schema.cjs.map +0 -1
  342. package/dist/tool/schema.d.cts.map +0 -1
  343. package/dist/tool/schema.d.mts +0 -86
  344. package/dist/tool/schema.d.mts.map +0 -1
  345. package/dist/tool/schema.mjs +0 -2
  346. package/dist/tool/schema.mjs.map +0 -1
  347. package/dist/tool/taskTool.cjs +0 -3
  348. package/dist/tool/taskTool.cjs.map +0 -1
  349. package/dist/tool/taskTool.d.cts +0 -17
  350. package/dist/tool/taskTool.d.cts.map +0 -1
  351. package/dist/tool/taskTool.d.mts +0 -17
  352. package/dist/tool/taskTool.d.mts.map +0 -1
  353. package/dist/tool/taskTool.mjs +0 -3
  354. package/dist/tool/taskTool.mjs.map +0 -1
  355. package/dist/tui/format.cjs +0 -4
  356. package/dist/tui/format.cjs.map +0 -1
  357. package/dist/tui/format.d.cts +0 -62
  358. package/dist/tui/format.d.cts.map +0 -1
  359. package/dist/tui/format.d.mts +0 -62
  360. package/dist/tui/format.d.mts.map +0 -1
  361. package/dist/tui/format.mjs +0 -4
  362. package/dist/tui/format.mjs.map +0 -1
  363. package/dist/tui/selectors.cjs +0 -2
  364. package/dist/tui/selectors.cjs.map +0 -1
  365. package/dist/tui/selectors.d.cts.map +0 -1
  366. package/dist/tui/selectors.d.mts +0 -53
  367. package/dist/tui/selectors.d.mts.map +0 -1
  368. package/dist/tui/selectors.mjs +0 -2
  369. package/dist/tui/selectors.mjs.map +0 -1
  370. package/dist/tui/taskOverlay.cjs +0 -2
  371. package/dist/tui/taskOverlay.cjs.map +0 -1
  372. package/dist/tui/taskOverlay.d.cts.map +0 -1
  373. package/dist/tui/taskOverlay.d.mts +0 -38
  374. package/dist/tui/taskOverlay.d.mts.map +0 -1
  375. package/dist/tui/taskOverlay.mjs +0 -2
  376. package/dist/tui/taskOverlay.mjs.map +0 -1
  377. package/dist/tui/taskSpace.cjs +0 -5
  378. package/dist/tui/taskSpace.cjs.map +0 -1
  379. package/dist/tui/taskSpace.d.cts.map +0 -1
  380. package/dist/tui/taskSpace.d.mts +0 -61
  381. package/dist/tui/taskSpace.d.mts.map +0 -1
  382. package/dist/tui/taskSpace.mjs +0 -5
  383. package/dist/tui/taskSpace.mjs.map +0 -1
@@ -0,0 +1,322 @@
1
+ import { n as DelegationManager } from "./delegation-CkGbRaOl.mjs";
2
+ import { agentIdentityColor } from "@agimon-ai/doompi-ui/theme";
3
+ import { DoomToolCall, renderToolHeading } from "@agimon-ai/doompi-ui/toolChrome";
4
+ import { Text, truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
5
+ //#region src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.ts
6
+ const STATUS_GLYPH = {
7
+ pending: "○",
8
+ in_progress: "◐",
9
+ completed: "●",
10
+ failed: "✗",
11
+ deleted: "⊘"
12
+ };
13
+ const STATUS_COLOR = {
14
+ pending: "dim",
15
+ in_progress: "warning",
16
+ completed: "success",
17
+ failed: "error",
18
+ deleted: "muted"
19
+ };
20
+ const STATUS_LABEL = {
21
+ pending: "pending",
22
+ in_progress: "in progress",
23
+ completed: "completed",
24
+ failed: "failed",
25
+ deleted: "deleted"
26
+ };
27
+ const OVERLAY_STATUS_GLYPH = {
28
+ ...STATUS_GLYPH,
29
+ completed: "✓",
30
+ deleted: STATUS_GLYPH.failed
31
+ };
32
+ const OVERLAY_STATUS_COLOR = {
33
+ ...STATUS_COLOR,
34
+ deleted: "error"
35
+ };
36
+ const MILLISECONDS_PER_SECOND = 1e3;
37
+ const SECONDS_PER_MINUTE = 60;
38
+ const MINUTES_PER_HOUR = 60;
39
+ const TOKENS_PER_KILO = 1e3;
40
+ const TOKEN_DECIMAL_LIMIT = 1e4;
41
+ const REDUNDANT_WORKING_PREFIX = /^working:\s*/i;
42
+ const INLINE_WHITESPACE = /\s+/gu;
43
+ /** Keep dynamic content inside the overlay's one-physical-line contract. */
44
+ function inlineText(text) {
45
+ return text.replace(INLINE_WHITESPACE, " ").trim();
46
+ }
47
+ /** Thinking text already communicates activity; keep only its useful content. */
48
+ function progressText(currentTool) {
49
+ if (!currentTool) return void 0;
50
+ return inlineText(currentTool.replace(REDUNDANT_WORKING_PREFIX, "")) || void 0;
51
+ }
52
+ const ACTION_GLYPH = {
53
+ upsert: "✎",
54
+ delete: "×",
55
+ get: "›",
56
+ list: "☰",
57
+ clear: "∅",
58
+ assign: "⇒",
59
+ cancel: "⊗"
60
+ };
61
+ /**
62
+ * `upsert` is two operations behind one name, so a homogeneous batch narrows to
63
+ * the glyph the operator already reads: `+` means new work appeared, `→` means
64
+ * work moved. A mixed batch keeps the neutral write glyph.
65
+ */
66
+ const UPSERT_CREATE_GLYPH = "+";
67
+ const UPSERT_UPDATE_GLYPH = "→";
68
+ function upsertGlyph(items) {
69
+ if (items.length === 0) return ACTION_GLYPH.upsert;
70
+ if (items.every((item) => item.id === void 0)) return UPSERT_CREATE_GLYPH;
71
+ if (items.every((item) => item.id !== void 0)) return UPSERT_UPDATE_GLYPH;
72
+ return ACTION_GLYPH.upsert;
73
+ }
74
+ function overlayStatusGlyph(status, theme) {
75
+ return theme.fg(OVERLAY_STATUS_COLOR[status], OVERLAY_STATUS_GLYPH[status]);
76
+ }
77
+ function formatElapsedMs(durationMs) {
78
+ const totalSeconds = Math.max(0, Math.floor(durationMs / MILLISECONDS_PER_SECOND));
79
+ const seconds = totalSeconds % SECONDS_PER_MINUTE;
80
+ const totalMinutes = Math.floor(totalSeconds / SECONDS_PER_MINUTE);
81
+ if (totalMinutes < MINUTES_PER_HOUR) return totalMinutes === 0 ? `${seconds}s` : `${totalMinutes}m${String(seconds).padStart(2, "0")}s`;
82
+ const minutes = totalMinutes % MINUTES_PER_HOUR;
83
+ return `${Math.floor(totalMinutes / MINUTES_PER_HOUR)}h${String(minutes).padStart(2, "0")}m${String(seconds).padStart(2, "0")}s`;
84
+ }
85
+ function formatTokenCount(tokens) {
86
+ const count = Math.max(0, Math.round(tokens));
87
+ if (count < TOKENS_PER_KILO) return String(count);
88
+ if (count < TOKEN_DECIMAL_LIMIT) return `${(count / TOKENS_PER_KILO).toFixed(1)}k`;
89
+ return `${Math.round(count / TOKENS_PER_KILO)}k`;
90
+ }
91
+ /**
92
+ * One task row for the persistent overlay.
93
+ *
94
+ * A delegated row carries the agent name and its current tool so the operator
95
+ * can see that background work is progressing without opening a transcript.
96
+ */
97
+ function formatOverlayTaskLine(task, theme, showId, progress, nowMs = Date.now(), agentColor) {
98
+ const subjectColor = task.status === "in_progress" ? "accent" : task.status === "completed" || task.status === "deleted" ? "muted" : "text";
99
+ let subject = theme.fg(subjectColor, inlineText(task.subject));
100
+ if (task.status === "completed" || task.status === "deleted") subject = theme.strikethrough(subject);
101
+ let line = overlayStatusGlyph(task.status, theme);
102
+ if (showId) line += ` ${theme.fg("dim", `#${task.id}`)}`;
103
+ line += ` ${subject}`;
104
+ const agent = task.delegation?.agent;
105
+ const agentLabel = agent ? inlineText(agent) : void 0;
106
+ if (agentLabel && task.delegation?.state === "running") {
107
+ const chips = [];
108
+ if (progress) {
109
+ chips.push(theme.fg("muted", `[${formatElapsedMs(DelegationManager.elapsedMs(progress, nowMs))}]`));
110
+ if (progress.tokens !== void 0) chips.push(theme.fg("muted", `[${formatTokenCount(progress.tokens)}]`));
111
+ }
112
+ const identity = task.delegation.runId ?? task.delegation.requestId;
113
+ chips.push(theme.fg(agentColor ?? agentIdentityColor(identity), `[${agentLabel}]`));
114
+ line += ` ${chips.join("")}`;
115
+ const activity = progressText(progress?.currentTool);
116
+ if (activity) line += ` ${theme.fg("muted", `· ${activity}`)}`;
117
+ } else if (agentLabel) line += ` ${theme.fg("muted", `[${agentLabel}]`)}`;
118
+ if (task.status === "in_progress" && task.activeForm) line += ` ${theme.fg("muted", `(${inlineText(task.activeForm)})`)}`;
119
+ if (task.blockedBy?.length) line += ` ${theme.fg("muted", `⛓ ${task.blockedBy.map((id) => `#${id}`).join(",")}`)}`;
120
+ return line;
121
+ }
122
+ /** One task line for the `/tasks` command output. */
123
+ function formatCommandTaskLine(task, glyph) {
124
+ const form = task.status === "in_progress" && task.activeForm ? ` (${task.activeForm})` : "";
125
+ const agent = task.delegation?.agent ? ` [${task.delegation.agent}]` : "";
126
+ const block = task.blockedBy?.length ? ` ⛓ ${task.blockedBy.map((id) => `#${id}`).join(",")}` : "";
127
+ return ` ${glyph} #${task.id} ${task.subject}${form}${agent}${block}`;
128
+ }
129
+ function renderTaskCall(args, theme, tasks) {
130
+ const items = args.action === "upsert" ? args.tasks ?? [] : [];
131
+ const glyph = args.action === "upsert" ? upsertGlyph(items) : ACTION_GLYPH[args.action] ?? args.action;
132
+ let text = renderToolHeading("task", `${glyph} ${args.action}`, theme);
133
+ if (args.action === "upsert") {
134
+ if (items.length === 1) {
135
+ const only = items[0];
136
+ if (only.id === void 0) {
137
+ if (only.subject) text += ` ${theme.fg("dim", only.subject)}`;
138
+ } else {
139
+ const subject = tasks.find((task) => task.id === only.id)?.subject ?? only.subject ?? `#${only.id}`;
140
+ text += ` ${theme.fg("accent", subject)}`;
141
+ }
142
+ } else if (items.length > 1) text += ` ${theme.fg("dim", `${items.length} tasks`)}`;
143
+ } else if (args.action === "assign") {
144
+ const assignments = args.assignments ?? [];
145
+ if (assignments.length === 1) {
146
+ const only = assignments[0];
147
+ const subject = tasks.find((task) => task.id === only.id)?.subject ?? `#${only.id}`;
148
+ text += ` ${theme.fg("accent", subject)}`;
149
+ if (only.agent) text += ` ${theme.fg("muted", `→ ${only.agent}`)}`;
150
+ } else if (assignments.length > 1) text += ` ${theme.fg("dim", `${assignments.length} tasks`)}`;
151
+ } else if ((args.action === "get" || args.action === "delete" || args.action === "cancel") && args.id !== void 0) {
152
+ const subject = tasks.find((task) => task.id === args.id)?.subject ?? `#${args.id}`;
153
+ text += ` ${theme.fg("accent", subject)}`;
154
+ } else if (args.action === "list" && args.status) text += ` ${theme.fg("muted", STATUS_LABEL[args.status])}`;
155
+ return new DoomToolCall(text);
156
+ }
157
+ /** Task rows kept in a collapsed result, before `ctrl+o` reveals the rest. */
158
+ const TRANSCRIPT_TASK_ROWS = 8;
159
+ /** Minimum gap between a row's subject and its right-aligned status. */
160
+ const STATUS_GUTTER = 2;
161
+ /**
162
+ * Rows whose trailing text is flushed right.
163
+ *
164
+ * `Text` cannot do this: the status has to be placed against the viewport edge,
165
+ * which is only known at render time.
166
+ */
167
+ var JustifiedRows = class {
168
+ rows;
169
+ constructor(rows) {
170
+ this.rows = rows;
171
+ }
172
+ /**
173
+ * Nothing to discard: the rows are themed by the caller and held verbatim, and
174
+ * Pi rebuilds this component from `renderResult` whenever the theme changes.
175
+ */
176
+ invalidate() {}
177
+ render(width) {
178
+ return this.rows.map(({ left, right }) => {
179
+ if (right === void 0 || right.length === 0) return truncateToWidth(left, width);
180
+ const rightWidth = visibleWidth(right);
181
+ const room = width - rightWidth - STATUS_GUTTER;
182
+ if (room <= 0) return truncateToWidth(left, width);
183
+ const subject = truncateToWidth(left, room);
184
+ const gap = Math.max(STATUS_GUTTER, width - visibleWidth(subject) - rightWidth);
185
+ return subject + " ".repeat(gap) + right;
186
+ });
187
+ }
188
+ };
189
+ /**
190
+ * Self-owned task shell with the same structural divider as the bash tool.
191
+ *
192
+ * Task rows already carry precise per-task state, so the divider stays neutral
193
+ * instead of competing with or appearing to animate between those states.
194
+ */
195
+ var TaskResultFrame = class {
196
+ content;
197
+ theme;
198
+ constructor(content, theme) {
199
+ this.content = content;
200
+ this.theme = theme;
201
+ }
202
+ render(width) {
203
+ if (width <= 0) return [];
204
+ if (width < 3) return this.content.render(width);
205
+ const contentWidth = width - 2;
206
+ const divider = this.theme.fg("borderMuted", "─".repeat(contentWidth));
207
+ const lines = this.content.render(contentWidth).map((line) => ` ${line}`);
208
+ return [
209
+ ` ${divider}`,
210
+ ...lines,
211
+ ""
212
+ ];
213
+ }
214
+ invalidate() {
215
+ this.content.invalidate();
216
+ }
217
+ };
218
+ /** Concatenated result text, which is all a thrown failure leaves behind. */
219
+ function contentText(result) {
220
+ return (result.content ?? []).map((block) => block.text ?? "").join("");
221
+ }
222
+ function nonEmptyLines(text) {
223
+ return text.split("\n").filter((line) => line.trim().length > 0);
224
+ }
225
+ /**
226
+ * The rows `list` reported to the model.
227
+ *
228
+ * `details.tasks` is the whole post-mutation document, so the filters applied by
229
+ * `formatContent` have to be applied again here or the transcript would disagree
230
+ * with the text the model was given.
231
+ */
232
+ function listedTasks(details) {
233
+ const params = details.params;
234
+ let view = details.tasks;
235
+ if (params.includeDeleted !== true) view = view.filter((task) => task.status !== "deleted");
236
+ if (params.status) view = view.filter((task) => task.status === params.status);
237
+ return view;
238
+ }
239
+ /** The single task an id-bearing action acted on, so the transcript names it rather than a bare tick. */
240
+ function subjectTask(details) {
241
+ const params = details.params;
242
+ if (params.id === void 0) return void 0;
243
+ return details.tasks.find((task) => task.id === params.id);
244
+ }
245
+ /**
246
+ * Tasks an upsert applied, resolved from the ids the reducer reported.
247
+ *
248
+ * The ids are read rather than guessed from the tail of the list: a batch
249
+ * touches many rows, and a failed entry contributes none.
250
+ */
251
+ function upsertTasks(details) {
252
+ return (details.upsert?.applied ?? []).flatMap((id) => details.tasks.find((task) => task.id === id) ?? []);
253
+ }
254
+ /** Tasks successfully handed off by a native assignment batch. */
255
+ function assignedTasks(details) {
256
+ return (details.assignment?.assigned ?? []).flatMap((id) => details.tasks.find((task) => task.id === id) ?? []);
257
+ }
258
+ function renderTaskResultBody(result, options, theme) {
259
+ const details = result.details;
260
+ if (options.isPartial) {
261
+ const text = nonEmptyLines(contentText(result)).at(-1) ?? "working";
262
+ return new Text(theme.fg("warning", "◐") + theme.fg("dim", ` ${text}`), 0, 0);
263
+ }
264
+ if (result.isError === true || details?.error !== void 0) {
265
+ const all = nonEmptyLines(details?.error ?? contentText(result));
266
+ if (all.length <= 1) return new Text(theme.fg("error", "✗") + theme.fg("dim", all[0] ? ` ${all[0]}` : ""), 0, 0);
267
+ const body = options.expanded ? all : all.slice(0, TRANSCRIPT_TASK_ROWS);
268
+ return new Text([...body.map((line) => theme.fg("toolOutput", line)), theme.fg("error", "✗")].join("\n"), 0, 0);
269
+ }
270
+ if (!details) return new Text(theme.fg("success", "✓"), 0, 0);
271
+ /** Status rides on the task's own row, flushed right, rather than costing a line. */
272
+ const row = (task) => ({
273
+ left: formatOverlayTaskLine(task, theme, true),
274
+ right: theme.fg(STATUS_COLOR[task.status], STATUS_LABEL[task.status])
275
+ });
276
+ if (details.action === "list") {
277
+ const tasks = listedTasks(details);
278
+ const shown = options.expanded ? tasks : tasks.slice(0, TRANSCRIPT_TASK_ROWS);
279
+ const rows = shown.map(row);
280
+ let summary = tasks.length === 0 ? "no tasks" : `${tasks.length} task${tasks.length === 1 ? "" : "s"}`;
281
+ if (tasks.length > shown.length) summary += " · ctrl+o";
282
+ rows.push({ left: theme.fg("success", "✓") + theme.fg("dim", ` ${summary}`) });
283
+ return new JustifiedRows(rows);
284
+ }
285
+ if (details.action === "clear") return new Text(theme.fg("success", "✓") + theme.fg("dim", " cleared"), 0, 0);
286
+ if (details.action === "assign" && details.assignment) {
287
+ const assigned = assignedTasks(details);
288
+ const failed = details.assignment.failed;
289
+ if (assigned.length === 1 && failed === 0) return new JustifiedRows([row(assigned[0])]);
290
+ const shown = options.expanded ? assigned : assigned.slice(0, TRANSCRIPT_TASK_ROWS);
291
+ const rows = shown.map(row);
292
+ let summary = `${assigned.length} assigned`;
293
+ if (failed > 0) summary += ` · ${failed} failed`;
294
+ if (assigned.length > shown.length) summary += " · ctrl+o";
295
+ const mark = failed > 0 ? theme.fg("warning", "!") : theme.fg("success", "✓");
296
+ rows.push({ left: mark + theme.fg("dim", ` ${summary}`) });
297
+ return new JustifiedRows(rows);
298
+ }
299
+ if (details.action === "upsert") {
300
+ const touched = upsertTasks(details);
301
+ const failed = details.upsert?.failed ?? 0;
302
+ if (touched.length === 1 && failed === 0) return new JustifiedRows([row(touched[0])]);
303
+ const shown = options.expanded ? touched : touched.slice(0, TRANSCRIPT_TASK_ROWS);
304
+ const rows = shown.map(row);
305
+ let summary = `${touched.length} applied`;
306
+ if (failed > 0) summary += ` · ${failed} failed`;
307
+ if (touched.length > shown.length) summary += " · ctrl+o";
308
+ const mark = failed > 0 ? theme.fg("warning", "!") : theme.fg("success", "✓");
309
+ rows.push({ left: mark + theme.fg("dim", ` ${summary}`) });
310
+ return new JustifiedRows(rows);
311
+ }
312
+ const task = subjectTask(details);
313
+ if (!task) return new Text(theme.fg("success", "✓"), 0, 0);
314
+ return new JustifiedRows([row(task)]);
315
+ }
316
+ function renderTaskResult(result, options, theme) {
317
+ return new TaskResultFrame(renderTaskResultBody(result, options, theme), theme);
318
+ }
319
+ //#endregion
320
+ export { STATUS_LABEL as a, formatOverlayTaskLine as c, renderTaskCall as d, renderTaskResult as f, STATUS_GLYPH as i, formatTokenCount as l, JustifiedRows as n, formatCommandTaskLine as o, STATUS_COLOR as r, formatElapsedMs as s, ACTION_GLYPH as t, overlayStatusGlyph as u };
321
+
322
+ //# sourceMappingURL=format.cli-Cnc591eb.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.cli-Cnc591eb.mjs","names":[],"sources":["../src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.ts"],"sourcesContent":["import { agentIdentityColor } from '@agimon-ai/doompi-ui/theme';\nimport { DoomToolCall, renderToolHeading } from '@agimon-ai/doompi-ui/toolChrome';\nimport type { Theme } from '@earendil-works/pi-coding-agent';\nimport { type Component, Text, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';\n\nimport type {\n Task,\n TaskAction,\n TaskDetails,\n TaskItemMutation,\n TaskMutationParams,\n TaskStatus,\n} from '../../../../../models/task';\nimport { DelegationManager, type DelegationProgress } from '../../../../../services/delegation';\n\nexport const STATUS_GLYPH: Record<TaskStatus, string> = {\n pending: '○',\n in_progress: '◐',\n completed: '●',\n failed: '✗',\n deleted: '⊘',\n};\n\ntype TaskStatusColor = 'dim' | 'warning' | 'success' | 'error' | 'muted';\n\nexport const STATUS_COLOR: Record<TaskStatus, TaskStatusColor> = {\n pending: 'dim',\n in_progress: 'warning',\n completed: 'success',\n failed: 'error',\n deleted: 'muted',\n};\n\nexport const STATUS_LABEL: Record<TaskStatus, string> = {\n pending: 'pending',\n in_progress: 'in progress',\n completed: 'completed',\n failed: 'failed',\n deleted: 'deleted',\n};\n\nconst OVERLAY_STATUS_GLYPH: Record<TaskStatus, string> = {\n ...STATUS_GLYPH,\n completed: '✓',\n deleted: STATUS_GLYPH.failed,\n};\n\nconst OVERLAY_STATUS_COLOR: Record<TaskStatus, TaskStatusColor> = {\n ...STATUS_COLOR,\n deleted: 'error',\n};\nconst MILLISECONDS_PER_SECOND = 1000;\nconst SECONDS_PER_MINUTE = 60;\nconst MINUTES_PER_HOUR = 60;\nconst TOKENS_PER_KILO = 1000;\nconst TOKEN_DECIMAL_LIMIT = 10_000;\nconst REDUNDANT_WORKING_PREFIX = /^working:\\s*/i;\nconst INLINE_WHITESPACE = /\\s+/gu;\n\n/** Keep dynamic content inside the overlay's one-physical-line contract. */\nfunction inlineText(text: string): string {\n return text.replace(INLINE_WHITESPACE, ' ').trim();\n}\n\n/** Thinking text already communicates activity; keep only its useful content. */\nfunction progressText(currentTool: string | undefined): string | undefined {\n if (!currentTool) return undefined;\n const text = inlineText(currentTool.replace(REDUNDANT_WORKING_PREFIX, ''));\n return text || undefined;\n}\n\nexport const ACTION_GLYPH: Record<TaskAction, string> = {\n upsert: '✎',\n delete: '×',\n get: '›',\n list: '☰',\n clear: '∅',\n assign: '⇒',\n cancel: '⊗',\n};\n\n/**\n * `upsert` is two operations behind one name, so a homogeneous batch narrows to\n * the glyph the operator already reads: `+` means new work appeared, `→` means\n * work moved. A mixed batch keeps the neutral write glyph.\n */\nconst UPSERT_CREATE_GLYPH = '+';\nconst UPSERT_UPDATE_GLYPH = '→';\n\nfunction upsertGlyph(items: readonly TaskItemMutation[]): string {\n if (items.length === 0) return ACTION_GLYPH.upsert;\n if (items.every((item) => item.id === undefined)) return UPSERT_CREATE_GLYPH;\n if (items.every((item) => item.id !== undefined)) return UPSERT_UPDATE_GLYPH;\n return ACTION_GLYPH.upsert;\n}\n\nexport function overlayStatusGlyph(status: TaskStatus, theme: Theme): string {\n return theme.fg(OVERLAY_STATUS_COLOR[status], OVERLAY_STATUS_GLYPH[status]);\n}\n\nexport function formatElapsedMs(durationMs: number): string {\n const totalSeconds = Math.max(0, Math.floor(durationMs / MILLISECONDS_PER_SECOND));\n const seconds = totalSeconds % SECONDS_PER_MINUTE;\n const totalMinutes = Math.floor(totalSeconds / SECONDS_PER_MINUTE);\n if (totalMinutes < MINUTES_PER_HOUR) {\n return totalMinutes === 0 ? `${seconds}s` : `${totalMinutes}m${String(seconds).padStart(2, '0')}s`;\n }\n const minutes = totalMinutes % MINUTES_PER_HOUR;\n const hours = Math.floor(totalMinutes / MINUTES_PER_HOUR);\n return `${hours}h${String(minutes).padStart(2, '0')}m${String(seconds).padStart(2, '0')}s`;\n}\n\nexport function formatTokenCount(tokens: number): string {\n const count = Math.max(0, Math.round(tokens));\n if (count < TOKENS_PER_KILO) return String(count);\n if (count < TOKEN_DECIMAL_LIMIT) return `${(count / TOKENS_PER_KILO).toFixed(1)}k`;\n return `${Math.round(count / TOKENS_PER_KILO)}k`;\n}\n\n/**\n * One task row for the persistent overlay.\n *\n * A delegated row carries the agent name and its current tool so the operator\n * can see that background work is progressing without opening a transcript.\n */\nexport function formatOverlayTaskLine(\n task: Task,\n theme: Theme,\n showId: boolean,\n progress?: DelegationProgress,\n nowMs = Date.now(),\n agentColor?: Parameters<Theme['fg']>[0],\n): string {\n const subjectColor =\n task.status === 'in_progress'\n ? 'accent'\n : task.status === 'completed' || task.status === 'deleted'\n ? 'muted'\n : 'text';\n let subject = theme.fg(subjectColor, inlineText(task.subject));\n if (task.status === 'completed' || task.status === 'deleted') {\n subject = theme.strikethrough(subject);\n }\n\n let line = overlayStatusGlyph(task.status, theme);\n if (showId) line += ` ${theme.fg('dim', `#${task.id}`)}`;\n line += ` ${subject}`;\n\n const agent = task.delegation?.agent;\n const agentLabel = agent ? inlineText(agent) : undefined;\n if (agentLabel && task.delegation?.state === 'running') {\n // No progress means no timing is known, so the chips are omitted rather than\n // reported as `[0s]`. The transcript renderer has no progress feed at all.\n const chips: string[] = [];\n if (progress) {\n chips.push(theme.fg('muted', `[${formatElapsedMs(DelegationManager.elapsedMs(progress, nowMs))}]`));\n if (progress.tokens !== undefined) chips.push(theme.fg('muted', `[${formatTokenCount(progress.tokens)}]`));\n }\n const identity = task.delegation.runId ?? task.delegation.requestId;\n chips.push(theme.fg(agentColor ?? agentIdentityColor(identity), `[${agentLabel}]`));\n line += ` ${chips.join('')}`;\n const activity = progressText(progress?.currentTool);\n if (activity) line += ` ${theme.fg('muted', `· ${activity}`)}`;\n } else if (agentLabel) {\n line += ` ${theme.fg('muted', `[${agentLabel}]`)}`;\n }\n\n if (task.status === 'in_progress' && task.activeForm) {\n line += ` ${theme.fg('muted', `(${inlineText(task.activeForm)})`)}`;\n }\n if (task.blockedBy?.length) {\n line += ` ${theme.fg('muted', `⛓ ${task.blockedBy.map((id) => `#${id}`).join(',')}`)}`;\n }\n return line;\n}\n\n/** One task line for the `/tasks` command output. */\nexport function formatCommandTaskLine(task: Task, glyph: string): string {\n const form = task.status === 'in_progress' && task.activeForm ? ` (${task.activeForm})` : '';\n const agent = task.delegation?.agent ? ` [${task.delegation.agent}]` : '';\n const block = task.blockedBy?.length ? ` ⛓ ${task.blockedBy.map((id) => `#${id}`).join(',')}` : '';\n return ` ${glyph} #${task.id} ${task.subject}${form}${agent}${block}`;\n}\n\nexport function renderTaskCall(\n args: TaskMutationParams & { action: TaskAction },\n theme: Theme,\n tasks: readonly Task[],\n): Component {\n const items = args.action === 'upsert' ? (args.tasks ?? []) : [];\n const glyph = args.action === 'upsert' ? upsertGlyph(items) : (ACTION_GLYPH[args.action] ?? args.action);\n let text = renderToolHeading('task', `${glyph} ${args.action}`, theme);\n\n if (args.action === 'upsert') {\n // One entry reads exactly as create or update did; a batch reads as a count\n // rather than a subject it would have to pick arbitrarily.\n if (items.length === 1) {\n const only = items[0];\n if (only.id === undefined) {\n if (only.subject) text += ` ${theme.fg('dim', only.subject)}`;\n } else {\n const subject = tasks.find((task) => task.id === only.id)?.subject ?? only.subject ?? `#${only.id}`;\n text += ` ${theme.fg('accent', subject)}`;\n }\n } else if (items.length > 1) {\n text += ` ${theme.fg('dim', `${items.length} tasks`)}`;\n }\n } else if (args.action === 'assign') {\n const assignments = args.assignments ?? [];\n if (assignments.length === 1) {\n const only = assignments[0];\n const subject = tasks.find((task) => task.id === only.id)?.subject ?? `#${only.id}`;\n text += ` ${theme.fg('accent', subject)}`;\n if (only.agent) text += ` ${theme.fg('muted', `→ ${only.agent}`)}`;\n } else if (assignments.length > 1) {\n text += ` ${theme.fg('dim', `${assignments.length} tasks`)}`;\n }\n } else if ((args.action === 'get' || args.action === 'delete' || args.action === 'cancel') && args.id !== undefined) {\n const subject = tasks.find((task) => task.id === args.id)?.subject ?? `#${args.id}`;\n text += ` ${theme.fg('accent', subject)}`;\n } else if (args.action === 'list' && args.status) {\n text += ` ${theme.fg('muted', STATUS_LABEL[args.status])}`;\n }\n return new DoomToolCall(text);\n}\n\n/** Task rows kept in a collapsed result, before `ctrl+o` reveals the rest. */\nconst TRANSCRIPT_TASK_ROWS = 8;\n/** Minimum gap between a row's subject and its right-aligned status. */\nconst STATUS_GUTTER = 2;\n\nexport interface JustifiedRow {\n left: string;\n /** Pinned to the right edge. The subject is truncated before this is dropped. */\n right?: string;\n}\n\n/**\n * Rows whose trailing text is flushed right.\n *\n * `Text` cannot do this: the status has to be placed against the viewport edge,\n * which is only known at render time.\n */\nexport class JustifiedRows implements Component {\n constructor(private readonly rows: readonly JustifiedRow[]) {}\n\n /**\n * Nothing to discard: the rows are themed by the caller and held verbatim, and\n * Pi rebuilds this component from `renderResult` whenever the theme changes.\n */\n invalidate(): void {}\n\n render(width: number): string[] {\n return this.rows.map(({ left, right }) => {\n if (right === undefined || right.length === 0) return truncateToWidth(left, width);\n const rightWidth = visibleWidth(right);\n const room = width - rightWidth - STATUS_GUTTER;\n if (room <= 0) return truncateToWidth(left, width);\n const subject = truncateToWidth(left, room);\n const gap = Math.max(STATUS_GUTTER, width - visibleWidth(subject) - rightWidth);\n return subject + ' '.repeat(gap) + right;\n });\n }\n}\n\n/**\n * Self-owned task shell with the same structural divider as the bash tool.\n *\n * Task rows already carry precise per-task state, so the divider stays neutral\n * instead of competing with or appearing to animate between those states.\n */\nclass TaskResultFrame implements Component {\n constructor(\n private readonly content: Component,\n private readonly theme: Theme,\n ) {}\n\n render(width: number): string[] {\n if (width <= 0) return [];\n if (width < 3) return this.content.render(width);\n\n const contentWidth = width - 2;\n const divider = this.theme.fg('borderMuted', '─'.repeat(contentWidth));\n const lines = this.content.render(contentWidth).map((line) => ` ${line}`);\n return [` ${divider}`, ...lines, ''];\n }\n\n invalidate(): void {\n this.content.invalidate();\n }\n}\n\nexport interface TaskResultLike {\n content?: Array<{ type: string; text?: string }>;\n details?: unknown;\n isError?: boolean;\n}\n\nexport interface TaskResultOptions {\n expanded: boolean;\n isPartial: boolean;\n}\n\n/** Concatenated result text, which is all a thrown failure leaves behind. */\nfunction contentText(result: TaskResultLike): string {\n return (result.content ?? []).map((block) => block.text ?? '').join('');\n}\n\nfunction nonEmptyLines(text: string): string[] {\n return text.split('\\n').filter((line) => line.trim().length > 0);\n}\n\n/**\n * The rows `list` reported to the model.\n *\n * `details.tasks` is the whole post-mutation document, so the filters applied by\n * `formatContent` have to be applied again here or the transcript would disagree\n * with the text the model was given.\n */\nfunction listedTasks(details: TaskDetails): Task[] {\n const params = details.params as TaskMutationParams;\n let view = details.tasks;\n if (params.includeDeleted !== true) view = view.filter((task) => task.status !== 'deleted');\n if (params.status) view = view.filter((task) => task.status === params.status);\n return view;\n}\n\n/** The single task an id-bearing action acted on, so the transcript names it rather than a bare tick. */\nfunction subjectTask(details: TaskDetails): Task | undefined {\n const params = details.params as TaskMutationParams;\n if (params.id === undefined) return undefined;\n return details.tasks.find((task) => task.id === params.id);\n}\n\n/**\n * Tasks an upsert applied, resolved from the ids the reducer reported.\n *\n * The ids are read rather than guessed from the tail of the list: a batch\n * touches many rows, and a failed entry contributes none.\n */\nfunction upsertTasks(details: TaskDetails): Task[] {\n return (details.upsert?.applied ?? []).flatMap((id) => details.tasks.find((task) => task.id === id) ?? []);\n}\n\n/** Tasks successfully handed off by a native assignment batch. */\nfunction assignedTasks(details: TaskDetails): Task[] {\n return (details.assignment?.assigned ?? []).flatMap((id) => details.tasks.find((task) => task.id === id) ?? []);\n}\n\nfunction renderTaskResultBody(result: TaskResultLike, options: TaskResultOptions, theme: Theme): Component {\n const details = result.details as TaskDetails | undefined;\n\n // Running. `assign` and `cancel` stream a placeholder before the run settles.\n if (options.isPartial) {\n const text = nonEmptyLines(contentText(result)).at(-1) ?? 'working';\n return new Text(theme.fg('warning', '◐') + theme.fg('dim', ` ${text}`), 0, 0);\n }\n\n // Failed. Every failure path throws, so Pi hands back error text and no\n // details; without this the block would render a green tick on a failure.\n if (result.isError === true || details?.error !== undefined) {\n const message = details?.error ?? contentText(result);\n const all = nonEmptyLines(message);\n if (all.length <= 1) {\n return new Text(theme.fg('error', '✗') + theme.fg('dim', all[0] ? ` ${all[0]}` : ''), 0, 0);\n }\n const body = options.expanded ? all : all.slice(0, TRANSCRIPT_TASK_ROWS);\n return new Text([...body.map((line) => theme.fg('toolOutput', line)), theme.fg('error', '✗')].join('\\n'), 0, 0);\n }\n\n if (!details) return new Text(theme.fg('success', '✓'), 0, 0);\n\n /** Status rides on the task's own row, flushed right, rather than costing a line. */\n const row = (task: Task): JustifiedRow => ({\n left: formatOverlayTaskLine(task, theme, true),\n right: theme.fg(STATUS_COLOR[task.status], STATUS_LABEL[task.status]),\n });\n\n if (details.action === 'list') {\n const tasks = listedTasks(details);\n const shown = options.expanded ? tasks : tasks.slice(0, TRANSCRIPT_TASK_ROWS);\n const rows: JustifiedRow[] = shown.map(row);\n let summary = tasks.length === 0 ? 'no tasks' : `${tasks.length} task${tasks.length === 1 ? '' : 's'}`;\n if (tasks.length > shown.length) summary += ' · ctrl+o';\n rows.push({ left: theme.fg('success', '✓') + theme.fg('dim', ` ${summary}`) });\n return new JustifiedRows(rows);\n }\n\n if (details.action === 'clear') {\n return new Text(theme.fg('success', '✓') + theme.fg('dim', ' cleared'), 0, 0);\n }\n\n if (details.action === 'assign' && details.assignment) {\n const assigned = assignedTasks(details);\n const failed = details.assignment.failed;\n if (assigned.length === 1 && failed === 0) return new JustifiedRows([row(assigned[0])]);\n\n const shown = options.expanded ? assigned : assigned.slice(0, TRANSCRIPT_TASK_ROWS);\n const rows: JustifiedRow[] = shown.map(row);\n let summary = `${assigned.length} assigned`;\n if (failed > 0) summary += ` · ${failed} failed`;\n if (assigned.length > shown.length) summary += ' · ctrl+o';\n const mark = failed > 0 ? theme.fg('warning', '!') : theme.fg('success', '✓');\n rows.push({ left: mark + theme.fg('dim', ` ${summary}`) });\n return new JustifiedRows(rows);\n }\n\n if (details.action === 'upsert') {\n const touched = upsertTasks(details);\n const failed = details.upsert?.failed ?? 0;\n // One applied task and nothing failed is the common case: keep the single\n // row it has always had rather than dressing it as a bulk report.\n if (touched.length === 1 && failed === 0) return new JustifiedRows([row(touched[0])]);\n\n const shown = options.expanded ? touched : touched.slice(0, TRANSCRIPT_TASK_ROWS);\n const rows: JustifiedRow[] = shown.map(row);\n let summary = `${touched.length} applied`;\n if (failed > 0) summary += ` · ${failed} failed`;\n if (touched.length > shown.length) summary += ' · ctrl+o';\n // Failed entries get no row: there is no task to render, and their messages\n // are already in the text the model was given.\n const mark = failed > 0 ? theme.fg('warning', '!') : theme.fg('success', '✓');\n rows.push({ left: mark + theme.fg('dim', ` ${summary}`) });\n return new JustifiedRows(rows);\n }\n\n const task = subjectTask(details);\n if (!task) return new Text(theme.fg('success', '✓'), 0, 0);\n return new JustifiedRows([row(task)]);\n}\n\nexport function renderTaskResult(result: TaskResultLike, options: TaskResultOptions, theme: Theme): Component {\n return new TaskResultFrame(renderTaskResultBody(result, options, theme), theme);\n}\n"],"mappings":"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"}
@@ -1,16 +1,11 @@
1
- import { TaskFailureReporter } from "../logSinkTelemetry.cjs";
2
- import { Task } from "../store/types.cjs";
3
- import { TaskStore } from "../store/taskStore.cjs";
4
- import { InlineAgent } from "@agimon-ai/doompi-extension-contracts/subagent-tool";
5
- import { EventBusLike } from "@agimon-ai/doompi-extension-contracts/protocol";
6
- //#region src/delegation/manager.d.ts
1
+ import { s as Task } from "./task-hLh4BOO7.mjs";
2
+ import { o as TaskFailureReporter } from "./telemetry-DOyZLj8E.mjs";
3
+ import { t as TaskStore } from "./index-B7oVjSey.mjs";
4
+ import { DoomDelegationService, InlineAgent } from "@agimon-ai/doompi-core/delegation";
5
+ import { Context } from "@deepseek-ai/cordis";
6
+ //#region src/services/delegation/index.d.ts
7
7
  declare const NOTIFY_CUSTOM_TYPE = "doom-task-notify";
8
8
  declare const BACKGROUND_WORK_PROVIDER = "doom-task";
9
- /**
10
- * Cap on files rendered into a brief. Exported so the tool schema can state the
11
- * same number to the model rather than restating it and drifting.
12
- */
13
- declare const MAX_BRIEF_FILES = 12;
14
9
  declare const ERR_NO_RUNTIME = "No subagent runtime responded. Delegation needs the subagents extension — relaunch doom-pi with agents enabled.";
15
10
  declare const ERR_CHILD_SESSION = "assign is only available in the main session. Update this task directly instead of re-delegating it.";
16
11
  declare const ERR_CANCEL_UNACKNOWLEDGED = "Subagent did not acknowledge the cancel request";
@@ -30,23 +25,26 @@ interface DelegationProgress {
30
25
  contextFileCount?: number;
31
26
  contextNotesLength?: number;
32
27
  }
33
- interface DelegationNotifier {
34
- (message: {
35
- customType: string;
36
- content: string;
37
- display: boolean;
38
- }, options?: {
39
- triggerTurn?: boolean;
40
- deliverAs?: 'steer' | 'followUp' | 'nextTurn';
41
- }): void;
28
+ type DelegationNotifier = (message: {
29
+ customType: string;
30
+ content: string;
31
+ display: boolean;
32
+ }, options?: {
33
+ triggerTurn?: boolean;
34
+ deliverAs?: 'steer' | 'followUp' | 'nextTurn';
35
+ }) => void;
36
+ interface DelegationPlatform {
37
+ readonly environment: Readonly<Record<string, string | undefined>>;
38
+ readonly processId: number;
39
+ readonly createRequestId: () => string;
40
+ readonly formatBriefPath: (entry: string, cwd: string) => string;
42
41
  }
43
42
  interface DelegationManagerOptions {
44
- events: EventBusLike;
45
43
  store: TaskStore;
46
44
  cwd: string;
45
+ platform: DelegationPlatform;
47
46
  notify?: DelegationNotifier;
48
47
  getSessionId?: () => string | undefined;
49
- env?: NodeJS.ProcessEnv;
50
48
  onChange?: () => void;
51
49
  startedTimeoutMs?: number;
52
50
  /** How long a started run may go without reporting a result. */
@@ -81,9 +79,9 @@ interface DelegationOutcome {
81
79
  /**
82
80
  * Owns the lifecycle of tasks delegated to subagents.
83
81
  *
84
- * Delegation rides the Doom Team event bus rather than spawning
82
+ * Delegation rides Team's injected Cordis service rather than spawning
85
83
  * processes directly, so doom-task stays decoupled from the subagent runtime
86
- * and degrades to a clear error when that runtime is not loaded.
84
+ * and degrades to a clear error when that service is not loaded.
87
85
  *
88
86
  * Liveness rule: every entry in `pendingTasks` has a timer armed against it, so
89
87
  * a delegation always has a deadline no matter which phase it is in. Losing
@@ -93,13 +91,14 @@ declare class DelegationManager {
93
91
  private readonly options;
94
92
  private readonly progress;
95
93
  private readonly pendingTasks;
94
+ private readonly settlingRequests;
96
95
  private readonly timers;
97
96
  private readonly subscriptions;
98
- private protocol;
97
+ private service;
99
98
  constructor(options: DelegationManagerOptions);
99
+ setCwd(cwd: string): void;
100
100
  private now;
101
101
  private nowMs;
102
- private get env();
103
102
  private get runTimeoutMs();
104
103
  private report;
105
104
  /** True in a session that is itself a subagent child. */
@@ -108,8 +107,10 @@ declare class DelegationManager {
108
107
  progressFor(task: Task): DelegationProgress | undefined;
109
108
  /** Displayed runtime duration, rebased from the latest child observation. */
110
109
  static elapsedMs(progress: DelegationProgress, nowMs?: number): number;
111
- /** Idempotent: a session restart re-subscribes without stacking handlers. */
112
- start(): void;
110
+ /** Rebind to the active Team service without stacking lifecycle listeners. */
111
+ bind(ctx: Context, service: DoomDelegationService): () => void;
112
+ /** Remove only the cross-package binding; task state and watchdogs remain live. */
113
+ unbind(): void;
113
114
  /** Items still in flight, surfaced so auto-stop will not kill the harness. */
114
115
  listActiveWork(): Array<{
115
116
  id: string;
@@ -121,7 +122,7 @@ declare class DelegationManager {
121
122
  * The live request set is read inside the mutation so a delegation assigned
122
123
  * while the lock was contended is not mistaken for a leftover.
123
124
  */
124
- reconcile(): Promise<Task[]>;
125
+ reconcile(isCurrent?: () => boolean): Promise<Task[]>;
125
126
  assign(taskId: number, options: AssignOptions): Promise<DelegationOutcome>;
126
127
  cancel(taskId: number): Promise<DelegationOutcome>;
127
128
  /** Settle without awaiting, reporting rather than dropping a failure. */
@@ -129,9 +130,9 @@ declare class DelegationManager {
129
130
  /**
130
131
  * Fail a delegation that nobody acknowledged.
131
132
  *
132
- * The bus cannot be probed for listeners, so silence is the only available
133
- * signal that the subagents runtime is absent. Without this the task would
134
- * sit in `requested` forever.
133
+ * Provider loss or a stalled Team runtime can still leave a dispatched
134
+ * request silent. Without this acknowledgement deadline the task would sit
135
+ * in `requested` forever.
135
136
  */
136
137
  private armStartedTimeout;
137
138
  /**
@@ -146,7 +147,7 @@ declare class DelegationManager {
146
147
  /**
147
148
  * Guarantee a cancel reaches a terminal state.
148
149
  *
149
- * Emitting the cancel event is a request, not an outcome: a runtime that has
150
+ * Calling the service is a request, not an outcome: a runtime that has
150
151
  * already forgotten the request answers nothing at all. The window still
151
152
  * favours a real response, which carries the run's partial output.
152
153
  */
@@ -165,10 +166,10 @@ declare class DelegationManager {
165
166
  * just not by that agent); a failure marks it `failed` so it stays visible
166
167
  * rather than silently rejoining the backlog.
167
168
  *
168
- * Dropping the pending entry first makes this single-shot: a response racing
169
- * the watchdog cannot settle the same run twice. A failed write therefore
170
- * must not abort the rest — the model still gets told, the run stops counting
171
- * as active work, and `reconcile` repairs the file at the next session start.
169
+ * The request is claimed in `settlingRequests` while it remains published as
170
+ * active work. It is removed only after the terminal state and model notification
171
+ * have been handed off, so an auto-stop observer cannot end the session between
172
+ * receiving the result and delivering it to the model.
172
173
  */
173
174
  private settle;
174
175
  private notifyModel;
@@ -183,7 +184,9 @@ declare class DelegationManager {
183
184
  */
184
185
  private patchDelegation;
185
186
  dispose(): void;
187
+ /** Clear one Pi session's transient delegation state without losing service injection. */
188
+ reset(): void;
186
189
  }
187
190
  //#endregion
188
- export { AssignOptions, BACKGROUND_WORK_PROVIDER, DelegationManager, DelegationManagerOptions, DelegationNotifier, DelegationOutcome, DelegationProgress, ERR_CANCEL_UNACKNOWLEDGED, ERR_CHILD_SESSION, ERR_NO_RUNTIME, MAX_BRIEF_FILES, NOTIFY_CUSTOM_TYPE };
189
- //# sourceMappingURL=manager.d.cts.map
191
+ export { DelegationNotifier as a, DelegationProgress as c, ERR_NO_RUNTIME as d, NOTIFY_CUSTOM_TYPE as f, DelegationManagerOptions as i, ERR_CANCEL_UNACKNOWLEDGED as l, BACKGROUND_WORK_PROVIDER as n, DelegationOutcome as o, DelegationManager as r, DelegationPlatform as s, AssignOptions as t, ERR_CHILD_SESSION as u };
192
+ //# sourceMappingURL=index-3-3ZJlaH.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-3-3ZJlaH.d.mts","names":[],"sources":["../src/services/delegation/index.ts"],"mappings":";;;;;;cAuBa;cACA;cAkCA;cAEA;cAEA;;;UAII;EACf;EACA;EACA;EACA;;EAEA;;EAEA;;;EAGA;EACA;;KAGU,sBACV;EAAW;EAAoB;EAAiB;GAChD;EAAY;EAAuB;;UAGpB;WACN,aAAa,SAAS;WACtB;WACA;WACA,kBAAkB,eAAe;;UAG3B;EACf,OAAO;EACP;EACA,UAAU;EACV,SAAS;EACT;EACA;EACA;;EAEA;;EAEA;EACA;EACA;;EAEA,gBAAgB,gBAAgB;;EAEhC,SAAS;;UAGM;EACf;EACA,cAAc;EACd;;;EAGA;;;EAGA;EACA;EACA;EACA,SAAS;;UAGM;EACf;EACA;;;;;;;;;;;;;cAuFW;mBACM;mBACA;mBACA;mBACA;mBACA;mBACA;UACT;EAER,YAAY,SAAS;EAIrB,OAAO;UAIC;UAIA;cAII;UAIJ;;MAKJ;;EAKJ,YAAY,MAAM,OAAO;;SAMlB,UAAU,UAAU,oBAAoB;;EAO/C,KAAK,KAAK,SAAS,SAAS;;EAyB5B;;EAMA,kBAAkB;IAAQ;IAAY;;;;;;;;EAYhC,UAAU,4BAAwC,QAAQ;EAwB1D,OAAO,gBAAgB,SAAS,gBAAgB,QAAQ;EAkHxD,OAAO,iBAAiB,QAAQ;;UAiB9B;;;;;;;;UAkBA;;;;;;;;;UAcA;;;;;;;;UAuBA;UAUA;UAOA;;UAOA;UAKA;UAoCA;UAsBM;;;;;;;;;;;;;UA4BA;UAwDN;;;;;;;;;;UAmDA;EAkBR;;EAMA"}
@@ -1,13 +1,12 @@
1
- import { TaskFailureReporter } from "../logSinkTelemetry.cjs";
2
- import { TaskDocument } from "./types.cjs";
3
- //#region src/store/taskStore.d.ts
1
+ import { f as TaskDocument } from "./task-hLh4BOO7.mjs";
2
+ import { o as TaskFailureReporter } from "./telemetry-DOyZLj8E.mjs";
3
+ //#region src/services/taskStore/index.d.ts
4
+ type TaskStoreCommitListener = (previous: TaskDocument, committed: TaskDocument) => void;
4
5
  interface TaskStoreOptions {
5
6
  cwd?: string;
6
- env?: NodeJS.ProcessEnv;
7
+ env?: Readonly<Record<string, string | undefined>>;
7
8
  storePath?: string;
8
- /** Backstop poll cadence for change detection. Lowered in tests so they do
9
- * not depend on `fs.watch`, whose delivery timing is platform-dependent. */
10
- pollIntervalMs?: number;
9
+ onCommitted?: TaskStoreCommitListener;
11
10
  /** How long to wait for the advisory lock before proceeding lock-free. */
12
11
  lockTimeoutMs?: number;
13
12
  /** Where swallowed failures go, so silent degradation stays visible. */
@@ -26,20 +25,18 @@ declare class TaskStore {
26
25
  private readonly cwd;
27
26
  private readonly env;
28
27
  private cached;
29
- private lastKnownRev;
30
- private watcher?;
31
- private pollTimer?;
32
- private debounceTimer?;
33
28
  private readonly listeners;
34
- private readonly pollIntervalMs;
35
29
  private readonly lockTimeoutMs;
36
30
  private readonly report?;
31
+ private readonly onCommitted?;
37
32
  constructor(options?: TaskStoreOptions);
38
- /** Bind a default store to the current session tree before reading or watching it. */
33
+ /** Bind a default store to the current session tree before reading it. */
39
34
  configureSession(sessionKey: string): void;
40
35
  /** Last document read from disk, without hitting the filesystem. */
41
36
  get snapshot(): TaskDocument;
42
37
  read(): TaskDocument;
38
+ readAsync(shouldApply?: () => boolean): Promise<TaskDocument>;
39
+ private readDocumentAsync;
43
40
  /**
44
41
  * Apply a mutation under the store lock.
45
42
  *
@@ -54,24 +51,20 @@ declare class TaskStore {
54
51
  document: TaskDocument;
55
52
  value: T;
56
53
  }>;
54
+ private notifyCommitted;
57
55
  private write;
58
56
  private acquireLock;
59
57
  /** Remove a lock left behind by a dead process or one held implausibly long. */
60
58
  private breakStaleLock;
61
59
  /**
62
- * Notify when another process changes the store.
60
+ * Listen for commits made through this store instance.
63
61
  *
64
- * `fs.watch` alone is unreliable across the rename-based write (and on some
65
- * network filesystems), so a slow poll backs it up. Writes made by this
66
- * process are filtered out by revision so the UI does not redraw twice.
62
+ * Live cross-process updates use the owning session's direct event bus. This
63
+ * listener remains for local terminal views and never watches the filesystem.
67
64
  */
68
65
  onExternalChange(listener: (document: TaskDocument) => void): () => void;
69
- private startWatching;
70
- private scheduleCheck;
71
- private checkForChange;
72
- private stopWatching;
73
66
  dispose(): void;
74
67
  }
75
68
  //#endregion
76
- export { TaskStore, TaskStoreOptions };
77
- //# sourceMappingURL=taskStore.d.cts.map
69
+ export { TaskStoreCommitListener as n, TaskStoreOptions as r, TaskStore as t };
70
+ //# sourceMappingURL=index-B7oVjSey.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B7oVjSey.d.mts","names":[],"sources":["../src/services/taskStore/index.ts"],"mappings":";;;KAkBY,2BAA2B,UAAU,cAAc,WAAW;UAEzD;EACf;EACA,MAAM,SAAS;EACf;EACA,cAAc;;EAEd;;EAEA,SAAS;;;;;;;;;;cAwCE;EACX;mBAEiB;mBACA;UACT;mBACS;mBACA;mBACA;mBACA;EAEjB,YAAY,UAAS;;EAUrB,iBAAiB;;MAOb,YAAY;EAIhB,QAAQ;EAgBF,UAAU,8BAA0C,QAAQ;UAQpD;;;;;;;;EAmBR,OAAO,GACX,SAAS,UAAU;IAAmB,WAAW;IAAc,OAAO;MACrE;IAAU,UAAU;IAAc,OAAO;;UAwBpC;UAeA;UAUM;;UAoCN;;;;;;;EAwBR,iBAAiB,WAAW,UAAU;EAKtC"}
@@ -1,5 +1,5 @@
1
- import { Task, TaskDocument } from "./types.cjs";
2
- //#region src/store/reconcile.d.ts
1
+ import { f as TaskDocument, s as Task } from "./task-hLh4BOO7.mjs";
2
+ //#region src/services/reconcile/index.d.ts
3
3
  declare const ERR_ORPHANED_BY_RESTART = "Delegation orphaned by harness restart";
4
4
  declare const ERR_ORPHANED_BY_SESSION = "Delegation orphaned by session restart";
5
5
  interface ReconcileResult {
@@ -30,5 +30,5 @@ interface ReconcileSelf {
30
30
  */
31
31
  declare function reconcileOrphanedDelegations(document: TaskDocument, now?: string, isAlive?: (pid: number) => boolean, self?: ReconcileSelf): ReconcileResult;
32
32
  //#endregion
33
- export { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, ReconcileResult, ReconcileSelf, reconcileOrphanedDelegations };
34
- //# sourceMappingURL=reconcile.d.cts.map
33
+ export { reconcileOrphanedDelegations as a, ReconcileSelf as i, ERR_ORPHANED_BY_SESSION as n, ReconcileResult as r, ERR_ORPHANED_BY_RESTART as t };
34
+ //# sourceMappingURL=index-BNMm9g0K.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BNMm9g0K.d.mts","names":[],"sources":["../src/services/reconcile/index.ts"],"mappings":";;cAGa;cACA;UAEI;EACf,UAAU;EACV,UAAU;;;UAIK;EACf;EACA,gBAAgB;;;;;;;;;;;;;;;;;;;iBAoBF,6BACd,UAAU,cACV,cACA,WAAU,yBACV,OAAO,gBACN"}