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

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 (589) hide show
  1. package/README.md +12 -3
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -1
  3. package/dist/api-contracts.cjs +7 -1
  4. package/dist/api-contracts.d.cts +1 -1
  5. package/dist/api-contracts.d.mts +1 -1
  6. package/dist/api-contracts.mjs +2 -1
  7. package/dist/commands.cjs +4 -1
  8. package/dist/commands.d.cts +2 -2
  9. package/dist/commands.d.mts +2 -2
  10. package/dist/commands.mjs +2 -1
  11. package/dist/config.cjs +19 -1
  12. package/dist/config.d.cts +1 -1
  13. package/dist/config.d.mts +1 -1
  14. package/dist/config.mjs +2 -1
  15. package/dist/delegation-manager.cjs +10 -1
  16. package/dist/delegation-manager.d.cts +2 -2
  17. package/dist/delegation-manager.d.mts +2 -2
  18. package/dist/delegation-manager.mjs +3 -1
  19. package/dist/extensions/pi.cjs +49 -2
  20. package/dist/extensions/pi.cjs.map +1 -1
  21. package/dist/extensions/pi.d.cts +3 -4
  22. package/dist/extensions/pi.d.cts.map +1 -1
  23. package/dist/extensions/pi.d.mts +3 -4
  24. package/dist/extensions/pi.d.mts.map +1 -1
  25. package/dist/extensions/pi.mjs +44 -2
  26. package/dist/extensions/pi.mjs.map +1 -1
  27. package/dist/extensions/server.cjs +56 -1
  28. package/dist/extensions/server.cjs.map +1 -1
  29. package/dist/extensions/server.d.cts +3 -3
  30. package/dist/extensions/server.d.cts.map +1 -1
  31. package/dist/extensions/server.d.mts +3 -3
  32. package/dist/extensions/server.d.mts.map +1 -1
  33. package/dist/extensions/server.mjs +51 -1
  34. package/dist/extensions/server.mjs.map +1 -1
  35. package/dist/extensions/web.mjs +1013 -0
  36. package/dist/extensions/web.mjs.map +1 -0
  37. package/dist/index.cjs +106 -1
  38. package/dist/index.d.cts +15 -15
  39. package/dist/index.d.mts +15 -15
  40. package/dist/index.mjs +16 -1
  41. package/dist/logSinkTelemetry.cjs +6 -1
  42. package/dist/logSinkTelemetry.d.cts +2 -2
  43. package/dist/logSinkTelemetry.d.mts +2 -2
  44. package/dist/logSinkTelemetry.mjs +3 -1
  45. package/dist/src/constants/promptGuidelines.cjs +26 -0
  46. package/dist/src/constants/promptGuidelines.cjs.map +1 -0
  47. package/dist/src/constants/promptGuidelines.d.cts.map +1 -0
  48. package/dist/src/constants/promptGuidelines.d.mts.map +1 -0
  49. package/dist/src/constants/promptGuidelines.mjs +26 -0
  50. package/dist/src/constants/promptGuidelines.mjs.map +1 -0
  51. package/dist/src/constants/task.cjs +6 -0
  52. package/dist/src/constants/task.cjs.map +1 -0
  53. package/dist/src/constants/task.d.cts.map +1 -0
  54. package/dist/src/constants/task.d.mts.map +1 -0
  55. package/dist/src/constants/task.mjs +6 -0
  56. package/dist/src/constants/task.mjs.map +1 -0
  57. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs +90 -0
  58. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs.map +1 -0
  59. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs +89 -0
  60. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs.map +1 -0
  61. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs +7 -0
  62. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs.map +1 -0
  63. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs +8 -0
  64. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs.map +1 -0
  65. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs +317 -0
  66. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs.map +1 -0
  67. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts +39 -0
  68. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts.map +1 -0
  69. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts +39 -0
  70. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts.map +1 -0
  71. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs +317 -0
  72. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs.map +1 -0
  73. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs +95 -0
  74. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs.map +1 -0
  75. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs +95 -0
  76. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs.map +1 -0
  77. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs +30 -0
  78. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs.map +1 -0
  79. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts +20 -0
  80. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts.map +1 -0
  81. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts +20 -0
  82. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts.map +1 -0
  83. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs +29 -0
  84. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs.map +1 -0
  85. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs +19 -0
  86. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs.map +1 -0
  87. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs +19 -0
  88. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs.map +1 -0
  89. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs +8 -0
  90. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs.map +1 -0
  91. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs +9 -0
  92. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs.map +1 -0
  93. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs +7 -0
  94. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs.map +1 -0
  95. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs +8 -0
  96. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs.map +1 -0
  97. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs +6 -0
  98. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs.map +1 -0
  99. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs +6 -0
  100. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs.map +1 -0
  101. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs +6 -0
  102. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs.map +1 -0
  103. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs +6 -0
  104. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs.map +1 -0
  105. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs +6 -0
  106. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs.map +1 -0
  107. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs +6 -0
  108. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs.map +1 -0
  109. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs +6 -0
  110. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs.map +1 -0
  111. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs +6 -0
  112. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs.map +1 -0
  113. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs +7 -0
  114. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs.map +1 -0
  115. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs +8 -0
  116. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs.map +1 -0
  117. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +7 -0
  118. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +1 -0
  119. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +8 -0
  120. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +1 -0
  121. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs +7 -0
  122. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs.map +1 -0
  123. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs +8 -0
  124. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs.map +1 -0
  125. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs +7 -0
  126. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs.map +1 -0
  127. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs +8 -0
  128. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs.map +1 -0
  129. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs +20 -0
  130. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs.map +1 -0
  131. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs +20 -0
  132. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs.map +1 -0
  133. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs +7 -0
  134. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs.map +1 -0
  135. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs +8 -0
  136. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs.map +1 -0
  137. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +11 -0
  138. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
  139. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +12 -0
  140. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
  141. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +7 -0
  142. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
  143. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +8 -0
  144. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
  145. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs +160 -0
  146. package/dist/{tools/task.cjs.map → src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs.map} +1 -1
  147. package/dist/{tools/task.d.cts → src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts} +11 -8
  148. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts.map +1 -0
  149. package/dist/{tools/task.d.mts → src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts} +11 -8
  150. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts.map +1 -0
  151. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs +157 -0
  152. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs.map +1 -0
  153. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs +109 -0
  154. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs.map +1 -0
  155. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs +107 -0
  156. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs.map +1 -0
  157. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs +7 -0
  158. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs.map +1 -0
  159. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs +8 -0
  160. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs.map +1 -0
  161. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs +7 -0
  162. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs.map +1 -0
  163. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs +8 -0
  164. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs.map +1 -0
  165. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs +333 -0
  166. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs.map +1 -0
  167. package/dist/{tui/format.d.mts → src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts} +5 -5
  168. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts.map +1 -0
  169. package/dist/{tui/format.d.cts → src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts} +5 -5
  170. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts.map +1 -0
  171. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs +322 -0
  172. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs.map +1 -0
  173. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs +9 -0
  174. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs.map +1 -0
  175. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs +9 -0
  176. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs.map +1 -0
  177. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs +149 -0
  178. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs.map +1 -0
  179. package/dist/{tui → src/extensions/workspaces/sessions/(frontend)/overlay/_lib}/selectors.d.cts +2 -2
  180. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts.map +1 -0
  181. package/dist/{tui → src/extensions/workspaces/sessions/(frontend)/overlay/_lib}/selectors.d.mts +2 -2
  182. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts.map +1 -0
  183. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs +142 -0
  184. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs.map +1 -0
  185. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs +358 -0
  186. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs.map +1 -0
  187. package/dist/{tui/taskSpace.d.cts → src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts} +4 -3
  188. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts.map +1 -0
  189. package/dist/{tui/taskSpace.d.mts → src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts} +4 -3
  190. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts.map +1 -0
  191. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs +355 -0
  192. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs.map +1 -0
  193. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs +165 -0
  194. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs.map +1 -0
  195. package/dist/{tui → src/extensions/workspaces/sessions/(frontend)/overlay/_lib}/taskOverlay.d.cts +6 -4
  196. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts.map +1 -0
  197. package/dist/{tui → src/extensions/workspaces/sessions/(frontend)/overlay/_lib}/taskOverlay.d.mts +6 -4
  198. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts.map +1 -0
  199. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs +164 -0
  200. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs.map +1 -0
  201. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs +13 -0
  202. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs.map +1 -0
  203. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs +13 -0
  204. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs.map +1 -0
  205. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs +7 -0
  206. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs.map +1 -0
  207. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs +8 -0
  208. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs.map +1 -0
  209. package/dist/src/models/task.cjs +29 -0
  210. package/dist/src/models/task.cjs.map +1 -0
  211. package/dist/{models → src/models}/task.d.cts +12 -2
  212. package/dist/src/models/task.d.cts.map +1 -0
  213. package/dist/{models → src/models}/task.d.mts +12 -2
  214. package/dist/src/models/task.d.mts.map +1 -0
  215. package/dist/src/models/task.mjs +26 -0
  216. package/dist/src/models/task.mjs.map +1 -0
  217. package/dist/src/models/taskGraph.cjs +67 -0
  218. package/dist/src/models/taskGraph.cjs.map +1 -0
  219. package/dist/src/models/taskGraph.d.cts.map +1 -0
  220. package/dist/src/models/taskGraph.d.mts.map +1 -0
  221. package/dist/src/models/taskGraph.mjs +63 -0
  222. package/dist/src/models/taskGraph.mjs.map +1 -0
  223. package/dist/src/schemas/apiContracts.cjs +51 -0
  224. package/dist/src/schemas/apiContracts.cjs.map +1 -0
  225. package/dist/{schemas → src/schemas}/apiContracts.d.cts.map +1 -1
  226. package/dist/{schemas → src/schemas}/apiContracts.d.mts.map +1 -1
  227. package/dist/src/schemas/apiContracts.mjs +49 -0
  228. package/dist/src/schemas/apiContracts.mjs.map +1 -0
  229. package/dist/src/schemas/task.cjs +130 -0
  230. package/dist/src/schemas/task.cjs.map +1 -0
  231. package/dist/src/schemas/task.d.cts.map +1 -0
  232. package/dist/src/schemas/task.d.mts.map +1 -0
  233. package/dist/src/schemas/task.mjs +117 -0
  234. package/dist/src/schemas/task.mjs.map +1 -0
  235. package/dist/src/services/config/index.cjs +88 -0
  236. package/dist/src/services/config/index.cjs.map +1 -0
  237. package/dist/src/services/config/index.d.cts.map +1 -0
  238. package/dist/src/services/config/index.d.mts.map +1 -0
  239. package/dist/src/services/config/index.mjs +72 -0
  240. package/dist/src/services/config/index.mjs.map +1 -0
  241. package/dist/src/services/contextContribution/index.cjs +51 -0
  242. package/dist/src/services/contextContribution/index.cjs.map +1 -0
  243. package/dist/src/services/contextContribution/index.mjs +46 -0
  244. package/dist/src/services/contextContribution/index.mjs.map +1 -0
  245. package/dist/src/services/delegation/index.cjs +629 -0
  246. package/dist/src/services/delegation/index.cjs.map +1 -0
  247. package/dist/src/services/delegation/index.d.cts.map +1 -0
  248. package/dist/src/services/delegation/index.d.mts.map +1 -0
  249. package/dist/src/services/delegation/index.mjs +623 -0
  250. package/dist/src/services/delegation/index.mjs.map +1 -0
  251. package/dist/src/services/delegationPlatform/index.cjs +23 -0
  252. package/dist/src/services/delegationPlatform/index.cjs.map +1 -0
  253. package/dist/src/services/delegationPlatform/index.mjs +21 -0
  254. package/dist/src/services/delegationPlatform/index.mjs.map +1 -0
  255. package/dist/src/services/invariants/index.cjs +64 -0
  256. package/dist/src/services/invariants/index.cjs.map +1 -0
  257. package/dist/src/services/invariants/index.d.cts.map +1 -0
  258. package/dist/src/services/invariants/index.d.mts.map +1 -0
  259. package/dist/src/services/invariants/index.mjs +62 -0
  260. package/dist/src/services/invariants/index.mjs.map +1 -0
  261. package/dist/src/services/logSinkTelemetry/index.cjs +43 -0
  262. package/dist/src/services/logSinkTelemetry/index.cjs.map +1 -0
  263. package/dist/src/services/logSinkTelemetry/index.d.cts.map +1 -0
  264. package/dist/src/services/logSinkTelemetry/index.d.mts.map +1 -0
  265. package/dist/src/services/logSinkTelemetry/index.mjs +41 -0
  266. package/dist/src/services/logSinkTelemetry/index.mjs.map +1 -0
  267. package/dist/src/services/paths/index.cjs +233 -0
  268. package/dist/src/services/paths/index.cjs.map +1 -0
  269. package/dist/src/services/paths/index.d.cts.map +1 -0
  270. package/dist/src/services/paths/index.d.mts.map +1 -0
  271. package/dist/src/services/paths/index.mjs +218 -0
  272. package/dist/src/services/paths/index.mjs.map +1 -0
  273. package/dist/src/services/processLiveness/index.cjs +20 -0
  274. package/dist/src/services/processLiveness/index.cjs.map +1 -0
  275. package/dist/src/services/processLiveness/index.d.cts.map +1 -0
  276. package/dist/src/services/processLiveness/index.d.mts.map +1 -0
  277. package/dist/src/services/processLiveness/index.mjs +20 -0
  278. package/dist/src/services/processLiveness/index.mjs.map +1 -0
  279. package/dist/src/services/reconcile/index.cjs +65 -0
  280. package/dist/src/services/reconcile/index.cjs.map +1 -0
  281. package/dist/src/services/reconcile/index.d.cts.map +1 -0
  282. package/dist/src/services/reconcile/index.d.mts.map +1 -0
  283. package/dist/src/services/reconcile/index.mjs +63 -0
  284. package/dist/src/services/reconcile/index.mjs.map +1 -0
  285. package/dist/src/services/reducer/index.cjs +350 -0
  286. package/dist/src/services/reducer/index.cjs.map +1 -0
  287. package/dist/src/services/reducer/index.d.cts.map +1 -0
  288. package/dist/src/services/reducer/index.d.mts.map +1 -0
  289. package/dist/src/services/reducer/index.mjs +345 -0
  290. package/dist/src/services/reducer/index.mjs.map +1 -0
  291. package/dist/src/services/taskNarration/index.cjs +32 -0
  292. package/dist/src/services/taskNarration/index.cjs.map +1 -0
  293. package/dist/src/services/taskNarration/index.mjs +32 -0
  294. package/dist/src/services/taskNarration/index.mjs.map +1 -0
  295. package/dist/src/services/taskResult/index.cjs +174 -0
  296. package/dist/src/services/taskResult/index.cjs.map +1 -0
  297. package/dist/src/services/taskResult/index.d.cts.map +1 -0
  298. package/dist/src/services/taskResult/index.d.mts.map +1 -0
  299. package/dist/src/services/taskResult/index.mjs +165 -0
  300. package/dist/src/services/taskResult/index.mjs.map +1 -0
  301. package/dist/src/services/taskStore/index.cjs +216 -0
  302. package/dist/src/services/taskStore/index.cjs.map +1 -0
  303. package/dist/src/services/taskStore/index.d.cts.map +1 -0
  304. package/dist/src/services/taskStore/index.d.mts.map +1 -0
  305. package/dist/src/services/taskStore/index.mjs +213 -0
  306. package/dist/src/services/taskStore/index.mjs.map +1 -0
  307. package/dist/src/types/delegation.cjs +7 -0
  308. package/dist/src/types/delegation.cjs.map +1 -0
  309. package/dist/{types → src/types}/delegation.d.cts.map +1 -1
  310. package/dist/{types → src/types}/delegation.d.mts.map +1 -1
  311. package/dist/src/types/delegation.mjs +7 -0
  312. package/dist/src/types/delegation.mjs.map +1 -0
  313. package/dist/src/types/telemetry.cjs +26 -0
  314. package/dist/src/types/telemetry.cjs.map +1 -0
  315. package/dist/src/types/telemetry.d.cts.map +1 -0
  316. package/dist/src/types/telemetry.d.mts.map +1 -0
  317. package/dist/src/types/telemetry.mjs +26 -0
  318. package/dist/src/types/telemetry.mjs.map +1 -0
  319. package/dist/src/types/webTasks.cjs +7 -0
  320. package/dist/src/types/webTasks.cjs.map +1 -0
  321. package/dist/src/types/webTasks.mjs +7 -0
  322. package/dist/src/types/webTasks.mjs.map +1 -0
  323. package/dist/store-invariants.cjs +5 -1
  324. package/dist/store-invariants.d.cts +1 -1
  325. package/dist/store-invariants.d.mts +1 -1
  326. package/dist/store-invariants.mjs +2 -1
  327. package/dist/store-paths.cjs +14 -1
  328. package/dist/store-paths.d.cts +1 -1
  329. package/dist/store-paths.d.mts +1 -1
  330. package/dist/store-paths.mjs +2 -1
  331. package/dist/store-process-liveness.cjs +3 -1
  332. package/dist/store-process-liveness.d.cts +1 -1
  333. package/dist/store-process-liveness.d.mts +1 -1
  334. package/dist/store-process-liveness.mjs +2 -1
  335. package/dist/store-reconcile.cjs +5 -1
  336. package/dist/store-reconcile.d.cts +1 -1
  337. package/dist/store-reconcile.d.mts +1 -1
  338. package/dist/store-reconcile.mjs +2 -1
  339. package/dist/store-reducer.cjs +8 -1
  340. package/dist/store-reducer.d.cts +1 -1
  341. package/dist/store-reducer.d.mts +1 -1
  342. package/dist/store-reducer.mjs +2 -1
  343. package/dist/store-task-graph.cjs +7 -1
  344. package/dist/store-task-graph.d.cts +1 -1
  345. package/dist/store-task-graph.d.mts +1 -1
  346. package/dist/store-task-graph.mjs +2 -1
  347. package/dist/store-task-store.cjs +3 -1
  348. package/dist/store-task-store.d.cts +1 -1
  349. package/dist/store-task-store.d.mts +1 -1
  350. package/dist/store-task-store.mjs +2 -1
  351. package/dist/store-types.cjs +6 -1
  352. package/dist/store-types.d.cts +1 -1
  353. package/dist/store-types.d.mts +1 -1
  354. package/dist/store-types.mjs +2 -1
  355. package/dist/tool-prompt-guidelines.cjs +3 -1
  356. package/dist/tool-prompt-guidelines.d.cts +1 -1
  357. package/dist/tool-prompt-guidelines.d.mts +1 -1
  358. package/dist/tool-prompt-guidelines.mjs +2 -1
  359. package/dist/tool-response-envelope.cjs +12 -1
  360. package/dist/tool-response-envelope.d.cts +1 -1
  361. package/dist/tool-response-envelope.d.mts +1 -1
  362. package/dist/tool-response-envelope.mjs +2 -1
  363. package/dist/tool-schema.cjs +17 -1
  364. package/dist/tool-schema.d.cts +2 -2
  365. package/dist/tool-schema.d.mts +2 -2
  366. package/dist/tool-schema.mjs +3 -1
  367. package/dist/tool-task-tool.cjs +6 -1
  368. package/dist/tool-task-tool.d.cts +2 -2
  369. package/dist/tool-task-tool.d.mts +2 -2
  370. package/dist/tool-task-tool.mjs +3 -1
  371. package/dist/tui-format.cjs +14 -1
  372. package/dist/tui-format.d.cts +1 -1
  373. package/dist/tui-format.d.mts +1 -1
  374. package/dist/tui-format.mjs +2 -1
  375. package/dist/tui-selectors.cjs +10 -1
  376. package/dist/tui-selectors.d.cts +1 -1
  377. package/dist/tui-selectors.d.mts +1 -1
  378. package/dist/tui-selectors.mjs +2 -1
  379. package/dist/tui-task-overlay.cjs +4 -1
  380. package/dist/tui-task-overlay.d.cts +2 -2
  381. package/dist/tui-task-overlay.d.mts +2 -2
  382. package/dist/tui-task-overlay.mjs +2 -1
  383. package/dist/tui-task-space.cjs +5 -1
  384. package/dist/tui-task-space.d.cts +1 -1
  385. package/dist/tui-task-space.d.mts +1 -1
  386. package/dist/tui-task-space.mjs +2 -1
  387. package/package.json +20 -19
  388. package/dist/constants/promptGuidelines.cjs +0 -2
  389. package/dist/constants/promptGuidelines.cjs.map +0 -1
  390. package/dist/constants/promptGuidelines.d.cts.map +0 -1
  391. package/dist/constants/promptGuidelines.d.mts.map +0 -1
  392. package/dist/constants/promptGuidelines.mjs +0 -2
  393. package/dist/constants/promptGuidelines.mjs.map +0 -1
  394. package/dist/constants/task.cjs +0 -2
  395. package/dist/constants/task.cjs.map +0 -1
  396. package/dist/constants/task.d.cts.map +0 -1
  397. package/dist/constants/task.d.mts.map +0 -1
  398. package/dist/constants/task.mjs +0 -2
  399. package/dist/constants/task.mjs.map +0 -1
  400. package/dist/controllers/tasksCommand.cjs +0 -2
  401. package/dist/controllers/tasksCommand.cjs.map +0 -1
  402. package/dist/controllers/tasksCommand.d.cts +0 -15
  403. package/dist/controllers/tasksCommand.d.cts.map +0 -1
  404. package/dist/controllers/tasksCommand.d.mts +0 -15
  405. package/dist/controllers/tasksCommand.d.mts.map +0 -1
  406. package/dist/controllers/tasksCommand.mjs +0 -2
  407. package/dist/controllers/tasksCommand.mjs.map +0 -1
  408. package/dist/controllers/webTasksChannel.cjs +0 -2
  409. package/dist/controllers/webTasksChannel.cjs.map +0 -1
  410. package/dist/controllers/webTasksChannel.mjs +0 -2
  411. package/dist/controllers/webTasksChannel.mjs.map +0 -1
  412. package/dist/models/task.cjs +0 -2
  413. package/dist/models/task.cjs.map +0 -1
  414. package/dist/models/task.d.cts.map +0 -1
  415. package/dist/models/task.d.mts.map +0 -1
  416. package/dist/models/task.mjs +0 -2
  417. package/dist/models/task.mjs.map +0 -1
  418. package/dist/models/taskGraph.cjs +0 -2
  419. package/dist/models/taskGraph.cjs.map +0 -1
  420. package/dist/models/taskGraph.d.cts.map +0 -1
  421. package/dist/models/taskGraph.d.mts.map +0 -1
  422. package/dist/models/taskGraph.mjs +0 -2
  423. package/dist/models/taskGraph.mjs.map +0 -1
  424. package/dist/schemas/apiContracts.cjs +0 -2
  425. package/dist/schemas/apiContracts.cjs.map +0 -1
  426. package/dist/schemas/apiContracts.mjs +0 -2
  427. package/dist/schemas/apiContracts.mjs.map +0 -1
  428. package/dist/schemas/task.cjs +0 -2
  429. package/dist/schemas/task.cjs.map +0 -1
  430. package/dist/schemas/task.d.cts.map +0 -1
  431. package/dist/schemas/task.d.mts.map +0 -1
  432. package/dist/schemas/task.mjs +0 -2
  433. package/dist/schemas/task.mjs.map +0 -1
  434. package/dist/services/config/index.cjs +0 -2
  435. package/dist/services/config/index.cjs.map +0 -1
  436. package/dist/services/config/index.d.cts.map +0 -1
  437. package/dist/services/config/index.d.mts.map +0 -1
  438. package/dist/services/config/index.mjs +0 -2
  439. package/dist/services/config/index.mjs.map +0 -1
  440. package/dist/services/contextContribution/index.cjs +0 -3
  441. package/dist/services/contextContribution/index.cjs.map +0 -1
  442. package/dist/services/contextContribution/index.mjs +0 -3
  443. package/dist/services/contextContribution/index.mjs.map +0 -1
  444. package/dist/services/delegation/index.cjs +0 -6
  445. package/dist/services/delegation/index.cjs.map +0 -1
  446. package/dist/services/delegation/index.d.cts.map +0 -1
  447. package/dist/services/delegation/index.d.mts.map +0 -1
  448. package/dist/services/delegation/index.mjs +0 -6
  449. package/dist/services/delegation/index.mjs.map +0 -1
  450. package/dist/services/delegationPlatform/index.cjs +0 -2
  451. package/dist/services/delegationPlatform/index.cjs.map +0 -1
  452. package/dist/services/delegationPlatform/index.mjs +0 -2
  453. package/dist/services/delegationPlatform/index.mjs.map +0 -1
  454. package/dist/services/invariants/index.cjs +0 -2
  455. package/dist/services/invariants/index.cjs.map +0 -1
  456. package/dist/services/invariants/index.d.cts.map +0 -1
  457. package/dist/services/invariants/index.d.mts.map +0 -1
  458. package/dist/services/invariants/index.mjs +0 -2
  459. package/dist/services/invariants/index.mjs.map +0 -1
  460. package/dist/services/logSinkTelemetry/index.cjs +0 -2
  461. package/dist/services/logSinkTelemetry/index.cjs.map +0 -1
  462. package/dist/services/logSinkTelemetry/index.d.cts.map +0 -1
  463. package/dist/services/logSinkTelemetry/index.d.mts.map +0 -1
  464. package/dist/services/logSinkTelemetry/index.mjs +0 -2
  465. package/dist/services/logSinkTelemetry/index.mjs.map +0 -1
  466. package/dist/services/paths/index.cjs +0 -2
  467. package/dist/services/paths/index.cjs.map +0 -1
  468. package/dist/services/paths/index.d.cts.map +0 -1
  469. package/dist/services/paths/index.d.mts.map +0 -1
  470. package/dist/services/paths/index.mjs +0 -2
  471. package/dist/services/paths/index.mjs.map +0 -1
  472. package/dist/services/processLiveness/index.cjs +0 -2
  473. package/dist/services/processLiveness/index.cjs.map +0 -1
  474. package/dist/services/processLiveness/index.d.cts.map +0 -1
  475. package/dist/services/processLiveness/index.d.mts.map +0 -1
  476. package/dist/services/processLiveness/index.mjs +0 -2
  477. package/dist/services/processLiveness/index.mjs.map +0 -1
  478. package/dist/services/reconcile/index.cjs +0 -2
  479. package/dist/services/reconcile/index.cjs.map +0 -1
  480. package/dist/services/reconcile/index.d.cts.map +0 -1
  481. package/dist/services/reconcile/index.d.mts.map +0 -1
  482. package/dist/services/reconcile/index.mjs +0 -2
  483. package/dist/services/reconcile/index.mjs.map +0 -1
  484. package/dist/services/reducer/index.cjs +0 -3
  485. package/dist/services/reducer/index.cjs.map +0 -1
  486. package/dist/services/reducer/index.d.cts.map +0 -1
  487. package/dist/services/reducer/index.d.mts.map +0 -1
  488. package/dist/services/reducer/index.mjs +0 -3
  489. package/dist/services/reducer/index.mjs.map +0 -1
  490. package/dist/services/taskNarration/index.cjs +0 -2
  491. package/dist/services/taskNarration/index.cjs.map +0 -1
  492. package/dist/services/taskNarration/index.mjs +0 -2
  493. package/dist/services/taskNarration/index.mjs.map +0 -1
  494. package/dist/services/taskResult/index.cjs +0 -7
  495. package/dist/services/taskResult/index.cjs.map +0 -1
  496. package/dist/services/taskResult/index.d.cts.map +0 -1
  497. package/dist/services/taskResult/index.d.mts.map +0 -1
  498. package/dist/services/taskResult/index.mjs +0 -7
  499. package/dist/services/taskResult/index.mjs.map +0 -1
  500. package/dist/services/taskStore/index.cjs +0 -2
  501. package/dist/services/taskStore/index.cjs.map +0 -1
  502. package/dist/services/taskStore/index.d.cts.map +0 -1
  503. package/dist/services/taskStore/index.d.mts.map +0 -1
  504. package/dist/services/taskStore/index.mjs +0 -2
  505. package/dist/services/taskStore/index.mjs.map +0 -1
  506. package/dist/tools/task.cjs +0 -3
  507. package/dist/tools/task.d.cts.map +0 -1
  508. package/dist/tools/task.d.mts.map +0 -1
  509. package/dist/tools/task.mjs +0 -3
  510. package/dist/tools/task.mjs.map +0 -1
  511. package/dist/tui/format.cjs +0 -4
  512. package/dist/tui/format.cjs.map +0 -1
  513. package/dist/tui/format.d.cts.map +0 -1
  514. package/dist/tui/format.d.mts.map +0 -1
  515. package/dist/tui/format.mjs +0 -4
  516. package/dist/tui/format.mjs.map +0 -1
  517. package/dist/tui/selectors.cjs +0 -2
  518. package/dist/tui/selectors.cjs.map +0 -1
  519. package/dist/tui/selectors.d.cts.map +0 -1
  520. package/dist/tui/selectors.d.mts.map +0 -1
  521. package/dist/tui/selectors.mjs +0 -2
  522. package/dist/tui/selectors.mjs.map +0 -1
  523. package/dist/tui/taskOverlay.cjs +0 -2
  524. package/dist/tui/taskOverlay.cjs.map +0 -1
  525. package/dist/tui/taskOverlay.d.cts.map +0 -1
  526. package/dist/tui/taskOverlay.d.mts.map +0 -1
  527. package/dist/tui/taskOverlay.mjs +0 -2
  528. package/dist/tui/taskOverlay.mjs.map +0 -1
  529. package/dist/tui/taskSpace.cjs +0 -5
  530. package/dist/tui/taskSpace.cjs.map +0 -1
  531. package/dist/tui/taskSpace.d.cts.map +0 -1
  532. package/dist/tui/taskSpace.d.mts.map +0 -1
  533. package/dist/tui/taskSpace.mjs +0 -5
  534. package/dist/tui/taskSpace.mjs.map +0 -1
  535. package/dist/types/delegation.cjs +0 -2
  536. package/dist/types/delegation.cjs.map +0 -1
  537. package/dist/types/delegation.mjs +0 -2
  538. package/dist/types/delegation.mjs.map +0 -1
  539. package/dist/types/telemetry.cjs +0 -2
  540. package/dist/types/telemetry.cjs.map +0 -1
  541. package/dist/types/telemetry.d.cts.map +0 -1
  542. package/dist/types/telemetry.d.mts.map +0 -1
  543. package/dist/types/telemetry.mjs +0 -2
  544. package/dist/types/telemetry.mjs.map +0 -1
  545. package/dist/types/webTasks.cjs +0 -2
  546. package/dist/types/webTasks.cjs.map +0 -1
  547. package/dist/types/webTasks.mjs +0 -2
  548. package/dist/types/webTasks.mjs.map +0 -1
  549. package/src/extensions/web.ts +0 -18
  550. package/src/web/components/TaskDetailDialog.tsx +0 -251
  551. package/src/web/components/TaskToolMessage.tsx +0 -120
  552. package/src/web/components/TasksActivitySection.tsx +0 -200
  553. package/src/web/lib/taskToolFormat.ts +0 -330
  554. package/src/web/stores/tasksStore.ts +0 -114
  555. package/src/web/tsconfig.json +0 -23
  556. /package/dist/{constants → src/constants}/promptGuidelines.d.cts +0 -0
  557. /package/dist/{constants → src/constants}/promptGuidelines.d.mts +0 -0
  558. /package/dist/{constants → src/constants}/task.d.cts +0 -0
  559. /package/dist/{constants → src/constants}/task.d.mts +0 -0
  560. /package/dist/{models → src/models}/taskGraph.d.cts +0 -0
  561. /package/dist/{models → src/models}/taskGraph.d.mts +0 -0
  562. /package/dist/{schemas → src/schemas}/apiContracts.d.cts +0 -0
  563. /package/dist/{schemas → src/schemas}/apiContracts.d.mts +0 -0
  564. /package/dist/{schemas → src/schemas}/task.d.cts +0 -0
  565. /package/dist/{schemas → src/schemas}/task.d.mts +0 -0
  566. /package/dist/{services → src/services}/config/index.d.cts +0 -0
  567. /package/dist/{services → src/services}/config/index.d.mts +0 -0
  568. /package/dist/{services → src/services}/delegation/index.d.cts +0 -0
  569. /package/dist/{services → src/services}/delegation/index.d.mts +0 -0
  570. /package/dist/{services → src/services}/invariants/index.d.cts +0 -0
  571. /package/dist/{services → src/services}/invariants/index.d.mts +0 -0
  572. /package/dist/{services → src/services}/logSinkTelemetry/index.d.cts +0 -0
  573. /package/dist/{services → src/services}/logSinkTelemetry/index.d.mts +0 -0
  574. /package/dist/{services → src/services}/paths/index.d.cts +0 -0
  575. /package/dist/{services → src/services}/paths/index.d.mts +0 -0
  576. /package/dist/{services → src/services}/processLiveness/index.d.cts +0 -0
  577. /package/dist/{services → src/services}/processLiveness/index.d.mts +0 -0
  578. /package/dist/{services → src/services}/reconcile/index.d.cts +0 -0
  579. /package/dist/{services → src/services}/reconcile/index.d.mts +0 -0
  580. /package/dist/{services → src/services}/reducer/index.d.cts +0 -0
  581. /package/dist/{services → src/services}/reducer/index.d.mts +0 -0
  582. /package/dist/{services → src/services}/taskResult/index.d.cts +0 -0
  583. /package/dist/{services → src/services}/taskResult/index.d.mts +0 -0
  584. /package/dist/{services → src/services}/taskStore/index.d.cts +0 -0
  585. /package/dist/{services → src/services}/taskStore/index.d.mts +0 -0
  586. /package/dist/{types → src/types}/delegation.d.cts +0 -0
  587. /package/dist/{types → src/types}/delegation.d.mts +0 -0
  588. /package/dist/{types → src/types}/telemetry.d.cts +0 -0
  589. /package/dist/{types → src/types}/telemetry.d.mts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAuBa"}
1
+ {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"mappings":";;qBAuBa"}
@@ -0,0 +1,49 @@
1
+ import { Type } from "typebox";
2
+ import { defineApiContract } from "@agimon-ai/doompi-core/api-contracts";
3
+ //#region src/schemas/apiContracts.ts
4
+ const S = Type.String();
5
+ const N = Type.Number();
6
+ const O = Type.Optional;
7
+ const literals = (values) => Type.Union(values.map((value) => Type.Literal(value)));
8
+ const TasksPayloadSchema = Type.Object({
9
+ tasks: Type.Array(Type.Object({
10
+ id: N,
11
+ subject: S,
12
+ description: O(S),
13
+ activeForm: O(S),
14
+ status: literals([
15
+ "pending",
16
+ "in_progress",
17
+ "completed",
18
+ "failed",
19
+ "deleted"
20
+ ]),
21
+ blockedBy: Type.Array(N),
22
+ owner: O(S),
23
+ updatedAt: O(S),
24
+ delegation: O(Type.Object({
25
+ agent: O(S),
26
+ state: O(S)
27
+ }))
28
+ })),
29
+ rev: N
30
+ });
31
+ const apiContracts = defineApiContract({
32
+ version: 1,
33
+ http: [],
34
+ dynamic: [],
35
+ sockets: ["global", "workspace"].map((scope) => ({
36
+ id: "tasks.channel",
37
+ scope,
38
+ service: "doompi.hub.v1",
39
+ member: "task_graph",
40
+ kind: "channel",
41
+ direction: "server-to-client",
42
+ description: "Task graph channel payload.",
43
+ input: TasksPayloadSchema
44
+ }))
45
+ });
46
+ //#endregion
47
+ export { TasksPayloadSchema, apiContracts, apiContracts as default };
48
+
49
+ //# sourceMappingURL=apiContracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract } from '@agimon-ai/doompi-core/api-contracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst O = Type.Optional;\nconst literals = <T extends string>(values: T[]) => Type.Union(values.map((value) => Type.Literal(value)));\nexport const TasksPayloadSchema = Type.Object({\n tasks: Type.Array(\n Type.Object({\n id: N,\n subject: S,\n description: O(S),\n activeForm: O(S),\n status: literals(['pending', 'in_progress', 'completed', 'failed', 'deleted']),\n blockedBy: Type.Array(N),\n owner: O(S),\n updatedAt: O(S),\n delegation: O(Type.Object({ agent: O(S), state: O(S) })),\n }),\n ),\n rev: N,\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n http: [],\n dynamic: [],\n sockets: (['global', 'workspace'] as const).map((scope) => ({\n id: 'tasks.channel',\n scope,\n service: 'doompi.hub.v1',\n member: 'task_graph',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Task graph channel payload.',\n input: TasksPayloadSchema,\n })),\n});\nexport default apiContracts;\n"],"mappings":";;;AAGA,MAAM,IAAI,KAAK,OAAO;AACtB,MAAM,IAAI,KAAK,OAAO;AACtB,MAAM,IAAI,KAAK;AACf,MAAM,YAA8B,WAAgB,KAAK,MAAM,OAAO,KAAK,UAAU,KAAK,QAAQ,KAAK,CAAC,CAAC;AACzG,MAAa,qBAAqB,KAAK,OAAO;CAC5C,OAAO,KAAK,MACV,KAAK,OAAO;EACV,IAAI;EACJ,SAAS;EACT,aAAa,EAAE,CAAC;EAChB,YAAY,EAAE,CAAC;EACf,QAAQ,SAAS;GAAC;GAAW;GAAe;GAAa;GAAU;EAAS,CAAC;EAC7E,WAAW,KAAK,MAAM,CAAC;EACvB,OAAO,EAAE,CAAC;EACV,WAAW,EAAE,CAAC;EACd,YAAY,EAAE,KAAK,OAAO;GAAE,OAAO,EAAE,CAAC;GAAG,OAAO,EAAE,CAAC;EAAE,CAAC,CAAC;CACzD,CAAC,CACH;CACA,KAAK;AACP,CAAC;AACD,MAAa,eAAe,kBAAkB;CAC5C,SAAS;CACT,MAAM,CAAC;CACP,SAAS,CAAC;CACV,SAAU,CAAC,UAAU,WAAW,CAAC,CAAW,KAAK,WAAW;EAC1D,IAAI;EACJ;EACA,SAAS;EACT,QAAQ;EACR,MAAM;EACN,WAAW;EACX,aAAa;EACb,OAAO;CACT,EAAE;AACJ,CAAC"}
@@ -0,0 +1,130 @@
1
+ require("../types/delegation.cjs");
2
+ const require_task = require("../constants/task.cjs");
3
+ let _agimon_ai_doompi_core_delegation = require("@agimon-ai/doompi-core/delegation");
4
+ let typebox = require("typebox");
5
+ //#region src/schemas/task.ts
6
+ const TASK_ACTIONS = [
7
+ "upsert",
8
+ "list",
9
+ "get",
10
+ "delete",
11
+ "clear",
12
+ "assign",
13
+ "cancel"
14
+ ];
15
+ const TASK_STATUSES = [
16
+ "pending",
17
+ "in_progress",
18
+ "completed",
19
+ "failed",
20
+ "deleted"
21
+ ];
22
+ const TASK_CONTEXTS = ["fresh", "fork"];
23
+ const TOOL_NAME = "task";
24
+ const TOOL_LABEL = "Task";
25
+ const ERR_REQUIRES_INTERACTIVE = "/tasks requires interactive mode";
26
+ const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
27
+ /**
28
+ * Which top-level fields each action accepts.
29
+ *
30
+ * The params object is flat and shared across every action, so the schema alone
31
+ * cannot express "upsert has no top-level id". That gap matters: a call like
32
+ * `{"action":"upsert","id":3,"tasks":[{"status":"completed"}]}` would otherwise
33
+ * silently create a duplicate task, because the entry itself carries no id.
34
+ */
35
+ const TASK_ACTION_FIELDS = {
36
+ upsert: ["action", "tasks"],
37
+ list: [
38
+ "action",
39
+ "status",
40
+ "includeDeleted"
41
+ ],
42
+ get: ["action", "id"],
43
+ delete: ["action", "id"],
44
+ clear: ["action"],
45
+ assign: ["action", "assignments"],
46
+ cancel: ["action", "id"]
47
+ };
48
+ function taskActionAcceptsField(action, field) {
49
+ return TASK_ACTION_FIELDS[action].includes(field);
50
+ }
51
+ /** Correction hint appended when a per-task field lands at the top level. */
52
+ const MSG_UPSERT_FIELD_MISPLACED = "Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.";
53
+ /**
54
+ * A dependency target: an existing task id, or the `ref` of a task created
55
+ * earlier in the same call.
56
+ */
57
+ const DepTokenSchema = typebox.Type.Union([typebox.Type.Integer(), typebox.Type.String()]);
58
+ /**
59
+ * One entry of an upsert. `additionalProperties: false` is load-bearing: pi
60
+ * validates tool arguments against this schema before `execute` runs, so a
61
+ * stray `{"action":"update"}` inside an entry is rejected at the boundary.
62
+ */
63
+ const TaskItemSchema = typebox.Type.Object({
64
+ id: typebox.Type.Optional(typebox.Type.Integer({ description: "Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates." })),
65
+ ref: typebox.Type.Optional(typebox.Type.String({ description: "Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored." })),
66
+ subject: typebox.Type.Optional(typebox.Type.String({ description: "Short imperative subject. Required when the entry has no id; on an entry with an id it renames." })),
67
+ description: typebox.Type.Optional(typebox.Type.String({ description: "Long-form detail; becomes the brief handed to the subagent on assign." })),
68
+ activeForm: typebox.Type.Optional(typebox.Type.String({ description: "Present-continuous label shown while in_progress (e.g. 'writing tests')" })),
69
+ status: typebox.Type.Optional(typebox.Type.String({
70
+ enum: [...TASK_STATUSES],
71
+ description: "New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal."
72
+ })),
73
+ blockedBy: typebox.Type.Optional(typebox.Type.Array(DepTokenSchema, { description: "Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead." })),
74
+ addBlockedBy: typebox.Type.Optional(typebox.Type.Array(DepTokenSchema, { description: "Dependencies to add (ids or earlier refs). Additive; do not resend the full array." })),
75
+ removeBlockedBy: typebox.Type.Optional(typebox.Type.Array(DepTokenSchema, { description: "Dependencies to remove. Additive; do not resend the full array." })),
76
+ owner: typebox.Type.Optional(typebox.Type.String({ description: "Owner label; assign sets it to the subagent name." })),
77
+ metadata: typebox.Type.Optional(typebox.Type.Record(typebox.Type.String(), typebox.Type.Unknown(), { description: "Merged into the task; a null value deletes that key." }))
78
+ }, { additionalProperties: false });
79
+ /** One task-to-agent handoff in a native assignment batch. */
80
+ const TaskAssignmentSchema = typebox.Type.Object({
81
+ id: typebox.Type.Integer({ description: "Pending, unblocked task id to delegate" }),
82
+ agent: typebox.Type.String({ description: "Exact discovered subagent name" }),
83
+ inlineAgent: typebox.Type.Optional(_agimon_ai_doompi_core_delegation.InlineAgentSchema),
84
+ instructions: typebox.Type.Optional(typebox.Type.String({ description: "Extra instructions appended to this delegated brief" })),
85
+ relevantFiles: typebox.Type.Optional(typebox.Type.Array(typebox.Type.String(), { description: `Files already read or located, relative to the working directory; at most 12 are used.` })),
86
+ priorFindings: typebox.Type.Optional(typebox.Type.String({ description: "Established facts this child should consume rather than re-derive" })),
87
+ model: typebox.Type.Optional(typebox.Type.String({ description: "Model override for this delegated run" })),
88
+ context: typebox.Type.Optional(typebox.Type.String({
89
+ enum: [...TASK_CONTEXTS],
90
+ description: "Starting context for this child: 'fresh' or 'fork'"
91
+ }))
92
+ }, { additionalProperties: false });
93
+ /**
94
+ * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so
95
+ * wording changes here change model behaviour.
96
+ */
97
+ const TaskParamsSchema = typebox.Type.Object({
98
+ action: typebox.Type.String({ enum: [...TASK_ACTIONS] }),
99
+ tasks: typebox.Type.Optional(typebox.Type.Array(TaskItemSchema, {
100
+ minItems: 1,
101
+ description: "upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref."
102
+ })),
103
+ assignments: typebox.Type.Optional(typebox.Type.Array(TaskAssignmentSchema, {
104
+ minItems: 1,
105
+ description: "Required for assign, one entry per task, including when there is only one."
106
+ })),
107
+ id: typebox.Type.Optional(typebox.Type.Integer({ description: "Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries." })),
108
+ status: typebox.Type.Optional(typebox.Type.String({
109
+ enum: [...TASK_STATUSES],
110
+ description: "list only: return just the tasks in this status. To SET a status, upsert the task by id."
111
+ })),
112
+ includeDeleted: typebox.Type.Optional(typebox.Type.Boolean({ description: "list only: also return deleted tombstones. Default false." }))
113
+ });
114
+ //#endregion
115
+ exports.COMMAND_NAME = require_task.COMMAND_NAME;
116
+ exports.ERR_REQUIRES_INTERACTIVE = ERR_REQUIRES_INTERACTIVE;
117
+ exports.MSG_NO_TASKS = MSG_NO_TASKS;
118
+ exports.MSG_UPSERT_FIELD_MISPLACED = MSG_UPSERT_FIELD_MISPLACED;
119
+ exports.TASK_ACTIONS = TASK_ACTIONS;
120
+ exports.TASK_ACTION_FIELDS = TASK_ACTION_FIELDS;
121
+ exports.TASK_CONTEXTS = TASK_CONTEXTS;
122
+ exports.TASK_STATUSES = TASK_STATUSES;
123
+ exports.TOOL_LABEL = TOOL_LABEL;
124
+ exports.TOOL_NAME = TOOL_NAME;
125
+ exports.TaskAssignmentSchema = TaskAssignmentSchema;
126
+ exports.TaskItemSchema = TaskItemSchema;
127
+ exports.TaskParamsSchema = TaskParamsSchema;
128
+ exports.taskActionAcceptsField = taskActionAcceptsField;
129
+
130
+ //# sourceMappingURL=task.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.cjs","names":["Type","InlineAgentSchema"],"sources":["../../../src/schemas/task.ts"],"sourcesContent":["export { COMMAND_NAME } from '../constants/task';\nimport { InlineAgentSchema } from '@agimon-ai/doompi-core/delegation';\nimport { type Static, Type } from 'typebox';\n\nimport type { TaskAction } from '../models/task';\nimport { MAX_BRIEF_FILES } from '../types/delegation';\n\nexport const TASK_ACTIONS = ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'] as const;\nexport const TASK_STATUSES = ['pending', 'in_progress', 'completed', 'failed', 'deleted'] as const;\nexport const TASK_CONTEXTS = ['fresh', 'fork'] as const;\n\nexport const TOOL_NAME = 'task';\nexport const TOOL_LABEL = 'Task';\n\nexport const ERR_REQUIRES_INTERACTIVE = '/tasks requires interactive mode';\nexport const MSG_NO_TASKS = 'No tasks yet. Ask the agent to add some!';\n\n/**\n * Which top-level fields each action accepts.\n *\n * The params object is flat and shared across every action, so the schema alone\n * cannot express \"upsert has no top-level id\". That gap matters: a call like\n * `{\"action\":\"upsert\",\"id\":3,\"tasks\":[{\"status\":\"completed\"}]}` would otherwise\n * silently create a duplicate task, because the entry itself carries no id.\n */\nexport const TASK_ACTION_FIELDS = {\n upsert: ['action', 'tasks'],\n list: ['action', 'status', 'includeDeleted'],\n get: ['action', 'id'],\n delete: ['action', 'id'],\n clear: ['action'],\n assign: ['action', 'assignments'],\n cancel: ['action', 'id'],\n} as const satisfies Record<TaskAction, readonly string[]>;\n\nexport function taskActionAcceptsField(action: TaskAction, field: string): boolean {\n return (TASK_ACTION_FIELDS[action] as readonly string[]).includes(field);\n}\n\n/** Correction hint appended when a per-task field lands at the top level. */\nexport const MSG_UPSERT_FIELD_MISPLACED =\n 'Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.';\n\n/**\n * A dependency target: an existing task id, or the `ref` of a task created\n * earlier in the same call.\n */\nconst DepTokenSchema = Type.Union([Type.Integer(), Type.String()]);\n\n/**\n * One entry of an upsert. `additionalProperties: false` is load-bearing: pi\n * validates tool arguments against this schema before `execute` runs, so a\n * stray `{\"action\":\"update\"}` inside an entry is rejected at the boundary.\n */\nexport const TaskItemSchema = Type.Object(\n {\n id: Type.Optional(\n Type.Integer({\n description:\n 'Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.',\n }),\n ),\n ref: Type.Optional(\n Type.String({\n description:\n 'Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored.',\n }),\n ),\n subject: Type.Optional(\n Type.String({\n description: 'Short imperative subject. Required when the entry has no id; on an entry with an id it renames.',\n }),\n ),\n description: Type.Optional(\n Type.String({ description: 'Long-form detail; becomes the brief handed to the subagent on assign.' }),\n ),\n activeForm: Type.Optional(\n Type.String({ description: \"Present-continuous label shown while in_progress (e.g. 'writing tests')\" }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description:\n 'New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.',\n }),\n ),\n blockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description:\n 'Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead.',\n }),\n ),\n addBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to add (ids or earlier refs). Additive; do not resend the full array.',\n }),\n ),\n removeBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to remove. Additive; do not resend the full array.',\n }),\n ),\n owner: Type.Optional(Type.String({ description: 'Owner label; assign sets it to the subagent name.' })),\n metadata: Type.Optional(\n Type.Record(Type.String(), Type.Unknown(), {\n description: 'Merged into the task; a null value deletes that key.',\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/** One task-to-agent handoff in a native assignment batch. */\nexport const TaskAssignmentSchema = Type.Object(\n {\n id: Type.Integer({ description: 'Pending, unblocked task id to delegate' }),\n agent: Type.String({ description: 'Exact discovered subagent name' }),\n inlineAgent: Type.Optional(InlineAgentSchema),\n instructions: Type.Optional(Type.String({ description: 'Extra instructions appended to this delegated brief' })),\n relevantFiles: Type.Optional(\n Type.Array(Type.String(), {\n description: `Files already read or located, relative to the working directory; at most ${MAX_BRIEF_FILES} are used.`,\n }),\n ),\n priorFindings: Type.Optional(\n Type.String({ description: 'Established facts this child should consume rather than re-derive' }),\n ),\n model: Type.Optional(Type.String({ description: 'Model override for this delegated run' })),\n context: Type.Optional(\n Type.String({\n enum: [...TASK_CONTEXTS],\n description: \"Starting context for this child: 'fresh' or 'fork'\",\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/**\n * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so\n * wording changes here change model behaviour.\n */\nexport const TaskParamsSchema = Type.Object({\n action: Type.String({ enum: [...TASK_ACTIONS] }),\n tasks: Type.Optional(\n Type.Array(TaskItemSchema, {\n minItems: 1,\n description:\n 'upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref.',\n }),\n ),\n assignments: Type.Optional(\n Type.Array(TaskAssignmentSchema, {\n minItems: 1,\n description: 'Required for assign, one entry per task, including when there is only one.',\n }),\n ),\n id: Type.Optional(\n Type.Integer({\n description:\n 'Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.',\n }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description: 'list only: return just the tasks in this status. To SET a status, upsert the task by id.',\n }),\n ),\n includeDeleted: Type.Optional(\n Type.Boolean({ description: 'list only: also return deleted tombstones. Default false.' }),\n ),\n});\n\nexport type TaskItemParams = Static<typeof TaskItemSchema>;\nexport type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;\nexport type TaskParams = Static<typeof TaskParamsSchema>;\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.cts","names":[],"sources":["../../../src/schemas/task.ts"],"mappings":";;;;qBAOa;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;;;;;;;;;qBAUA;;;;;;;;;wBAUG,uBAAuB,QAAQ,YAAY;;qBAK9C;;;;;;qBAcA,gBAAc,KAAA;;;;;;;;;;;;;;qBA2Dd,sBAAoB,KAAA;;;;;;;;;;;;;;;;qBA6BpB,kBAAgB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgCjB,iBAAiB,cAAc;YAC/B,uBAAuB,cAAc;YACrC,aAAa,cAAc"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.mts","names":[],"sources":["../../../src/schemas/task.ts"],"mappings":";;;;qBAOa;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;;;;;;;;;qBAUA;;;;;;;;;wBAUG,uBAAuB,QAAQ,YAAY;;qBAK9C;;;;;;qBAcA,gBAAc,KAAA;;;;;;;;;;;;;;qBA2Dd,sBAAoB,KAAA;;;;;;;;;;;;;;;;qBA6BpB,kBAAgB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgCjB,iBAAiB,cAAc;YAC/B,uBAAuB,cAAc;YACrC,aAAa,cAAc"}
@@ -0,0 +1,117 @@
1
+ import "../types/delegation.mjs";
2
+ import { COMMAND_NAME } from "../constants/task.mjs";
3
+ import { InlineAgentSchema } from "@agimon-ai/doompi-core/delegation";
4
+ import { Type } from "typebox";
5
+ //#region src/schemas/task.ts
6
+ const TASK_ACTIONS = [
7
+ "upsert",
8
+ "list",
9
+ "get",
10
+ "delete",
11
+ "clear",
12
+ "assign",
13
+ "cancel"
14
+ ];
15
+ const TASK_STATUSES = [
16
+ "pending",
17
+ "in_progress",
18
+ "completed",
19
+ "failed",
20
+ "deleted"
21
+ ];
22
+ const TASK_CONTEXTS = ["fresh", "fork"];
23
+ const TOOL_NAME = "task";
24
+ const TOOL_LABEL = "Task";
25
+ const ERR_REQUIRES_INTERACTIVE = "/tasks requires interactive mode";
26
+ const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
27
+ /**
28
+ * Which top-level fields each action accepts.
29
+ *
30
+ * The params object is flat and shared across every action, so the schema alone
31
+ * cannot express "upsert has no top-level id". That gap matters: a call like
32
+ * `{"action":"upsert","id":3,"tasks":[{"status":"completed"}]}` would otherwise
33
+ * silently create a duplicate task, because the entry itself carries no id.
34
+ */
35
+ const TASK_ACTION_FIELDS = {
36
+ upsert: ["action", "tasks"],
37
+ list: [
38
+ "action",
39
+ "status",
40
+ "includeDeleted"
41
+ ],
42
+ get: ["action", "id"],
43
+ delete: ["action", "id"],
44
+ clear: ["action"],
45
+ assign: ["action", "assignments"],
46
+ cancel: ["action", "id"]
47
+ };
48
+ function taskActionAcceptsField(action, field) {
49
+ return TASK_ACTION_FIELDS[action].includes(field);
50
+ }
51
+ /** Correction hint appended when a per-task field lands at the top level. */
52
+ const MSG_UPSERT_FIELD_MISPLACED = "Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.";
53
+ /**
54
+ * A dependency target: an existing task id, or the `ref` of a task created
55
+ * earlier in the same call.
56
+ */
57
+ const DepTokenSchema = Type.Union([Type.Integer(), Type.String()]);
58
+ /**
59
+ * One entry of an upsert. `additionalProperties: false` is load-bearing: pi
60
+ * validates tool arguments against this schema before `execute` runs, so a
61
+ * stray `{"action":"update"}` inside an entry is rejected at the boundary.
62
+ */
63
+ const TaskItemSchema = Type.Object({
64
+ id: Type.Optional(Type.Integer({ description: "Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates." })),
65
+ ref: Type.Optional(Type.String({ description: "Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored." })),
66
+ subject: Type.Optional(Type.String({ description: "Short imperative subject. Required when the entry has no id; on an entry with an id it renames." })),
67
+ description: Type.Optional(Type.String({ description: "Long-form detail; becomes the brief handed to the subagent on assign." })),
68
+ activeForm: Type.Optional(Type.String({ description: "Present-continuous label shown while in_progress (e.g. 'writing tests')" })),
69
+ status: Type.Optional(Type.String({
70
+ enum: [...TASK_STATUSES],
71
+ description: "New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal."
72
+ })),
73
+ blockedBy: Type.Optional(Type.Array(DepTokenSchema, { description: "Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead." })),
74
+ addBlockedBy: Type.Optional(Type.Array(DepTokenSchema, { description: "Dependencies to add (ids or earlier refs). Additive; do not resend the full array." })),
75
+ removeBlockedBy: Type.Optional(Type.Array(DepTokenSchema, { description: "Dependencies to remove. Additive; do not resend the full array." })),
76
+ owner: Type.Optional(Type.String({ description: "Owner label; assign sets it to the subagent name." })),
77
+ metadata: Type.Optional(Type.Record(Type.String(), Type.Unknown(), { description: "Merged into the task; a null value deletes that key." }))
78
+ }, { additionalProperties: false });
79
+ /** One task-to-agent handoff in a native assignment batch. */
80
+ const TaskAssignmentSchema = Type.Object({
81
+ id: Type.Integer({ description: "Pending, unblocked task id to delegate" }),
82
+ agent: Type.String({ description: "Exact discovered subagent name" }),
83
+ inlineAgent: Type.Optional(InlineAgentSchema),
84
+ instructions: Type.Optional(Type.String({ description: "Extra instructions appended to this delegated brief" })),
85
+ relevantFiles: Type.Optional(Type.Array(Type.String(), { description: `Files already read or located, relative to the working directory; at most 12 are used.` })),
86
+ priorFindings: Type.Optional(Type.String({ description: "Established facts this child should consume rather than re-derive" })),
87
+ model: Type.Optional(Type.String({ description: "Model override for this delegated run" })),
88
+ context: Type.Optional(Type.String({
89
+ enum: [...TASK_CONTEXTS],
90
+ description: "Starting context for this child: 'fresh' or 'fork'"
91
+ }))
92
+ }, { additionalProperties: false });
93
+ /**
94
+ * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so
95
+ * wording changes here change model behaviour.
96
+ */
97
+ const TaskParamsSchema = Type.Object({
98
+ action: Type.String({ enum: [...TASK_ACTIONS] }),
99
+ tasks: Type.Optional(Type.Array(TaskItemSchema, {
100
+ minItems: 1,
101
+ description: "upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref."
102
+ })),
103
+ assignments: Type.Optional(Type.Array(TaskAssignmentSchema, {
104
+ minItems: 1,
105
+ description: "Required for assign, one entry per task, including when there is only one."
106
+ })),
107
+ id: Type.Optional(Type.Integer({ description: "Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries." })),
108
+ status: Type.Optional(Type.String({
109
+ enum: [...TASK_STATUSES],
110
+ description: "list only: return just the tasks in this status. To SET a status, upsert the task by id."
111
+ })),
112
+ includeDeleted: Type.Optional(Type.Boolean({ description: "list only: also return deleted tombstones. Default false." }))
113
+ });
114
+ //#endregion
115
+ export { COMMAND_NAME, ERR_REQUIRES_INTERACTIVE, MSG_NO_TASKS, MSG_UPSERT_FIELD_MISPLACED, TASK_ACTIONS, TASK_ACTION_FIELDS, TASK_CONTEXTS, TASK_STATUSES, TOOL_LABEL, TOOL_NAME, TaskAssignmentSchema, TaskItemSchema, TaskParamsSchema, taskActionAcceptsField };
116
+
117
+ //# sourceMappingURL=task.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.mjs","names":[],"sources":["../../../src/schemas/task.ts"],"sourcesContent":["export { COMMAND_NAME } from '../constants/task';\nimport { InlineAgentSchema } from '@agimon-ai/doompi-core/delegation';\nimport { type Static, Type } from 'typebox';\n\nimport type { TaskAction } from '../models/task';\nimport { MAX_BRIEF_FILES } from '../types/delegation';\n\nexport const TASK_ACTIONS = ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'] as const;\nexport const TASK_STATUSES = ['pending', 'in_progress', 'completed', 'failed', 'deleted'] as const;\nexport const TASK_CONTEXTS = ['fresh', 'fork'] as const;\n\nexport const TOOL_NAME = 'task';\nexport const TOOL_LABEL = 'Task';\n\nexport const ERR_REQUIRES_INTERACTIVE = '/tasks requires interactive mode';\nexport const MSG_NO_TASKS = 'No tasks yet. Ask the agent to add some!';\n\n/**\n * Which top-level fields each action accepts.\n *\n * The params object is flat and shared across every action, so the schema alone\n * cannot express \"upsert has no top-level id\". That gap matters: a call like\n * `{\"action\":\"upsert\",\"id\":3,\"tasks\":[{\"status\":\"completed\"}]}` would otherwise\n * silently create a duplicate task, because the entry itself carries no id.\n */\nexport const TASK_ACTION_FIELDS = {\n upsert: ['action', 'tasks'],\n list: ['action', 'status', 'includeDeleted'],\n get: ['action', 'id'],\n delete: ['action', 'id'],\n clear: ['action'],\n assign: ['action', 'assignments'],\n cancel: ['action', 'id'],\n} as const satisfies Record<TaskAction, readonly string[]>;\n\nexport function taskActionAcceptsField(action: TaskAction, field: string): boolean {\n return (TASK_ACTION_FIELDS[action] as readonly string[]).includes(field);\n}\n\n/** Correction hint appended when a per-task field lands at the top level. */\nexport const MSG_UPSERT_FIELD_MISPLACED =\n 'Per-task fields belong inside each tasks[] entry, not at the top level: {\"action\":\"upsert\",\"tasks\":[{\"id\":3,\"status\":\"completed\"}]}.';\n\n/**\n * A dependency target: an existing task id, or the `ref` of a task created\n * earlier in the same call.\n */\nconst DepTokenSchema = Type.Union([Type.Integer(), Type.String()]);\n\n/**\n * One entry of an upsert. `additionalProperties: false` is load-bearing: pi\n * validates tool arguments against this schema before `execute` runs, so a\n * stray `{\"action\":\"update\"}` inside an entry is rejected at the boundary.\n */\nexport const TaskItemSchema = Type.Object(\n {\n id: Type.Optional(\n Type.Integer({\n description:\n 'Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.',\n }),\n ),\n ref: Type.Optional(\n Type.String({\n description:\n 'Temporary name for a task created by this entry, so a LATER entry in this array can list it in blockedBy. Must start with a letter; never stored.',\n }),\n ),\n subject: Type.Optional(\n Type.String({\n description: 'Short imperative subject. Required when the entry has no id; on an entry with an id it renames.',\n }),\n ),\n description: Type.Optional(\n Type.String({ description: 'Long-form detail; becomes the brief handed to the subagent on assign.' }),\n ),\n activeForm: Type.Optional(\n Type.String({ description: \"Present-continuous label shown while in_progress (e.g. 'writing tests')\" }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description:\n 'New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.',\n }),\n ),\n blockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description:\n 'Dependencies for a NEW entry: task ids, or refs of tasks created EARLIER in this array. On an entry with an id use addBlockedBy / removeBlockedBy instead.',\n }),\n ),\n addBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to add (ids or earlier refs). Additive; do not resend the full array.',\n }),\n ),\n removeBlockedBy: Type.Optional(\n Type.Array(DepTokenSchema, {\n description: 'Dependencies to remove. Additive; do not resend the full array.',\n }),\n ),\n owner: Type.Optional(Type.String({ description: 'Owner label; assign sets it to the subagent name.' })),\n metadata: Type.Optional(\n Type.Record(Type.String(), Type.Unknown(), {\n description: 'Merged into the task; a null value deletes that key.',\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/** One task-to-agent handoff in a native assignment batch. */\nexport const TaskAssignmentSchema = Type.Object(\n {\n id: Type.Integer({ description: 'Pending, unblocked task id to delegate' }),\n agent: Type.String({ description: 'Exact discovered subagent name' }),\n inlineAgent: Type.Optional(InlineAgentSchema),\n instructions: Type.Optional(Type.String({ description: 'Extra instructions appended to this delegated brief' })),\n relevantFiles: Type.Optional(\n Type.Array(Type.String(), {\n description: `Files already read or located, relative to the working directory; at most ${MAX_BRIEF_FILES} are used.`,\n }),\n ),\n priorFindings: Type.Optional(\n Type.String({ description: 'Established facts this child should consume rather than re-derive' }),\n ),\n model: Type.Optional(Type.String({ description: 'Model override for this delegated run' })),\n context: Type.Optional(\n Type.String({\n enum: [...TASK_CONTEXTS],\n description: \"Starting context for this child: 'fresh' or 'fork'\",\n }),\n ),\n },\n { additionalProperties: false },\n);\n\n/**\n * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so\n * wording changes here change model behaviour.\n */\nexport const TaskParamsSchema = Type.Object({\n action: Type.String({ enum: [...TASK_ACTIONS] }),\n tasks: Type.Optional(\n Type.Array(TaskItemSchema, {\n minItems: 1,\n description:\n 'upsert only. An entry with an id changes that task, an entry without an id creates one. Entries apply in array order, so a later entry can depend on an earlier one by ref.',\n }),\n ),\n assignments: Type.Optional(\n Type.Array(TaskAssignmentSchema, {\n minItems: 1,\n description: 'Required for assign, one entry per task, including when there is only one.',\n }),\n ),\n id: Type.Optional(\n Type.Integer({\n description:\n 'Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.',\n }),\n ),\n status: Type.Optional(\n Type.String({\n enum: [...TASK_STATUSES],\n description: 'list only: return just the tasks in this status. To SET a status, upsert the task by id.',\n }),\n ),\n includeDeleted: Type.Optional(\n Type.Boolean({ description: 'list only: also return deleted tombstones. Default false.' }),\n ),\n});\n\nexport type TaskItemParams = Static<typeof TaskItemSchema>;\nexport type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;\nexport type TaskParams = Static<typeof TaskParamsSchema>;\n"],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ //#region src/services/config/index.ts
2
+ /**
3
+ * Extension configuration, read from the environment.
4
+ *
5
+ * Env rather than a config file: doom-pi already carries per-launch state to Pi
6
+ * through env vars, so this keeps doom-task consistent with how the harness
7
+ * configures the rest of the extension set.
8
+ */
9
+ const MAX_WIDGET_LINES_ENV = "DOOM_TASK_MAX_WIDGET_LINES";
10
+ const MAX_TASKS_ENV = "DOOM_TASK_MAX_TASKS";
11
+ const COLLAPSE_KEY_ENV = "DOOM_TASK_COLLAPSE_KEY";
12
+ const STORE_TTL_MS_ENV = "DOOM_TASK_STORE_TTL_MS";
13
+ const DELEGATION_TIMEOUT_MS_ENV = "DOOM_TASK_DELEGATION_TIMEOUT_MS";
14
+ const DEFAULT_MAX_WIDGET_LINES = 12;
15
+ const DEFAULT_MAX_TASKS = 15;
16
+ const DEFAULT_COLLAPSE_KEY = "ctrl+shift+t";
17
+ const DEFAULT_STORE_TTL_MS = 2592e6;
18
+ /** Deliberately under the subagents auto-drain ceiling (30 min) so a headless
19
+ * session still gets the failure and a model turn before draining gives up. */
20
+ const DEFAULT_DELEGATION_TIMEOUT_MS = 12e5;
21
+ const COLLAPSE_KEY_OFF = "off";
22
+ const MIN_WIDGET_LINES = 3;
23
+ const MAX_WIDGET_LINES = 60;
24
+ function configRecord(value) {
25
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
26
+ }
27
+ /** Parse configuration only after the Pi host has applied its project-trust policy. */
28
+ function parsePiTaskConfig(value) {
29
+ const config = configRecord(value);
30
+ const maxWidgetLines = typeof config.maxWidgetLines === "number" && Number.isFinite(config.maxWidgetLines) ? Math.min(Math.max(config.maxWidgetLines, MIN_WIDGET_LINES), MAX_WIDGET_LINES) : 12;
31
+ const maxTasks = typeof config.maxTasks === "number" && Number.isSafeInteger(config.maxTasks) && config.maxTasks > 0 ? config.maxTasks : 15;
32
+ const storeTtlMs = typeof config.storeTtlMs === "number" && Number.isFinite(config.storeTtlMs) && config.storeTtlMs > 0 ? config.storeTtlMs : DEFAULT_STORE_TTL_MS;
33
+ const delegationTimeoutMs = typeof config.delegationTimeoutMs === "number" && Number.isFinite(config.delegationTimeoutMs) && config.delegationTimeoutMs > 0 ? config.delegationTimeoutMs : DEFAULT_DELEGATION_TIMEOUT_MS;
34
+ return {
35
+ maxWidgetLines,
36
+ maxTasks,
37
+ storeTtlMs,
38
+ collapseKey: typeof config.collapseKey === "string" && config.collapseKey.trim() ? config.collapseKey.trim().toLowerCase() === "off" ? "off" : config.collapseKey.trim() : DEFAULT_COLLAPSE_KEY,
39
+ delegationTimeoutMs
40
+ };
41
+ }
42
+ /** Rows the overlay may use for content, clamped to a sane range. */
43
+ function getMaxWidgetLines(env = process.env) {
44
+ const raw = Number.parseInt(env["DOOM_TASK_MAX_WIDGET_LINES"] ?? "", 10);
45
+ if (!Number.isFinite(raw)) return 12;
46
+ return Math.min(Math.max(raw, MIN_WIDGET_LINES), MAX_WIDGET_LINES);
47
+ }
48
+ /** Maximum number of non-deleted tasks retained on one board. */
49
+ function getMaxTasks(env = process.env) {
50
+ const raw = Number(env[MAX_TASKS_ENV]);
51
+ return Number.isSafeInteger(raw) && raw > 0 ? raw : 15;
52
+ }
53
+ /** Retention window for inactive session-tree stores. */
54
+ function getStoreTtlMs(env = process.env) {
55
+ const raw = Number(env[STORE_TTL_MS_ENV]);
56
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_STORE_TTL_MS;
57
+ }
58
+ /** How long a delegated run may go without reporting a result. */
59
+ function getDelegationTimeoutMs(env = process.env) {
60
+ const raw = Number(env[DELEGATION_TIMEOUT_MS_ENV]);
61
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DELEGATION_TIMEOUT_MS;
62
+ }
63
+ /** Collapse shortcut, or the `off` sentinel when the user disabled it. */
64
+ function resolveCollapseKey(env = process.env) {
65
+ const configured = env[COLLAPSE_KEY_ENV]?.trim();
66
+ if (!configured) return DEFAULT_COLLAPSE_KEY;
67
+ return configured.toLowerCase() === "off" ? "off" : configured;
68
+ }
69
+ //#endregion
70
+ exports.COLLAPSE_KEY_ENV = COLLAPSE_KEY_ENV;
71
+ exports.COLLAPSE_KEY_OFF = COLLAPSE_KEY_OFF;
72
+ exports.DEFAULT_COLLAPSE_KEY = DEFAULT_COLLAPSE_KEY;
73
+ exports.DEFAULT_DELEGATION_TIMEOUT_MS = DEFAULT_DELEGATION_TIMEOUT_MS;
74
+ exports.DEFAULT_MAX_TASKS = DEFAULT_MAX_TASKS;
75
+ exports.DEFAULT_MAX_WIDGET_LINES = DEFAULT_MAX_WIDGET_LINES;
76
+ exports.DEFAULT_STORE_TTL_MS = DEFAULT_STORE_TTL_MS;
77
+ exports.DELEGATION_TIMEOUT_MS_ENV = DELEGATION_TIMEOUT_MS_ENV;
78
+ exports.MAX_TASKS_ENV = MAX_TASKS_ENV;
79
+ exports.MAX_WIDGET_LINES_ENV = MAX_WIDGET_LINES_ENV;
80
+ exports.STORE_TTL_MS_ENV = STORE_TTL_MS_ENV;
81
+ exports.getDelegationTimeoutMs = getDelegationTimeoutMs;
82
+ exports.getMaxTasks = getMaxTasks;
83
+ exports.getMaxWidgetLines = getMaxWidgetLines;
84
+ exports.getStoreTtlMs = getStoreTtlMs;
85
+ exports.parsePiTaskConfig = parsePiTaskConfig;
86
+ exports.resolveCollapseKey = resolveCollapseKey;
87
+
88
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/config/index.ts"],"sourcesContent":["/**\n * Extension configuration, read from the environment.\n *\n * Env rather than a config file: doom-pi already carries per-launch state to Pi\n * through env vars, so this keeps doom-task consistent with how the harness\n * configures the rest of the extension set.\n */\n\nexport const MAX_WIDGET_LINES_ENV = 'DOOM_TASK_MAX_WIDGET_LINES';\nexport const MAX_TASKS_ENV = 'DOOM_TASK_MAX_TASKS';\nexport const COLLAPSE_KEY_ENV = 'DOOM_TASK_COLLAPSE_KEY';\nexport const STORE_TTL_MS_ENV = 'DOOM_TASK_STORE_TTL_MS';\nexport const DELEGATION_TIMEOUT_MS_ENV = 'DOOM_TASK_DELEGATION_TIMEOUT_MS';\n\nexport const DEFAULT_MAX_WIDGET_LINES = 12;\nexport const DEFAULT_MAX_TASKS = 15;\nexport const DEFAULT_COLLAPSE_KEY = 'ctrl+shift+t';\nexport const DEFAULT_STORE_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n/** Deliberately under the subagents auto-drain ceiling (30 min) so a headless\n * session still gets the failure and a model turn before draining gives up. */\nexport const DEFAULT_DELEGATION_TIMEOUT_MS = 20 * 60 * 1000;\nexport const COLLAPSE_KEY_OFF = 'off';\n\nconst MIN_WIDGET_LINES = 3;\nconst MAX_WIDGET_LINES = 60;\n\nexport interface PiTaskConfig {\n maxWidgetLines: number;\n maxTasks: number;\n storeTtlMs: number;\n collapseKey: string;\n delegationTimeoutMs: number;\n}\n\nfunction configRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : {};\n}\n\n/** Parse configuration only after the Pi host has applied its project-trust policy. */\nexport function parsePiTaskConfig(value: unknown): PiTaskConfig {\n const config = configRecord(value);\n const maxWidgetLines =\n typeof config.maxWidgetLines === 'number' && Number.isFinite(config.maxWidgetLines)\n ? Math.min(Math.max(config.maxWidgetLines, MIN_WIDGET_LINES), MAX_WIDGET_LINES)\n : DEFAULT_MAX_WIDGET_LINES;\n const maxTasks =\n typeof config.maxTasks === 'number' && Number.isSafeInteger(config.maxTasks) && config.maxTasks > 0\n ? config.maxTasks\n : DEFAULT_MAX_TASKS;\n const storeTtlMs =\n typeof config.storeTtlMs === 'number' && Number.isFinite(config.storeTtlMs) && config.storeTtlMs > 0\n ? config.storeTtlMs\n : DEFAULT_STORE_TTL_MS;\n const delegationTimeoutMs =\n typeof config.delegationTimeoutMs === 'number' &&\n Number.isFinite(config.delegationTimeoutMs) &&\n config.delegationTimeoutMs > 0\n ? config.delegationTimeoutMs\n : DEFAULT_DELEGATION_TIMEOUT_MS;\n const collapseKey =\n typeof config.collapseKey === 'string' && config.collapseKey.trim()\n ? config.collapseKey.trim().toLowerCase() === COLLAPSE_KEY_OFF\n ? COLLAPSE_KEY_OFF\n : config.collapseKey.trim()\n : DEFAULT_COLLAPSE_KEY;\n\n return { maxWidgetLines, maxTasks, storeTtlMs, collapseKey, delegationTimeoutMs };\n}\n\n/** Rows the overlay may use for content, clamped to a sane range. */\nexport function getMaxWidgetLines(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number.parseInt(env[MAX_WIDGET_LINES_ENV] ?? '', 10);\n if (!Number.isFinite(raw)) return DEFAULT_MAX_WIDGET_LINES;\n return Math.min(Math.max(raw, MIN_WIDGET_LINES), MAX_WIDGET_LINES);\n}\n\n/** Maximum number of non-deleted tasks retained on one board. */\nexport function getMaxTasks(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[MAX_TASKS_ENV]);\n return Number.isSafeInteger(raw) && raw > 0 ? raw : DEFAULT_MAX_TASKS;\n}\n\n/** Retention window for inactive session-tree stores. */\nexport function getStoreTtlMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[STORE_TTL_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_STORE_TTL_MS;\n}\n\n/** How long a delegated run may go without reporting a result. */\nexport function getDelegationTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[DELEGATION_TIMEOUT_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DELEGATION_TIMEOUT_MS;\n}\n\n/** Collapse shortcut, or the `off` sentinel when the user disabled it. */\nexport function resolveCollapseKey(env: NodeJS.ProcessEnv = process.env): string {\n const configured = env[COLLAPSE_KEY_ENV]?.trim();\n if (!configured) return DEFAULT_COLLAPSE_KEY;\n return configured.toLowerCase() === COLLAPSE_KEY_OFF ? COLLAPSE_KEY_OFF : configured;\n}\n"],"mappings":";;;;;;;;AAQA,MAAa,uBAAuB;AACpC,MAAa,gBAAgB;AAC7B,MAAa,mBAAmB;AAChC,MAAa,mBAAmB;AAChC,MAAa,4BAA4B;AAEzC,MAAa,2BAA2B;AACxC,MAAa,oBAAoB;AACjC,MAAa,uBAAuB;AACpC,MAAa,uBAAuB;;;AAGpC,MAAa,gCAAgC;AAC7C,MAAa,mBAAmB;AAEhC,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AAUzB,SAAS,aAAa,OAAyC;CAC7D,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAK,QAAoC,CAAC;AACtH;;AAGA,SAAgB,kBAAkB,OAA8B;CAC9D,MAAM,SAAS,aAAa,KAAK;CACjC,MAAM,iBACJ,OAAO,OAAO,mBAAmB,YAAY,OAAO,SAAS,OAAO,cAAc,IAC9E,KAAK,IAAI,KAAK,IAAI,OAAO,gBAAgB,gBAAgB,GAAG,gBAAgB,IAAA;CAElF,MAAM,WACJ,OAAO,OAAO,aAAa,YAAY,OAAO,cAAc,OAAO,QAAQ,KAAK,OAAO,WAAW,IAC9F,OAAO,WAAA;CAEb,MAAM,aACJ,OAAO,OAAO,eAAe,YAAY,OAAO,SAAS,OAAO,UAAU,KAAK,OAAO,aAAa,IAC/F,OAAO,aACP;CACN,MAAM,sBACJ,OAAO,OAAO,wBAAwB,YACtC,OAAO,SAAS,OAAO,mBAAmB,KAC1C,OAAO,sBAAsB,IACzB,OAAO,sBACP;CAQN,OAAO;EAAE;EAAgB;EAAU;EAAY,aAN7C,OAAO,OAAO,gBAAgB,YAAY,OAAO,YAAY,KAAK,IAC9D,OAAO,YAAY,KAAK,CAAC,CAAC,YAAY,MAAA,QAAA,QAEpC,OAAO,YAAY,KAAK,IAC1B;EAEsD;CAAoB;AAClF;;AAGA,SAAgB,kBAAkB,MAAyB,QAAQ,KAAa;CAC9E,MAAM,MAAM,OAAO,SAAS,IAAA,iCAA6B,IAAI,EAAE;CAC/D,IAAI,CAAC,OAAO,SAAS,GAAG,GAAG,OAAA;CAC3B,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK,gBAAgB,GAAG,gBAAgB;AACnE;;AAGA,SAAgB,YAAY,MAAyB,QAAQ,KAAa;CACxE,MAAM,MAAM,OAAO,IAAI,cAAc;CACrC,OAAO,OAAO,cAAc,GAAG,KAAK,MAAM,IAAI,MAAA;AAChD;;AAGA,SAAgB,cAAc,MAAyB,QAAQ,KAAa;CAC1E,MAAM,MAAM,OAAO,IAAI,iBAAiB;CACxC,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM;AACjD;;AAGA,SAAgB,uBAAuB,MAAyB,QAAQ,KAAa;CACnF,MAAM,MAAM,OAAO,IAAI,0BAA0B;CACjD,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM;AACjD;;AAGA,SAAgB,mBAAmB,MAAyB,QAAQ,KAAa;CAC/E,MAAM,aAAa,IAAI,iBAAiB,EAAE,KAAK;CAC/C,IAAI,CAAC,YAAY,OAAO;CACxB,OAAO,WAAW,YAAY,MAAA,QAAA,QAA4C;AAC5E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/config/index.ts"],"mappings":";;;;;;;;qBAQa;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBACA;;;qBAGA;qBACA;iBAKI;EACf;EACA;EACA;EACA;EACA;;;wBAQc,kBAAkB,iBAAiB;;wBA+BnC,kBAAkB,MAAK,OAAO;;wBAO9B,YAAY,MAAK,OAAO;;wBAMxB,cAAc,MAAK,OAAO;;wBAM1B,uBAAuB,MAAK,OAAO;;wBAMnC,mBAAmB,MAAK,OAAO"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/config/index.ts"],"mappings":";;;;;;;;qBAQa;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBACA;;;qBAGA;qBACA;iBAKI;EACf;EACA;EACA;EACA;EACA;;;wBAQc,kBAAkB,iBAAiB;;wBA+BnC,kBAAkB,MAAK,OAAO;;wBAO9B,YAAY,MAAK,OAAO;;wBAMxB,cAAc,MAAK,OAAO;;wBAM1B,uBAAuB,MAAK,OAAO;;wBAMnC,mBAAmB,MAAK,OAAO"}
@@ -0,0 +1,72 @@
1
+ //#region src/services/config/index.ts
2
+ /**
3
+ * Extension configuration, read from the environment.
4
+ *
5
+ * Env rather than a config file: doom-pi already carries per-launch state to Pi
6
+ * through env vars, so this keeps doom-task consistent with how the harness
7
+ * configures the rest of the extension set.
8
+ */
9
+ const MAX_WIDGET_LINES_ENV = "DOOM_TASK_MAX_WIDGET_LINES";
10
+ const MAX_TASKS_ENV = "DOOM_TASK_MAX_TASKS";
11
+ const COLLAPSE_KEY_ENV = "DOOM_TASK_COLLAPSE_KEY";
12
+ const STORE_TTL_MS_ENV = "DOOM_TASK_STORE_TTL_MS";
13
+ const DELEGATION_TIMEOUT_MS_ENV = "DOOM_TASK_DELEGATION_TIMEOUT_MS";
14
+ const DEFAULT_MAX_WIDGET_LINES = 12;
15
+ const DEFAULT_MAX_TASKS = 15;
16
+ const DEFAULT_COLLAPSE_KEY = "ctrl+shift+t";
17
+ const DEFAULT_STORE_TTL_MS = 2592e6;
18
+ /** Deliberately under the subagents auto-drain ceiling (30 min) so a headless
19
+ * session still gets the failure and a model turn before draining gives up. */
20
+ const DEFAULT_DELEGATION_TIMEOUT_MS = 12e5;
21
+ const COLLAPSE_KEY_OFF = "off";
22
+ const MIN_WIDGET_LINES = 3;
23
+ const MAX_WIDGET_LINES = 60;
24
+ function configRecord(value) {
25
+ return value !== null && typeof value === "object" && !Array.isArray(value) ? value : {};
26
+ }
27
+ /** Parse configuration only after the Pi host has applied its project-trust policy. */
28
+ function parsePiTaskConfig(value) {
29
+ const config = configRecord(value);
30
+ const maxWidgetLines = typeof config.maxWidgetLines === "number" && Number.isFinite(config.maxWidgetLines) ? Math.min(Math.max(config.maxWidgetLines, MIN_WIDGET_LINES), MAX_WIDGET_LINES) : 12;
31
+ const maxTasks = typeof config.maxTasks === "number" && Number.isSafeInteger(config.maxTasks) && config.maxTasks > 0 ? config.maxTasks : 15;
32
+ const storeTtlMs = typeof config.storeTtlMs === "number" && Number.isFinite(config.storeTtlMs) && config.storeTtlMs > 0 ? config.storeTtlMs : DEFAULT_STORE_TTL_MS;
33
+ const delegationTimeoutMs = typeof config.delegationTimeoutMs === "number" && Number.isFinite(config.delegationTimeoutMs) && config.delegationTimeoutMs > 0 ? config.delegationTimeoutMs : DEFAULT_DELEGATION_TIMEOUT_MS;
34
+ return {
35
+ maxWidgetLines,
36
+ maxTasks,
37
+ storeTtlMs,
38
+ collapseKey: typeof config.collapseKey === "string" && config.collapseKey.trim() ? config.collapseKey.trim().toLowerCase() === "off" ? "off" : config.collapseKey.trim() : DEFAULT_COLLAPSE_KEY,
39
+ delegationTimeoutMs
40
+ };
41
+ }
42
+ /** Rows the overlay may use for content, clamped to a sane range. */
43
+ function getMaxWidgetLines(env = process.env) {
44
+ const raw = Number.parseInt(env["DOOM_TASK_MAX_WIDGET_LINES"] ?? "", 10);
45
+ if (!Number.isFinite(raw)) return 12;
46
+ return Math.min(Math.max(raw, MIN_WIDGET_LINES), MAX_WIDGET_LINES);
47
+ }
48
+ /** Maximum number of non-deleted tasks retained on one board. */
49
+ function getMaxTasks(env = process.env) {
50
+ const raw = Number(env[MAX_TASKS_ENV]);
51
+ return Number.isSafeInteger(raw) && raw > 0 ? raw : 15;
52
+ }
53
+ /** Retention window for inactive session-tree stores. */
54
+ function getStoreTtlMs(env = process.env) {
55
+ const raw = Number(env[STORE_TTL_MS_ENV]);
56
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_STORE_TTL_MS;
57
+ }
58
+ /** How long a delegated run may go without reporting a result. */
59
+ function getDelegationTimeoutMs(env = process.env) {
60
+ const raw = Number(env[DELEGATION_TIMEOUT_MS_ENV]);
61
+ return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DELEGATION_TIMEOUT_MS;
62
+ }
63
+ /** Collapse shortcut, or the `off` sentinel when the user disabled it. */
64
+ function resolveCollapseKey(env = process.env) {
65
+ const configured = env[COLLAPSE_KEY_ENV]?.trim();
66
+ if (!configured) return DEFAULT_COLLAPSE_KEY;
67
+ return configured.toLowerCase() === "off" ? "off" : configured;
68
+ }
69
+ //#endregion
70
+ export { COLLAPSE_KEY_ENV, COLLAPSE_KEY_OFF, DEFAULT_COLLAPSE_KEY, DEFAULT_DELEGATION_TIMEOUT_MS, DEFAULT_MAX_TASKS, DEFAULT_MAX_WIDGET_LINES, DEFAULT_STORE_TTL_MS, DELEGATION_TIMEOUT_MS_ENV, MAX_TASKS_ENV, MAX_WIDGET_LINES_ENV, STORE_TTL_MS_ENV, getDelegationTimeoutMs, getMaxTasks, getMaxWidgetLines, getStoreTtlMs, parsePiTaskConfig, resolveCollapseKey };
71
+
72
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/config/index.ts"],"sourcesContent":["/**\n * Extension configuration, read from the environment.\n *\n * Env rather than a config file: doom-pi already carries per-launch state to Pi\n * through env vars, so this keeps doom-task consistent with how the harness\n * configures the rest of the extension set.\n */\n\nexport const MAX_WIDGET_LINES_ENV = 'DOOM_TASK_MAX_WIDGET_LINES';\nexport const MAX_TASKS_ENV = 'DOOM_TASK_MAX_TASKS';\nexport const COLLAPSE_KEY_ENV = 'DOOM_TASK_COLLAPSE_KEY';\nexport const STORE_TTL_MS_ENV = 'DOOM_TASK_STORE_TTL_MS';\nexport const DELEGATION_TIMEOUT_MS_ENV = 'DOOM_TASK_DELEGATION_TIMEOUT_MS';\n\nexport const DEFAULT_MAX_WIDGET_LINES = 12;\nexport const DEFAULT_MAX_TASKS = 15;\nexport const DEFAULT_COLLAPSE_KEY = 'ctrl+shift+t';\nexport const DEFAULT_STORE_TTL_MS = 30 * 24 * 60 * 60 * 1000;\n/** Deliberately under the subagents auto-drain ceiling (30 min) so a headless\n * session still gets the failure and a model turn before draining gives up. */\nexport const DEFAULT_DELEGATION_TIMEOUT_MS = 20 * 60 * 1000;\nexport const COLLAPSE_KEY_OFF = 'off';\n\nconst MIN_WIDGET_LINES = 3;\nconst MAX_WIDGET_LINES = 60;\n\nexport interface PiTaskConfig {\n maxWidgetLines: number;\n maxTasks: number;\n storeTtlMs: number;\n collapseKey: string;\n delegationTimeoutMs: number;\n}\n\nfunction configRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : {};\n}\n\n/** Parse configuration only after the Pi host has applied its project-trust policy. */\nexport function parsePiTaskConfig(value: unknown): PiTaskConfig {\n const config = configRecord(value);\n const maxWidgetLines =\n typeof config.maxWidgetLines === 'number' && Number.isFinite(config.maxWidgetLines)\n ? Math.min(Math.max(config.maxWidgetLines, MIN_WIDGET_LINES), MAX_WIDGET_LINES)\n : DEFAULT_MAX_WIDGET_LINES;\n const maxTasks =\n typeof config.maxTasks === 'number' && Number.isSafeInteger(config.maxTasks) && config.maxTasks > 0\n ? config.maxTasks\n : DEFAULT_MAX_TASKS;\n const storeTtlMs =\n typeof config.storeTtlMs === 'number' && Number.isFinite(config.storeTtlMs) && config.storeTtlMs > 0\n ? config.storeTtlMs\n : DEFAULT_STORE_TTL_MS;\n const delegationTimeoutMs =\n typeof config.delegationTimeoutMs === 'number' &&\n Number.isFinite(config.delegationTimeoutMs) &&\n config.delegationTimeoutMs > 0\n ? config.delegationTimeoutMs\n : DEFAULT_DELEGATION_TIMEOUT_MS;\n const collapseKey =\n typeof config.collapseKey === 'string' && config.collapseKey.trim()\n ? config.collapseKey.trim().toLowerCase() === COLLAPSE_KEY_OFF\n ? COLLAPSE_KEY_OFF\n : config.collapseKey.trim()\n : DEFAULT_COLLAPSE_KEY;\n\n return { maxWidgetLines, maxTasks, storeTtlMs, collapseKey, delegationTimeoutMs };\n}\n\n/** Rows the overlay may use for content, clamped to a sane range. */\nexport function getMaxWidgetLines(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number.parseInt(env[MAX_WIDGET_LINES_ENV] ?? '', 10);\n if (!Number.isFinite(raw)) return DEFAULT_MAX_WIDGET_LINES;\n return Math.min(Math.max(raw, MIN_WIDGET_LINES), MAX_WIDGET_LINES);\n}\n\n/** Maximum number of non-deleted tasks retained on one board. */\nexport function getMaxTasks(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[MAX_TASKS_ENV]);\n return Number.isSafeInteger(raw) && raw > 0 ? raw : DEFAULT_MAX_TASKS;\n}\n\n/** Retention window for inactive session-tree stores. */\nexport function getStoreTtlMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[STORE_TTL_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_STORE_TTL_MS;\n}\n\n/** How long a delegated run may go without reporting a result. */\nexport function getDelegationTimeoutMs(env: NodeJS.ProcessEnv = process.env): number {\n const raw = Number(env[DELEGATION_TIMEOUT_MS_ENV]);\n return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_DELEGATION_TIMEOUT_MS;\n}\n\n/** Collapse shortcut, or the `off` sentinel when the user disabled it. */\nexport function resolveCollapseKey(env: NodeJS.ProcessEnv = process.env): string {\n const configured = env[COLLAPSE_KEY_ENV]?.trim();\n if (!configured) return DEFAULT_COLLAPSE_KEY;\n return configured.toLowerCase() === COLLAPSE_KEY_OFF ? COLLAPSE_KEY_OFF : configured;\n}\n"],"mappings":";;;;;;;;AAQA,MAAa,uBAAuB;AACpC,MAAa,gBAAgB;AAC7B,MAAa,mBAAmB;AAChC,MAAa,mBAAmB;AAChC,MAAa,4BAA4B;AAEzC,MAAa,2BAA2B;AACxC,MAAa,oBAAoB;AACjC,MAAa,uBAAuB;AACpC,MAAa,uBAAuB;;;AAGpC,MAAa,gCAAgC;AAC7C,MAAa,mBAAmB;AAEhC,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AAUzB,SAAS,aAAa,OAAyC;CAC7D,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAAK,QAAoC,CAAC;AACtH;;AAGA,SAAgB,kBAAkB,OAA8B;CAC9D,MAAM,SAAS,aAAa,KAAK;CACjC,MAAM,iBACJ,OAAO,OAAO,mBAAmB,YAAY,OAAO,SAAS,OAAO,cAAc,IAC9E,KAAK,IAAI,KAAK,IAAI,OAAO,gBAAgB,gBAAgB,GAAG,gBAAgB,IAAA;CAElF,MAAM,WACJ,OAAO,OAAO,aAAa,YAAY,OAAO,cAAc,OAAO,QAAQ,KAAK,OAAO,WAAW,IAC9F,OAAO,WAAA;CAEb,MAAM,aACJ,OAAO,OAAO,eAAe,YAAY,OAAO,SAAS,OAAO,UAAU,KAAK,OAAO,aAAa,IAC/F,OAAO,aACP;CACN,MAAM,sBACJ,OAAO,OAAO,wBAAwB,YACtC,OAAO,SAAS,OAAO,mBAAmB,KAC1C,OAAO,sBAAsB,IACzB,OAAO,sBACP;CAQN,OAAO;EAAE;EAAgB;EAAU;EAAY,aAN7C,OAAO,OAAO,gBAAgB,YAAY,OAAO,YAAY,KAAK,IAC9D,OAAO,YAAY,KAAK,CAAC,CAAC,YAAY,MAAA,QAAA,QAEpC,OAAO,YAAY,KAAK,IAC1B;EAEsD;CAAoB;AAClF;;AAGA,SAAgB,kBAAkB,MAAyB,QAAQ,KAAa;CAC9E,MAAM,MAAM,OAAO,SAAS,IAAA,iCAA6B,IAAI,EAAE;CAC/D,IAAI,CAAC,OAAO,SAAS,GAAG,GAAG,OAAA;CAC3B,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK,gBAAgB,GAAG,gBAAgB;AACnE;;AAGA,SAAgB,YAAY,MAAyB,QAAQ,KAAa;CACxE,MAAM,MAAM,OAAO,IAAI,cAAc;CACrC,OAAO,OAAO,cAAc,GAAG,KAAK,MAAM,IAAI,MAAA;AAChD;;AAGA,SAAgB,cAAc,MAAyB,QAAQ,KAAa;CAC1E,MAAM,MAAM,OAAO,IAAI,iBAAiB;CACxC,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM;AACjD;;AAGA,SAAgB,uBAAuB,MAAyB,QAAQ,KAAa;CACnF,MAAM,MAAM,OAAO,IAAI,0BAA0B;CACjD,OAAO,OAAO,SAAS,GAAG,KAAK,MAAM,IAAI,MAAM;AACjD;;AAGA,SAAgB,mBAAmB,MAAyB,QAAQ,KAAa;CAC/E,MAAM,aAAa,IAAI,iBAAiB,EAAE,KAAK;CAC/C,IAAI,CAAC,YAAY,OAAO;CACxB,OAAO,WAAW,YAAY,MAAA,QAAA,QAA4C;AAC5E"}
@@ -0,0 +1,51 @@
1
+ //#region src/services/contextContribution/index.ts
2
+ const TASK_CONTEXT_CONTRIBUTION_SOURCE = "@agimon-ai/doompi-task";
3
+ const TASK_CONTEXT_CONTRIBUTION_ID = "active-tasks";
4
+ const TASK_CONTEXT_CONTRIBUTION_LABEL = "Active tasks";
5
+ function activeTaskSnapshots(tasks) {
6
+ return tasks.filter((task) => task.status === "pending" || task.status === "in_progress" || task.status === "failed").map((task) => ({
7
+ id: task.id,
8
+ status: task.status,
9
+ subject: task.subject,
10
+ ...task.activeForm ? { activeForm: task.activeForm } : {},
11
+ ...task.owner ? { owner: task.owner } : {},
12
+ ...task.blockedBy?.length ? { blockedBy: task.blockedBy } : {},
13
+ ...task.delegation ? { delegation: {
14
+ agent: task.delegation.agent,
15
+ state: task.delegation.state,
16
+ ...task.delegation.result?.error ? { error: task.delegation.result.error } : {}
17
+ } } : {}
18
+ }));
19
+ }
20
+ function formatTaskSnapshots(tasks) {
21
+ if (tasks.length === 0) return "(no active tasks)";
22
+ return tasks.map((task) => {
23
+ const details = [
24
+ task.activeForm ? `active: ${task.activeForm}` : void 0,
25
+ task.owner ? `owner: ${task.owner}` : void 0,
26
+ task.blockedBy?.length ? `blocked by: ${task.blockedBy.join(", ")}` : void 0,
27
+ task.delegation ? `delegation: ${task.delegation.agent} (${task.delegation.state})` : void 0,
28
+ task.delegation?.error ? `error: ${task.delegation.error}` : void 0
29
+ ].filter((value) => Boolean(value));
30
+ return `- #${task.id} [${task.status}] ${task.subject}${details.length > 0 ? ` | ${details.join(" | ")}` : ""}`;
31
+ }).join("\n");
32
+ }
33
+ /** Builds Task's bounded, synchronous contribution from its in-memory store snapshot. */
34
+ function createTaskContextContribution(readTasks) {
35
+ return Object.freeze({
36
+ source: TASK_CONTEXT_CONTRIBUTION_SOURCE,
37
+ id: TASK_CONTEXT_CONTRIBUTION_ID,
38
+ label: TASK_CONTEXT_CONTRIBUTION_LABEL,
39
+ order: 100,
40
+ snapshot: () => formatTaskSnapshots(activeTaskSnapshots(readTasks()))
41
+ });
42
+ }
43
+ //#endregion
44
+ exports.TASK_CONTEXT_CONTRIBUTION_ID = TASK_CONTEXT_CONTRIBUTION_ID;
45
+ exports.TASK_CONTEXT_CONTRIBUTION_LABEL = TASK_CONTEXT_CONTRIBUTION_LABEL;
46
+ exports.TASK_CONTEXT_CONTRIBUTION_SOURCE = TASK_CONTEXT_CONTRIBUTION_SOURCE;
47
+ exports.activeTaskSnapshots = activeTaskSnapshots;
48
+ exports.createTaskContextContribution = createTaskContextContribution;
49
+ exports.formatTaskSnapshots = formatTaskSnapshots;
50
+
51
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/contextContribution/index.ts"],"sourcesContent":["import type { DoomContextContribution } from '@agimon-ai/doompi-core/context-contributions';\n\nimport type { Task } from '../../models/task';\n\nexport const TASK_CONTEXT_CONTRIBUTION_SOURCE = '@agimon-ai/doompi-task';\nexport const TASK_CONTEXT_CONTRIBUTION_ID = 'active-tasks';\nexport const TASK_CONTEXT_CONTRIBUTION_LABEL = 'Active tasks';\nexport const TASK_CONTEXT_CONTRIBUTION_ORDER = 100;\n\ninterface TaskContextSnapshot {\n readonly id: number;\n readonly status: Task['status'];\n readonly subject: string;\n readonly activeForm?: string;\n readonly owner?: string;\n readonly blockedBy?: readonly number[];\n readonly delegation?: {\n readonly agent: string;\n readonly state: NonNullable<Task['delegation']>['state'];\n readonly error?: string;\n };\n}\n\nexport function activeTaskSnapshots(tasks: readonly Task[]): TaskContextSnapshot[] {\n return tasks\n .filter((task) => task.status === 'pending' || task.status === 'in_progress' || task.status === 'failed')\n .map((task) => ({\n id: task.id,\n status: task.status,\n subject: task.subject,\n ...(task.activeForm ? { activeForm: task.activeForm } : {}),\n ...(task.owner ? { owner: task.owner } : {}),\n ...(task.blockedBy?.length ? { blockedBy: task.blockedBy } : {}),\n ...(task.delegation\n ? {\n delegation: {\n agent: task.delegation.agent,\n state: task.delegation.state,\n ...(task.delegation.result?.error ? { error: task.delegation.result.error } : {}),\n },\n }\n : {}),\n }));\n}\n\nexport function formatTaskSnapshots(tasks: readonly TaskContextSnapshot[]): string {\n if (tasks.length === 0) return '(no active tasks)';\n return tasks\n .map((task) => {\n const details = [\n task.activeForm ? `active: ${task.activeForm}` : undefined,\n task.owner ? `owner: ${task.owner}` : undefined,\n task.blockedBy?.length ? `blocked by: ${task.blockedBy.join(', ')}` : undefined,\n task.delegation ? `delegation: ${task.delegation.agent} (${task.delegation.state})` : undefined,\n task.delegation?.error ? `error: ${task.delegation.error}` : undefined,\n ].filter((value): value is string => Boolean(value));\n return `- #${task.id} [${task.status}] ${task.subject}${details.length > 0 ? ` | ${details.join(' | ')}` : ''}`;\n })\n .join('\\n');\n}\n\n/** Builds Task's bounded, synchronous contribution from its in-memory store snapshot. */\nexport function createTaskContextContribution(readTasks: () => readonly Task[]): DoomContextContribution {\n return Object.freeze({\n source: TASK_CONTEXT_CONTRIBUTION_SOURCE,\n id: TASK_CONTEXT_CONTRIBUTION_ID,\n label: TASK_CONTEXT_CONTRIBUTION_LABEL,\n order: TASK_CONTEXT_CONTRIBUTION_ORDER,\n snapshot: () => formatTaskSnapshots(activeTaskSnapshots(readTasks())),\n });\n}\n"],"mappings":";AAIA,MAAa,mCAAmC;AAChD,MAAa,+BAA+B;AAC5C,MAAa,kCAAkC;AAiB/C,SAAgB,oBAAoB,OAA+C;CACjF,OAAO,MACJ,QAAQ,SAAS,KAAK,WAAW,aAAa,KAAK,WAAW,iBAAiB,KAAK,WAAW,QAAQ,CAAC,CACxG,KAAK,UAAU;EACd,IAAI,KAAK;EACT,QAAQ,KAAK;EACb,SAAS,KAAK;EACd,GAAI,KAAK,aAAa,EAAE,YAAY,KAAK,WAAW,IAAI,CAAC;EACzD,GAAI,KAAK,QAAQ,EAAE,OAAO,KAAK,MAAM,IAAI,CAAC;EAC1C,GAAI,KAAK,WAAW,SAAS,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC;EAC9D,GAAI,KAAK,aACL,EACE,YAAY;GACV,OAAO,KAAK,WAAW;GACvB,OAAO,KAAK,WAAW;GACvB,GAAI,KAAK,WAAW,QAAQ,QAAQ,EAAE,OAAO,KAAK,WAAW,OAAO,MAAM,IAAI,CAAC;EACjF,EACF,IACA,CAAC;CACP,EAAE;AACN;AAEA,SAAgB,oBAAoB,OAA+C;CACjF,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,OAAO,MACJ,KAAK,SAAS;EACb,MAAM,UAAU;GACd,KAAK,aAAa,WAAW,KAAK,eAAe,KAAA;GACjD,KAAK,QAAQ,UAAU,KAAK,UAAU,KAAA;GACtC,KAAK,WAAW,SAAS,eAAe,KAAK,UAAU,KAAK,IAAI,MAAM,KAAA;GACtE,KAAK,aAAa,eAAe,KAAK,WAAW,MAAM,IAAI,KAAK,WAAW,MAAM,KAAK,KAAA;GACtF,KAAK,YAAY,QAAQ,UAAU,KAAK,WAAW,UAAU,KAAA;EAC/D,CAAC,CAAC,QAAQ,UAA2B,QAAQ,KAAK,CAAC;EACnD,OAAO,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,IAAI,KAAK,UAAU,QAAQ,SAAS,IAAI,MAAM,QAAQ,KAAK,KAAK,MAAM;CAC7G,CAAC,CAAC,CACD,KAAK,IAAI;AACd;;AAGA,SAAgB,8BAA8B,WAA2D;CACvG,OAAO,OAAO,OAAO;EACnB,QAAQ;EACR,IAAI;EACJ,OAAO;EACP,OAAA;EACA,gBAAgB,oBAAoB,oBAAoB,UAAU,CAAC,CAAC;CACtE,CAAC;AACH"}