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

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 (576) hide show
  1. package/README.md +123 -15
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -1
  3. package/dist/api-contracts.cjs +7 -0
  4. package/dist/api-contracts.d.cts +2 -0
  5. package/dist/api-contracts.d.mts +2 -0
  6. package/dist/api-contracts.mjs +2 -0
  7. package/dist/commands.cjs +4 -2
  8. package/dist/commands.d.cts +2 -14
  9. package/dist/commands.d.mts +2 -14
  10. package/dist/commands.mjs +2 -2
  11. package/dist/config.cjs +19 -2
  12. package/dist/config.d.cts +2 -38
  13. package/dist/config.d.mts +2 -38
  14. package/dist/config.mjs +2 -2
  15. package/dist/delegation-manager.cjs +10 -0
  16. package/dist/delegation-manager.d.cts +3 -0
  17. package/dist/delegation-manager.d.mts +3 -0
  18. package/dist/delegation-manager.mjs +3 -0
  19. package/dist/extensions/mcp.cjs +1866 -0
  20. package/dist/extensions/mcp.cjs.map +1 -0
  21. package/dist/extensions/mcp.d.cts +5 -0
  22. package/dist/extensions/mcp.d.cts.map +1 -0
  23. package/dist/extensions/mcp.d.mts +5 -0
  24. package/dist/extensions/mcp.d.mts.map +1 -0
  25. package/dist/extensions/mcp.mjs +1836 -0
  26. package/dist/extensions/mcp.mjs.map +1 -0
  27. package/dist/extensions/pi.cjs +49 -1
  28. package/dist/extensions/pi.cjs.map +1 -1
  29. package/dist/extensions/pi.d.cts +5 -2
  30. package/dist/extensions/pi.d.cts.map +1 -0
  31. package/dist/extensions/pi.d.mts +5 -2
  32. package/dist/extensions/pi.d.mts.map +1 -0
  33. package/dist/extensions/pi.mjs +44 -1
  34. package/dist/extensions/pi.mjs.map +1 -1
  35. package/dist/extensions/server.cjs +57 -0
  36. package/dist/extensions/server.cjs.map +1 -0
  37. package/dist/extensions/server.d.cts +5 -0
  38. package/dist/extensions/server.d.cts.map +1 -0
  39. package/dist/extensions/server.d.mts +5 -0
  40. package/dist/extensions/server.d.mts.map +1 -0
  41. package/dist/extensions/server.mjs +52 -0
  42. package/dist/extensions/server.mjs.map +1 -0
  43. package/dist/extensions/web.mjs +1013 -0
  44. package/dist/extensions/web.mjs.map +1 -0
  45. package/dist/index.cjs +106 -1
  46. package/dist/index.d.cts +16 -15
  47. package/dist/index.d.mts +16 -15
  48. package/dist/index.mjs +16 -1
  49. package/dist/logSinkTelemetry.cjs +6 -2
  50. package/dist/logSinkTelemetry.d.cts +3 -51
  51. package/dist/logSinkTelemetry.d.mts +3 -51
  52. package/dist/logSinkTelemetry.mjs +3 -2
  53. package/dist/src/constants/promptGuidelines.cjs +26 -0
  54. package/dist/src/constants/promptGuidelines.cjs.map +1 -0
  55. package/dist/src/constants/promptGuidelines.d.cts +13 -0
  56. package/dist/src/constants/promptGuidelines.d.cts.map +1 -0
  57. package/dist/src/constants/promptGuidelines.d.mts +13 -0
  58. package/dist/src/constants/promptGuidelines.d.mts.map +1 -0
  59. package/dist/src/constants/promptGuidelines.mjs +26 -0
  60. package/dist/src/constants/promptGuidelines.mjs.map +1 -0
  61. package/dist/src/constants/task.cjs +6 -0
  62. package/dist/src/constants/task.cjs.map +1 -0
  63. package/dist/src/constants/task.d.cts +4 -0
  64. package/dist/src/constants/task.d.cts.map +1 -0
  65. package/dist/src/constants/task.d.mts +4 -0
  66. package/dist/src/constants/task.d.mts.map +1 -0
  67. package/dist/src/constants/task.mjs +6 -0
  68. package/dist/src/constants/task.mjs.map +1 -0
  69. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs +90 -0
  70. package/dist/src/extensions/(backend)/channel/_lib/task-graph.cjs.map +1 -0
  71. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs +89 -0
  72. package/dist/src/extensions/(backend)/channel/_lib/task-graph.mjs.map +1 -0
  73. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs +7 -0
  74. package/dist/src/extensions/(backend)/channel/task-graph.server.cjs.map +1 -0
  75. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs +8 -0
  76. package/dist/src/extensions/(backend)/channel/task-graph.server.mjs.map +1 -0
  77. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs +317 -0
  78. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.cjs.map +1 -0
  79. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts +39 -0
  80. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.cts.map +1 -0
  81. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts +39 -0
  82. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.d.mts.map +1 -0
  83. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs +317 -0
  84. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.cli.mjs.map +1 -0
  85. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs +95 -0
  86. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.cjs.map +1 -0
  87. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs +95 -0
  88. package/dist/src/extensions/workspaces/sessions/(backend)/_lib/root.server.mjs.map +1 -0
  89. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs +30 -0
  90. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.cjs.map +1 -0
  91. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts +20 -0
  92. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.cts.map +1 -0
  93. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts +20 -0
  94. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.d.mts.map +1 -0
  95. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs +29 -0
  96. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.cli.mjs.map +1 -0
  97. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs +19 -0
  98. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.cjs.map +1 -0
  99. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs +19 -0
  100. package/dist/src/extensions/workspaces/sessions/(backend)/command/_lib/tasks.server.mjs.map +1 -0
  101. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs +8 -0
  102. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.cjs.map +1 -0
  103. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs +9 -0
  104. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.cli.mjs.map +1 -0
  105. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs +7 -0
  106. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.cjs.map +1 -0
  107. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs +8 -0
  108. package/dist/src/extensions/workspaces/sessions/(backend)/command/tasks.server.mjs.map +1 -0
  109. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs +6 -0
  110. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.cjs.map +1 -0
  111. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs +6 -0
  112. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-compact.cli.mjs.map +1 -0
  113. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs +6 -0
  114. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.cjs.map +1 -0
  115. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs +6 -0
  116. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-start.cli.mjs.map +1 -0
  117. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs +6 -0
  118. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.cjs.map +1 -0
  119. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs +6 -0
  120. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/session-tree.cli.mjs.map +1 -0
  121. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs +6 -0
  122. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.cjs.map +1 -0
  123. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs +6 -0
  124. package/dist/src/extensions/workspaces/sessions/(backend)/hook/_lib/tool-execution-end.cli.mjs.map +1 -0
  125. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs +7 -0
  126. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.cjs.map +1 -0
  127. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs +8 -0
  128. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-compact.cli.mjs.map +1 -0
  129. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +7 -0
  130. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +1 -0
  131. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +8 -0
  132. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +1 -0
  133. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs +7 -0
  134. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.cjs.map +1 -0
  135. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs +8 -0
  136. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-tree.cli.mjs.map +1 -0
  137. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs +7 -0
  138. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.cjs.map +1 -0
  139. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs +8 -0
  140. package/dist/src/extensions/workspaces/sessions/(backend)/hook/tool-execution-end.cli.mjs.map +1 -0
  141. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs +20 -0
  142. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.cjs.map +1 -0
  143. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs +20 -0
  144. package/dist/src/extensions/workspaces/sessions/(backend)/resource/_lib/task-board.server.mjs.map +1 -0
  145. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs +7 -0
  146. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.cjs.map +1 -0
  147. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs +8 -0
  148. package/dist/src/extensions/workspaces/sessions/(backend)/resource/task-board.server.mjs.map +1 -0
  149. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +11 -0
  150. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
  151. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +12 -0
  152. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
  153. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +7 -0
  154. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
  155. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +8 -0
  156. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
  157. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs +160 -0
  158. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.cjs.map +1 -0
  159. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts +25 -0
  160. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.cts.map +1 -0
  161. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts +25 -0
  162. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.d.mts.map +1 -0
  163. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs +157 -0
  164. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.cli.mjs.map +1 -0
  165. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs +7 -0
  166. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.cjs.map +1 -0
  167. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs +8 -0
  168. package/dist/src/extensions/workspaces/sessions/(backend)/tool/_lib/task.server.mjs.map +1 -0
  169. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs +7 -0
  170. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.cjs.map +1 -0
  171. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs +8 -0
  172. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.cli.mjs.map +1 -0
  173. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs +7 -0
  174. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.cjs.map +1 -0
  175. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs +8 -0
  176. package/dist/src/extensions/workspaces/sessions/(backend)/tool/task.server.mjs.map +1 -0
  177. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs +333 -0
  178. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.cjs.map +1 -0
  179. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts +61 -0
  180. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.cts.map +1 -0
  181. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts +61 -0
  182. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.d.mts.map +1 -0
  183. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs +322 -0
  184. package/dist/src/extensions/workspaces/sessions/(frontend)/_shared/format.cli.mjs.map +1 -0
  185. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs +9 -0
  186. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.cjs.map +1 -0
  187. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs +9 -0
  188. package/dist/src/extensions/workspaces/sessions/(frontend)/message/doom-task-notify.cli.mjs.map +1 -0
  189. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs +149 -0
  190. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.cjs.map +1 -0
  191. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts +59 -0
  192. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.cts.map +1 -0
  193. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts +59 -0
  194. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.d.mts.map +1 -0
  195. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs +142 -0
  196. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/selectors.mjs.map +1 -0
  197. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs +358 -0
  198. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.cjs.map +1 -0
  199. package/dist/{tui/taskSpace.d.cts → src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts} +12 -12
  200. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.cts.map +1 -0
  201. package/dist/{tui/taskSpace.d.mts → src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts} +12 -12
  202. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.d.mts.map +1 -0
  203. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs +355 -0
  204. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/task-space.cli.mjs.map +1 -0
  205. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs +165 -0
  206. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.cjs.map +1 -0
  207. package/dist/{tui → src/extensions/workspaces/sessions/(frontend)/overlay/_lib}/taskOverlay.d.cts +8 -7
  208. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.cts.map +1 -0
  209. package/dist/{tui → src/extensions/workspaces/sessions/(frontend)/overlay/_lib}/taskOverlay.d.mts +8 -7
  210. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.d.mts.map +1 -0
  211. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs +164 -0
  212. package/dist/src/extensions/workspaces/sessions/(frontend)/overlay/_lib/taskOverlay.mjs.map +1 -0
  213. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs +13 -0
  214. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.cjs.map +1 -0
  215. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs +13 -0
  216. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/_lib/task.cli.mjs.map +1 -0
  217. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs +7 -0
  218. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.cjs.map +1 -0
  219. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs +8 -0
  220. package/dist/src/extensions/workspaces/sessions/(frontend)/tool/task.cli.mjs.map +1 -0
  221. package/dist/src/models/task.cjs +29 -0
  222. package/dist/src/models/task.cjs.map +1 -0
  223. package/dist/{store/types.d.cts → src/models/task.d.cts} +52 -31
  224. package/dist/src/models/task.d.cts.map +1 -0
  225. package/dist/{store/types.d.mts → src/models/task.d.mts} +52 -31
  226. package/dist/src/models/task.d.mts.map +1 -0
  227. package/dist/src/models/task.mjs +26 -0
  228. package/dist/src/models/task.mjs.map +1 -0
  229. package/dist/src/models/taskGraph.cjs +67 -0
  230. package/dist/{store → src/models}/taskGraph.cjs.map +1 -1
  231. package/dist/{store → src/models}/taskGraph.d.cts +7 -8
  232. package/dist/src/models/taskGraph.d.cts.map +1 -0
  233. package/dist/{store → src/models}/taskGraph.d.mts +7 -8
  234. package/dist/src/models/taskGraph.d.mts.map +1 -0
  235. package/dist/src/models/taskGraph.mjs +63 -0
  236. package/dist/{store → src/models}/taskGraph.mjs.map +1 -1
  237. package/dist/src/schemas/apiContracts.cjs +51 -0
  238. package/dist/src/schemas/apiContracts.cjs.map +1 -0
  239. package/dist/src/schemas/apiContracts.d.cts +53 -0
  240. package/dist/src/schemas/apiContracts.d.cts.map +1 -0
  241. package/dist/src/schemas/apiContracts.d.mts +53 -0
  242. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  243. package/dist/src/schemas/apiContracts.mjs +49 -0
  244. package/dist/src/schemas/apiContracts.mjs.map +1 -0
  245. package/dist/src/schemas/task.cjs +130 -0
  246. package/dist/src/schemas/task.cjs.map +1 -0
  247. package/dist/{tool/schema.d.cts → src/schemas/task.d.cts} +46 -29
  248. package/dist/src/schemas/task.d.cts.map +1 -0
  249. package/dist/{tool/schema.d.mts → src/schemas/task.d.mts} +46 -29
  250. package/dist/src/schemas/task.d.mts.map +1 -0
  251. package/dist/src/schemas/task.mjs +117 -0
  252. package/dist/src/schemas/task.mjs.map +1 -0
  253. package/dist/src/services/config/index.cjs +88 -0
  254. package/dist/src/services/config/index.cjs.map +1 -0
  255. package/dist/src/services/config/index.d.cts +42 -0
  256. package/dist/src/services/config/index.d.cts.map +1 -0
  257. package/dist/src/services/config/index.d.mts +42 -0
  258. package/dist/src/services/config/index.d.mts.map +1 -0
  259. package/dist/src/services/config/index.mjs +72 -0
  260. package/dist/src/services/config/index.mjs.map +1 -0
  261. package/dist/src/services/contextContribution/index.cjs +51 -0
  262. package/dist/src/services/contextContribution/index.cjs.map +1 -0
  263. package/dist/src/services/contextContribution/index.mjs +46 -0
  264. package/dist/src/services/contextContribution/index.mjs.map +1 -0
  265. package/dist/src/services/delegation/index.cjs +629 -0
  266. package/dist/src/services/delegation/index.cjs.map +1 -0
  267. package/dist/{delegation/manager.d.cts → src/services/delegation/index.d.cts} +52 -49
  268. package/dist/src/services/delegation/index.d.cts.map +1 -0
  269. package/dist/{delegation/manager.d.mts → src/services/delegation/index.d.mts} +52 -49
  270. package/dist/src/services/delegation/index.d.mts.map +1 -0
  271. package/dist/src/services/delegation/index.mjs +623 -0
  272. package/dist/src/services/delegation/index.mjs.map +1 -0
  273. package/dist/src/services/delegationPlatform/index.cjs +23 -0
  274. package/dist/src/services/delegationPlatform/index.cjs.map +1 -0
  275. package/dist/src/services/delegationPlatform/index.mjs +21 -0
  276. package/dist/src/services/delegationPlatform/index.mjs.map +1 -0
  277. package/dist/src/services/invariants/index.cjs +64 -0
  278. package/dist/src/services/invariants/index.cjs.map +1 -0
  279. package/dist/src/services/invariants/index.d.cts +23 -0
  280. package/dist/src/services/invariants/index.d.cts.map +1 -0
  281. package/dist/src/services/invariants/index.d.mts +23 -0
  282. package/dist/src/services/invariants/index.d.mts.map +1 -0
  283. package/dist/src/services/invariants/index.mjs +62 -0
  284. package/dist/src/services/invariants/index.mjs.map +1 -0
  285. package/dist/src/services/logSinkTelemetry/index.cjs +43 -0
  286. package/dist/src/services/logSinkTelemetry/index.cjs.map +1 -0
  287. package/dist/src/services/logSinkTelemetry/index.d.cts +23 -0
  288. package/dist/src/services/logSinkTelemetry/index.d.cts.map +1 -0
  289. package/dist/src/services/logSinkTelemetry/index.d.mts +23 -0
  290. package/dist/src/services/logSinkTelemetry/index.d.mts.map +1 -0
  291. package/dist/src/services/logSinkTelemetry/index.mjs +41 -0
  292. package/dist/src/services/logSinkTelemetry/index.mjs.map +1 -0
  293. package/dist/src/services/paths/index.cjs +233 -0
  294. package/dist/src/services/paths/index.cjs.map +1 -0
  295. package/dist/src/services/paths/index.d.cts +25 -0
  296. package/dist/src/services/paths/index.d.cts.map +1 -0
  297. package/dist/src/services/paths/index.d.mts +25 -0
  298. package/dist/src/services/paths/index.d.mts.map +1 -0
  299. package/dist/src/services/paths/index.mjs +218 -0
  300. package/dist/src/services/paths/index.mjs.map +1 -0
  301. package/dist/src/services/processLiveness/index.cjs +20 -0
  302. package/dist/src/services/processLiveness/index.cjs.map +1 -0
  303. package/dist/{store/processLiveness.d.cts → src/services/processLiveness/index.d.cts} +3 -4
  304. package/dist/src/services/processLiveness/index.d.cts.map +1 -0
  305. package/dist/{store/processLiveness.d.mts → src/services/processLiveness/index.d.mts} +3 -4
  306. package/dist/src/services/processLiveness/index.d.mts.map +1 -0
  307. package/dist/src/services/processLiveness/index.mjs +20 -0
  308. package/dist/src/services/processLiveness/index.mjs.map +1 -0
  309. package/dist/src/services/reconcile/index.cjs +65 -0
  310. package/dist/src/services/reconcile/index.cjs.map +1 -0
  311. package/dist/{store/reconcile.d.cts → src/services/reconcile/index.d.cts} +8 -9
  312. package/dist/src/services/reconcile/index.d.cts.map +1 -0
  313. package/dist/{store/reconcile.d.mts → src/services/reconcile/index.d.mts} +8 -9
  314. package/dist/src/services/reconcile/index.d.mts.map +1 -0
  315. package/dist/src/services/reconcile/index.mjs +63 -0
  316. package/dist/src/services/reconcile/index.mjs.map +1 -0
  317. package/dist/src/services/reducer/index.cjs +350 -0
  318. package/dist/src/services/reducer/index.cjs.map +1 -0
  319. package/dist/{store/reducer.d.cts → src/services/reducer/index.d.cts} +12 -13
  320. package/dist/src/services/reducer/index.d.cts.map +1 -0
  321. package/dist/{store/reducer.d.mts → src/services/reducer/index.d.mts} +12 -13
  322. package/dist/src/services/reducer/index.d.mts.map +1 -0
  323. package/dist/src/services/reducer/index.mjs +345 -0
  324. package/dist/src/services/reducer/index.mjs.map +1 -0
  325. package/dist/src/services/taskNarration/index.cjs +32 -0
  326. package/dist/src/services/taskNarration/index.cjs.map +1 -0
  327. package/dist/src/services/taskNarration/index.mjs +32 -0
  328. package/dist/src/services/taskNarration/index.mjs.map +1 -0
  329. package/dist/src/services/taskResult/index.cjs +174 -0
  330. package/dist/src/services/taskResult/index.cjs.map +1 -0
  331. package/dist/src/services/taskResult/index.d.cts +50 -0
  332. package/dist/src/services/taskResult/index.d.cts.map +1 -0
  333. package/dist/src/services/taskResult/index.d.mts +50 -0
  334. package/dist/src/services/taskResult/index.d.mts.map +1 -0
  335. package/dist/src/services/taskResult/index.mjs +165 -0
  336. package/dist/src/services/taskResult/index.mjs.map +1 -0
  337. package/dist/src/services/taskStore/index.cjs +216 -0
  338. package/dist/src/services/taskStore/index.cjs.map +1 -0
  339. package/dist/{store/taskStore.d.cts → src/services/taskStore/index.d.cts} +17 -25
  340. package/dist/src/services/taskStore/index.d.cts.map +1 -0
  341. package/dist/{store/taskStore.d.mts → src/services/taskStore/index.d.mts} +17 -25
  342. package/dist/src/services/taskStore/index.d.mts.map +1 -0
  343. package/dist/src/services/taskStore/index.mjs +213 -0
  344. package/dist/src/services/taskStore/index.mjs.map +1 -0
  345. package/dist/src/services/taskTool/index.cjs +106 -0
  346. package/dist/src/services/taskTool/index.cjs.map +1 -0
  347. package/dist/src/services/taskTool/index.mjs +105 -0
  348. package/dist/src/services/taskTool/index.mjs.map +1 -0
  349. package/dist/src/types/delegation.cjs +7 -0
  350. package/dist/src/types/delegation.cjs.map +1 -0
  351. package/dist/src/types/delegation.d.cts +5 -0
  352. package/dist/src/types/delegation.d.cts.map +1 -0
  353. package/dist/src/types/delegation.d.mts +5 -0
  354. package/dist/src/types/delegation.d.mts.map +1 -0
  355. package/dist/src/types/delegation.mjs +7 -0
  356. package/dist/src/types/delegation.mjs.map +1 -0
  357. package/dist/src/types/telemetry.cjs +26 -0
  358. package/dist/src/types/telemetry.cjs.map +1 -0
  359. package/dist/src/types/telemetry.d.cts +35 -0
  360. package/dist/src/types/telemetry.d.cts.map +1 -0
  361. package/dist/src/types/telemetry.d.mts +35 -0
  362. package/dist/src/types/telemetry.d.mts.map +1 -0
  363. package/dist/src/types/telemetry.mjs +26 -0
  364. package/dist/src/types/telemetry.mjs.map +1 -0
  365. package/dist/src/types/webTasks.cjs +7 -0
  366. package/dist/src/types/webTasks.cjs.map +1 -0
  367. package/dist/src/types/webTasks.mjs +7 -0
  368. package/dist/src/types/webTasks.mjs.map +1 -0
  369. package/dist/store-invariants.cjs +5 -0
  370. package/dist/store-invariants.d.cts +2 -0
  371. package/dist/store-invariants.d.mts +2 -0
  372. package/dist/store-invariants.mjs +2 -0
  373. package/dist/store-paths.cjs +14 -0
  374. package/dist/store-paths.d.cts +2 -0
  375. package/dist/store-paths.d.mts +2 -0
  376. package/dist/store-paths.mjs +2 -0
  377. package/dist/store-process-liveness.cjs +3 -0
  378. package/dist/store-process-liveness.d.cts +2 -0
  379. package/dist/store-process-liveness.d.mts +2 -0
  380. package/dist/store-process-liveness.mjs +2 -0
  381. package/dist/store-reconcile.cjs +5 -0
  382. package/dist/store-reconcile.d.cts +2 -0
  383. package/dist/store-reconcile.d.mts +2 -0
  384. package/dist/store-reconcile.mjs +2 -0
  385. package/dist/store-reducer.cjs +8 -0
  386. package/dist/store-reducer.d.cts +2 -0
  387. package/dist/store-reducer.d.mts +2 -0
  388. package/dist/store-reducer.mjs +2 -0
  389. package/dist/store-task-graph.cjs +7 -0
  390. package/dist/store-task-graph.d.cts +2 -0
  391. package/dist/store-task-graph.d.mts +2 -0
  392. package/dist/store-task-graph.mjs +2 -0
  393. package/dist/store-task-store.cjs +3 -0
  394. package/dist/store-task-store.d.cts +2 -0
  395. package/dist/store-task-store.d.mts +2 -0
  396. package/dist/store-task-store.mjs +2 -0
  397. package/dist/store-types.cjs +6 -0
  398. package/dist/store-types.d.cts +2 -0
  399. package/dist/store-types.d.mts +2 -0
  400. package/dist/store-types.mjs +2 -0
  401. package/dist/tool-prompt-guidelines.cjs +3 -0
  402. package/dist/tool-prompt-guidelines.d.cts +2 -0
  403. package/dist/tool-prompt-guidelines.d.mts +2 -0
  404. package/dist/tool-prompt-guidelines.mjs +2 -0
  405. package/dist/tool-response-envelope.cjs +12 -0
  406. package/dist/tool-response-envelope.d.cts +2 -0
  407. package/dist/tool-response-envelope.d.mts +2 -0
  408. package/dist/tool-response-envelope.mjs +2 -0
  409. package/dist/tool-schema.cjs +17 -0
  410. package/dist/tool-schema.d.cts +3 -0
  411. package/dist/tool-schema.d.mts +3 -0
  412. package/dist/tool-schema.mjs +3 -0
  413. package/dist/tool-task-tool.cjs +6 -0
  414. package/dist/tool-task-tool.d.cts +3 -0
  415. package/dist/tool-task-tool.d.mts +3 -0
  416. package/dist/tool-task-tool.mjs +3 -0
  417. package/dist/tui-format.cjs +14 -0
  418. package/dist/tui-format.d.cts +2 -0
  419. package/dist/tui-format.d.mts +2 -0
  420. package/dist/tui-format.mjs +2 -0
  421. package/dist/tui-selectors.cjs +10 -0
  422. package/dist/tui-selectors.d.cts +2 -0
  423. package/dist/tui-selectors.d.mts +2 -0
  424. package/dist/tui-selectors.mjs +2 -0
  425. package/dist/tui-task-overlay.cjs +4 -0
  426. package/dist/tui-task-overlay.d.cts +2 -0
  427. package/dist/tui-task-overlay.d.mts +2 -0
  428. package/dist/tui-task-overlay.mjs +2 -0
  429. package/dist/tui-task-space.cjs +5 -0
  430. package/dist/tui-task-space.d.cts +2 -0
  431. package/dist/tui-task-space.d.mts +2 -0
  432. package/dist/tui-task-space.mjs +2 -0
  433. package/package.json +167 -109
  434. package/src/types/webTasks.ts +24 -0
  435. package/dist/commands.cjs.map +0 -1
  436. package/dist/commands.d.cts.map +0 -1
  437. package/dist/commands.d.mts.map +0 -1
  438. package/dist/commands.mjs.map +0 -1
  439. package/dist/config.cjs.map +0 -1
  440. package/dist/config.d.cts.map +0 -1
  441. package/dist/config.d.mts.map +0 -1
  442. package/dist/config.mjs.map +0 -1
  443. package/dist/delegation/manager.cjs +0 -6
  444. package/dist/delegation/manager.cjs.map +0 -1
  445. package/dist/delegation/manager.d.cts.map +0 -1
  446. package/dist/delegation/manager.d.mts.map +0 -1
  447. package/dist/delegation/manager.mjs +0 -6
  448. package/dist/delegation/manager.mjs.map +0 -1
  449. package/dist/extension.cjs +0 -3
  450. package/dist/extension.cjs.map +0 -1
  451. package/dist/extension.d.cts +0 -12
  452. package/dist/extension.d.cts.map +0 -1
  453. package/dist/extension.d.mts +0 -12
  454. package/dist/extension.d.mts.map +0 -1
  455. package/dist/extension.mjs +0 -3
  456. package/dist/extension.mjs.map +0 -1
  457. package/dist/extensions/doom.cjs +0 -2
  458. package/dist/extensions/doom.cjs.map +0 -1
  459. package/dist/extensions/doom.d.cts +0 -6
  460. package/dist/extensions/doom.d.cts.map +0 -1
  461. package/dist/extensions/doom.d.mts +0 -7
  462. package/dist/extensions/doom.d.mts.map +0 -1
  463. package/dist/extensions/doom.mjs +0 -2
  464. package/dist/extensions/doom.mjs.map +0 -1
  465. package/dist/logSinkTelemetry.cjs.map +0 -1
  466. package/dist/logSinkTelemetry.d.cts.map +0 -1
  467. package/dist/logSinkTelemetry.d.mts.map +0 -1
  468. package/dist/logSinkTelemetry.mjs.map +0 -1
  469. package/dist/store/invariants.cjs +0 -2
  470. package/dist/store/invariants.cjs.map +0 -1
  471. package/dist/store/invariants.d.cts +0 -14
  472. package/dist/store/invariants.d.cts.map +0 -1
  473. package/dist/store/invariants.d.mts +0 -14
  474. package/dist/store/invariants.d.mts.map +0 -1
  475. package/dist/store/invariants.mjs +0 -2
  476. package/dist/store/invariants.mjs.map +0 -1
  477. package/dist/store/paths.cjs +0 -2
  478. package/dist/store/paths.cjs.map +0 -1
  479. package/dist/store/paths.d.cts +0 -23
  480. package/dist/store/paths.d.cts.map +0 -1
  481. package/dist/store/paths.d.mts +0 -23
  482. package/dist/store/paths.d.mts.map +0 -1
  483. package/dist/store/paths.mjs +0 -2
  484. package/dist/store/paths.mjs.map +0 -1
  485. package/dist/store/processLiveness.cjs +0 -2
  486. package/dist/store/processLiveness.cjs.map +0 -1
  487. package/dist/store/processLiveness.d.cts.map +0 -1
  488. package/dist/store/processLiveness.d.mts.map +0 -1
  489. package/dist/store/processLiveness.mjs +0 -2
  490. package/dist/store/processLiveness.mjs.map +0 -1
  491. package/dist/store/reconcile.cjs +0 -2
  492. package/dist/store/reconcile.cjs.map +0 -1
  493. package/dist/store/reconcile.d.cts.map +0 -1
  494. package/dist/store/reconcile.d.mts.map +0 -1
  495. package/dist/store/reconcile.mjs +0 -2
  496. package/dist/store/reconcile.mjs.map +0 -1
  497. package/dist/store/reducer.cjs +0 -3
  498. package/dist/store/reducer.cjs.map +0 -1
  499. package/dist/store/reducer.d.cts.map +0 -1
  500. package/dist/store/reducer.d.mts.map +0 -1
  501. package/dist/store/reducer.mjs +0 -3
  502. package/dist/store/reducer.mjs.map +0 -1
  503. package/dist/store/taskGraph.cjs +0 -2
  504. package/dist/store/taskGraph.d.cts.map +0 -1
  505. package/dist/store/taskGraph.d.mts.map +0 -1
  506. package/dist/store/taskGraph.mjs +0 -2
  507. package/dist/store/taskStore.cjs +0 -2
  508. package/dist/store/taskStore.cjs.map +0 -1
  509. package/dist/store/taskStore.d.cts.map +0 -1
  510. package/dist/store/taskStore.d.mts.map +0 -1
  511. package/dist/store/taskStore.mjs +0 -2
  512. package/dist/store/taskStore.mjs.map +0 -1
  513. package/dist/store/types.cjs +0 -2
  514. package/dist/store/types.cjs.map +0 -1
  515. package/dist/store/types.d.cts.map +0 -1
  516. package/dist/store/types.d.mts.map +0 -1
  517. package/dist/store/types.mjs +0 -2
  518. package/dist/store/types.mjs.map +0 -1
  519. package/dist/tool/promptGuidelines.cjs +0 -2
  520. package/dist/tool/promptGuidelines.cjs.map +0 -1
  521. package/dist/tool/promptGuidelines.d.cts +0 -5
  522. package/dist/tool/promptGuidelines.d.cts.map +0 -1
  523. package/dist/tool/promptGuidelines.d.mts +0 -5
  524. package/dist/tool/promptGuidelines.d.mts.map +0 -1
  525. package/dist/tool/promptGuidelines.mjs +0 -2
  526. package/dist/tool/promptGuidelines.mjs.map +0 -1
  527. package/dist/tool/responseEnvelope.cjs +0 -6
  528. package/dist/tool/responseEnvelope.cjs.map +0 -1
  529. package/dist/tool/responseEnvelope.d.cts +0 -39
  530. package/dist/tool/responseEnvelope.d.cts.map +0 -1
  531. package/dist/tool/responseEnvelope.d.mts +0 -39
  532. package/dist/tool/responseEnvelope.d.mts.map +0 -1
  533. package/dist/tool/responseEnvelope.mjs +0 -6
  534. package/dist/tool/responseEnvelope.mjs.map +0 -1
  535. package/dist/tool/schema.cjs +0 -2
  536. package/dist/tool/schema.cjs.map +0 -1
  537. package/dist/tool/schema.d.cts.map +0 -1
  538. package/dist/tool/schema.d.mts.map +0 -1
  539. package/dist/tool/schema.mjs +0 -2
  540. package/dist/tool/schema.mjs.map +0 -1
  541. package/dist/tool/taskTool.cjs +0 -3
  542. package/dist/tool/taskTool.cjs.map +0 -1
  543. package/dist/tool/taskTool.d.cts +0 -17
  544. package/dist/tool/taskTool.d.cts.map +0 -1
  545. package/dist/tool/taskTool.d.mts +0 -17
  546. package/dist/tool/taskTool.d.mts.map +0 -1
  547. package/dist/tool/taskTool.mjs +0 -3
  548. package/dist/tool/taskTool.mjs.map +0 -1
  549. package/dist/tui/format.cjs +0 -4
  550. package/dist/tui/format.cjs.map +0 -1
  551. package/dist/tui/format.d.cts +0 -62
  552. package/dist/tui/format.d.cts.map +0 -1
  553. package/dist/tui/format.d.mts +0 -62
  554. package/dist/tui/format.d.mts.map +0 -1
  555. package/dist/tui/format.mjs +0 -4
  556. package/dist/tui/format.mjs.map +0 -1
  557. package/dist/tui/selectors.cjs +0 -2
  558. package/dist/tui/selectors.cjs.map +0 -1
  559. package/dist/tui/selectors.d.cts +0 -53
  560. package/dist/tui/selectors.d.cts.map +0 -1
  561. package/dist/tui/selectors.d.mts +0 -53
  562. package/dist/tui/selectors.d.mts.map +0 -1
  563. package/dist/tui/selectors.mjs +0 -2
  564. package/dist/tui/selectors.mjs.map +0 -1
  565. package/dist/tui/taskOverlay.cjs +0 -2
  566. package/dist/tui/taskOverlay.cjs.map +0 -1
  567. package/dist/tui/taskOverlay.d.cts.map +0 -1
  568. package/dist/tui/taskOverlay.d.mts.map +0 -1
  569. package/dist/tui/taskOverlay.mjs +0 -2
  570. package/dist/tui/taskOverlay.mjs.map +0 -1
  571. package/dist/tui/taskSpace.cjs +0 -5
  572. package/dist/tui/taskSpace.cjs.map +0 -1
  573. package/dist/tui/taskSpace.d.cts.map +0 -1
  574. package/dist/tui/taskSpace.d.mts.map +0 -1
  575. package/dist/tui/taskSpace.mjs +0 -5
  576. package/dist/tui/taskSpace.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/taskStore/index.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { emptyDocument, STORE_SCHEMA_VERSION, type Task, type TaskDocument } from '../../models/task';\nimport { TASK_EVENT, type TaskFailureReporter } from '../../types/telemetry';\nimport { canonicalizeTasks } from '../invariants';\nimport { lockPathFor, resolveStorePath, STORE_PATH_ENV, tempPathFor } from '../paths';\nimport { isProcessAlive } from '../processLiveness';\n\nconst LOCK_TIMEOUT_MS = 2000;\nconst LOCK_STALE_MS = 10_000;\nconst LOCK_RETRY_BASE_MS = 10;\nconst LOCK_RETRY_MAX_MS = 60;\nconst UTF8_ENCODING = 'utf8';\nconst MISSING_FILE_CODE = 'ENOENT';\nconst LOCK_EXISTS_CODE = 'EEXIST';\nconst STORE_PATH_ATTRIBUTE = 'store.path';\n\nexport type TaskStoreCommitListener = (previous: TaskDocument, committed: TaskDocument) => void;\n\nexport interface TaskStoreOptions {\n cwd?: string;\n env?: Readonly<Record<string, string | undefined>>;\n storePath?: string;\n onCommitted?: TaskStoreCommitListener;\n /** How long to wait for the advisory lock before proceeding lock-free. */\n lockTimeoutMs?: number;\n /** Where swallowed failures go, so silent degradation stays visible. */\n report?: TaskFailureReporter;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Coerce arbitrary parsed JSON into a valid document.\n *\n * A corrupt or truncated store must not take the session down: the worst\n * acceptable outcome is starting from an empty list, never a crash on startup.\n */\nfunction normalizeDocument(parsed: unknown): TaskDocument {\n if (!parsed || typeof parsed !== 'object') return emptyDocument();\n const candidate = parsed as Partial<TaskDocument>;\n if (!Array.isArray(candidate.tasks)) return emptyDocument();\n\n const tasks = canonicalizeTasks(\n candidate.tasks.filter(\n (task): task is Task => Boolean(task) && typeof task === 'object' && typeof (task as Task).id === 'number',\n ),\n );\n const maxId = tasks.reduce((max, task) => Math.max(max, task.id), 0);\n return {\n version: typeof candidate.version === 'number' ? candidate.version : STORE_SCHEMA_VERSION,\n rev: typeof candidate.rev === 'number' ? candidate.rev : 0,\n nextId: typeof candidate.nextId === 'number' && candidate.nextId > maxId ? candidate.nextId : maxId + 1,\n tasks,\n };\n}\n\n/**\n * File-backed task store shared by one root session and its delegated children.\n *\n * Durability model: the JSON file is the source of truth. Mutations are\n * read-modify-write under an advisory lock so concurrent delegated processes\n * cannot clobber each other, and writes land via temp-file rename so a\n * crash mid-write can never leave a partial document behind.\n */\nexport class TaskStore {\n storePath: string;\n\n private readonly cwd: string;\n private readonly env: Readonly<Record<string, string | undefined>>;\n private cached: TaskDocument = emptyDocument();\n private readonly listeners = new Set<(document: TaskDocument) => void>();\n private readonly lockTimeoutMs: number;\n private readonly report?: TaskFailureReporter;\n private readonly onCommitted?: TaskStoreCommitListener;\n\n constructor(options: TaskStoreOptions = {}) {\n this.cwd = options.cwd ?? process.cwd();\n this.env = options.env ?? process.env;\n this.storePath = options.storePath ?? resolveStorePath(this.cwd, this.env);\n this.lockTimeoutMs = options.lockTimeoutMs ?? LOCK_TIMEOUT_MS;\n this.report = options.report;\n this.onCommitted = options.onCommitted;\n }\n\n /** Bind a default store to the current session tree before reading it. */\n configureSession(sessionKey: string): void {\n if (this.env[STORE_PATH_ENV]?.trim()) return;\n this.storePath = resolveStorePath(this.cwd, this.env, sessionKey);\n this.cached = emptyDocument();\n }\n\n /** Last document read from disk, without hitting the filesystem. */\n get snapshot(): TaskDocument {\n return this.cached;\n }\n\n read(): TaskDocument {\n try {\n const raw = fs.readFileSync(this.storePath, UTF8_ENCODING);\n this.cached = normalizeDocument(JSON.parse(raw));\n } catch (error) {\n // A missing file is the normal state before the first write. Anything\n // else means the task list just silently became empty, which is worth a\n // record: unreadable or corrupt JSON looks identical to \"no tasks yet\".\n if ((error as NodeJS.ErrnoException).code !== MISSING_FILE_CODE) {\n this.report?.error(TASK_EVENT.storeReadFailed, error, { [STORE_PATH_ATTRIBUTE]: this.storePath });\n }\n this.cached = emptyDocument();\n }\n return this.cached;\n }\n\n async readAsync(shouldApply: () => boolean = () => true): Promise<TaskDocument> {\n const storePath = this.storePath;\n const document = await this.readDocumentAsync(storePath);\n if (!shouldApply()) return document;\n this.cached = document;\n return document;\n }\n\n private async readDocumentAsync(storePath: string = this.storePath): Promise<TaskDocument> {\n try {\n const raw = await fs.promises.readFile(storePath, UTF8_ENCODING);\n return normalizeDocument(JSON.parse(raw));\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== MISSING_FILE_CODE) {\n this.report?.error(TASK_EVENT.storeReadFailed, error, { [STORE_PATH_ATTRIBUTE]: storePath });\n }\n return emptyDocument();\n }\n }\n\n /**\n * Apply a mutation under the store lock.\n *\n * `mutate` receives the freshest on-disk document and returns either the next\n * document to commit or `undefined` for a read-only action (list/get), which\n * skips the write entirely so queries never bump `rev`.\n */\n async mutate<T>(\n mutate: (document: TaskDocument) => { document?: TaskDocument; value: T },\n ): Promise<{ document: TaskDocument; value: T }> {\n const release = await this.acquireLock();\n const outcome = (() => {\n try {\n const current = this.read();\n const mutation = mutate(current);\n if (!mutation.document) {\n return { result: { document: current, value: mutation.value } };\n }\n const committed = this.write(mutation.document);\n return {\n result: { document: committed, value: mutation.value },\n notification: { previous: current, committed },\n };\n } finally {\n release();\n }\n })();\n if (outcome.notification) {\n this.notifyCommitted(outcome.notification.previous, outcome.notification.committed);\n }\n return outcome.result;\n }\n\n private notifyCommitted(previous: TaskDocument, committed: TaskDocument): void {\n try {\n this.onCommitted?.(previous, committed);\n } catch (error) {\n this.report?.error(TASK_EVENT.storeCommitListenerFailed, error, { [STORE_PATH_ATTRIBUTE]: this.storePath });\n }\n for (const listener of this.listeners) {\n try {\n listener(committed);\n } catch (error) {\n this.report?.error(TASK_EVENT.storeListenerFailed, error, { [STORE_PATH_ATTRIBUTE]: this.storePath });\n }\n }\n }\n\n private write(document: TaskDocument): TaskDocument {\n const next: TaskDocument = { ...document, version: STORE_SCHEMA_VERSION, rev: document.rev + 1 };\n fs.mkdirSync(path.dirname(this.storePath), { recursive: true });\n const temp = tempPathFor(this.storePath);\n fs.writeFileSync(temp, `${JSON.stringify(next, undefined, 2)}\\n`, UTF8_ENCODING);\n fs.renameSync(temp, this.storePath);\n this.cached = next;\n return next;\n }\n\n private async acquireLock(): Promise<() => void> {\n const lockPath = lockPathFor(this.storePath);\n fs.mkdirSync(path.dirname(this.storePath), { recursive: true });\n const deadline = Date.now() + this.lockTimeoutMs;\n\n for (;;) {\n try {\n const handle = fs.openSync(lockPath, 'wx');\n fs.writeSync(handle, JSON.stringify({ pid: process.pid, time: Date.now() }));\n fs.closeSync(handle);\n return () => fs.rmSync(lockPath, { force: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== LOCK_EXISTS_CODE) throw error;\n // The deadline is checked before breaking a stale lock so a peer that\n // keeps recreating one cannot spin this loop without bound.\n if (Date.now() >= deadline) {\n // Proceeding lock-free beats stalling the agent: the rename is atomic,\n // so the worst case is a lost concurrent update, not a corrupt file.\n // Reported because a lost update here can strand a delegation.\n this.report?.warn(\n TASK_EVENT.storeLockTimeout,\n new Error(`Task store lock still held after ${this.lockTimeoutMs}ms; proceeding without it`),\n { [STORE_PATH_ATTRIBUTE]: this.storePath },\n );\n return () => {};\n }\n // Clearing a dead holder's lock still goes through the backoff. Yielding\n // on every iteration is what stops a peer that keeps recreating the\n // lock from turning this into a spin.\n this.breakStaleLock(lockPath);\n await sleep(LOCK_RETRY_BASE_MS + Math.random() * LOCK_RETRY_MAX_MS);\n }\n }\n }\n\n /** Remove a lock left behind by a dead process or one held implausibly long. */\n private breakStaleLock(lockPath: string): boolean {\n try {\n const holder = JSON.parse(fs.readFileSync(lockPath, UTF8_ENCODING)) as { pid?: number; time?: number };\n const expired = typeof holder.time === 'number' && Date.now() - holder.time > LOCK_STALE_MS;\n const dead = typeof holder.pid === 'number' && !isProcessAlive(holder.pid);\n if (!expired && !dead) return false;\n fs.unlinkSync(lockPath);\n return true;\n } catch (error) {\n // Losing the race to another breaker is normal; a persistent failure here\n // shows up as the lock timeout above, so this stays a warning.\n if ((error as NodeJS.ErrnoException).code !== MISSING_FILE_CODE) {\n this.report?.warn(TASK_EVENT.storeLockBreakFailed, error, { [STORE_PATH_ATTRIBUTE]: lockPath });\n }\n return false;\n }\n }\n\n /**\n * Listen for commits made through this store instance.\n *\n * Live cross-process updates use the owning session's direct event bus. This\n * listener remains for local terminal views and never watches the filesystem.\n */\n onExternalChange(listener: (document: TaskDocument) => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n dispose(): void {\n this.listeners.clear();\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ const require_task = require("../../schemas/task.cjs");
2
+ const require_index = require("../reducer/index.cjs");
3
+ const require_index$1 = require("../taskResult/index.cjs");
4
+ let typebox_value = require("typebox/value");
5
+ //#region src/services/taskTool/index.ts
6
+ function output(value) {
7
+ if (typeof value === "object" && value !== null && "content" in value) return value;
8
+ return {
9
+ content: [{
10
+ type: "text",
11
+ text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
12
+ }],
13
+ details: value
14
+ };
15
+ }
16
+ function failure(error) {
17
+ return {
18
+ content: [{
19
+ type: "text",
20
+ text: error instanceof Error ? error.message : String(error)
21
+ }],
22
+ isError: true
23
+ };
24
+ }
25
+ async function reducerAction(store, action, params, maxTasks) {
26
+ const { document, value } = await store.mutate((current) => {
27
+ const result = require_index.applyTaskMutation(current, action, params, void 0, maxTasks);
28
+ return {
29
+ ...require_index.isCommittingOp(result.op) ? { document: result.document } : {},
30
+ value: result
31
+ };
32
+ });
33
+ if (value.op.kind === "error") throw new Error(value.op.message);
34
+ return require_index$1.buildToolResult(action, params, document, value.op);
35
+ }
36
+ async function assignmentBatch(manager, assignments, signal) {
37
+ const result = [];
38
+ for (const [index, assignment] of assignments.entries()) try {
39
+ const outcome = await manager.assign(assignment.id, {
40
+ agent: assignment.agent,
41
+ inlineAgent: assignment.inlineAgent,
42
+ instructions: assignment.instructions,
43
+ relevantFiles: assignment.relevantFiles,
44
+ priorFindings: assignment.priorFindings,
45
+ model: assignment.model,
46
+ ...assignment.context === "fork" || assignment.context === "fresh" ? { context: assignment.context } : {},
47
+ signal
48
+ });
49
+ result.push({
50
+ index,
51
+ id: assignment.id,
52
+ agent: assignment.agent,
53
+ ...outcome
54
+ });
55
+ } catch (error) {
56
+ result.push({
57
+ index,
58
+ id: assignment.id,
59
+ agent: assignment.agent,
60
+ ok: false,
61
+ message: String(error)
62
+ });
63
+ }
64
+ return result;
65
+ }
66
+ function createHeadlessTaskTool(store, manager, maxTasks) {
67
+ return {
68
+ name: "task",
69
+ label: "Task",
70
+ description: "Maintain a persistent task graph and delegate ready tasks to background agents.",
71
+ parameters: require_task.TaskParamsSchema,
72
+ promptSnippet: "Track complex work persistently and delegate ready tasks",
73
+ executionMode: "serial",
74
+ async execute(_toolCallId, rawParams, signal, onUpdate) {
75
+ if (!(0, typebox_value.Check)(require_task.TaskParamsSchema, rawParams)) return failure("Invalid task parameters.");
76
+ const params = rawParams;
77
+ try {
78
+ if (params.action === "assign") {
79
+ if (!params.assignments?.length) throw new Error("assign requires a non-empty assignments[] array");
80
+ onUpdate?.(output(`Delegating ${params.assignments.length} task${params.assignments.length === 1 ? "" : "s"}...`));
81
+ const items = await assignmentBatch(manager, params.assignments, signal);
82
+ const assigned = items.filter((item) => item.ok).map((item) => item.id);
83
+ const text = require_index$1.formatAssignmentResults(items);
84
+ if (assigned.length === 0) throw new Error(text);
85
+ return require_index$1.buildAssignmentResult(params, store.snapshot, text, {
86
+ assigned,
87
+ failed: items.length - assigned.length
88
+ });
89
+ }
90
+ if (params.action === "cancel") {
91
+ const outcome = await manager.cancel(params.id ?? NaN);
92
+ if (!outcome.ok) throw new Error(outcome.message);
93
+ return require_index$1.buildTextResult("cancel", params, store.snapshot, outcome.message);
94
+ }
95
+ return reducerAction(store, params.action, params, maxTasks);
96
+ } catch (error) {
97
+ return failure(error);
98
+ }
99
+ }
100
+ };
101
+ }
102
+ //#endregion
103
+ exports.createHeadlessTaskTool = createHeadlessTaskTool;
104
+ exports.reducerAction = reducerAction;
105
+
106
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["applyTaskMutation","isCommittingOp","buildToolResult","TaskParamsSchema","Check","formatAssignmentResults","buildAssignmentResult","buildTextResult"],"sources":["../../../../src/services/taskTool/index.ts"],"sourcesContent":["import type { DoomHeadlessTool, DoomHeadlessToolResult } from '@agimon-ai/doompi-core/headless';\nimport { Check } from 'typebox/value';\n\nimport type { TaskMutationParams } from '../../models/task';\nimport { TaskParamsSchema, type TaskParams, type TaskAssignmentParams } from '../../schemas/task';\nimport type { DelegationManager } from '../delegation';\nimport { applyTaskMutation, isCommittingOp, type ReducerAction } from '../reducer';\nimport { buildAssignmentResult, buildTextResult, buildToolResult, formatAssignmentResults } from '../taskResult';\nimport type { TaskStore } from '../taskStore';\n\nfunction output(value: unknown): DoomHeadlessToolResult {\n if (typeof value === 'object' && value !== null && 'content' in value) return value as DoomHeadlessToolResult;\n const text = typeof value === 'string' ? value : JSON.stringify(value, null, 2);\n return { content: [{ type: 'text', text }], details: value };\n}\n\nfunction failure(error: unknown): DoomHeadlessToolResult {\n return { content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }], isError: true };\n}\n\nexport async function reducerAction(\n store: TaskStore,\n action: ReducerAction,\n params: TaskMutationParams,\n maxTasks: number,\n): Promise<DoomHeadlessToolResult> {\n const { document, value } = await store.mutate((current) => {\n const result = applyTaskMutation(current, action, params, undefined, maxTasks);\n return { ...(isCommittingOp(result.op) ? { document: result.document } : {}), value: result };\n });\n if (value.op.kind === 'error') throw new Error(value.op.message);\n return buildToolResult(action, params, document, value.op);\n}\n\ninterface AssignmentItemResult {\n index: number;\n id: number;\n agent: string;\n ok: boolean;\n message: string;\n}\n\nasync function assignmentBatch(\n manager: DelegationManager,\n assignments: readonly TaskAssignmentParams[],\n signal?: AbortSignal,\n): Promise<AssignmentItemResult[]> {\n const result: AssignmentItemResult[] = [];\n for (const [index, assignment] of assignments.entries()) {\n try {\n const outcome = await manager.assign(assignment.id, {\n agent: assignment.agent,\n inlineAgent: assignment.inlineAgent,\n instructions: assignment.instructions,\n relevantFiles: assignment.relevantFiles,\n priorFindings: assignment.priorFindings,\n model: assignment.model,\n ...(assignment.context === 'fork' || assignment.context === 'fresh' ? { context: assignment.context } : {}),\n signal,\n });\n result.push({ index, id: assignment.id, agent: assignment.agent, ...outcome });\n } catch (error) {\n result.push({ index, id: assignment.id, agent: assignment.agent, ok: false, message: String(error) });\n }\n }\n return result;\n}\n\nexport function createHeadlessTaskTool(\n store: TaskStore,\n manager: DelegationManager,\n maxTasks: number,\n): DoomHeadlessTool<typeof TaskParamsSchema> {\n return {\n name: 'task',\n label: 'Task',\n description: 'Maintain a persistent task graph and delegate ready tasks to background agents.',\n parameters: TaskParamsSchema,\n promptSnippet: 'Track complex work persistently and delegate ready tasks',\n executionMode: 'serial',\n async execute(_toolCallId, rawParams, signal, onUpdate) {\n if (!Check(TaskParamsSchema, rawParams)) return failure('Invalid task parameters.');\n const params = rawParams as TaskParams;\n try {\n if (params.action === 'assign') {\n if (!params.assignments?.length) throw new Error('assign requires a non-empty assignments[] array');\n onUpdate?.(\n output(`Delegating ${params.assignments.length} task${params.assignments.length === 1 ? '' : 's'}...`),\n );\n const items = await assignmentBatch(manager, params.assignments, signal);\n const assigned = items.filter((item) => item.ok).map((item) => item.id);\n const text = formatAssignmentResults(items);\n if (assigned.length === 0) throw new Error(text);\n return buildAssignmentResult(params as TaskMutationParams, store.snapshot, text, {\n assigned,\n failed: items.length - assigned.length,\n });\n }\n if (params.action === 'cancel') {\n const outcome = await manager.cancel(params.id ?? Number.NaN);\n if (!outcome.ok) throw new Error(outcome.message);\n return buildTextResult('cancel', params as TaskMutationParams, store.snapshot, outcome.message);\n }\n return reducerAction(store, params.action as ReducerAction, params as TaskMutationParams, maxTasks);\n } catch (error) {\n return failure(error);\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { TaskParamsSchema } from "../../schemas/task.mjs";
2
+ import { applyTaskMutation, isCommittingOp } from "../reducer/index.mjs";
3
+ import { buildAssignmentResult, buildTextResult, buildToolResult, formatAssignmentResults } from "../taskResult/index.mjs";
4
+ import { Check } from "typebox/value";
5
+ //#region src/services/taskTool/index.ts
6
+ function output(value) {
7
+ if (typeof value === "object" && value !== null && "content" in value) return value;
8
+ return {
9
+ content: [{
10
+ type: "text",
11
+ text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
12
+ }],
13
+ details: value
14
+ };
15
+ }
16
+ function failure(error) {
17
+ return {
18
+ content: [{
19
+ type: "text",
20
+ text: error instanceof Error ? error.message : String(error)
21
+ }],
22
+ isError: true
23
+ };
24
+ }
25
+ async function reducerAction(store, action, params, maxTasks) {
26
+ const { document, value } = await store.mutate((current) => {
27
+ const result = applyTaskMutation(current, action, params, void 0, maxTasks);
28
+ return {
29
+ ...isCommittingOp(result.op) ? { document: result.document } : {},
30
+ value: result
31
+ };
32
+ });
33
+ if (value.op.kind === "error") throw new Error(value.op.message);
34
+ return buildToolResult(action, params, document, value.op);
35
+ }
36
+ async function assignmentBatch(manager, assignments, signal) {
37
+ const result = [];
38
+ for (const [index, assignment] of assignments.entries()) try {
39
+ const outcome = await manager.assign(assignment.id, {
40
+ agent: assignment.agent,
41
+ inlineAgent: assignment.inlineAgent,
42
+ instructions: assignment.instructions,
43
+ relevantFiles: assignment.relevantFiles,
44
+ priorFindings: assignment.priorFindings,
45
+ model: assignment.model,
46
+ ...assignment.context === "fork" || assignment.context === "fresh" ? { context: assignment.context } : {},
47
+ signal
48
+ });
49
+ result.push({
50
+ index,
51
+ id: assignment.id,
52
+ agent: assignment.agent,
53
+ ...outcome
54
+ });
55
+ } catch (error) {
56
+ result.push({
57
+ index,
58
+ id: assignment.id,
59
+ agent: assignment.agent,
60
+ ok: false,
61
+ message: String(error)
62
+ });
63
+ }
64
+ return result;
65
+ }
66
+ function createHeadlessTaskTool(store, manager, maxTasks) {
67
+ return {
68
+ name: "task",
69
+ label: "Task",
70
+ description: "Maintain a persistent task graph and delegate ready tasks to background agents.",
71
+ parameters: TaskParamsSchema,
72
+ promptSnippet: "Track complex work persistently and delegate ready tasks",
73
+ executionMode: "serial",
74
+ async execute(_toolCallId, rawParams, signal, onUpdate) {
75
+ if (!Check(TaskParamsSchema, rawParams)) return failure("Invalid task parameters.");
76
+ const params = rawParams;
77
+ try {
78
+ if (params.action === "assign") {
79
+ if (!params.assignments?.length) throw new Error("assign requires a non-empty assignments[] array");
80
+ onUpdate?.(output(`Delegating ${params.assignments.length} task${params.assignments.length === 1 ? "" : "s"}...`));
81
+ const items = await assignmentBatch(manager, params.assignments, signal);
82
+ const assigned = items.filter((item) => item.ok).map((item) => item.id);
83
+ const text = formatAssignmentResults(items);
84
+ if (assigned.length === 0) throw new Error(text);
85
+ return buildAssignmentResult(params, store.snapshot, text, {
86
+ assigned,
87
+ failed: items.length - assigned.length
88
+ });
89
+ }
90
+ if (params.action === "cancel") {
91
+ const outcome = await manager.cancel(params.id ?? NaN);
92
+ if (!outcome.ok) throw new Error(outcome.message);
93
+ return buildTextResult("cancel", params, store.snapshot, outcome.message);
94
+ }
95
+ return reducerAction(store, params.action, params, maxTasks);
96
+ } catch (error) {
97
+ return failure(error);
98
+ }
99
+ }
100
+ };
101
+ }
102
+ //#endregion
103
+ export { createHeadlessTaskTool, reducerAction };
104
+
105
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/taskTool/index.ts"],"sourcesContent":["import type { DoomHeadlessTool, DoomHeadlessToolResult } from '@agimon-ai/doompi-core/headless';\nimport { Check } from 'typebox/value';\n\nimport type { TaskMutationParams } from '../../models/task';\nimport { TaskParamsSchema, type TaskParams, type TaskAssignmentParams } from '../../schemas/task';\nimport type { DelegationManager } from '../delegation';\nimport { applyTaskMutation, isCommittingOp, type ReducerAction } from '../reducer';\nimport { buildAssignmentResult, buildTextResult, buildToolResult, formatAssignmentResults } from '../taskResult';\nimport type { TaskStore } from '../taskStore';\n\nfunction output(value: unknown): DoomHeadlessToolResult {\n if (typeof value === 'object' && value !== null && 'content' in value) return value as DoomHeadlessToolResult;\n const text = typeof value === 'string' ? value : JSON.stringify(value, null, 2);\n return { content: [{ type: 'text', text }], details: value };\n}\n\nfunction failure(error: unknown): DoomHeadlessToolResult {\n return { content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }], isError: true };\n}\n\nexport async function reducerAction(\n store: TaskStore,\n action: ReducerAction,\n params: TaskMutationParams,\n maxTasks: number,\n): Promise<DoomHeadlessToolResult> {\n const { document, value } = await store.mutate((current) => {\n const result = applyTaskMutation(current, action, params, undefined, maxTasks);\n return { ...(isCommittingOp(result.op) ? { document: result.document } : {}), value: result };\n });\n if (value.op.kind === 'error') throw new Error(value.op.message);\n return buildToolResult(action, params, document, value.op);\n}\n\ninterface AssignmentItemResult {\n index: number;\n id: number;\n agent: string;\n ok: boolean;\n message: string;\n}\n\nasync function assignmentBatch(\n manager: DelegationManager,\n assignments: readonly TaskAssignmentParams[],\n signal?: AbortSignal,\n): Promise<AssignmentItemResult[]> {\n const result: AssignmentItemResult[] = [];\n for (const [index, assignment] of assignments.entries()) {\n try {\n const outcome = await manager.assign(assignment.id, {\n agent: assignment.agent,\n inlineAgent: assignment.inlineAgent,\n instructions: assignment.instructions,\n relevantFiles: assignment.relevantFiles,\n priorFindings: assignment.priorFindings,\n model: assignment.model,\n ...(assignment.context === 'fork' || assignment.context === 'fresh' ? { context: assignment.context } : {}),\n signal,\n });\n result.push({ index, id: assignment.id, agent: assignment.agent, ...outcome });\n } catch (error) {\n result.push({ index, id: assignment.id, agent: assignment.agent, ok: false, message: String(error) });\n }\n }\n return result;\n}\n\nexport function createHeadlessTaskTool(\n store: TaskStore,\n manager: DelegationManager,\n maxTasks: number,\n): DoomHeadlessTool<typeof TaskParamsSchema> {\n return {\n name: 'task',\n label: 'Task',\n description: 'Maintain a persistent task graph and delegate ready tasks to background agents.',\n parameters: TaskParamsSchema,\n promptSnippet: 'Track complex work persistently and delegate ready tasks',\n executionMode: 'serial',\n async execute(_toolCallId, rawParams, signal, onUpdate) {\n if (!Check(TaskParamsSchema, rawParams)) return failure('Invalid task parameters.');\n const params = rawParams as TaskParams;\n try {\n if (params.action === 'assign') {\n if (!params.assignments?.length) throw new Error('assign requires a non-empty assignments[] array');\n onUpdate?.(\n output(`Delegating ${params.assignments.length} task${params.assignments.length === 1 ? '' : 's'}...`),\n );\n const items = await assignmentBatch(manager, params.assignments, signal);\n const assigned = items.filter((item) => item.ok).map((item) => item.id);\n const text = formatAssignmentResults(items);\n if (assigned.length === 0) throw new Error(text);\n return buildAssignmentResult(params as TaskMutationParams, store.snapshot, text, {\n assigned,\n failed: items.length - assigned.length,\n });\n }\n if (params.action === 'cancel') {\n const outcome = await manager.cancel(params.id ?? Number.NaN);\n if (!outcome.ok) throw new Error(outcome.message);\n return buildTextResult('cancel', params as TaskMutationParams, store.snapshot, outcome.message);\n }\n return reducerAction(store, params.action as ReducerAction, params as TaskMutationParams, maxTasks);\n } catch (error) {\n return failure(error);\n }\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ //#region src/types/delegation.ts
2
+ /** Most context files carried in a delegation brief. */
3
+ const MAX_BRIEF_FILES = 12;
4
+ //#endregion
5
+ exports.MAX_BRIEF_FILES = MAX_BRIEF_FILES;
6
+
7
+ //# sourceMappingURL=delegation.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.cjs","names":[],"sources":["../../../src/types/delegation.ts"],"sourcesContent":["/** Most context files carried in a delegation brief. */\nexport const MAX_BRIEF_FILES = 12;\n"],"mappings":";;AACA,MAAa,kBAAkB"}
@@ -0,0 +1,5 @@
1
+ //#region src/types/delegation.d.ts
2
+ /** Most context files carried in a delegation brief. */
3
+ export declare const MAX_BRIEF_FILES = 12;
4
+ //#endregion
5
+ //# sourceMappingURL=delegation.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.d.cts","names":[],"sources":["../../../src/types/delegation.ts"],"mappings":";;qBACa"}
@@ -0,0 +1,5 @@
1
+ //#region src/types/delegation.d.ts
2
+ /** Most context files carried in a delegation brief. */
3
+ export declare const MAX_BRIEF_FILES = 12;
4
+ //#endregion
5
+ //# sourceMappingURL=delegation.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.d.mts","names":[],"sources":["../../../src/types/delegation.ts"],"mappings":";;qBACa"}
@@ -0,0 +1,7 @@
1
+ //#region src/types/delegation.ts
2
+ /** Most context files carried in a delegation brief. */
3
+ const MAX_BRIEF_FILES = 12;
4
+ //#endregion
5
+ export { MAX_BRIEF_FILES };
6
+
7
+ //# sourceMappingURL=delegation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.mjs","names":[],"sources":["../../../src/types/delegation.ts"],"sourcesContent":["/** Most context files carried in a delegation brief. */\nexport const MAX_BRIEF_FILES = 12;\n"],"mappings":";;AACA,MAAa,kBAAkB"}
@@ -0,0 +1,26 @@
1
+ //#region src/types/telemetry.ts
2
+ const TASK_EVENT = {
3
+ notificationFailed: "doom_task.notification_failed",
4
+ storeReadFailed: "doom_task.store_read_failed",
5
+ storeLockTimeout: "doom_task.store_lock_timeout",
6
+ storeLockBreakFailed: "doom_task.store_lock_break_failed",
7
+ storeWatchFailed: "doom_task.store_watch_failed",
8
+ storeListenerFailed: "doom_task.store_listener_failed",
9
+ storeCommitListenerFailed: "doom_task.store_commit_listener_failed",
10
+ storeSweepFailed: "doom_task.store_sweep_failed",
11
+ sessionStartFailed: "doom_task.session_start_failed",
12
+ sessionStartDegraded: "doom_task.session_start_degraded",
13
+ toolFailed: "doom_task.tool_failed",
14
+ delegationRequestFailed: "doom_task.delegation_request_failed",
15
+ delegationStartFailed: "doom_task.delegation_start_failed",
16
+ delegationResponseFailed: "doom_task.delegation_response_failed",
17
+ delegationSettleFailed: "doom_task.delegation_settle_failed",
18
+ delegationTimedOut: "doom_task.delegation_timed_out",
19
+ delegationOrphaned: "doom_task.delegation_orphaned",
20
+ delegationAssigned: "doom_task.delegation_assigned",
21
+ delegationCompleted: "doom_task.delegation_completed"
22
+ };
23
+ //#endregion
24
+ exports.TASK_EVENT = TASK_EVENT;
25
+
26
+ //# sourceMappingURL=telemetry.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.cjs","names":[],"sources":["../../../src/types/telemetry.ts"],"sourcesContent":["export const TASK_EVENT = {\n notificationFailed: 'doom_task.notification_failed',\n storeReadFailed: 'doom_task.store_read_failed',\n storeLockTimeout: 'doom_task.store_lock_timeout',\n storeLockBreakFailed: 'doom_task.store_lock_break_failed',\n storeWatchFailed: 'doom_task.store_watch_failed',\n storeListenerFailed: 'doom_task.store_listener_failed',\n storeCommitListenerFailed: 'doom_task.store_commit_listener_failed',\n storeSweepFailed: 'doom_task.store_sweep_failed',\n sessionStartFailed: 'doom_task.session_start_failed',\n sessionStartDegraded: 'doom_task.session_start_degraded',\n toolFailed: 'doom_task.tool_failed',\n delegationRequestFailed: 'doom_task.delegation_request_failed',\n delegationStartFailed: 'doom_task.delegation_start_failed',\n delegationResponseFailed: 'doom_task.delegation_response_failed',\n delegationSettleFailed: 'doom_task.delegation_settle_failed',\n delegationTimedOut: 'doom_task.delegation_timed_out',\n delegationOrphaned: 'doom_task.delegation_orphaned',\n // Info-level lifecycle events. These are the measurement pair: the shape of\n // the brief that went out, and the cost of the run it produced.\n delegationAssigned: 'doom_task.delegation_assigned',\n delegationCompleted: 'doom_task.delegation_completed',\n} as const;\n\nexport type TaskEventName = (typeof TASK_EVENT)[keyof typeof TASK_EVENT];\nexport type TaskErrorAttributes = Record<string, string | number | boolean>;\nexport type TaskErrorSink = (event: TaskEventName, error: unknown, attributes?: TaskErrorAttributes) => void;\nexport type TaskEventSink = (event: TaskEventName, attributes?: TaskErrorAttributes) => void;\n\n/** Host-neutral telemetry port consumed by Task services and store adapters. */\nexport interface TaskFailureReporter {\n error: TaskErrorSink;\n warn: TaskErrorSink;\n /** Info-level event sink. Required so an unwired reporter fails to compile. */\n event: TaskEventSink;\n}\n"],"mappings":";AAAA,MAAa,aAAa;CACxB,oBAAoB;CACpB,iBAAiB;CACjB,kBAAkB;CAClB,sBAAsB;CACtB,kBAAkB;CAClB,qBAAqB;CACrB,2BAA2B;CAC3B,kBAAkB;CAClB,oBAAoB;CACpB,sBAAsB;CACtB,YAAY;CACZ,yBAAyB;CACzB,uBAAuB;CACvB,0BAA0B;CAC1B,wBAAwB;CACxB,oBAAoB;CACpB,oBAAoB;CAGpB,oBAAoB;CACpB,qBAAqB;AACvB"}
@@ -0,0 +1,35 @@
1
+ //#region src/types/telemetry.d.ts
2
+ export declare const TASK_EVENT: {
3
+ readonly notificationFailed: 'doom_task.notification_failed';
4
+ readonly storeReadFailed: 'doom_task.store_read_failed';
5
+ readonly storeLockTimeout: 'doom_task.store_lock_timeout';
6
+ readonly storeLockBreakFailed: 'doom_task.store_lock_break_failed';
7
+ readonly storeWatchFailed: 'doom_task.store_watch_failed';
8
+ readonly storeListenerFailed: 'doom_task.store_listener_failed';
9
+ readonly storeCommitListenerFailed: 'doom_task.store_commit_listener_failed';
10
+ readonly storeSweepFailed: 'doom_task.store_sweep_failed';
11
+ readonly sessionStartFailed: 'doom_task.session_start_failed';
12
+ readonly sessionStartDegraded: 'doom_task.session_start_degraded';
13
+ readonly toolFailed: 'doom_task.tool_failed';
14
+ readonly delegationRequestFailed: 'doom_task.delegation_request_failed';
15
+ readonly delegationStartFailed: 'doom_task.delegation_start_failed';
16
+ readonly delegationResponseFailed: 'doom_task.delegation_response_failed';
17
+ readonly delegationSettleFailed: 'doom_task.delegation_settle_failed';
18
+ readonly delegationTimedOut: 'doom_task.delegation_timed_out';
19
+ readonly delegationOrphaned: 'doom_task.delegation_orphaned';
20
+ readonly delegationAssigned: 'doom_task.delegation_assigned';
21
+ readonly delegationCompleted: 'doom_task.delegation_completed';
22
+ };
23
+ export type TaskEventName = (typeof TASK_EVENT)[keyof typeof TASK_EVENT];
24
+ export type TaskErrorAttributes = Record<string, string | number | boolean>;
25
+ export type TaskErrorSink = (event: TaskEventName, error: unknown, attributes?: TaskErrorAttributes) => void;
26
+ export type TaskEventSink = (event: TaskEventName, attributes?: TaskErrorAttributes) => void;
27
+ /** Host-neutral telemetry port consumed by Task services and store adapters. */
28
+ export interface TaskFailureReporter {
29
+ error: TaskErrorSink;
30
+ warn: TaskErrorSink;
31
+ /** Info-level event sink. Required so an unwired reporter fails to compile. */
32
+ event: TaskEventSink;
33
+ }
34
+ //#endregion
35
+ //# sourceMappingURL=telemetry.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.cts","names":[],"sources":["../../../src/types/telemetry.ts"],"mappings":";qBAAa;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WAGA;WACA;;YAGU,wBAAwB,yBAAyB;YACjD,sBAAsB;YACtB,iBAAiB,OAAO,eAAe,gBAAgB,aAAa;YACpE,iBAAiB,OAAO,eAAe,aAAa;;iBAG/C;EACf,OAAO;EACP,MAAM;;EAEN,OAAO"}
@@ -0,0 +1,35 @@
1
+ //#region src/types/telemetry.d.ts
2
+ export declare const TASK_EVENT: {
3
+ readonly notificationFailed: 'doom_task.notification_failed';
4
+ readonly storeReadFailed: 'doom_task.store_read_failed';
5
+ readonly storeLockTimeout: 'doom_task.store_lock_timeout';
6
+ readonly storeLockBreakFailed: 'doom_task.store_lock_break_failed';
7
+ readonly storeWatchFailed: 'doom_task.store_watch_failed';
8
+ readonly storeListenerFailed: 'doom_task.store_listener_failed';
9
+ readonly storeCommitListenerFailed: 'doom_task.store_commit_listener_failed';
10
+ readonly storeSweepFailed: 'doom_task.store_sweep_failed';
11
+ readonly sessionStartFailed: 'doom_task.session_start_failed';
12
+ readonly sessionStartDegraded: 'doom_task.session_start_degraded';
13
+ readonly toolFailed: 'doom_task.tool_failed';
14
+ readonly delegationRequestFailed: 'doom_task.delegation_request_failed';
15
+ readonly delegationStartFailed: 'doom_task.delegation_start_failed';
16
+ readonly delegationResponseFailed: 'doom_task.delegation_response_failed';
17
+ readonly delegationSettleFailed: 'doom_task.delegation_settle_failed';
18
+ readonly delegationTimedOut: 'doom_task.delegation_timed_out';
19
+ readonly delegationOrphaned: 'doom_task.delegation_orphaned';
20
+ readonly delegationAssigned: 'doom_task.delegation_assigned';
21
+ readonly delegationCompleted: 'doom_task.delegation_completed';
22
+ };
23
+ export type TaskEventName = (typeof TASK_EVENT)[keyof typeof TASK_EVENT];
24
+ export type TaskErrorAttributes = Record<string, string | number | boolean>;
25
+ export type TaskErrorSink = (event: TaskEventName, error: unknown, attributes?: TaskErrorAttributes) => void;
26
+ export type TaskEventSink = (event: TaskEventName, attributes?: TaskErrorAttributes) => void;
27
+ /** Host-neutral telemetry port consumed by Task services and store adapters. */
28
+ export interface TaskFailureReporter {
29
+ error: TaskErrorSink;
30
+ warn: TaskErrorSink;
31
+ /** Info-level event sink. Required so an unwired reporter fails to compile. */
32
+ event: TaskEventSink;
33
+ }
34
+ //#endregion
35
+ //# sourceMappingURL=telemetry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.mts","names":[],"sources":["../../../src/types/telemetry.ts"],"mappings":";qBAAa;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WAGA;WACA;;YAGU,wBAAwB,yBAAyB;YACjD,sBAAsB;YACtB,iBAAiB,OAAO,eAAe,gBAAgB,aAAa;YACpE,iBAAiB,OAAO,eAAe,aAAa;;iBAG/C;EACf,OAAO;EACP,MAAM;;EAEN,OAAO"}
@@ -0,0 +1,26 @@
1
+ //#region src/types/telemetry.ts
2
+ const TASK_EVENT = {
3
+ notificationFailed: "doom_task.notification_failed",
4
+ storeReadFailed: "doom_task.store_read_failed",
5
+ storeLockTimeout: "doom_task.store_lock_timeout",
6
+ storeLockBreakFailed: "doom_task.store_lock_break_failed",
7
+ storeWatchFailed: "doom_task.store_watch_failed",
8
+ storeListenerFailed: "doom_task.store_listener_failed",
9
+ storeCommitListenerFailed: "doom_task.store_commit_listener_failed",
10
+ storeSweepFailed: "doom_task.store_sweep_failed",
11
+ sessionStartFailed: "doom_task.session_start_failed",
12
+ sessionStartDegraded: "doom_task.session_start_degraded",
13
+ toolFailed: "doom_task.tool_failed",
14
+ delegationRequestFailed: "doom_task.delegation_request_failed",
15
+ delegationStartFailed: "doom_task.delegation_start_failed",
16
+ delegationResponseFailed: "doom_task.delegation_response_failed",
17
+ delegationSettleFailed: "doom_task.delegation_settle_failed",
18
+ delegationTimedOut: "doom_task.delegation_timed_out",
19
+ delegationOrphaned: "doom_task.delegation_orphaned",
20
+ delegationAssigned: "doom_task.delegation_assigned",
21
+ delegationCompleted: "doom_task.delegation_completed"
22
+ };
23
+ //#endregion
24
+ export { TASK_EVENT };
25
+
26
+ //# sourceMappingURL=telemetry.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.mjs","names":[],"sources":["../../../src/types/telemetry.ts"],"sourcesContent":["export const TASK_EVENT = {\n notificationFailed: 'doom_task.notification_failed',\n storeReadFailed: 'doom_task.store_read_failed',\n storeLockTimeout: 'doom_task.store_lock_timeout',\n storeLockBreakFailed: 'doom_task.store_lock_break_failed',\n storeWatchFailed: 'doom_task.store_watch_failed',\n storeListenerFailed: 'doom_task.store_listener_failed',\n storeCommitListenerFailed: 'doom_task.store_commit_listener_failed',\n storeSweepFailed: 'doom_task.store_sweep_failed',\n sessionStartFailed: 'doom_task.session_start_failed',\n sessionStartDegraded: 'doom_task.session_start_degraded',\n toolFailed: 'doom_task.tool_failed',\n delegationRequestFailed: 'doom_task.delegation_request_failed',\n delegationStartFailed: 'doom_task.delegation_start_failed',\n delegationResponseFailed: 'doom_task.delegation_response_failed',\n delegationSettleFailed: 'doom_task.delegation_settle_failed',\n delegationTimedOut: 'doom_task.delegation_timed_out',\n delegationOrphaned: 'doom_task.delegation_orphaned',\n // Info-level lifecycle events. These are the measurement pair: the shape of\n // the brief that went out, and the cost of the run it produced.\n delegationAssigned: 'doom_task.delegation_assigned',\n delegationCompleted: 'doom_task.delegation_completed',\n} as const;\n\nexport type TaskEventName = (typeof TASK_EVENT)[keyof typeof TASK_EVENT];\nexport type TaskErrorAttributes = Record<string, string | number | boolean>;\nexport type TaskErrorSink = (event: TaskEventName, error: unknown, attributes?: TaskErrorAttributes) => void;\nexport type TaskEventSink = (event: TaskEventName, attributes?: TaskErrorAttributes) => void;\n\n/** Host-neutral telemetry port consumed by Task services and store adapters. */\nexport interface TaskFailureReporter {\n error: TaskErrorSink;\n warn: TaskErrorSink;\n /** Info-level event sink. Required so an unwired reporter fails to compile. */\n event: TaskEventSink;\n}\n"],"mappings":";AAAA,MAAa,aAAa;CACxB,oBAAoB;CACpB,iBAAiB;CACjB,kBAAkB;CAClB,sBAAsB;CACtB,kBAAkB;CAClB,qBAAqB;CACrB,2BAA2B;CAC3B,kBAAkB;CAClB,oBAAoB;CACpB,sBAAsB;CACtB,YAAY;CACZ,yBAAyB;CACzB,uBAAuB;CACvB,0BAA0B;CAC1B,wBAAwB;CACxB,oBAAoB;CACpB,oBAAoB;CAGpB,oBAAoB;CACpB,qBAAqB;AACvB"}
@@ -0,0 +1,7 @@
1
+ //#region src/types/webTasks.ts
2
+ /** Browser-safe task view published by the cockpit hub channel. */
3
+ const TASKS_CHANNEL_TYPE = "task_graph";
4
+ //#endregion
5
+ exports.TASKS_CHANNEL_TYPE = TASKS_CHANNEL_TYPE;
6
+
7
+ //# sourceMappingURL=webTasks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webTasks.cjs","names":[],"sources":["../../../src/types/webTasks.ts"],"sourcesContent":["/** Browser-safe task view published by the cockpit hub channel. */\nexport const TASKS_CHANNEL_TYPE = 'task_graph';\n\nexport type WebTaskStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'deleted';\n\nexport interface WebTask {\n id: number;\n subject: string;\n description?: string;\n activeForm?: string;\n status: WebTaskStatus;\n blockedBy: number[];\n owner?: string;\n updatedAt?: string;\n delegation?: {\n agent?: string;\n state?: string;\n };\n}\n\nexport interface WebTasksPayload {\n tasks: WebTask[];\n rev: number;\n}\n"],"mappings":";;AACA,MAAa,qBAAqB"}
@@ -0,0 +1,7 @@
1
+ //#region src/types/webTasks.ts
2
+ /** Browser-safe task view published by the cockpit hub channel. */
3
+ const TASKS_CHANNEL_TYPE = "task_graph";
4
+ //#endregion
5
+ export { TASKS_CHANNEL_TYPE };
6
+
7
+ //# sourceMappingURL=webTasks.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webTasks.mjs","names":[],"sources":["../../../src/types/webTasks.ts"],"sourcesContent":["/** Browser-safe task view published by the cockpit hub channel. */\nexport const TASKS_CHANNEL_TYPE = 'task_graph';\n\nexport type WebTaskStatus = 'pending' | 'in_progress' | 'completed' | 'failed' | 'deleted';\n\nexport interface WebTask {\n id: number;\n subject: string;\n description?: string;\n activeForm?: string;\n status: WebTaskStatus;\n blockedBy: number[];\n owner?: string;\n updatedAt?: string;\n delegation?: {\n agent?: string;\n state?: string;\n };\n}\n\nexport interface WebTasksPayload {\n tasks: WebTask[];\n rev: number;\n}\n"],"mappings":";;AACA,MAAa,qBAAqB"}
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_index = require("./src/services/invariants/index.cjs");
3
+ exports.VALID_TRANSITIONS = require_index.VALID_TRANSITIONS;
4
+ exports.canonicalizeTasks = require_index.canonicalizeTasks;
5
+ exports.isTransitionValid = require_index.isTransitionValid;
@@ -0,0 +1,2 @@
1
+ import { VALID_TRANSITIONS, canonicalizeTasks, isTransitionValid } from "./src/services/invariants/index.cjs";
2
+ export { VALID_TRANSITIONS, canonicalizeTasks, isTransitionValid };
@@ -0,0 +1,2 @@
1
+ import { VALID_TRANSITIONS, canonicalizeTasks, isTransitionValid } from "./src/services/invariants/index.mjs";
2
+ export { VALID_TRANSITIONS, canonicalizeTasks, isTransitionValid };
@@ -0,0 +1,2 @@
1
+ import { VALID_TRANSITIONS, canonicalizeTasks, isTransitionValid } from "./src/services/invariants/index.mjs";
2
+ export { VALID_TRANSITIONS, canonicalizeTasks, isTransitionValid };
@@ -0,0 +1,14 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_index = require("./src/services/paths/index.cjs");
3
+ exports.STORE_PATH_ENV = require_index.STORE_PATH_ENV;
4
+ exports.hasStorePathOverride = require_index.hasStorePathOverride;
5
+ exports.lockPathFor = require_index.lockPathFor;
6
+ exports.removeLegacyStoreDirectory = require_index.removeLegacyStoreDirectory;
7
+ exports.removeLegacyStoreDirectoryAsync = require_index.removeLegacyStoreDirectoryAsync;
8
+ exports.resolveLegacyStoreDirectory = require_index.resolveLegacyStoreDirectory;
9
+ exports.resolveLegacyStoreDirectoryAsync = require_index.resolveLegacyStoreDirectoryAsync;
10
+ exports.resolveSessionKey = require_index.resolveSessionKey;
11
+ exports.resolveStorePath = require_index.resolveStorePath;
12
+ exports.sweepStoreFiles = require_index.sweepStoreFiles;
13
+ exports.sweepStoreFilesAsync = require_index.sweepStoreFilesAsync;
14
+ exports.tempPathFor = require_index.tempPathFor;
@@ -0,0 +1,2 @@
1
+ import { STORE_PATH_ENV, StoreSweepResult, hasStorePathOverride, lockPathFor, removeLegacyStoreDirectory, removeLegacyStoreDirectoryAsync, resolveLegacyStoreDirectory, resolveLegacyStoreDirectoryAsync, resolveSessionKey, resolveStorePath, sweepStoreFiles, sweepStoreFilesAsync, tempPathFor } from "./src/services/paths/index.cjs";
2
+ export { STORE_PATH_ENV, StoreSweepResult, hasStorePathOverride, lockPathFor, removeLegacyStoreDirectory, removeLegacyStoreDirectoryAsync, resolveLegacyStoreDirectory, resolveLegacyStoreDirectoryAsync, resolveSessionKey, resolveStorePath, sweepStoreFiles, sweepStoreFilesAsync, tempPathFor };
@@ -0,0 +1,2 @@
1
+ import { STORE_PATH_ENV, StoreSweepResult, hasStorePathOverride, lockPathFor, removeLegacyStoreDirectory, removeLegacyStoreDirectoryAsync, resolveLegacyStoreDirectory, resolveLegacyStoreDirectoryAsync, resolveSessionKey, resolveStorePath, sweepStoreFiles, sweepStoreFilesAsync, tempPathFor } from "./src/services/paths/index.mjs";
2
+ export { STORE_PATH_ENV, StoreSweepResult, hasStorePathOverride, lockPathFor, removeLegacyStoreDirectory, removeLegacyStoreDirectoryAsync, resolveLegacyStoreDirectory, resolveLegacyStoreDirectoryAsync, resolveSessionKey, resolveStorePath, sweepStoreFiles, sweepStoreFilesAsync, tempPathFor };
@@ -0,0 +1,2 @@
1
+ import { STORE_PATH_ENV, hasStorePathOverride, lockPathFor, removeLegacyStoreDirectory, removeLegacyStoreDirectoryAsync, resolveLegacyStoreDirectory, resolveLegacyStoreDirectoryAsync, resolveSessionKey, resolveStorePath, sweepStoreFiles, sweepStoreFilesAsync, tempPathFor } from "./src/services/paths/index.mjs";
2
+ export { STORE_PATH_ENV, hasStorePathOverride, lockPathFor, removeLegacyStoreDirectory, removeLegacyStoreDirectoryAsync, resolveLegacyStoreDirectory, resolveLegacyStoreDirectoryAsync, resolveSessionKey, resolveStorePath, sweepStoreFiles, sweepStoreFilesAsync, tempPathFor };
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_index = require("./src/services/processLiveness/index.cjs");
3
+ exports.isProcessAlive = require_index.isProcessAlive;
@@ -0,0 +1,2 @@
1
+ import { isProcessAlive } from "./src/services/processLiveness/index.cjs";
2
+ export { isProcessAlive };
@@ -0,0 +1,2 @@
1
+ import { isProcessAlive } from "./src/services/processLiveness/index.mjs";
2
+ export { isProcessAlive };
@@ -0,0 +1,2 @@
1
+ import { isProcessAlive } from "./src/services/processLiveness/index.mjs";
2
+ export { isProcessAlive };
@@ -0,0 +1,5 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_index = require("./src/services/reconcile/index.cjs");
3
+ exports.ERR_ORPHANED_BY_RESTART = require_index.ERR_ORPHANED_BY_RESTART;
4
+ exports.ERR_ORPHANED_BY_SESSION = require_index.ERR_ORPHANED_BY_SESSION;
5
+ exports.reconcileOrphanedDelegations = require_index.reconcileOrphanedDelegations;
@@ -0,0 +1,2 @@
1
+ import { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, ReconcileResult, ReconcileSelf, reconcileOrphanedDelegations } from "./src/services/reconcile/index.cjs";
2
+ export { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, ReconcileResult, ReconcileSelf, reconcileOrphanedDelegations };
@@ -0,0 +1,2 @@
1
+ import { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, ReconcileResult, ReconcileSelf, reconcileOrphanedDelegations } from "./src/services/reconcile/index.mjs";
2
+ export { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, ReconcileResult, ReconcileSelf, reconcileOrphanedDelegations };
@@ -0,0 +1,2 @@
1
+ import { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, reconcileOrphanedDelegations } from "./src/services/reconcile/index.mjs";
2
+ export { ERR_ORPHANED_BY_RESTART, ERR_ORPHANED_BY_SESSION, reconcileOrphanedDelegations };
@@ -0,0 +1,8 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_index = require("./src/services/reducer/index.cjs");
3
+ exports.MAX_UPSERT_ITEMS = require_index.MAX_UPSERT_ITEMS;
4
+ exports.REF_PATTERN = require_index.REF_PATTERN;
5
+ exports.applyTaskMutation = require_index.applyTaskMutation;
6
+ exports.formatUpsertFailure = require_index.formatUpsertFailure;
7
+ exports.isCommittingOp = require_index.isCommittingOp;
8
+ exports.singleItemOutcome = require_index.singleItemOutcome;
@@ -0,0 +1,2 @@
1
+ import { ApplyResult, MAX_UPSERT_ITEMS, Op, REF_PATTERN, ReducerAction, applyTaskMutation, formatUpsertFailure, isCommittingOp, singleItemOutcome } from "./src/services/reducer/index.cjs";
2
+ export { ApplyResult, MAX_UPSERT_ITEMS, Op, REF_PATTERN, ReducerAction, applyTaskMutation, formatUpsertFailure, isCommittingOp, singleItemOutcome };
@@ -0,0 +1,2 @@
1
+ import { ApplyResult, MAX_UPSERT_ITEMS, Op, REF_PATTERN, ReducerAction, applyTaskMutation, formatUpsertFailure, isCommittingOp, singleItemOutcome } from "./src/services/reducer/index.mjs";
2
+ export { ApplyResult, MAX_UPSERT_ITEMS, Op, REF_PATTERN, ReducerAction, applyTaskMutation, formatUpsertFailure, isCommittingOp, singleItemOutcome };