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

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/package.json +6 -6
  2. package/dist/_virtual/_rolldown/runtime.cjs +0 -23
  3. package/dist/api-contracts.cjs +0 -7
  4. package/dist/api-contracts.d.cts +0 -2
  5. package/dist/api-contracts.d.mts +0 -2
  6. package/dist/api-contracts.mjs +0 -2
  7. package/dist/commands.cjs +0 -4
  8. package/dist/commands.d.cts +0 -2
  9. package/dist/commands.d.mts +0 -2
  10. package/dist/commands.mjs +0 -2
  11. package/dist/config.cjs +0 -19
  12. package/dist/config.d.cts +0 -2
  13. package/dist/config.d.mts +0 -2
  14. package/dist/config.mjs +0 -2
  15. package/dist/delegation-manager.cjs +0 -10
  16. package/dist/delegation-manager.d.cts +0 -3
  17. package/dist/delegation-manager.d.mts +0 -3
  18. package/dist/delegation-manager.mjs +0 -3
  19. package/dist/extensions/pi.cjs +0 -50
  20. package/dist/extensions/pi.cjs.map +0 -1
  21. package/dist/extensions/pi.d.cts +0 -5
  22. package/dist/extensions/pi.d.cts.map +0 -1
  23. package/dist/extensions/pi.d.mts +0 -5
  24. package/dist/extensions/pi.d.mts.map +0 -1
  25. package/dist/extensions/pi.mjs +0 -45
  26. package/dist/extensions/pi.mjs.map +0 -1
  27. package/dist/extensions/server.cjs +0 -57
  28. package/dist/extensions/server.cjs.map +0 -1
  29. package/dist/extensions/server.d.cts +0 -5
  30. package/dist/extensions/server.d.cts.map +0 -1
  31. package/dist/extensions/server.d.mts +0 -5
  32. package/dist/extensions/server.d.mts.map +0 -1
  33. package/dist/extensions/server.mjs +0 -52
  34. package/dist/extensions/server.mjs.map +0 -1
  35. package/dist/extensions/web.mjs +0 -1013
  36. package/dist/extensions/web.mjs.map +0 -1
  37. package/dist/index.cjs +0 -106
  38. package/dist/index.d.cts +0 -16
  39. package/dist/index.d.mts +0 -16
  40. package/dist/index.mjs +0 -16
  41. package/dist/logSinkTelemetry.cjs +0 -6
  42. package/dist/logSinkTelemetry.d.cts +0 -3
  43. package/dist/logSinkTelemetry.d.mts +0 -3
  44. package/dist/logSinkTelemetry.mjs +0 -3
  45. package/dist/src/constants/promptGuidelines.cjs +0 -26
  46. package/dist/src/constants/promptGuidelines.cjs.map +0 -1
  47. package/dist/src/constants/promptGuidelines.d.cts +0 -13
  48. package/dist/src/constants/promptGuidelines.d.cts.map +0 -1
  49. package/dist/src/constants/promptGuidelines.d.mts +0 -13
  50. package/dist/src/constants/promptGuidelines.d.mts.map +0 -1
  51. package/dist/src/constants/promptGuidelines.mjs +0 -26
  52. package/dist/src/constants/promptGuidelines.mjs.map +0 -1
  53. package/dist/src/constants/task.cjs +0 -6
  54. package/dist/src/constants/task.cjs.map +0 -1
  55. package/dist/src/constants/task.d.cts +0 -4
  56. package/dist/src/constants/task.d.cts.map +0 -1
  57. package/dist/src/constants/task.d.mts +0 -4
  58. package/dist/src/constants/task.d.mts.map +0 -1
  59. package/dist/src/constants/task.mjs +0 -6
  60. package/dist/src/constants/task.mjs.map +0 -1
  61. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs +0 -90
  62. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs.map +0 -1
  63. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs +0 -89
  64. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs.map +0 -1
  65. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs +0 -7
  66. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs.map +0 -1
  67. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs +0 -8
  68. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs.map +0 -1
  69. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs +0 -317
  70. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs.map +0 -1
  71. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts +0 -39
  72. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts.map +0 -1
  73. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts +0 -39
  74. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts.map +0 -1
  75. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs +0 -317
  76. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs.map +0 -1
  77. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs +0 -95
  78. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs.map +0 -1
  79. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs +0 -95
  80. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs.map +0 -1
  81. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs +0 -30
  82. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs.map +0 -1
  83. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts +0 -20
  84. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts.map +0 -1
  85. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts +0 -20
  86. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts.map +0 -1
  87. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs +0 -29
  88. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs.map +0 -1
  89. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs +0 -19
  90. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs.map +0 -1
  91. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs +0 -19
  92. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs.map +0 -1
  93. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs +0 -8
  94. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs.map +0 -1
  95. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs +0 -9
  96. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs.map +0 -1
  97. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs +0 -7
  98. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs.map +0 -1
  99. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs +0 -8
  100. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs.map +0 -1
  101. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs +0 -6
  102. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs.map +0 -1
  103. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs +0 -6
  104. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs.map +0 -1
  105. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs +0 -6
  106. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs.map +0 -1
  107. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs +0 -6
  108. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs.map +0 -1
  109. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs +0 -6
  110. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs.map +0 -1
  111. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs +0 -6
  112. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs.map +0 -1
  113. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs +0 -6
  114. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs.map +0 -1
  115. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs +0 -6
  116. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs.map +0 -1
  117. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs +0 -7
  118. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs.map +0 -1
  119. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs +0 -8
  120. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs.map +0 -1
  121. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +0 -7
  122. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +0 -1
  123. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +0 -8
  124. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +0 -1
  125. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs +0 -7
  126. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs.map +0 -1
  127. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs +0 -8
  128. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs.map +0 -1
  129. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs +0 -7
  130. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs.map +0 -1
  131. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs +0 -8
  132. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs.map +0 -1
  133. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs +0 -20
  134. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs.map +0 -1
  135. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs +0 -20
  136. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs.map +0 -1
  137. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs +0 -7
  138. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs.map +0 -1
  139. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs +0 -8
  140. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs.map +0 -1
  141. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +0 -11
  142. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +0 -1
  143. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +0 -12
  144. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +0 -1
  145. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +0 -7
  146. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +0 -1
  147. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +0 -8
  148. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +0 -1
  149. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs +0 -160
  150. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs.map +0 -1
  151. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts +0 -25
  152. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts.map +0 -1
  153. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts +0 -25
  154. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts.map +0 -1
  155. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs +0 -157
  156. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs.map +0 -1
  157. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs +0 -109
  158. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs.map +0 -1
  159. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs +0 -107
  160. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs.map +0 -1
  161. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs +0 -7
  162. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs.map +0 -1
  163. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs +0 -8
  164. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs.map +0 -1
  165. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs +0 -7
  166. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs.map +0 -1
  167. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs +0 -8
  168. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs.map +0 -1
  169. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs +0 -333
  170. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs.map +0 -1
  171. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts +0 -61
  172. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts.map +0 -1
  173. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts +0 -61
  174. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts.map +0 -1
  175. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs +0 -322
  176. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs.map +0 -1
  177. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs +0 -9
  178. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs.map +0 -1
  179. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs +0 -9
  180. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs.map +0 -1
  181. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs +0 -149
  182. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs.map +0 -1
  183. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts +0 -59
  184. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts.map +0 -1
  185. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts +0 -59
  186. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts.map +0 -1
  187. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs +0 -142
  188. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs.map +0 -1
  189. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs +0 -358
  190. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs.map +0 -1
  191. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts +0 -61
  192. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts.map +0 -1
  193. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts +0 -61
  194. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts.map +0 -1
  195. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs +0 -355
  196. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs.map +0 -1
  197. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs +0 -165
  198. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs.map +0 -1
  199. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts +0 -39
  200. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts.map +0 -1
  201. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts +0 -39
  202. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts.map +0 -1
  203. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs +0 -164
  204. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs.map +0 -1
  205. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs +0 -13
  206. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs.map +0 -1
  207. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs +0 -13
  208. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs.map +0 -1
  209. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs +0 -7
  210. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs.map +0 -1
  211. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs +0 -8
  212. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs.map +0 -1
  213. package/dist/src/models/task.cjs +0 -29
  214. package/dist/src/models/task.cjs.map +0 -1
  215. package/dist/src/models/task.d.cts +0 -186
  216. package/dist/src/models/task.d.cts.map +0 -1
  217. package/dist/src/models/task.d.mts +0 -186
  218. package/dist/src/models/task.d.mts.map +0 -1
  219. package/dist/src/models/task.mjs +0 -26
  220. package/dist/src/models/task.mjs.map +0 -1
  221. package/dist/src/models/taskGraph.cjs +0 -67
  222. package/dist/src/models/taskGraph.cjs.map +0 -1
  223. package/dist/src/models/taskGraph.d.cts +0 -24
  224. package/dist/src/models/taskGraph.d.cts.map +0 -1
  225. package/dist/src/models/taskGraph.d.mts +0 -24
  226. package/dist/src/models/taskGraph.d.mts.map +0 -1
  227. package/dist/src/models/taskGraph.mjs +0 -63
  228. package/dist/src/models/taskGraph.mjs.map +0 -1
  229. package/dist/src/schemas/apiContracts.cjs +0 -51
  230. package/dist/src/schemas/apiContracts.cjs.map +0 -1
  231. package/dist/src/schemas/apiContracts.d.cts +0 -53
  232. package/dist/src/schemas/apiContracts.d.cts.map +0 -1
  233. package/dist/src/schemas/apiContracts.d.mts +0 -53
  234. package/dist/src/schemas/apiContracts.d.mts.map +0 -1
  235. package/dist/src/schemas/apiContracts.mjs +0 -49
  236. package/dist/src/schemas/apiContracts.mjs.map +0 -1
  237. package/dist/src/schemas/task.cjs +0 -130
  238. package/dist/src/schemas/task.cjs.map +0 -1
  239. package/dist/src/schemas/task.d.cts +0 -103
  240. package/dist/src/schemas/task.d.cts.map +0 -1
  241. package/dist/src/schemas/task.d.mts +0 -103
  242. package/dist/src/schemas/task.d.mts.map +0 -1
  243. package/dist/src/schemas/task.mjs +0 -117
  244. package/dist/src/schemas/task.mjs.map +0 -1
  245. package/dist/src/services/config/index.cjs +0 -88
  246. package/dist/src/services/config/index.cjs.map +0 -1
  247. package/dist/src/services/config/index.d.cts +0 -42
  248. package/dist/src/services/config/index.d.cts.map +0 -1
  249. package/dist/src/services/config/index.d.mts +0 -42
  250. package/dist/src/services/config/index.d.mts.map +0 -1
  251. package/dist/src/services/config/index.mjs +0 -72
  252. package/dist/src/services/config/index.mjs.map +0 -1
  253. package/dist/src/services/contextContribution/index.cjs +0 -51
  254. package/dist/src/services/contextContribution/index.cjs.map +0 -1
  255. package/dist/src/services/contextContribution/index.mjs +0 -46
  256. package/dist/src/services/contextContribution/index.mjs.map +0 -1
  257. package/dist/src/services/delegation/index.cjs +0 -629
  258. package/dist/src/services/delegation/index.cjs.map +0 -1
  259. package/dist/src/services/delegation/index.d.cts +0 -192
  260. package/dist/src/services/delegation/index.d.cts.map +0 -1
  261. package/dist/src/services/delegation/index.d.mts +0 -192
  262. package/dist/src/services/delegation/index.d.mts.map +0 -1
  263. package/dist/src/services/delegation/index.mjs +0 -623
  264. package/dist/src/services/delegation/index.mjs.map +0 -1
  265. package/dist/src/services/delegationPlatform/index.cjs +0 -23
  266. package/dist/src/services/delegationPlatform/index.cjs.map +0 -1
  267. package/dist/src/services/delegationPlatform/index.mjs +0 -21
  268. package/dist/src/services/delegationPlatform/index.mjs.map +0 -1
  269. package/dist/src/services/invariants/index.cjs +0 -64
  270. package/dist/src/services/invariants/index.cjs.map +0 -1
  271. package/dist/src/services/invariants/index.d.cts +0 -23
  272. package/dist/src/services/invariants/index.d.cts.map +0 -1
  273. package/dist/src/services/invariants/index.d.mts +0 -23
  274. package/dist/src/services/invariants/index.d.mts.map +0 -1
  275. package/dist/src/services/invariants/index.mjs +0 -62
  276. package/dist/src/services/invariants/index.mjs.map +0 -1
  277. package/dist/src/services/logSinkTelemetry/index.cjs +0 -43
  278. package/dist/src/services/logSinkTelemetry/index.cjs.map +0 -1
  279. package/dist/src/services/logSinkTelemetry/index.d.cts +0 -23
  280. package/dist/src/services/logSinkTelemetry/index.d.cts.map +0 -1
  281. package/dist/src/services/logSinkTelemetry/index.d.mts +0 -23
  282. package/dist/src/services/logSinkTelemetry/index.d.mts.map +0 -1
  283. package/dist/src/services/logSinkTelemetry/index.mjs +0 -41
  284. package/dist/src/services/logSinkTelemetry/index.mjs.map +0 -1
  285. package/dist/src/services/paths/index.cjs +0 -233
  286. package/dist/src/services/paths/index.cjs.map +0 -1
  287. package/dist/src/services/paths/index.d.cts +0 -25
  288. package/dist/src/services/paths/index.d.cts.map +0 -1
  289. package/dist/src/services/paths/index.d.mts +0 -25
  290. package/dist/src/services/paths/index.d.mts.map +0 -1
  291. package/dist/src/services/paths/index.mjs +0 -218
  292. package/dist/src/services/paths/index.mjs.map +0 -1
  293. package/dist/src/services/processLiveness/index.cjs +0 -20
  294. package/dist/src/services/processLiveness/index.cjs.map +0 -1
  295. package/dist/src/services/processLiveness/index.d.cts +0 -11
  296. package/dist/src/services/processLiveness/index.d.cts.map +0 -1
  297. package/dist/src/services/processLiveness/index.d.mts +0 -11
  298. package/dist/src/services/processLiveness/index.d.mts.map +0 -1
  299. package/dist/src/services/processLiveness/index.mjs +0 -20
  300. package/dist/src/services/processLiveness/index.mjs.map +0 -1
  301. package/dist/src/services/reconcile/index.cjs +0 -65
  302. package/dist/src/services/reconcile/index.cjs.map +0 -1
  303. package/dist/src/services/reconcile/index.d.cts +0 -33
  304. package/dist/src/services/reconcile/index.d.cts.map +0 -1
  305. package/dist/src/services/reconcile/index.d.mts +0 -33
  306. package/dist/src/services/reconcile/index.d.mts.map +0 -1
  307. package/dist/src/services/reconcile/index.mjs +0 -63
  308. package/dist/src/services/reconcile/index.mjs.map +0 -1
  309. package/dist/src/services/reducer/index.cjs +0 -350
  310. package/dist/src/services/reducer/index.cjs.map +0 -1
  311. package/dist/src/services/reducer/index.d.cts +0 -71
  312. package/dist/src/services/reducer/index.d.cts.map +0 -1
  313. package/dist/src/services/reducer/index.d.mts +0 -71
  314. package/dist/src/services/reducer/index.d.mts.map +0 -1
  315. package/dist/src/services/reducer/index.mjs +0 -345
  316. package/dist/src/services/reducer/index.mjs.map +0 -1
  317. package/dist/src/services/taskNarration/index.cjs +0 -32
  318. package/dist/src/services/taskNarration/index.cjs.map +0 -1
  319. package/dist/src/services/taskNarration/index.mjs +0 -32
  320. package/dist/src/services/taskNarration/index.mjs.map +0 -1
  321. package/dist/src/services/taskResult/index.cjs +0 -174
  322. package/dist/src/services/taskResult/index.cjs.map +0 -1
  323. package/dist/src/services/taskResult/index.d.cts +0 -50
  324. package/dist/src/services/taskResult/index.d.cts.map +0 -1
  325. package/dist/src/services/taskResult/index.d.mts +0 -50
  326. package/dist/src/services/taskResult/index.d.mts.map +0 -1
  327. package/dist/src/services/taskResult/index.mjs +0 -165
  328. package/dist/src/services/taskResult/index.mjs.map +0 -1
  329. package/dist/src/services/taskStore/index.cjs +0 -216
  330. package/dist/src/services/taskStore/index.cjs.map +0 -1
  331. package/dist/src/services/taskStore/index.d.cts +0 -69
  332. package/dist/src/services/taskStore/index.d.cts.map +0 -1
  333. package/dist/src/services/taskStore/index.d.mts +0 -69
  334. package/dist/src/services/taskStore/index.d.mts.map +0 -1
  335. package/dist/src/services/taskStore/index.mjs +0 -213
  336. package/dist/src/services/taskStore/index.mjs.map +0 -1
  337. package/dist/src/types/delegation.cjs +0 -7
  338. package/dist/src/types/delegation.cjs.map +0 -1
  339. package/dist/src/types/delegation.d.cts +0 -5
  340. package/dist/src/types/delegation.d.cts.map +0 -1
  341. package/dist/src/types/delegation.d.mts +0 -5
  342. package/dist/src/types/delegation.d.mts.map +0 -1
  343. package/dist/src/types/delegation.mjs +0 -7
  344. package/dist/src/types/delegation.mjs.map +0 -1
  345. package/dist/src/types/telemetry.cjs +0 -26
  346. package/dist/src/types/telemetry.cjs.map +0 -1
  347. package/dist/src/types/telemetry.d.cts +0 -35
  348. package/dist/src/types/telemetry.d.cts.map +0 -1
  349. package/dist/src/types/telemetry.d.mts +0 -35
  350. package/dist/src/types/telemetry.d.mts.map +0 -1
  351. package/dist/src/types/telemetry.mjs +0 -26
  352. package/dist/src/types/telemetry.mjs.map +0 -1
  353. package/dist/src/types/webTasks.cjs +0 -7
  354. package/dist/src/types/webTasks.cjs.map +0 -1
  355. package/dist/src/types/webTasks.mjs +0 -7
  356. package/dist/src/types/webTasks.mjs.map +0 -1
  357. package/dist/store-invariants.cjs +0 -5
  358. package/dist/store-invariants.d.cts +0 -2
  359. package/dist/store-invariants.d.mts +0 -2
  360. package/dist/store-invariants.mjs +0 -2
  361. package/dist/store-paths.cjs +0 -14
  362. package/dist/store-paths.d.cts +0 -2
  363. package/dist/store-paths.d.mts +0 -2
  364. package/dist/store-paths.mjs +0 -2
  365. package/dist/store-process-liveness.cjs +0 -3
  366. package/dist/store-process-liveness.d.cts +0 -2
  367. package/dist/store-process-liveness.d.mts +0 -2
  368. package/dist/store-process-liveness.mjs +0 -2
  369. package/dist/store-reconcile.cjs +0 -5
  370. package/dist/store-reconcile.d.cts +0 -2
  371. package/dist/store-reconcile.d.mts +0 -2
  372. package/dist/store-reconcile.mjs +0 -2
  373. package/dist/store-reducer.cjs +0 -8
  374. package/dist/store-reducer.d.cts +0 -2
  375. package/dist/store-reducer.d.mts +0 -2
  376. package/dist/store-reducer.mjs +0 -2
  377. package/dist/store-task-graph.cjs +0 -7
  378. package/dist/store-task-graph.d.cts +0 -2
  379. package/dist/store-task-graph.d.mts +0 -2
  380. package/dist/store-task-graph.mjs +0 -2
  381. package/dist/store-task-store.cjs +0 -3
  382. package/dist/store-task-store.d.cts +0 -2
  383. package/dist/store-task-store.d.mts +0 -2
  384. package/dist/store-task-store.mjs +0 -2
  385. package/dist/store-types.cjs +0 -6
  386. package/dist/store-types.d.cts +0 -2
  387. package/dist/store-types.d.mts +0 -2
  388. package/dist/store-types.mjs +0 -2
  389. package/dist/tool-prompt-guidelines.cjs +0 -3
  390. package/dist/tool-prompt-guidelines.d.cts +0 -2
  391. package/dist/tool-prompt-guidelines.d.mts +0 -2
  392. package/dist/tool-prompt-guidelines.mjs +0 -2
  393. package/dist/tool-response-envelope.cjs +0 -12
  394. package/dist/tool-response-envelope.d.cts +0 -2
  395. package/dist/tool-response-envelope.d.mts +0 -2
  396. package/dist/tool-response-envelope.mjs +0 -2
  397. package/dist/tool-schema.cjs +0 -17
  398. package/dist/tool-schema.d.cts +0 -3
  399. package/dist/tool-schema.d.mts +0 -3
  400. package/dist/tool-schema.mjs +0 -3
  401. package/dist/tool-task-tool.cjs +0 -6
  402. package/dist/tool-task-tool.d.cts +0 -3
  403. package/dist/tool-task-tool.d.mts +0 -3
  404. package/dist/tool-task-tool.mjs +0 -3
  405. package/dist/tui-format.cjs +0 -14
  406. package/dist/tui-format.d.cts +0 -2
  407. package/dist/tui-format.d.mts +0 -2
  408. package/dist/tui-format.mjs +0 -2
  409. package/dist/tui-selectors.cjs +0 -10
  410. package/dist/tui-selectors.d.cts +0 -2
  411. package/dist/tui-selectors.d.mts +0 -2
  412. package/dist/tui-selectors.mjs +0 -2
  413. package/dist/tui-task-overlay.cjs +0 -4
  414. package/dist/tui-task-overlay.d.cts +0 -2
  415. package/dist/tui-task-overlay.d.mts +0 -2
  416. package/dist/tui-task-overlay.mjs +0 -2
  417. package/dist/tui-task-space.cjs +0 -5
  418. package/dist/tui-task-space.d.cts +0 -2
  419. package/dist/tui-task-space.d.mts +0 -2
  420. package/dist/tui-task-space.mjs +0 -2
@@ -1,39 +0,0 @@
1
- import { Task } from "../../../../../models/task.mjs";
2
- import { TaskStore } from "../../../../../services/taskStore/index.mjs";
3
- import { DelegationManager } from "../../../../../services/delegation/index.mjs";
4
- import { TaskToolDependencies } from "../tool/_lib/task.cli.mjs";
5
- import { PiPluginContext } from "@agimon-ai/doompi-core/pi-extension";
6
- import { ExtensionAPI, ExtensionContext, ExtensionUIContext } from "@earendil-works/pi-coding-agent";
7
- //#region src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.ts
8
- export interface TaskOverlayContract {
9
- setUICtx(context: ExtensionUIContext): void;
10
- update(): void;
11
- dispose(): void;
12
- toggleCollapse(): void;
13
- isRegistered(): boolean;
14
- }
15
- export interface TaskRootPresentation {
16
- createOverlay(options: {
17
- getTasks: () => readonly Task[];
18
- delegation: DelegationManager;
19
- }): TaskOverlayContract;
20
- registerCollapseShortcut(pi: Pick<ExtensionAPI, 'registerShortcut'>, overlay: TaskOverlayContract, waitUntilReady: (context: ExtensionContext) => Promise<void>, isActive: () => boolean): void;
21
- }
22
- export declare const createTaskRoot: (presentation: TaskRootPresentation) => import("@agimon-ai/doompi-core/extension-file").RootFile<{
23
- taskStore: TaskStore;
24
- delegationManager: DelegationManager;
25
- taskOverlay: TaskOverlayContract;
26
- toolDependencies: TaskToolDependencies;
27
- waitForSessionReadiness: (context: {
28
- readonly sessionManager: object;
29
- }, signal?: AbortSignal) => Promise<void>;
30
- refresh: () => void;
31
- sessionStart: (_event: unknown, ctx: ExtensionContext) => Promise<void>;
32
- toolExecutionEnd: (event: {
33
- toolName: string;
34
- }) => void;
35
- isActive: () => boolean;
36
- }, PiPluginContext<undefined>>;
37
- export type TaskPiScope = Awaited<ReturnType<ReturnType<typeof createTaskRoot>>>['value'];
38
- //#endregion
39
- //# sourceMappingURL=root.cli.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"root.cli.d.mts","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts"],"mappings":";;;;;;;iBA2CiB;EACf,SAAS,SAAS;EAClB;EACA;EACA;EACA;;iBAGe;EACf,cAAc;IAAW,yBAAyB;IAAQ,YAAY;MAAsB;EAC5F,yBACE,IAAI,KAAK,mCACT,SAAS,qBACT,iBAAiB,SAAS,qBAAqB,eAC/C;;qBAoVS,iBAAc,cAAkB,yEAAoB;;;;;EAjQlD,0BAAA;aAAW;KAAwB,SACnC,gBACR;EA4BiB;EAoCgB,eAAA,iBAAO,KAAO,qBAAgB;EA2FjC,mBAAA;IAAE;;;GAoGgF;YAC3G,cAAc,QAAQ,WAAW,kBAAkB"}
@@ -1,317 +0,0 @@
1
- import { getDelegationTimeoutMs, getMaxTasks, getStoreTtlMs } from "../../../../../services/config/index.mjs";
2
- import { TASK_EVENT } from "../../../../../types/telemetry.mjs";
3
- import { BACKGROUND_WORK_PROVIDER, DelegationManager } from "../../../../../services/delegation/index.mjs";
4
- import { COMMAND_NAME } from "../../../../../constants/task.mjs";
5
- import "../../../../../schemas/task.mjs";
6
- import { TASK_CONTEXT_CONTRIBUTION_SOURCE, createTaskContextContribution } from "../../../../../services/contextContribution/index.mjs";
7
- import { createNodeDelegationPlatform } from "../../../../../services/delegationPlatform/index.mjs";
8
- import { createTaskErrorReporter, toFailureReporter } from "../../../../../services/logSinkTelemetry/index.mjs";
9
- import { hasStorePathOverride, removeLegacyStoreDirectoryAsync, resolveSessionKey, sweepStoreFilesAsync } from "../../../../../services/paths/index.mjs";
10
- import { narrateTaskCommit } from "../../../../../services/taskNarration/index.mjs";
11
- import { TaskStore } from "../../../../../services/taskStore/index.mjs";
12
- import { defineRoot } from "@agimon-ai/doompi-core/extension-file";
13
- import { DOOM_DELEGATION_SERVICE, readDoomDelegationService } from "@agimon-ai/doompi-core/delegation";
14
- import { DOOM_BACKGROUND_WORK_SERVICE, readDoomBackgroundWorkService } from "@agimon-ai/doompi-core/background-work";
15
- import { DOOM_CONTEXT_CONTRIBUTIONS_SERVICE, requireDoomContextContributions } from "@agimon-ai/doompi-core/context-contributions";
16
- import { DOOM_NARRATION_SERVICE, createNarrationRequest, requireDoomNarrationService } from "@agimon-ai/doompi-core/narration";
17
- import { readDoomReadinessCoordinator } from "@agimon-ai/doompi-core/readiness";
18
- import { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from "@agimon-ai/doompi-core/ui-hub";
19
- //#region src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts
20
- const LEADER_SOURCE = TASK_CONTEXT_CONTRIBUTION_SOURCE;
21
- const NARRATION_FAILED_EVENT = "doom_task.narration_failed";
22
- /** Between doom-plan's 60 and the core help group's 70, so `t` sits after `p`. */
23
- const LEADER_GROUP_ORDER = 65;
24
- const ERROR_TYPE_ATTRIBUTE = "error.type";
25
- /**
26
- * Which part of session start ran. The telemetry sanitizer drops free text, so
27
- * the failing branch has to travel as a stable low-cardinality token.
28
- */
29
- const SESSION_START_STAGE_ATTRIBUTE = "task.stage";
30
- const SESSION_START_STAGE = {
31
- sessionId: "session_id",
32
- storeCleanup: "store_cleanup",
33
- storeSweep: "store_sweep",
34
- storeRead: "store_read",
35
- reconcile: "reconcile",
36
- refresh: "refresh"
37
- };
38
- /**
39
- * Mirror of the telemetry sink's own `error.type` token. The sink overwrites it
40
- * for any defined error, so this only guarantees the attribute exists when the
41
- * thrown value is `undefined`.
42
- */
43
- function errorTypeToken(error) {
44
- if (error instanceof Error) return error.name || "Error";
45
- if (typeof error === "string") return "StringError";
46
- if (error && typeof error === "object") return "ObjectError";
47
- return "UnknownError";
48
- }
49
- /** Install Task state and external resources into its host-owned Cordis plugin fiber. */
50
- const createTaskRootExtension = (presentation) => ({ context: cordis, pi, signal: pluginSignal }) => {
51
- const errorReporter = createTaskErrorReporter();
52
- const report = toFailureReporter(errorReporter);
53
- let active = true;
54
- let sessionGeneration = 0;
55
- let narrationService;
56
- let store;
57
- let delegation;
58
- let overlay;
59
- let unwatch;
60
- let backgroundWork;
61
- let disposeLeader;
62
- let sessionId;
63
- let sessionInitialization;
64
- const reportNarrationFailure = (error) => {
65
- errorReporter.recordWarning(NARRATION_FAILED_EVENT, error).catch((telemetryError) => {
66
- process.emitWarning(`Doom-task could not record a narration failure: ${String(telemetryError)}`);
67
- });
68
- };
69
- const narrationSink = { narrate(text) {
70
- const service = narrationService;
71
- const request = createNarrationRequest(text);
72
- if (!service || !request) return;
73
- try {
74
- Promise.resolve(service.request(request)).catch(reportNarrationFailure);
75
- } catch (error) {
76
- reportNarrationFailure(error);
77
- }
78
- } };
79
- const waitForSessionReadiness = async (context, signal) => {
80
- signal?.throwIfAborted();
81
- const current = sessionInitialization;
82
- if (!current) throw new Error("doom-task session initialization has not started");
83
- if (current.sessionManager !== context.sessionManager) throw new Error("doom-task readiness belongs to a stale Pi session");
84
- await current.operation;
85
- signal?.throwIfAborted();
86
- if (!active || pluginSignal.aborted || current !== sessionInitialization || !sessionId) throw new Error("doom-task readiness belongs to a stale extension generation");
87
- };
88
- const clearSessionResources = () => {
89
- unwatch?.();
90
- unwatch = void 0;
91
- delegation?.reset();
92
- overlay?.dispose();
93
- sessionId = void 0;
94
- };
95
- const taskStore = new TaskStore({
96
- report,
97
- onCommitted: (previous, committed) => narrateTaskCommit(narrationSink, previous, committed)
98
- });
99
- store = taskStore;
100
- const refresh = () => {
101
- if (!active || pluginSignal.aborted) return;
102
- overlay?.update();
103
- backgroundWork?.update();
104
- };
105
- const delegationManager = new DelegationManager({
106
- store: taskStore,
107
- cwd: process.cwd(),
108
- platform: createNodeDelegationPlatform(),
109
- notify: (message, options) => pi.sendMessage(message, options),
110
- getSessionId: () => sessionId,
111
- onChange: refresh,
112
- runTimeoutMs: getDelegationTimeoutMs(),
113
- report,
114
- onNotifyError: (error, taskId) => {
115
- errorReporter.recordNotificationError(error, taskId);
116
- }
117
- });
118
- delegation = delegationManager;
119
- const taskOverlay = presentation.createOverlay({
120
- getTasks: () => taskStore.snapshot.tasks,
121
- delegation: delegationManager
122
- });
123
- overlay = taskOverlay;
124
- const toolDependencies = {
125
- store: taskStore,
126
- delegation: delegationManager,
127
- maxTasks: getMaxTasks(),
128
- onChange: refresh,
129
- report,
130
- waitUntilReady: waitForSessionReadiness
131
- };
132
- const sessionStart = async (_event, ctx) => {
133
- if (!active || pluginSignal.aborted) return;
134
- const ownGeneration = ++sessionGeneration;
135
- if (sessionId !== void 0) clearSessionResources();
136
- const context = ctx;
137
- const initialize = async (signal) => {
138
- const isCurrent = () => !signal?.aborted && active && !pluginSignal.aborted && ownGeneration === sessionGeneration;
139
- let stage = SESSION_START_STAGE.sessionId;
140
- /**
141
- * Run a stage whose failure only degrades task visibility. The session
142
- * still starts, and the warning keeps the degraded state from being silent.
143
- */
144
- const degrade = async (next, operation) => {
145
- stage = next;
146
- try {
147
- await operation();
148
- } catch (error) {
149
- report.warn(TASK_EVENT.sessionStartDegraded, error, {
150
- [SESSION_START_STAGE_ATTRIBUTE]: next,
151
- [ERROR_TYPE_ATTRIBUTE]: errorTypeToken(error)
152
- });
153
- }
154
- };
155
- try {
156
- const currentSessionId = context.sessionManager?.getSessionId();
157
- if (!currentSessionId) throw new Error("doom-task requires a session id");
158
- sessionId = currentSessionId;
159
- taskStore.configureSession(resolveSessionKey(currentSessionId));
160
- stage = SESSION_START_STAGE.storeCleanup;
161
- const cleanup = await removeLegacyStoreDirectoryAsync(taskStore.storePath);
162
- if (!isCurrent()) return;
163
- stage = SESSION_START_STAGE.storeSweep;
164
- const sweep = hasStorePathOverride() ? {
165
- removed: [],
166
- errors: []
167
- } : await sweepStoreFilesAsync(taskStore.storePath, getStoreTtlMs());
168
- if (!isCurrent()) return;
169
- const storeErrors = [...cleanup.errors, ...sweep.errors];
170
- for (const failure of storeErrors) report.warn(TASK_EVENT.storeSweepFailed, new Error(failure));
171
- if (storeErrors.length > 0 && context.hasUI) context.ui.notify(storeErrors.join("\n"), "warning");
172
- if (context.hasUI) taskOverlay.setUICtx(context.ui);
173
- await degrade(SESSION_START_STAGE.storeRead, async () => {
174
- await taskStore.readAsync(isCurrent);
175
- });
176
- if (!isCurrent()) return;
177
- unwatch = taskStore.onExternalChange(refresh);
178
- await degrade(SESSION_START_STAGE.reconcile, async () => {
179
- await delegationManager.reconcile(isCurrent);
180
- });
181
- if (!isCurrent()) return;
182
- stage = SESSION_START_STAGE.refresh;
183
- refresh();
184
- } catch (error) {
185
- if (!isCurrent()) return;
186
- clearSessionResources();
187
- report.error(TASK_EVENT.sessionStartFailed, error, {
188
- [SESSION_START_STAGE_ATTRIBUTE]: stage,
189
- [ERROR_TYPE_ATTRIBUTE]: errorTypeToken(error)
190
- });
191
- throw error;
192
- }
193
- };
194
- const coordinator = readDoomReadinessCoordinator(cordis);
195
- if (!coordinator) {
196
- const operation = initialize();
197
- sessionInitialization = {
198
- sessionManager: ctx.sessionManager,
199
- operation
200
- };
201
- return operation;
202
- }
203
- const previous = sessionInitialization?.operation;
204
- const operation = (async () => {
205
- if (previous) await Promise.allSettled([previous]);
206
- if (!active || pluginSignal.aborted || ownGeneration !== sessionGeneration) return;
207
- await coordinator.start(LEADER_SOURCE, `${ctx.sessionManager.getSessionId()}:${ownGeneration}`, async (signal) => {
208
- await initialize(signal);
209
- return { value: void 0 };
210
- }).wait();
211
- })();
212
- sessionInitialization = {
213
- sessionManager: ctx.sessionManager,
214
- operation
215
- };
216
- Promise.allSettled([operation]);
217
- };
218
- const toolExecutionEnd = (event) => {
219
- if (active && !pluginSignal.aborted && event.toolName === "task") refresh();
220
- };
221
- const dispose = async () => {
222
- if (!active) return;
223
- active = false;
224
- sessionGeneration += 1;
225
- const pendingInitialization = sessionInitialization?.operation;
226
- sessionInitialization = void 0;
227
- try {
228
- if (pendingInitialization) await Promise.allSettled([pendingInitialization]);
229
- clearSessionResources();
230
- delegation?.dispose();
231
- disposeLeader?.();
232
- disposeLeader = void 0;
233
- store?.dispose();
234
- } finally {
235
- await errorReporter.shutdown();
236
- }
237
- };
238
- return {
239
- value: {
240
- taskStore,
241
- delegationManager,
242
- taskOverlay,
243
- toolDependencies,
244
- waitForSessionReadiness,
245
- refresh,
246
- sessionStart,
247
- toolExecutionEnd,
248
- isActive: () => active && !pluginSignal.aborted
249
- },
250
- services: [(cordis) => {
251
- cordis.inject([DOOM_NARRATION_SERVICE], (serviceContext) => {
252
- const service = requireDoomNarrationService(serviceContext);
253
- narrationService = service;
254
- return () => {
255
- if (narrationService === service) narrationService = void 0;
256
- };
257
- });
258
- cordis.inject([DOOM_CONTEXT_CONTRIBUTIONS_SERVICE], (contextContributionsContext) => {
259
- const registration = requireDoomContextContributions(contextContributionsContext).register(createTaskContextContribution(() => taskStore.snapshot.tasks));
260
- return () => registration.dispose();
261
- });
262
- cordis.inject([DOOM_DELEGATION_SERVICE], (serviceContext) => {
263
- const service = readDoomDelegationService(serviceContext);
264
- if (!service) return void 0;
265
- return delegationManager.bind(serviceContext, service);
266
- });
267
- cordis.inject([DOOM_BACKGROUND_WORK_SERVICE], (serviceContext) => {
268
- const service = readDoomBackgroundWorkService(serviceContext);
269
- if (!service) return void 0;
270
- const handle = service.register({
271
- provider: BACKGROUND_WORK_PROVIDER,
272
- listActiveWork: () => delegationManager.listActiveWork()
273
- });
274
- backgroundWork = handle;
275
- return () => {
276
- handle.dispose();
277
- if (backgroundWork === handle) backgroundWork = void 0;
278
- };
279
- });
280
- cordis.inject([DOOM_UI_HUB_SERVICE], (uiContext) => {
281
- const contribution = requireDoomUiHub(uiContext).registerLeader({
282
- source: LEADER_SOURCE,
283
- bindings: [{
284
- id: "tasks.open",
285
- path: [{
286
- key: "t",
287
- label: "tasks",
288
- detail: "session task list",
289
- order: LEADER_GROUP_ORDER
290
- }, {
291
- key: "l",
292
- label: "list",
293
- detail: "tasks in this session"
294
- }],
295
- command: { name: COMMAND_NAME }
296
- }]
297
- });
298
- const dispose = () => contribution.dispose();
299
- disposeLeader = dispose;
300
- return () => {
301
- dispose();
302
- if (disposeLeader === dispose) disposeLeader = void 0;
303
- };
304
- });
305
- }],
306
- onStop: dispose,
307
- onDispose: dispose,
308
- onStart() {
309
- presentation.registerCollapseShortcut(pi, taskOverlay, waitForSessionReadiness, () => active && !pluginSignal.aborted);
310
- }
311
- };
312
- };
313
- const createTaskRoot = (presentation) => defineRoot(createTaskRootExtension(presentation));
314
- //#endregion
315
- export { createTaskRoot };
316
-
317
- //# sourceMappingURL=root.cli.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"root.cli.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/root.cli.ts"],"sourcesContent":["import {\n DOOM_BACKGROUND_WORK_SERVICE,\n type BackgroundWorkProviderHandle,\n readDoomBackgroundWorkService,\n} from '@agimon-ai/doompi-core/background-work';\nimport {\n DOOM_CONTEXT_CONTRIBUTIONS_SERVICE,\n requireDoomContextContributions,\n} from '@agimon-ai/doompi-core/context-contributions';\nimport { DOOM_DELEGATION_SERVICE, readDoomDelegationService } from '@agimon-ai/doompi-core/delegation';\nimport { defineRoot } from '@agimon-ai/doompi-core/extension-file';\nimport {\n createNarrationRequest,\n DOOM_NARRATION_SERVICE,\n type DoomNarrationService,\n requireDoomNarrationService,\n} from '@agimon-ai/doompi-core/narration';\nimport type { PiPluginContext } from '@agimon-ai/doompi-core/pi-extension';\nimport { readDoomReadinessCoordinator } from '@agimon-ai/doompi-core/readiness';\nimport { DOOM_UI_HUB_SERVICE, requireDoomUiHub } from '@agimon-ai/doompi-core/ui-hub';\nimport type { Context } from '@deepseek-ai/cordis';\nimport type { ExtensionAPI, ExtensionContext, ExtensionUIContext } from '@earendil-works/pi-coding-agent';\n\nimport type { Task } from '../../../../../models/task';\nimport { COMMAND_NAME, TOOL_NAME } from '../../../../../schemas/task';\nimport { getDelegationTimeoutMs, getMaxTasks, getStoreTtlMs } from '../../../../../services/config';\nimport {\n createTaskContextContribution,\n TASK_CONTEXT_CONTRIBUTION_SOURCE,\n} from '../../../../../services/contextContribution';\nimport { BACKGROUND_WORK_PROVIDER, DelegationManager } from '../../../../../services/delegation';\nimport { createNodeDelegationPlatform } from '../../../../../services/delegationPlatform';\nimport { createTaskErrorReporter, TASK_EVENT, toFailureReporter } from '../../../../../services/logSinkTelemetry';\nimport {\n hasStorePathOverride,\n removeLegacyStoreDirectoryAsync,\n resolveSessionKey,\n sweepStoreFilesAsync,\n} from '../../../../../services/paths';\nimport { narrateTaskCommit, type TaskNarrationSink } from '../../../../../services/taskNarration';\nimport { TaskStore } from '../../../../../services/taskStore';\nimport type { TaskToolDependencies } from '../tool/_lib/task.cli';\n\nexport interface TaskOverlayContract {\n setUICtx(context: ExtensionUIContext): void;\n update(): void;\n dispose(): void;\n toggleCollapse(): void;\n isRegistered(): boolean;\n}\n\nexport interface TaskRootPresentation {\n createOverlay(options: { getTasks: () => readonly Task[]; delegation: DelegationManager }): TaskOverlayContract;\n registerCollapseShortcut(\n pi: Pick<ExtensionAPI, 'registerShortcut'>,\n overlay: TaskOverlayContract,\n waitUntilReady: (context: ExtensionContext) => Promise<void>,\n isActive: () => boolean,\n ): void;\n}\n\ninterface SessionContextLike {\n hasUI: boolean;\n ui: ExtensionUIContext;\n sessionManager?: { getSessionId(): string };\n}\n\nconst LEADER_SOURCE = TASK_CONTEXT_CONTRIBUTION_SOURCE;\nconst NARRATION_FAILED_EVENT = 'doom_task.narration_failed';\n/** Between doom-plan's 60 and the core help group's 70, so `t` sits after `p`. */\nconst LEADER_GROUP_ORDER = 65;\nconst ERROR_TYPE_ATTRIBUTE = 'error.type';\n/**\n * Which part of session start ran. The telemetry sanitizer drops free text, so\n * the failing branch has to travel as a stable low-cardinality token.\n */\nconst SESSION_START_STAGE_ATTRIBUTE = 'task.stage';\nconst SESSION_START_STAGE = {\n sessionId: 'session_id',\n storeCleanup: 'store_cleanup',\n storeSweep: 'store_sweep',\n storeRead: 'store_read',\n reconcile: 'reconcile',\n refresh: 'refresh',\n} as const;\ntype SessionStartStage = (typeof SESSION_START_STAGE)[keyof typeof SESSION_START_STAGE];\n\n/**\n * Mirror of the telemetry sink's own `error.type` token. The sink overwrites it\n * for any defined error, so this only guarantees the attribute exists when the\n * thrown value is `undefined`.\n */\nfunction errorTypeToken(error: unknown): string {\n if (error instanceof Error) return error.name || 'Error';\n if (typeof error === 'string') return 'StringError';\n if (error && typeof error === 'object') return 'ObjectError';\n return 'UnknownError';\n}\n/** Install Task state and external resources into its host-owned Cordis plugin fiber. */\nconst createTaskRootExtension =\n (presentation: TaskRootPresentation) =>\n ({ context: cordis, pi, signal: pluginSignal }: PiPluginContext) => {\n const errorReporter = createTaskErrorReporter();\n const report = toFailureReporter(errorReporter);\n let active = true;\n let sessionGeneration = 0;\n let narrationService: DoomNarrationService | undefined;\n let store: TaskStore | undefined;\n let delegation: DelegationManager | undefined;\n let overlay: TaskOverlayContract | undefined;\n let unwatch: (() => void) | undefined;\n let backgroundWork: BackgroundWorkProviderHandle | undefined;\n let disposeLeader: (() => void) | undefined;\n let sessionId: string | undefined;\n let sessionInitialization:\n | {\n readonly sessionManager: object;\n readonly operation: Promise<void>;\n }\n | undefined;\n\n const reportNarrationFailure = (error: unknown): void => {\n void errorReporter.recordWarning(NARRATION_FAILED_EVENT, error).catch((telemetryError: unknown) => {\n process.emitWarning(`Doom-task could not record a narration failure: ${String(telemetryError)}`);\n });\n };\n const narrationSink: TaskNarrationSink = {\n narrate(text) {\n const service = narrationService;\n const request = createNarrationRequest(text);\n if (!service || !request) return;\n try {\n void Promise.resolve(service.request(request)).catch(reportNarrationFailure);\n } catch (error) {\n reportNarrationFailure(error);\n }\n },\n };\n\n const waitForSessionReadiness = async (\n context: { readonly sessionManager: object },\n signal?: AbortSignal,\n ): Promise<void> => {\n signal?.throwIfAborted();\n const current = sessionInitialization;\n if (!current) throw new Error('doom-task session initialization has not started');\n if (current.sessionManager !== context.sessionManager) {\n throw new Error('doom-task readiness belongs to a stale Pi session');\n }\n await current.operation;\n signal?.throwIfAborted();\n if (!active || pluginSignal.aborted || current !== sessionInitialization || !sessionId) {\n throw new Error('doom-task readiness belongs to a stale extension generation');\n }\n };\n\n const clearSessionResources = (): void => {\n unwatch?.();\n unwatch = undefined;\n delegation?.reset();\n overlay?.dispose();\n sessionId = undefined;\n };\n\n const taskStore = new TaskStore({\n report,\n onCommitted: (previous, committed) => narrateTaskCommit(narrationSink, previous, committed),\n });\n store = taskStore;\n\n const refresh = (): void => {\n if (!active || pluginSignal.aborted) return;\n overlay?.update();\n backgroundWork?.update();\n };\n\n const delegationManager = new DelegationManager({\n store: taskStore,\n cwd: process.cwd(),\n platform: createNodeDelegationPlatform(),\n notify: (message, options) => pi.sendMessage(message, options),\n getSessionId: () => sessionId,\n onChange: refresh,\n runTimeoutMs: getDelegationTimeoutMs(),\n report,\n onNotifyError: (error, taskId) => {\n void errorReporter.recordNotificationError(error, taskId);\n },\n });\n delegation = delegationManager;\n\n const taskOverlay = presentation.createOverlay({\n getTasks: () => taskStore.snapshot.tasks,\n delegation: delegationManager,\n });\n overlay = taskOverlay;\n\n const toolDependencies: TaskToolDependencies = {\n store: taskStore,\n delegation: delegationManager,\n maxTasks: getMaxTasks(),\n onChange: refresh,\n report,\n waitUntilReady: waitForSessionReadiness,\n };\n\n const sessionStart = async (_event: unknown, ctx: ExtensionContext) => {\n if (!active || pluginSignal.aborted) return;\n const ownGeneration = ++sessionGeneration;\n if (sessionId !== undefined) clearSessionResources();\n const context = ctx as unknown as SessionContextLike;\n const initialize = async (signal?: AbortSignal): Promise<void> => {\n const isCurrent = (): boolean =>\n !signal?.aborted && active && !pluginSignal.aborted && ownGeneration === sessionGeneration;\n let stage: SessionStartStage = SESSION_START_STAGE.sessionId;\n /**\n * Run a stage whose failure only degrades task visibility. The session\n * still starts, and the warning keeps the degraded state from being silent.\n */\n const degrade = async (next: SessionStartStage, operation: () => Promise<void>): Promise<void> => {\n stage = next;\n try {\n await operation();\n } catch (error) {\n report.warn(TASK_EVENT.sessionStartDegraded, error, {\n [SESSION_START_STAGE_ATTRIBUTE]: next,\n [ERROR_TYPE_ATTRIBUTE]: errorTypeToken(error),\n });\n }\n };\n try {\n const currentSessionId = context.sessionManager?.getSessionId();\n if (!currentSessionId) throw new Error('doom-task requires a session id');\n sessionId = currentSessionId;\n taskStore.configureSession(resolveSessionKey(currentSessionId));\n stage = SESSION_START_STAGE.storeCleanup;\n const cleanup = await removeLegacyStoreDirectoryAsync(taskStore.storePath);\n if (!isCurrent()) return;\n stage = SESSION_START_STAGE.storeSweep;\n const sweep = hasStorePathOverride()\n ? { removed: [], errors: [] }\n : await sweepStoreFilesAsync(taskStore.storePath, getStoreTtlMs());\n if (!isCurrent()) return;\n const storeErrors = [...cleanup.errors, ...sweep.errors];\n for (const failure of storeErrors) report.warn(TASK_EVENT.storeSweepFailed, new Error(failure));\n if (storeErrors.length > 0 && context.hasUI) context.ui.notify(storeErrors.join('\\n'), 'warning');\n if (context.hasUI) taskOverlay.setUICtx(context.ui);\n await degrade(SESSION_START_STAGE.storeRead, async () => {\n await taskStore.readAsync(isCurrent);\n });\n if (!isCurrent()) return;\n unwatch = taskStore.onExternalChange(refresh);\n await degrade(SESSION_START_STAGE.reconcile, async () => {\n await delegationManager.reconcile(isCurrent);\n });\n if (!isCurrent()) return;\n stage = SESSION_START_STAGE.refresh;\n refresh();\n } catch (error) {\n if (!isCurrent()) return;\n clearSessionResources();\n report.error(TASK_EVENT.sessionStartFailed, error, {\n [SESSION_START_STAGE_ATTRIBUTE]: stage,\n [ERROR_TYPE_ATTRIBUTE]: errorTypeToken(error),\n });\n throw error;\n }\n };\n\n const coordinator = readDoomReadinessCoordinator(cordis);\n if (!coordinator) {\n const operation = initialize();\n sessionInitialization = { sessionManager: ctx.sessionManager, operation };\n return operation;\n }\n\n const previous = sessionInitialization?.operation;\n const operation = (async (): Promise<void> => {\n if (previous) await Promise.allSettled([previous]);\n if (!active || pluginSignal.aborted || ownGeneration !== sessionGeneration) return;\n const handle = coordinator.start(\n LEADER_SOURCE,\n `${ctx.sessionManager.getSessionId()}:${ownGeneration}`,\n async (signal) => {\n await initialize(signal);\n return { value: undefined };\n },\n );\n await handle.wait();\n })();\n sessionInitialization = { sessionManager: ctx.sessionManager, operation };\n // Config's coordinator owns the single failure notification. This detached\n // observer only keeps a failed background generation from going unhandled.\n void Promise.allSettled([operation]);\n return undefined;\n };\n\n const toolExecutionEnd = (event: { toolName: string }) => {\n if (active && !pluginSignal.aborted && event.toolName === TOOL_NAME) refresh();\n };\n const dispose = async () => {\n if (!active) return;\n active = false;\n sessionGeneration += 1;\n const pendingInitialization = sessionInitialization?.operation;\n sessionInitialization = undefined;\n try {\n if (pendingInitialization) await Promise.allSettled([pendingInitialization]);\n clearSessionResources();\n delegation?.dispose();\n disposeLeader?.();\n disposeLeader = undefined;\n store?.dispose();\n } finally {\n await errorReporter.shutdown();\n }\n };\n return {\n value: {\n taskStore,\n delegationManager,\n taskOverlay,\n toolDependencies,\n waitForSessionReadiness,\n refresh,\n sessionStart,\n toolExecutionEnd,\n isActive: () => active && !pluginSignal.aborted,\n },\n services: [\n (cordis: Context) => {\n cordis.inject([DOOM_NARRATION_SERVICE], (serviceContext) => {\n const service = requireDoomNarrationService(serviceContext);\n narrationService = service;\n return () => {\n if (narrationService === service) narrationService = undefined;\n };\n });\n cordis.inject([DOOM_CONTEXT_CONTRIBUTIONS_SERVICE], (contextContributionsContext) => {\n const registration = requireDoomContextContributions(contextContributionsContext).register(\n createTaskContextContribution(() => taskStore.snapshot.tasks),\n );\n return () => registration.dispose();\n });\n cordis.inject([DOOM_DELEGATION_SERVICE], (serviceContext) => {\n const service = readDoomDelegationService(serviceContext);\n if (!service) return undefined;\n return delegationManager.bind(serviceContext, service);\n });\n cordis.inject([DOOM_BACKGROUND_WORK_SERVICE], (serviceContext) => {\n const service = readDoomBackgroundWorkService(serviceContext);\n if (!service) return undefined;\n const handle = service.register({\n provider: BACKGROUND_WORK_PROVIDER,\n listActiveWork: () => delegationManager.listActiveWork(),\n });\n backgroundWork = handle;\n return () => {\n handle.dispose();\n if (backgroundWork === handle) backgroundWork = undefined;\n };\n });\n cordis.inject([DOOM_UI_HUB_SERVICE], (uiContext) => {\n const contribution = requireDoomUiHub(uiContext).registerLeader({\n source: LEADER_SOURCE,\n bindings: [\n {\n id: 'tasks.open',\n path: [\n { key: 't', label: 'tasks', detail: 'session task list', order: LEADER_GROUP_ORDER },\n { key: 'l', label: 'list', detail: 'tasks in this session' },\n ],\n command: { name: COMMAND_NAME },\n },\n ],\n });\n const dispose = (): void => contribution.dispose();\n disposeLeader = dispose;\n return () => {\n dispose();\n if (disposeLeader === dispose) disposeLeader = undefined;\n };\n });\n },\n ],\n onStop: dispose,\n onDispose: dispose,\n onStart() {\n presentation.registerCollapseShortcut(\n pi,\n taskOverlay,\n waitForSessionReadiness,\n () => active && !pluginSignal.aborted,\n );\n },\n };\n };\nexport const createTaskRoot = (presentation: TaskRootPresentation) => defineRoot(createTaskRootExtension(presentation));\nexport type TaskPiScope = Awaited<ReturnType<ReturnType<typeof createTaskRoot>>>['value'];\n"],"mappings":"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"}
@@ -1,95 +0,0 @@
1
- const require_index = require("../../../../../services/config/index.cjs");
2
- const require_index$1 = require("../../../../../services/delegation/index.cjs");
3
- const require_index$2 = require("../../../../../services/delegationPlatform/index.cjs");
4
- const require_index$3 = require("../../../../../services/paths/index.cjs");
5
- const require_index$4 = require("../../../../../services/taskStore/index.cjs");
6
- const require_webTasks = require("../../../../../types/webTasks.cjs");
7
- let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
8
- let _agimon_ai_doompi_core_delegation = require("@agimon-ai/doompi-core/delegation");
9
- //#region src/extensions/workspaces/sessions/(backend)/_lib/root.server.ts
10
- const SOURCE = "@agimon-ai/doompi-task";
11
- /** The notification body: one line, since `client.notify` collapses the rest anyway. */
12
- function headlineOf(content) {
13
- return content.split("\n").find((line) => line.trim().length > 0) ?? content;
14
- }
15
- const root = (0, _agimon_ai_doompi_core_extension_file.defineRoot)(({ host: serverHost, agent: host }) => {
16
- if (!host) throw new Error("Task session requires the headless host.");
17
- const execution = host.context;
18
- if (serverHost.context.directEvents === void 0) throw new Error("Task headless facet requires the session direct event bus.");
19
- const directEvents = serverHost.context.directEvents;
20
- const maxTasks = require_index.getMaxTasks(execution.environment);
21
- const store = new require_index$4.TaskStore({
22
- env: execution.environment,
23
- onCommitted: (_previous, committed) => {
24
- execution.client.setStatus(SOURCE, `tasks: ${committed.tasks.length}`);
25
- directEvents.publish(require_webTasks.TASKS_CHANNEL_TYPE, execution.sessionId, committed);
26
- }
27
- });
28
- store.configureSession(require_index$3.resolveSessionKey(execution.sessionId, execution.environment));
29
- let notifications = Promise.resolve();
30
- const manager = new require_index$1.DelegationManager({
31
- store,
32
- cwd: execution.cwd,
33
- platform: require_index$2.createNodeDelegationPlatform(execution.environment),
34
- getSessionId: () => execution.sessionId,
35
- notify: (message, options) => {
36
- notifications = notifications.then(async () => {
37
- await execution.client.notify({
38
- body: headlineOf(message.content),
39
- level: "info"
40
- });
41
- await execution.session.appendCustomEntry(message.customType, { content: message.content });
42
- if (options?.triggerTurn === false) return;
43
- if (!execution.session.admitPrompt) throw new Error("The session cannot admit a task notification.");
44
- await execution.session.admitPrompt(message.content, "steer");
45
- }).catch((error) => {
46
- execution.client.notify({
47
- body: String(error),
48
- level: "warning"
49
- });
50
- });
51
- },
52
- onChange: () => execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`),
53
- runTimeoutMs: require_index.getDelegationTimeoutMs(execution.environment),
54
- onNotifyError: (error) => void execution.client.notify({
55
- body: String(error),
56
- level: "warning"
57
- })
58
- });
59
- return {
60
- value: {
61
- store,
62
- manager,
63
- maxTasks
64
- },
65
- services: [(serviceContextOwner) => {
66
- serviceContextOwner.inject([_agimon_ai_doompi_core_delegation.DOOM_DELEGATION_SERVICE], (serviceContext) => {
67
- const service = (0, _agimon_ai_doompi_core_delegation.readDoomDelegationService)(serviceContext);
68
- if (service) manager.bind(serviceContext, service);
69
- });
70
- }],
71
- activities: [{
72
- name: SOURCE,
73
- async start(activityContext) {
74
- store.configureSession(require_index$3.resolveSessionKey(activityContext.sessionId, activityContext.environment));
75
- await require_index$3.removeLegacyStoreDirectoryAsync(store.storePath, activityContext.cwd);
76
- if (!activityContext.environment.DOOM_TASK_STORE_PATH) await require_index$3.sweepStoreFilesAsync(store.storePath, require_index.getStoreTtlMs(activityContext.environment));
77
- await store.readAsync();
78
- await manager.reconcile();
79
- execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`);
80
- return () => {
81
- manager.reset();
82
- execution.client.setStatus(SOURCE, void 0);
83
- };
84
- }
85
- }],
86
- onDispose() {
87
- manager.dispose();
88
- store.dispose();
89
- }
90
- };
91
- });
92
- //#endregion
93
- exports.default = root;
94
-
95
- //# sourceMappingURL=root.server.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"root.server.cjs","names":["defineRoot","getMaxTasks","TaskStore","TASKS_CHANNEL_TYPE","resolveSessionKey","DelegationManager","createNodeDelegationPlatform","getDelegationTimeoutMs","DOOM_DELEGATION_SERVICE","readDoomDelegationService","removeLegacyStoreDirectoryAsync","sweepStoreFilesAsync","getStoreTtlMs"],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/root.server.ts"],"sourcesContent":["import { DOOM_DELEGATION_SERVICE, readDoomDelegationService } from '@agimon-ai/doompi-core/delegation';\nimport { defineRoot } from '@agimon-ai/doompi-core/extension-file';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/server-facet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { getDelegationTimeoutMs, getMaxTasks, getStoreTtlMs } from '../../../../../services/config';\nimport { DelegationManager } from '../../../../../services/delegation';\nimport { createNodeDelegationPlatform } from '../../../../../services/delegationPlatform';\nimport {\n removeLegacyStoreDirectoryAsync,\n resolveSessionKey,\n sweepStoreFilesAsync,\n} from '../../../../../services/paths';\nimport { TaskStore } from '../../../../../services/taskStore';\nimport { TASKS_CHANNEL_TYPE } from '../../../../../types/webTasks';\n\nconst SOURCE = '@agimon-ai/doompi-task';\n\n/** The notification body: one line, since `client.notify` collapses the rest anyway. */\nfunction headlineOf(content: string): string {\n return content.split('\\n').find((line) => line.trim().length > 0) ?? content;\n}\n\nconst root = defineRoot(({ host: serverHost, agent: host }: DoomServerPluginContext) => {\n if (!host) throw new Error('Task session requires the headless host.');\n const execution = host.context;\n if (serverHost.context.directEvents === undefined)\n throw new Error('Task headless facet requires the session direct event bus.');\n const directEvents = serverHost.context.directEvents;\n const maxTasks = getMaxTasks(execution.environment);\n const store = new TaskStore({\n env: execution.environment,\n onCommitted: (_previous, committed) => {\n execution.client.setStatus(SOURCE, `tasks: ${committed.tasks.length}`);\n directEvents.publish(TASKS_CHANNEL_TYPE, execution.sessionId, committed);\n },\n });\n store.configureSession(resolveSessionKey(execution.sessionId, execution.environment));\n let notifications: Promise<void> = Promise.resolve();\n const manager = new DelegationManager({\n store,\n cwd: execution.cwd,\n platform: createNodeDelegationPlatform(execution.environment),\n getSessionId: () => execution.sessionId,\n notify: (message, options) => {\n // `DelegationNotifier` is Pi's `sendMessage` shape, and the Pi facet\n // forwards it verbatim (`root.cli.ts`). A headless session has no such\n // single call, so the three jobs are done by hand:\n //\n // toast `client.notify` - operator-facing only, flattened to one\n // line and capped at 4096 chars, and the model never sees a\n // custom entry. It gets the headline, not the whole result.\n // transcript `session.appendCustomEntry` under the same custom type,\n // carrying the full multi-line content.\n // wake `session.admitPrompt(content, 'steer')` - the only call\n // that puts the completion in front of the model.\n // `session.prompt(_, 'steer')` is enqueue-only and parks the\n // message on an idle lane, which is why a finished subagent\n // used to leave the agent sitting idle.\n //\n // Sequenced so two delegations settling in the same tick each observe\n // settled lane state rather than racing.\n notifications = notifications\n .then(async () => {\n await execution.client.notify({ body: headlineOf(message.content), level: 'info' });\n await execution.session.appendCustomEntry(message.customType, { content: message.content });\n // `triggerTurn: false` has no faithful headless mapping - there is no\n // way to reach model context without starting or joining a turn - so\n // it stays a toast, as it is today. `DelegationManager` always sends\n // `true`, so this is defensive rather than live.\n if (options?.triggerTurn === false) return;\n // Matching the voice facet, which also refuses rather than degrading:\n // `session.prompt(_, 'steer')` is NOT a fallback here, because it is\n // enqueue-only and would park the message on an idle lane - the\n // original bug.\n if (!execution.session.admitPrompt) throw new Error('The session cannot admit a task notification.');\n await execution.session.admitPrompt(message.content, 'steer');\n })\n .catch((error: unknown) => {\n // Mirrors `onNotifyError` below. The delegation is already committed,\n // so a failed notification costs the model its wake-up, not the\n // result, and must not stall later notifications.\n void execution.client.notify({ body: String(error), level: 'warning' });\n });\n },\n onChange: () => execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`),\n runTimeoutMs: getDelegationTimeoutMs(execution.environment),\n onNotifyError: (error) => void execution.client.notify({ body: String(error), level: 'warning' }),\n });\n return {\n value: { store, manager, maxTasks },\n services: [\n (serviceContextOwner: Context) => {\n serviceContextOwner.inject([DOOM_DELEGATION_SERVICE], (serviceContext) => {\n const service = readDoomDelegationService(serviceContext);\n if (service) manager.bind(serviceContext, service);\n });\n },\n ],\n activities: [\n {\n name: SOURCE,\n async start(activityContext) {\n store.configureSession(resolveSessionKey(activityContext.sessionId, activityContext.environment));\n await removeLegacyStoreDirectoryAsync(store.storePath, activityContext.cwd);\n if (!activityContext.environment.DOOM_TASK_STORE_PATH)\n await sweepStoreFilesAsync(store.storePath, getStoreTtlMs(activityContext.environment));\n await store.readAsync();\n await manager.reconcile();\n execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`);\n return () => {\n manager.reset();\n execution.client.setStatus(SOURCE, undefined);\n };\n },\n },\n ],\n onDispose() {\n manager.dispose();\n store.dispose();\n },\n };\n});\n\nexport type TaskServerScope = Awaited<ReturnType<typeof root>>['value'];\nexport default root;\n"],"mappings":"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"}
@@ -1,95 +0,0 @@
1
- import { getDelegationTimeoutMs, getMaxTasks, getStoreTtlMs } from "../../../../../services/config/index.mjs";
2
- import { DelegationManager } from "../../../../../services/delegation/index.mjs";
3
- import { createNodeDelegationPlatform } from "../../../../../services/delegationPlatform/index.mjs";
4
- import { removeLegacyStoreDirectoryAsync, resolveSessionKey, sweepStoreFilesAsync } from "../../../../../services/paths/index.mjs";
5
- import { TaskStore } from "../../../../../services/taskStore/index.mjs";
6
- import { TASKS_CHANNEL_TYPE } from "../../../../../types/webTasks.mjs";
7
- import { defineRoot } from "@agimon-ai/doompi-core/extension-file";
8
- import { DOOM_DELEGATION_SERVICE, readDoomDelegationService } from "@agimon-ai/doompi-core/delegation";
9
- //#region src/extensions/workspaces/sessions/(backend)/_lib/root.server.ts
10
- const SOURCE = "@agimon-ai/doompi-task";
11
- /** The notification body: one line, since `client.notify` collapses the rest anyway. */
12
- function headlineOf(content) {
13
- return content.split("\n").find((line) => line.trim().length > 0) ?? content;
14
- }
15
- const root = defineRoot(({ host: serverHost, agent: host }) => {
16
- if (!host) throw new Error("Task session requires the headless host.");
17
- const execution = host.context;
18
- if (serverHost.context.directEvents === void 0) throw new Error("Task headless facet requires the session direct event bus.");
19
- const directEvents = serverHost.context.directEvents;
20
- const maxTasks = getMaxTasks(execution.environment);
21
- const store = new TaskStore({
22
- env: execution.environment,
23
- onCommitted: (_previous, committed) => {
24
- execution.client.setStatus(SOURCE, `tasks: ${committed.tasks.length}`);
25
- directEvents.publish(TASKS_CHANNEL_TYPE, execution.sessionId, committed);
26
- }
27
- });
28
- store.configureSession(resolveSessionKey(execution.sessionId, execution.environment));
29
- let notifications = Promise.resolve();
30
- const manager = new DelegationManager({
31
- store,
32
- cwd: execution.cwd,
33
- platform: createNodeDelegationPlatform(execution.environment),
34
- getSessionId: () => execution.sessionId,
35
- notify: (message, options) => {
36
- notifications = notifications.then(async () => {
37
- await execution.client.notify({
38
- body: headlineOf(message.content),
39
- level: "info"
40
- });
41
- await execution.session.appendCustomEntry(message.customType, { content: message.content });
42
- if (options?.triggerTurn === false) return;
43
- if (!execution.session.admitPrompt) throw new Error("The session cannot admit a task notification.");
44
- await execution.session.admitPrompt(message.content, "steer");
45
- }).catch((error) => {
46
- execution.client.notify({
47
- body: String(error),
48
- level: "warning"
49
- });
50
- });
51
- },
52
- onChange: () => execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`),
53
- runTimeoutMs: getDelegationTimeoutMs(execution.environment),
54
- onNotifyError: (error) => void execution.client.notify({
55
- body: String(error),
56
- level: "warning"
57
- })
58
- });
59
- return {
60
- value: {
61
- store,
62
- manager,
63
- maxTasks
64
- },
65
- services: [(serviceContextOwner) => {
66
- serviceContextOwner.inject([DOOM_DELEGATION_SERVICE], (serviceContext) => {
67
- const service = readDoomDelegationService(serviceContext);
68
- if (service) manager.bind(serviceContext, service);
69
- });
70
- }],
71
- activities: [{
72
- name: SOURCE,
73
- async start(activityContext) {
74
- store.configureSession(resolveSessionKey(activityContext.sessionId, activityContext.environment));
75
- await removeLegacyStoreDirectoryAsync(store.storePath, activityContext.cwd);
76
- if (!activityContext.environment.DOOM_TASK_STORE_PATH) await sweepStoreFilesAsync(store.storePath, getStoreTtlMs(activityContext.environment));
77
- await store.readAsync();
78
- await manager.reconcile();
79
- execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`);
80
- return () => {
81
- manager.reset();
82
- execution.client.setStatus(SOURCE, void 0);
83
- };
84
- }
85
- }],
86
- onDispose() {
87
- manager.dispose();
88
- store.dispose();
89
- }
90
- };
91
- });
92
- //#endregion
93
- export { root as default };
94
-
95
- //# sourceMappingURL=root.server.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"root.server.mjs","names":[],"sources":["../../../../../../../src/extensions/workspaces/sessions/(backend)/_lib/root.server.ts"],"sourcesContent":["import { DOOM_DELEGATION_SERVICE, readDoomDelegationService } from '@agimon-ai/doompi-core/delegation';\nimport { defineRoot } from '@agimon-ai/doompi-core/extension-file';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/server-facet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { getDelegationTimeoutMs, getMaxTasks, getStoreTtlMs } from '../../../../../services/config';\nimport { DelegationManager } from '../../../../../services/delegation';\nimport { createNodeDelegationPlatform } from '../../../../../services/delegationPlatform';\nimport {\n removeLegacyStoreDirectoryAsync,\n resolveSessionKey,\n sweepStoreFilesAsync,\n} from '../../../../../services/paths';\nimport { TaskStore } from '../../../../../services/taskStore';\nimport { TASKS_CHANNEL_TYPE } from '../../../../../types/webTasks';\n\nconst SOURCE = '@agimon-ai/doompi-task';\n\n/** The notification body: one line, since `client.notify` collapses the rest anyway. */\nfunction headlineOf(content: string): string {\n return content.split('\\n').find((line) => line.trim().length > 0) ?? content;\n}\n\nconst root = defineRoot(({ host: serverHost, agent: host }: DoomServerPluginContext) => {\n if (!host) throw new Error('Task session requires the headless host.');\n const execution = host.context;\n if (serverHost.context.directEvents === undefined)\n throw new Error('Task headless facet requires the session direct event bus.');\n const directEvents = serverHost.context.directEvents;\n const maxTasks = getMaxTasks(execution.environment);\n const store = new TaskStore({\n env: execution.environment,\n onCommitted: (_previous, committed) => {\n execution.client.setStatus(SOURCE, `tasks: ${committed.tasks.length}`);\n directEvents.publish(TASKS_CHANNEL_TYPE, execution.sessionId, committed);\n },\n });\n store.configureSession(resolveSessionKey(execution.sessionId, execution.environment));\n let notifications: Promise<void> = Promise.resolve();\n const manager = new DelegationManager({\n store,\n cwd: execution.cwd,\n platform: createNodeDelegationPlatform(execution.environment),\n getSessionId: () => execution.sessionId,\n notify: (message, options) => {\n // `DelegationNotifier` is Pi's `sendMessage` shape, and the Pi facet\n // forwards it verbatim (`root.cli.ts`). A headless session has no such\n // single call, so the three jobs are done by hand:\n //\n // toast `client.notify` - operator-facing only, flattened to one\n // line and capped at 4096 chars, and the model never sees a\n // custom entry. It gets the headline, not the whole result.\n // transcript `session.appendCustomEntry` under the same custom type,\n // carrying the full multi-line content.\n // wake `session.admitPrompt(content, 'steer')` - the only call\n // that puts the completion in front of the model.\n // `session.prompt(_, 'steer')` is enqueue-only and parks the\n // message on an idle lane, which is why a finished subagent\n // used to leave the agent sitting idle.\n //\n // Sequenced so two delegations settling in the same tick each observe\n // settled lane state rather than racing.\n notifications = notifications\n .then(async () => {\n await execution.client.notify({ body: headlineOf(message.content), level: 'info' });\n await execution.session.appendCustomEntry(message.customType, { content: message.content });\n // `triggerTurn: false` has no faithful headless mapping - there is no\n // way to reach model context without starting or joining a turn - so\n // it stays a toast, as it is today. `DelegationManager` always sends\n // `true`, so this is defensive rather than live.\n if (options?.triggerTurn === false) return;\n // Matching the voice facet, which also refuses rather than degrading:\n // `session.prompt(_, 'steer')` is NOT a fallback here, because it is\n // enqueue-only and would park the message on an idle lane - the\n // original bug.\n if (!execution.session.admitPrompt) throw new Error('The session cannot admit a task notification.');\n await execution.session.admitPrompt(message.content, 'steer');\n })\n .catch((error: unknown) => {\n // Mirrors `onNotifyError` below. The delegation is already committed,\n // so a failed notification costs the model its wake-up, not the\n // result, and must not stall later notifications.\n void execution.client.notify({ body: String(error), level: 'warning' });\n });\n },\n onChange: () => execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`),\n runTimeoutMs: getDelegationTimeoutMs(execution.environment),\n onNotifyError: (error) => void execution.client.notify({ body: String(error), level: 'warning' }),\n });\n return {\n value: { store, manager, maxTasks },\n services: [\n (serviceContextOwner: Context) => {\n serviceContextOwner.inject([DOOM_DELEGATION_SERVICE], (serviceContext) => {\n const service = readDoomDelegationService(serviceContext);\n if (service) manager.bind(serviceContext, service);\n });\n },\n ],\n activities: [\n {\n name: SOURCE,\n async start(activityContext) {\n store.configureSession(resolveSessionKey(activityContext.sessionId, activityContext.environment));\n await removeLegacyStoreDirectoryAsync(store.storePath, activityContext.cwd);\n if (!activityContext.environment.DOOM_TASK_STORE_PATH)\n await sweepStoreFilesAsync(store.storePath, getStoreTtlMs(activityContext.environment));\n await store.readAsync();\n await manager.reconcile();\n execution.client.setStatus(SOURCE, `tasks: ${store.snapshot.tasks.length}`);\n return () => {\n manager.reset();\n execution.client.setStatus(SOURCE, undefined);\n };\n },\n },\n ],\n onDispose() {\n manager.dispose();\n store.dispose();\n },\n };\n});\n\nexport type TaskServerScope = Awaited<ReturnType<typeof root>>['value'];\nexport default root;\n"],"mappings":";;;;;;;;;AAgBA,MAAM,SAAS;;AAGf,SAAS,WAAW,SAAyB;CAC3C,OAAO,QAAQ,MAAM,IAAI,CAAC,CAAC,MAAM,SAAS,KAAK,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK;AACvE;AAEA,MAAM,OAAO,YAAY,EAAE,MAAM,YAAY,OAAO,WAAoC;CACtF,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,0CAA0C;CACrE,MAAM,YAAY,KAAK;CACvB,IAAI,WAAW,QAAQ,iBAAiB,KAAA,GACtC,MAAM,IAAI,MAAM,4DAA4D;CAC9E,MAAM,eAAe,WAAW,QAAQ;CACxC,MAAM,WAAW,YAAY,UAAU,WAAW;CAClD,MAAM,QAAQ,IAAI,UAAU;EAC1B,KAAK,UAAU;EACf,cAAc,WAAW,cAAc;GACrC,UAAU,OAAO,UAAU,QAAQ,UAAU,UAAU,MAAM,QAAQ;GACrE,aAAa,QAAQ,oBAAoB,UAAU,WAAW,SAAS;EACzE;CACF,CAAC;CACD,MAAM,iBAAiB,kBAAkB,UAAU,WAAW,UAAU,WAAW,CAAC;CACpF,IAAI,gBAA+B,QAAQ,QAAQ;CACnD,MAAM,UAAU,IAAI,kBAAkB;EACpC;EACA,KAAK,UAAU;EACf,UAAU,6BAA6B,UAAU,WAAW;EAC5D,oBAAoB,UAAU;EAC9B,SAAS,SAAS,YAAY;GAkB5B,gBAAgB,cACb,KAAK,YAAY;IAChB,MAAM,UAAU,OAAO,OAAO;KAAE,MAAM,WAAW,QAAQ,OAAO;KAAG,OAAO;IAAO,CAAC;IAClF,MAAM,UAAU,QAAQ,kBAAkB,QAAQ,YAAY,EAAE,SAAS,QAAQ,QAAQ,CAAC;IAK1F,IAAI,SAAS,gBAAgB,OAAO;IAKpC,IAAI,CAAC,UAAU,QAAQ,aAAa,MAAM,IAAI,MAAM,+CAA+C;IACnG,MAAM,UAAU,QAAQ,YAAY,QAAQ,SAAS,OAAO;GAC9D,CAAC,CAAC,CACD,OAAO,UAAmB;IAIzB,UAAe,OAAO,OAAO;KAAE,MAAM,OAAO,KAAK;KAAG,OAAO;IAAU,CAAC;GACxE,CAAC;EACL;EACA,gBAAgB,UAAU,OAAO,UAAU,QAAQ,UAAU,MAAM,SAAS,MAAM,QAAQ;EAC1F,cAAc,uBAAuB,UAAU,WAAW;EAC1D,gBAAgB,UAAU,KAAK,UAAU,OAAO,OAAO;GAAE,MAAM,OAAO,KAAK;GAAG,OAAO;EAAU,CAAC;CAClG,CAAC;CACD,OAAO;EACL,OAAO;GAAE;GAAO;GAAS;EAAS;EAClC,UAAU,EACP,wBAAiC;GAChC,oBAAoB,OAAO,CAAC,uBAAuB,IAAI,mBAAmB;IACxE,MAAM,UAAU,0BAA0B,cAAc;IACxD,IAAI,SAAS,QAAQ,KAAK,gBAAgB,OAAO;GACnD,CAAC;EACH,CACF;EACA,YAAY,CACV;GACE,MAAM;GACN,MAAM,MAAM,iBAAiB;IAC3B,MAAM,iBAAiB,kBAAkB,gBAAgB,WAAW,gBAAgB,WAAW,CAAC;IAChG,MAAM,gCAAgC,MAAM,WAAW,gBAAgB,GAAG;IAC1E,IAAI,CAAC,gBAAgB,YAAY,sBAC/B,MAAM,qBAAqB,MAAM,WAAW,cAAc,gBAAgB,WAAW,CAAC;IACxF,MAAM,MAAM,UAAU;IACtB,MAAM,QAAQ,UAAU;IACxB,UAAU,OAAO,UAAU,QAAQ,UAAU,MAAM,SAAS,MAAM,QAAQ;IAC1E,aAAa;KACX,QAAQ,MAAM;KACd,UAAU,OAAO,UAAU,QAAQ,KAAA,CAAS;IAC9C;GACF;EACF,CACF;EACA,YAAY;GACV,QAAQ,QAAQ;GAChB,MAAM,QAAQ;EAChB;CACF;AACF,CAAC"}