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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/README.md +12 -3
  2. package/package.json +15 -14
  3. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  4. package/dist/api-contracts.cjs +0 -1
  5. package/dist/api-contracts.d.cts +0 -2
  6. package/dist/api-contracts.d.mts +0 -2
  7. package/dist/api-contracts.mjs +0 -1
  8. package/dist/commands.cjs +0 -1
  9. package/dist/commands.d.cts +0 -2
  10. package/dist/commands.d.mts +0 -2
  11. package/dist/commands.mjs +0 -1
  12. package/dist/config.cjs +0 -1
  13. package/dist/config.d.cts +0 -2
  14. package/dist/config.d.mts +0 -2
  15. package/dist/config.mjs +0 -1
  16. package/dist/constants/promptGuidelines.cjs +0 -2
  17. package/dist/constants/promptGuidelines.cjs.map +0 -1
  18. package/dist/constants/promptGuidelines.d.cts +0 -13
  19. package/dist/constants/promptGuidelines.d.cts.map +0 -1
  20. package/dist/constants/promptGuidelines.d.mts +0 -13
  21. package/dist/constants/promptGuidelines.d.mts.map +0 -1
  22. package/dist/constants/promptGuidelines.mjs +0 -2
  23. package/dist/constants/promptGuidelines.mjs.map +0 -1
  24. package/dist/constants/task.cjs +0 -2
  25. package/dist/constants/task.cjs.map +0 -1
  26. package/dist/constants/task.d.cts +0 -4
  27. package/dist/constants/task.d.cts.map +0 -1
  28. package/dist/constants/task.d.mts +0 -4
  29. package/dist/constants/task.d.mts.map +0 -1
  30. package/dist/constants/task.mjs +0 -2
  31. package/dist/constants/task.mjs.map +0 -1
  32. package/dist/controllers/tasksCommand.cjs +0 -2
  33. package/dist/controllers/tasksCommand.cjs.map +0 -1
  34. package/dist/controllers/tasksCommand.d.cts +0 -15
  35. package/dist/controllers/tasksCommand.d.cts.map +0 -1
  36. package/dist/controllers/tasksCommand.d.mts +0 -15
  37. package/dist/controllers/tasksCommand.d.mts.map +0 -1
  38. package/dist/controllers/tasksCommand.mjs +0 -2
  39. package/dist/controllers/tasksCommand.mjs.map +0 -1
  40. package/dist/controllers/webTasksChannel.cjs +0 -2
  41. package/dist/controllers/webTasksChannel.cjs.map +0 -1
  42. package/dist/controllers/webTasksChannel.mjs +0 -2
  43. package/dist/controllers/webTasksChannel.mjs.map +0 -1
  44. package/dist/delegation-manager.cjs +0 -1
  45. package/dist/delegation-manager.d.cts +0 -3
  46. package/dist/delegation-manager.d.mts +0 -3
  47. package/dist/delegation-manager.mjs +0 -1
  48. package/dist/extensions/pi.cjs +0 -3
  49. package/dist/extensions/pi.cjs.map +0 -1
  50. package/dist/extensions/pi.d.cts +0 -6
  51. package/dist/extensions/pi.d.cts.map +0 -1
  52. package/dist/extensions/pi.d.mts +0 -6
  53. package/dist/extensions/pi.d.mts.map +0 -1
  54. package/dist/extensions/pi.mjs +0 -3
  55. package/dist/extensions/pi.mjs.map +0 -1
  56. package/dist/extensions/server.cjs +0 -2
  57. package/dist/extensions/server.cjs.map +0 -1
  58. package/dist/extensions/server.d.cts +0 -5
  59. package/dist/extensions/server.d.cts.map +0 -1
  60. package/dist/extensions/server.d.mts +0 -5
  61. package/dist/extensions/server.d.mts.map +0 -1
  62. package/dist/extensions/server.mjs +0 -2
  63. package/dist/extensions/server.mjs.map +0 -1
  64. package/dist/index.cjs +0 -1
  65. package/dist/index.d.cts +0 -16
  66. package/dist/index.d.mts +0 -16
  67. package/dist/index.mjs +0 -1
  68. package/dist/logSinkTelemetry.cjs +0 -1
  69. package/dist/logSinkTelemetry.d.cts +0 -3
  70. package/dist/logSinkTelemetry.d.mts +0 -3
  71. package/dist/logSinkTelemetry.mjs +0 -1
  72. package/dist/models/task.cjs +0 -2
  73. package/dist/models/task.cjs.map +0 -1
  74. package/dist/models/task.d.cts +0 -176
  75. package/dist/models/task.d.cts.map +0 -1
  76. package/dist/models/task.d.mts +0 -176
  77. package/dist/models/task.d.mts.map +0 -1
  78. package/dist/models/task.mjs +0 -2
  79. package/dist/models/task.mjs.map +0 -1
  80. package/dist/models/taskGraph.cjs +0 -2
  81. package/dist/models/taskGraph.cjs.map +0 -1
  82. package/dist/models/taskGraph.d.cts +0 -24
  83. package/dist/models/taskGraph.d.cts.map +0 -1
  84. package/dist/models/taskGraph.d.mts +0 -24
  85. package/dist/models/taskGraph.d.mts.map +0 -1
  86. package/dist/models/taskGraph.mjs +0 -2
  87. package/dist/models/taskGraph.mjs.map +0 -1
  88. package/dist/schemas/apiContracts.cjs +0 -2
  89. package/dist/schemas/apiContracts.cjs.map +0 -1
  90. package/dist/schemas/apiContracts.d.cts +0 -53
  91. package/dist/schemas/apiContracts.d.cts.map +0 -1
  92. package/dist/schemas/apiContracts.d.mts +0 -53
  93. package/dist/schemas/apiContracts.d.mts.map +0 -1
  94. package/dist/schemas/apiContracts.mjs +0 -2
  95. package/dist/schemas/apiContracts.mjs.map +0 -1
  96. package/dist/schemas/task.cjs +0 -2
  97. package/dist/schemas/task.cjs.map +0 -1
  98. package/dist/schemas/task.d.cts +0 -103
  99. package/dist/schemas/task.d.cts.map +0 -1
  100. package/dist/schemas/task.d.mts +0 -103
  101. package/dist/schemas/task.d.mts.map +0 -1
  102. package/dist/schemas/task.mjs +0 -2
  103. package/dist/schemas/task.mjs.map +0 -1
  104. package/dist/services/config/index.cjs +0 -2
  105. package/dist/services/config/index.cjs.map +0 -1
  106. package/dist/services/config/index.d.cts +0 -42
  107. package/dist/services/config/index.d.cts.map +0 -1
  108. package/dist/services/config/index.d.mts +0 -42
  109. package/dist/services/config/index.d.mts.map +0 -1
  110. package/dist/services/config/index.mjs +0 -2
  111. package/dist/services/config/index.mjs.map +0 -1
  112. package/dist/services/contextContribution/index.cjs +0 -3
  113. package/dist/services/contextContribution/index.cjs.map +0 -1
  114. package/dist/services/contextContribution/index.mjs +0 -3
  115. package/dist/services/contextContribution/index.mjs.map +0 -1
  116. package/dist/services/delegation/index.cjs +0 -6
  117. package/dist/services/delegation/index.cjs.map +0 -1
  118. package/dist/services/delegation/index.d.cts +0 -192
  119. package/dist/services/delegation/index.d.cts.map +0 -1
  120. package/dist/services/delegation/index.d.mts +0 -192
  121. package/dist/services/delegation/index.d.mts.map +0 -1
  122. package/dist/services/delegation/index.mjs +0 -6
  123. package/dist/services/delegation/index.mjs.map +0 -1
  124. package/dist/services/delegationPlatform/index.cjs +0 -2
  125. package/dist/services/delegationPlatform/index.cjs.map +0 -1
  126. package/dist/services/delegationPlatform/index.mjs +0 -2
  127. package/dist/services/delegationPlatform/index.mjs.map +0 -1
  128. package/dist/services/invariants/index.cjs +0 -2
  129. package/dist/services/invariants/index.cjs.map +0 -1
  130. package/dist/services/invariants/index.d.cts +0 -23
  131. package/dist/services/invariants/index.d.cts.map +0 -1
  132. package/dist/services/invariants/index.d.mts +0 -23
  133. package/dist/services/invariants/index.d.mts.map +0 -1
  134. package/dist/services/invariants/index.mjs +0 -2
  135. package/dist/services/invariants/index.mjs.map +0 -1
  136. package/dist/services/logSinkTelemetry/index.cjs +0 -2
  137. package/dist/services/logSinkTelemetry/index.cjs.map +0 -1
  138. package/dist/services/logSinkTelemetry/index.d.cts +0 -23
  139. package/dist/services/logSinkTelemetry/index.d.cts.map +0 -1
  140. package/dist/services/logSinkTelemetry/index.d.mts +0 -23
  141. package/dist/services/logSinkTelemetry/index.d.mts.map +0 -1
  142. package/dist/services/logSinkTelemetry/index.mjs +0 -2
  143. package/dist/services/logSinkTelemetry/index.mjs.map +0 -1
  144. package/dist/services/paths/index.cjs +0 -2
  145. package/dist/services/paths/index.cjs.map +0 -1
  146. package/dist/services/paths/index.d.cts +0 -25
  147. package/dist/services/paths/index.d.cts.map +0 -1
  148. package/dist/services/paths/index.d.mts +0 -25
  149. package/dist/services/paths/index.d.mts.map +0 -1
  150. package/dist/services/paths/index.mjs +0 -2
  151. package/dist/services/paths/index.mjs.map +0 -1
  152. package/dist/services/processLiveness/index.cjs +0 -2
  153. package/dist/services/processLiveness/index.cjs.map +0 -1
  154. package/dist/services/processLiveness/index.d.cts +0 -11
  155. package/dist/services/processLiveness/index.d.cts.map +0 -1
  156. package/dist/services/processLiveness/index.d.mts +0 -11
  157. package/dist/services/processLiveness/index.d.mts.map +0 -1
  158. package/dist/services/processLiveness/index.mjs +0 -2
  159. package/dist/services/processLiveness/index.mjs.map +0 -1
  160. package/dist/services/reconcile/index.cjs +0 -2
  161. package/dist/services/reconcile/index.cjs.map +0 -1
  162. package/dist/services/reconcile/index.d.cts +0 -33
  163. package/dist/services/reconcile/index.d.cts.map +0 -1
  164. package/dist/services/reconcile/index.d.mts +0 -33
  165. package/dist/services/reconcile/index.d.mts.map +0 -1
  166. package/dist/services/reconcile/index.mjs +0 -2
  167. package/dist/services/reconcile/index.mjs.map +0 -1
  168. package/dist/services/reducer/index.cjs +0 -3
  169. package/dist/services/reducer/index.cjs.map +0 -1
  170. package/dist/services/reducer/index.d.cts +0 -71
  171. package/dist/services/reducer/index.d.cts.map +0 -1
  172. package/dist/services/reducer/index.d.mts +0 -71
  173. package/dist/services/reducer/index.d.mts.map +0 -1
  174. package/dist/services/reducer/index.mjs +0 -3
  175. package/dist/services/reducer/index.mjs.map +0 -1
  176. package/dist/services/taskNarration/index.cjs +0 -2
  177. package/dist/services/taskNarration/index.cjs.map +0 -1
  178. package/dist/services/taskNarration/index.mjs +0 -2
  179. package/dist/services/taskNarration/index.mjs.map +0 -1
  180. package/dist/services/taskResult/index.cjs +0 -7
  181. package/dist/services/taskResult/index.cjs.map +0 -1
  182. package/dist/services/taskResult/index.d.cts +0 -50
  183. package/dist/services/taskResult/index.d.cts.map +0 -1
  184. package/dist/services/taskResult/index.d.mts +0 -50
  185. package/dist/services/taskResult/index.d.mts.map +0 -1
  186. package/dist/services/taskResult/index.mjs +0 -7
  187. package/dist/services/taskResult/index.mjs.map +0 -1
  188. package/dist/services/taskStore/index.cjs +0 -2
  189. package/dist/services/taskStore/index.cjs.map +0 -1
  190. package/dist/services/taskStore/index.d.cts +0 -69
  191. package/dist/services/taskStore/index.d.cts.map +0 -1
  192. package/dist/services/taskStore/index.d.mts +0 -69
  193. package/dist/services/taskStore/index.d.mts.map +0 -1
  194. package/dist/services/taskStore/index.mjs +0 -2
  195. package/dist/services/taskStore/index.mjs.map +0 -1
  196. package/dist/store-invariants.cjs +0 -1
  197. package/dist/store-invariants.d.cts +0 -2
  198. package/dist/store-invariants.d.mts +0 -2
  199. package/dist/store-invariants.mjs +0 -1
  200. package/dist/store-paths.cjs +0 -1
  201. package/dist/store-paths.d.cts +0 -2
  202. package/dist/store-paths.d.mts +0 -2
  203. package/dist/store-paths.mjs +0 -1
  204. package/dist/store-process-liveness.cjs +0 -1
  205. package/dist/store-process-liveness.d.cts +0 -2
  206. package/dist/store-process-liveness.d.mts +0 -2
  207. package/dist/store-process-liveness.mjs +0 -1
  208. package/dist/store-reconcile.cjs +0 -1
  209. package/dist/store-reconcile.d.cts +0 -2
  210. package/dist/store-reconcile.d.mts +0 -2
  211. package/dist/store-reconcile.mjs +0 -1
  212. package/dist/store-reducer.cjs +0 -1
  213. package/dist/store-reducer.d.cts +0 -2
  214. package/dist/store-reducer.d.mts +0 -2
  215. package/dist/store-reducer.mjs +0 -1
  216. package/dist/store-task-graph.cjs +0 -1
  217. package/dist/store-task-graph.d.cts +0 -2
  218. package/dist/store-task-graph.d.mts +0 -2
  219. package/dist/store-task-graph.mjs +0 -1
  220. package/dist/store-task-store.cjs +0 -1
  221. package/dist/store-task-store.d.cts +0 -2
  222. package/dist/store-task-store.d.mts +0 -2
  223. package/dist/store-task-store.mjs +0 -1
  224. package/dist/store-types.cjs +0 -1
  225. package/dist/store-types.d.cts +0 -2
  226. package/dist/store-types.d.mts +0 -2
  227. package/dist/store-types.mjs +0 -1
  228. package/dist/tool-prompt-guidelines.cjs +0 -1
  229. package/dist/tool-prompt-guidelines.d.cts +0 -2
  230. package/dist/tool-prompt-guidelines.d.mts +0 -2
  231. package/dist/tool-prompt-guidelines.mjs +0 -1
  232. package/dist/tool-response-envelope.cjs +0 -1
  233. package/dist/tool-response-envelope.d.cts +0 -2
  234. package/dist/tool-response-envelope.d.mts +0 -2
  235. package/dist/tool-response-envelope.mjs +0 -1
  236. package/dist/tool-schema.cjs +0 -1
  237. package/dist/tool-schema.d.cts +0 -3
  238. package/dist/tool-schema.d.mts +0 -3
  239. package/dist/tool-schema.mjs +0 -1
  240. package/dist/tool-task-tool.cjs +0 -1
  241. package/dist/tool-task-tool.d.cts +0 -3
  242. package/dist/tool-task-tool.d.mts +0 -3
  243. package/dist/tool-task-tool.mjs +0 -1
  244. package/dist/tools/task.cjs +0 -3
  245. package/dist/tools/task.cjs.map +0 -1
  246. package/dist/tools/task.d.cts +0 -22
  247. package/dist/tools/task.d.cts.map +0 -1
  248. package/dist/tools/task.d.mts +0 -22
  249. package/dist/tools/task.d.mts.map +0 -1
  250. package/dist/tools/task.mjs +0 -3
  251. package/dist/tools/task.mjs.map +0 -1
  252. package/dist/tui/format.cjs +0 -4
  253. package/dist/tui/format.cjs.map +0 -1
  254. package/dist/tui/format.d.cts +0 -61
  255. package/dist/tui/format.d.cts.map +0 -1
  256. package/dist/tui/format.d.mts +0 -61
  257. package/dist/tui/format.d.mts.map +0 -1
  258. package/dist/tui/format.mjs +0 -4
  259. package/dist/tui/format.mjs.map +0 -1
  260. package/dist/tui/selectors.cjs +0 -2
  261. package/dist/tui/selectors.cjs.map +0 -1
  262. package/dist/tui/selectors.d.cts +0 -59
  263. package/dist/tui/selectors.d.cts.map +0 -1
  264. package/dist/tui/selectors.d.mts +0 -59
  265. package/dist/tui/selectors.d.mts.map +0 -1
  266. package/dist/tui/selectors.mjs +0 -2
  267. package/dist/tui/selectors.mjs.map +0 -1
  268. package/dist/tui/taskOverlay.cjs +0 -2
  269. package/dist/tui/taskOverlay.cjs.map +0 -1
  270. package/dist/tui/taskOverlay.d.cts +0 -37
  271. package/dist/tui/taskOverlay.d.cts.map +0 -1
  272. package/dist/tui/taskOverlay.d.mts +0 -37
  273. package/dist/tui/taskOverlay.d.mts.map +0 -1
  274. package/dist/tui/taskOverlay.mjs +0 -2
  275. package/dist/tui/taskOverlay.mjs.map +0 -1
  276. package/dist/tui/taskSpace.cjs +0 -5
  277. package/dist/tui/taskSpace.cjs.map +0 -1
  278. package/dist/tui/taskSpace.d.cts +0 -60
  279. package/dist/tui/taskSpace.d.cts.map +0 -1
  280. package/dist/tui/taskSpace.d.mts +0 -60
  281. package/dist/tui/taskSpace.d.mts.map +0 -1
  282. package/dist/tui/taskSpace.mjs +0 -5
  283. package/dist/tui/taskSpace.mjs.map +0 -1
  284. package/dist/tui-format.cjs +0 -1
  285. package/dist/tui-format.d.cts +0 -2
  286. package/dist/tui-format.d.mts +0 -2
  287. package/dist/tui-format.mjs +0 -1
  288. package/dist/tui-selectors.cjs +0 -1
  289. package/dist/tui-selectors.d.cts +0 -2
  290. package/dist/tui-selectors.d.mts +0 -2
  291. package/dist/tui-selectors.mjs +0 -1
  292. package/dist/tui-task-overlay.cjs +0 -1
  293. package/dist/tui-task-overlay.d.cts +0 -2
  294. package/dist/tui-task-overlay.d.mts +0 -2
  295. package/dist/tui-task-overlay.mjs +0 -1
  296. package/dist/tui-task-space.cjs +0 -1
  297. package/dist/tui-task-space.d.cts +0 -2
  298. package/dist/tui-task-space.d.mts +0 -2
  299. package/dist/tui-task-space.mjs +0 -1
  300. package/dist/types/delegation.cjs +0 -2
  301. package/dist/types/delegation.cjs.map +0 -1
  302. package/dist/types/delegation.d.cts +0 -5
  303. package/dist/types/delegation.d.cts.map +0 -1
  304. package/dist/types/delegation.d.mts +0 -5
  305. package/dist/types/delegation.d.mts.map +0 -1
  306. package/dist/types/delegation.mjs +0 -2
  307. package/dist/types/delegation.mjs.map +0 -1
  308. package/dist/types/telemetry.cjs +0 -2
  309. package/dist/types/telemetry.cjs.map +0 -1
  310. package/dist/types/telemetry.d.cts +0 -35
  311. package/dist/types/telemetry.d.cts.map +0 -1
  312. package/dist/types/telemetry.d.mts +0 -35
  313. package/dist/types/telemetry.d.mts.map +0 -1
  314. package/dist/types/telemetry.mjs +0 -2
  315. package/dist/types/telemetry.mjs.map +0 -1
  316. package/dist/types/webTasks.cjs +0 -2
  317. package/dist/types/webTasks.cjs.map +0 -1
  318. package/dist/types/webTasks.mjs +0 -2
  319. package/dist/types/webTasks.mjs.map +0 -1
  320. package/src/extensions/web.ts +0 -18
  321. package/src/web/components/TaskDetailDialog.tsx +0 -251
  322. package/src/web/components/TaskToolMessage.tsx +0 -120
  323. package/src/web/components/TasksActivitySection.tsx +0 -200
  324. package/src/web/lib/taskToolFormat.ts +0 -330
  325. package/src/web/stores/tasksStore.ts +0 -114
  326. package/src/web/tsconfig.json +0 -23
@@ -1 +0,0 @@
1
- {"version":3,"file":"taskGraph.cjs","names":[],"sources":["../../src/models/taskGraph.ts"],"sourcesContent":["import type { Task } from './task';\n\nconst COMPLETED_STATUS: Task['status'] = 'completed';\nconst DELETED_STATUS: Task['status'] = 'deleted';\n\n/** True when a non-empty list has no visible work left to finish. */\nexport function isTaskListComplete(taskList: readonly Task[]): boolean {\n const visible = taskList.filter((task) => task.status !== DELETED_STATUS);\n return visible.length > 0 && visible.every((task) => task.status === COMPLETED_STATUS);\n}\n\n/**\n * Would merging `newBlockedBy` into `taskId`'s dependencies introduce a cycle?\n *\n * Takes the proposed additions explicitly so the reducer can ask the question\n * before mutating anything.\n */\nexport function detectCycle(taskList: readonly Task[], taskId: number, newBlockedBy: readonly number[]): boolean {\n const edges = new Map<number, number[]>();\n for (const task of taskList) {\n if (task.id === taskId) {\n edges.set(task.id, [...new Set([...(task.blockedBy ?? []), ...newBlockedBy])]);\n } else {\n edges.set(task.id, task.blockedBy ? [...task.blockedBy] : []);\n }\n }\n\n const visiting = new Set<number>();\n const visited = new Set<number>();\n const hasCycleFrom = (node: number): boolean => {\n if (visiting.has(node)) return true;\n if (visited.has(node)) return false;\n visiting.add(node);\n for (const next of edges.get(node) ?? []) {\n if (hasCycleFrom(next)) return true;\n }\n visiting.delete(node);\n visited.add(node);\n return false;\n };\n\n for (const node of edges.keys()) {\n if (hasCycleFrom(node)) return true;\n }\n return false;\n}\n\n/** Inverse adjacency: for each task, which tasks list it in their blockedBy. */\nexport function deriveBlocks(taskList: readonly Task[]): Map<number, number[]> {\n const blocks = new Map<number, number[]>();\n for (const task of taskList) {\n for (const dep of task.blockedBy ?? []) {\n const dependents = blocks.get(dep) ?? [];\n dependents.push(task.id);\n blocks.set(dep, dependents);\n }\n }\n return blocks;\n}\n\n/**\n * Blocking dependencies of a task that are not yet resolved.\n *\n * `completed` clears a dependency; `failed` deliberately does not, so a failed\n * delegation keeps its dependents blocked instead of silently releasing work\n * that was never actually finished.\n */\nexport function unresolvedBlockers(taskList: readonly Task[], task: Task): number[] {\n return (task.blockedBy ?? []).filter((dep) => {\n const blocker = taskList.find((candidate) => candidate.id === dep);\n if (!blocker) return false;\n return blocker.status !== COMPLETED_STATUS && blocker.status !== DELETED_STATUS;\n });\n}\n\nexport function isBlocked(taskList: readonly Task[], task: Task): boolean {\n return unresolvedBlockers(taskList, task).length > 0;\n}\n"],"mappings":"AAEA,MAAM,EAAmC,YACnC,EAAiC,UAGvC,SAAgB,EAAmB,EAAoC,CACrE,IAAM,EAAU,EAAS,OAAQ,GAAS,EAAK,SAAW,CAAc,EACxE,OAAO,EAAQ,OAAS,GAAK,EAAQ,MAAO,GAAS,EAAK,SAAW,CAAgB,CACvF,CAQA,SAAgB,EAAY,EAA2B,EAAgB,EAA0C,CAC/G,IAAM,EAAQ,IAAI,IAClB,IAAK,IAAM,KAAQ,EACb,EAAK,KAAO,EACd,EAAM,IAAI,EAAK,GAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAI,EAAK,WAAa,CAAC,EAAI,GAAG,CAAY,CAAC,CAAC,CAAC,EAE7E,EAAM,IAAI,EAAK,GAAI,EAAK,UAAY,CAAC,GAAG,EAAK,SAAS,EAAI,CAAC,CAAC,EAIhE,IAAM,EAAW,IAAI,IACf,EAAU,IAAI,IACd,EAAgB,GAA0B,CAC9C,GAAI,EAAS,IAAI,CAAI,EAAG,MAAO,GAC/B,GAAI,EAAQ,IAAI,CAAI,EAAG,MAAO,GAC9B,EAAS,IAAI,CAAI,EACjB,IAAK,IAAM,KAAQ,EAAM,IAAI,CAAI,GAAK,CAAC,EACrC,GAAI,EAAa,CAAI,EAAG,MAAO,GAIjC,OAFA,EAAS,OAAO,CAAI,EACpB,EAAQ,IAAI,CAAI,EACT,EACT,EAEA,IAAK,IAAM,KAAQ,EAAM,KAAK,EAC5B,GAAI,EAAa,CAAI,EAAG,MAAO,GAEjC,MAAO,EACT,CAGA,SAAgB,EAAa,EAAkD,CAC7E,IAAM,EAAS,IAAI,IACnB,IAAK,IAAM,KAAQ,EACjB,IAAK,IAAM,KAAO,EAAK,WAAa,CAAC,EAAG,CACtC,IAAM,EAAa,EAAO,IAAI,CAAG,GAAK,CAAC,EACvC,EAAW,KAAK,EAAK,EAAE,EACvB,EAAO,IAAI,EAAK,CAAU,CAC5B,CAEF,OAAO,CACT,CASA,SAAgB,EAAmB,EAA2B,EAAsB,CAClF,OAAQ,EAAK,WAAa,CAAC,EAAA,CAAG,OAAQ,GAAQ,CAC5C,IAAM,EAAU,EAAS,KAAM,GAAc,EAAU,KAAO,CAAG,EAEjE,OADK,EACE,EAAQ,SAAW,GAAoB,EAAQ,SAAW,EAD5C,EAEvB,CAAC,CACH,CAEA,SAAgB,EAAU,EAA2B,EAAqB,CACxE,OAAO,EAAmB,EAAU,CAAI,CAAC,CAAC,OAAS,CACrD"}
@@ -1,24 +0,0 @@
1
- import { Task } from "./task.cjs";
2
- //#region src/models/taskGraph.d.ts
3
- /** True when a non-empty list has no visible work left to finish. */
4
- export declare function isTaskListComplete(taskList: readonly Task[]): boolean;
5
- /**
6
- * Would merging `newBlockedBy` into `taskId`'s dependencies introduce a cycle?
7
- *
8
- * Takes the proposed additions explicitly so the reducer can ask the question
9
- * before mutating anything.
10
- */
11
- export declare function detectCycle(taskList: readonly Task[], taskId: number, newBlockedBy: readonly number[]): boolean;
12
- /** Inverse adjacency: for each task, which tasks list it in their blockedBy. */
13
- export declare function deriveBlocks(taskList: readonly Task[]): Map<number, number[]>;
14
- /**
15
- * Blocking dependencies of a task that are not yet resolved.
16
- *
17
- * `completed` clears a dependency; `failed` deliberately does not, so a failed
18
- * delegation keeps its dependents blocked instead of silently releasing work
19
- * that was never actually finished.
20
- */
21
- export declare function unresolvedBlockers(taskList: readonly Task[], task: Task): number[];
22
- export declare function isBlocked(taskList: readonly Task[], task: Task): boolean;
23
- //#endregion
24
- //# sourceMappingURL=taskGraph.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taskGraph.d.cts","names":[],"sources":["../../src/models/taskGraph.ts"],"mappings":";;;wBAMgB,mBAAmB,mBAAmB;;;;;;;wBAWtC,YAAY,mBAAmB,QAAQ,gBAAgB;;wBA+BvD,aAAa,mBAAmB,SAAS;;;;;;;;wBAmBzC,mBAAmB,mBAAmB,QAAQ,MAAM;wBAQpD,UAAU,mBAAmB,QAAQ,MAAM"}
@@ -1,24 +0,0 @@
1
- import { Task } from "./task.mjs";
2
- //#region src/models/taskGraph.d.ts
3
- /** True when a non-empty list has no visible work left to finish. */
4
- export declare function isTaskListComplete(taskList: readonly Task[]): boolean;
5
- /**
6
- * Would merging `newBlockedBy` into `taskId`'s dependencies introduce a cycle?
7
- *
8
- * Takes the proposed additions explicitly so the reducer can ask the question
9
- * before mutating anything.
10
- */
11
- export declare function detectCycle(taskList: readonly Task[], taskId: number, newBlockedBy: readonly number[]): boolean;
12
- /** Inverse adjacency: for each task, which tasks list it in their blockedBy. */
13
- export declare function deriveBlocks(taskList: readonly Task[]): Map<number, number[]>;
14
- /**
15
- * Blocking dependencies of a task that are not yet resolved.
16
- *
17
- * `completed` clears a dependency; `failed` deliberately does not, so a failed
18
- * delegation keeps its dependents blocked instead of silently releasing work
19
- * that was never actually finished.
20
- */
21
- export declare function unresolvedBlockers(taskList: readonly Task[], task: Task): number[];
22
- export declare function isBlocked(taskList: readonly Task[], task: Task): boolean;
23
- //#endregion
24
- //# sourceMappingURL=taskGraph.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taskGraph.d.mts","names":[],"sources":["../../src/models/taskGraph.ts"],"mappings":";;;wBAMgB,mBAAmB,mBAAmB;;;;;;;wBAWtC,YAAY,mBAAmB,QAAQ,gBAAgB;;wBA+BvD,aAAa,mBAAmB,SAAS;;;;;;;;wBAmBzC,mBAAmB,mBAAmB,QAAQ,MAAM;wBAQpD,UAAU,mBAAmB,QAAQ,MAAM"}
@@ -1,2 +0,0 @@
1
- const e=`completed`,t=`deleted`;function n(n){let r=n.filter(e=>e.status!==t);return r.length>0&&r.every(t=>t.status===e)}function r(e,t,n){let r=new Map;for(let i of e)i.id===t?r.set(i.id,[...new Set([...i.blockedBy??[],...n])]):r.set(i.id,i.blockedBy?[...i.blockedBy]:[]);let i=new Set,a=new Set,o=e=>{if(i.has(e))return!0;if(a.has(e))return!1;i.add(e);for(let t of r.get(e)??[])if(o(t))return!0;return i.delete(e),a.add(e),!1};for(let e of r.keys())if(o(e))return!0;return!1}function i(e){let t=new Map;for(let n of e)for(let e of n.blockedBy??[]){let r=t.get(e)??[];r.push(n.id),t.set(e,r)}return t}function a(n,r){return(r.blockedBy??[]).filter(r=>{let i=n.find(e=>e.id===r);return i?i.status!==e&&i.status!==t:!1})}function o(e,t){return a(e,t).length>0}export{i as deriveBlocks,r as detectCycle,o as isBlocked,n as isTaskListComplete,a as unresolvedBlockers};
2
- //# sourceMappingURL=taskGraph.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"taskGraph.mjs","names":[],"sources":["../../src/models/taskGraph.ts"],"sourcesContent":["import type { Task } from './task';\n\nconst COMPLETED_STATUS: Task['status'] = 'completed';\nconst DELETED_STATUS: Task['status'] = 'deleted';\n\n/** True when a non-empty list has no visible work left to finish. */\nexport function isTaskListComplete(taskList: readonly Task[]): boolean {\n const visible = taskList.filter((task) => task.status !== DELETED_STATUS);\n return visible.length > 0 && visible.every((task) => task.status === COMPLETED_STATUS);\n}\n\n/**\n * Would merging `newBlockedBy` into `taskId`'s dependencies introduce a cycle?\n *\n * Takes the proposed additions explicitly so the reducer can ask the question\n * before mutating anything.\n */\nexport function detectCycle(taskList: readonly Task[], taskId: number, newBlockedBy: readonly number[]): boolean {\n const edges = new Map<number, number[]>();\n for (const task of taskList) {\n if (task.id === taskId) {\n edges.set(task.id, [...new Set([...(task.blockedBy ?? []), ...newBlockedBy])]);\n } else {\n edges.set(task.id, task.blockedBy ? [...task.blockedBy] : []);\n }\n }\n\n const visiting = new Set<number>();\n const visited = new Set<number>();\n const hasCycleFrom = (node: number): boolean => {\n if (visiting.has(node)) return true;\n if (visited.has(node)) return false;\n visiting.add(node);\n for (const next of edges.get(node) ?? []) {\n if (hasCycleFrom(next)) return true;\n }\n visiting.delete(node);\n visited.add(node);\n return false;\n };\n\n for (const node of edges.keys()) {\n if (hasCycleFrom(node)) return true;\n }\n return false;\n}\n\n/** Inverse adjacency: for each task, which tasks list it in their blockedBy. */\nexport function deriveBlocks(taskList: readonly Task[]): Map<number, number[]> {\n const blocks = new Map<number, number[]>();\n for (const task of taskList) {\n for (const dep of task.blockedBy ?? []) {\n const dependents = blocks.get(dep) ?? [];\n dependents.push(task.id);\n blocks.set(dep, dependents);\n }\n }\n return blocks;\n}\n\n/**\n * Blocking dependencies of a task that are not yet resolved.\n *\n * `completed` clears a dependency; `failed` deliberately does not, so a failed\n * delegation keeps its dependents blocked instead of silently releasing work\n * that was never actually finished.\n */\nexport function unresolvedBlockers(taskList: readonly Task[], task: Task): number[] {\n return (task.blockedBy ?? []).filter((dep) => {\n const blocker = taskList.find((candidate) => candidate.id === dep);\n if (!blocker) return false;\n return blocker.status !== COMPLETED_STATUS && blocker.status !== DELETED_STATUS;\n });\n}\n\nexport function isBlocked(taskList: readonly Task[], task: Task): boolean {\n return unresolvedBlockers(taskList, task).length > 0;\n}\n"],"mappings":"AAEA,MAAM,EAAmC,YACnC,EAAiC,UAGvC,SAAgB,EAAmB,EAAoC,CACrE,IAAM,EAAU,EAAS,OAAQ,GAAS,EAAK,SAAW,CAAc,EACxE,OAAO,EAAQ,OAAS,GAAK,EAAQ,MAAO,GAAS,EAAK,SAAW,CAAgB,CACvF,CAQA,SAAgB,EAAY,EAA2B,EAAgB,EAA0C,CAC/G,IAAM,EAAQ,IAAI,IAClB,IAAK,IAAM,KAAQ,EACb,EAAK,KAAO,EACd,EAAM,IAAI,EAAK,GAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAI,EAAK,WAAa,CAAC,EAAI,GAAG,CAAY,CAAC,CAAC,CAAC,EAE7E,EAAM,IAAI,EAAK,GAAI,EAAK,UAAY,CAAC,GAAG,EAAK,SAAS,EAAI,CAAC,CAAC,EAIhE,IAAM,EAAW,IAAI,IACf,EAAU,IAAI,IACd,EAAgB,GAA0B,CAC9C,GAAI,EAAS,IAAI,CAAI,EAAG,MAAO,GAC/B,GAAI,EAAQ,IAAI,CAAI,EAAG,MAAO,GAC9B,EAAS,IAAI,CAAI,EACjB,IAAK,IAAM,KAAQ,EAAM,IAAI,CAAI,GAAK,CAAC,EACrC,GAAI,EAAa,CAAI,EAAG,MAAO,GAIjC,OAFA,EAAS,OAAO,CAAI,EACpB,EAAQ,IAAI,CAAI,EACT,EACT,EAEA,IAAK,IAAM,KAAQ,EAAM,KAAK,EAC5B,GAAI,EAAa,CAAI,EAAG,MAAO,GAEjC,MAAO,EACT,CAGA,SAAgB,EAAa,EAAkD,CAC7E,IAAM,EAAS,IAAI,IACnB,IAAK,IAAM,KAAQ,EACjB,IAAK,IAAM,KAAO,EAAK,WAAa,CAAC,EAAG,CACtC,IAAM,EAAa,EAAO,IAAI,CAAG,GAAK,CAAC,EACvC,EAAW,KAAK,EAAK,EAAE,EACvB,EAAO,IAAI,EAAK,CAAU,CAC5B,CAEF,OAAO,CACT,CASA,SAAgB,EAAmB,EAA2B,EAAsB,CAClF,OAAQ,EAAK,WAAa,CAAC,EAAA,CAAG,OAAQ,GAAQ,CAC5C,IAAM,EAAU,EAAS,KAAM,GAAc,EAAU,KAAO,CAAG,EAEjE,OADK,EACE,EAAQ,SAAW,GAAoB,EAAQ,SAAW,EAD5C,EAEvB,CAAC,CACH,CAEA,SAAgB,EAAU,EAA2B,EAAqB,CACxE,OAAO,EAAmB,EAAU,CAAI,CAAC,CAAC,OAAS,CACrD"}
@@ -1,2 +0,0 @@
1
- let e=require("@agimon-ai/doompi-core/api-contracts"),t=require("typebox");const n=t.Type.String(),r=t.Type.Number(),i=t.Type.Optional,a=t.Type.Object({tasks:t.Type.Array(t.Type.Object({id:r,subject:n,description:i(n),activeForm:i(n),status:(e=>t.Type.Union(e.map(e=>t.Type.Literal(e))))([`pending`,`in_progress`,`completed`,`failed`,`deleted`]),blockedBy:t.Type.Array(r),owner:i(n),updatedAt:i(n),delegation:i(t.Type.Object({agent:i(n),state:i(n)}))})),rev:r}),o=(0,e.defineApiContract)({version:1,http:[],dynamic:[],sockets:[`global`,`workspace`].map(e=>({id:`tasks.channel`,scope:e,service:`doompi.hub.v1`,member:`task_graph`,kind:`channel`,direction:`server-to-client`,description:`Task graph channel payload.`,input:a}))});exports.TasksPayloadSchema=a,exports.apiContracts=o,exports.default=o;
2
- //# sourceMappingURL=apiContracts.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiContracts.cjs","names":["Type","defineApiContract"],"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":"2EAGA,MAAM,EAAIA,EAAAA,KAAK,OAAO,EAChB,EAAIA,EAAAA,KAAK,OAAO,EAChB,EAAIA,EAAAA,KAAK,SAEF,EAAqBA,EAAAA,KAAK,OAAO,CAC5C,MAAOA,EAAAA,KAAK,MACVA,EAAAA,KAAK,OAAO,CACV,GAAI,EACJ,QAAS,EACT,YAAa,EAAE,CAAC,EAChB,WAAY,EAAE,CAAC,EACf,QAR8B,GAAgBA,EAAAA,KAAK,MAAM,EAAO,IAAK,GAAUA,EAAAA,KAAK,QAAQ,CAAK,CAAC,CAAC,EAQ3F,CAAS,CAAC,UAAW,cAAe,YAAa,SAAU,SAAS,CAAC,EAC7E,UAAWA,EAAAA,KAAK,MAAM,CAAC,EACvB,MAAO,EAAE,CAAC,EACV,UAAW,EAAE,CAAC,EACd,WAAY,EAAEA,EAAAA,KAAK,OAAO,CAAE,MAAO,EAAE,CAAC,EAAG,MAAO,EAAE,CAAC,CAAE,CAAC,CAAC,CACzD,CAAC,CACH,EACA,IAAK,CACP,CAAC,EACY,GAAA,EAAeC,EAAAA,kBAAAA,CAAkB,CAC5C,QAAS,EACT,KAAM,CAAC,EACP,QAAS,CAAC,EACV,QAAU,CAAC,SAAU,WAAW,CAAC,CAAW,IAAK,IAAW,CAC1D,GAAI,gBACJ,QACA,QAAS,gBACT,OAAQ,aACR,KAAM,UACN,UAAW,mBACX,YAAa,8BACb,MAAO,CACT,EAAE,CACJ,CAAC"}
@@ -1,53 +0,0 @@
1
- import { Type } from "typebox";
2
- //#region src/schemas/apiContracts.d.ts
3
- export declare const apiContracts: {
4
- version: 1;
5
- protocols?: Record<string, string> | undefined;
6
- schemas?: Record<string, boolean | object> | undefined;
7
- http: {
8
- id: string;
9
- scope: "global" | "session" | "workspace";
10
- basePath?: string | undefined;
11
- path: string;
12
- method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
13
- description: string;
14
- availability?: string | undefined;
15
- authentication: "device" | "none" | "owner";
16
- parameters?: {
17
- name: string;
18
- in: "header" | "path" | "query";
19
- required: boolean;
20
- schema: boolean | object;
21
- }[] | undefined;
22
- body?: {
23
- contentType: string;
24
- contentTypes?: string[] | undefined;
25
- required: boolean;
26
- schema: boolean | object;
27
- } | undefined;
28
- responses: Record<string, {
29
- description: string;
30
- contentType?: string | undefined;
31
- schema?: boolean | object | undefined;
32
- events?: Record<string, boolean | object> | undefined;
33
- }>;
34
- }[];
35
- sockets: {
36
- id: string;
37
- scope: "global" | "session" | "workspace";
38
- description: string;
39
- availability?: string | undefined;
40
- service: string;
41
- member: string;
42
- direction: "client-to-server" | "server-to-client";
43
- kind: "channel" | "method" | "state";
44
- input: boolean | object;
45
- output?: boolean | object | undefined;
46
- errors?: boolean | object | undefined;
47
- }[];
48
- dynamic: string[];
49
- gaps?: string[] | undefined;
50
- };
51
- //#endregion
52
- export { apiContracts as default };
53
- //# sourceMappingURL=apiContracts.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiContracts.d.cts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAuBa"}
@@ -1,53 +0,0 @@
1
- import { Type } from "typebox";
2
- //#region src/schemas/apiContracts.d.ts
3
- export declare const apiContracts: {
4
- version: 1;
5
- protocols?: Record<string, string> | undefined;
6
- schemas?: Record<string, boolean | object> | undefined;
7
- http: {
8
- id: string;
9
- scope: "global" | "session" | "workspace";
10
- basePath?: string | undefined;
11
- path: string;
12
- method: "DELETE" | "GET" | "HEAD" | "OPTIONS" | "PATCH" | "POST" | "PUT";
13
- description: string;
14
- availability?: string | undefined;
15
- authentication: "device" | "none" | "owner";
16
- parameters?: {
17
- name: string;
18
- in: "header" | "path" | "query";
19
- required: boolean;
20
- schema: boolean | object;
21
- }[] | undefined;
22
- body?: {
23
- contentType: string;
24
- contentTypes?: string[] | undefined;
25
- required: boolean;
26
- schema: boolean | object;
27
- } | undefined;
28
- responses: Record<string, {
29
- description: string;
30
- contentType?: string | undefined;
31
- schema?: boolean | object | undefined;
32
- events?: Record<string, boolean | object> | undefined;
33
- }>;
34
- }[];
35
- sockets: {
36
- id: string;
37
- scope: "global" | "session" | "workspace";
38
- description: string;
39
- availability?: string | undefined;
40
- service: string;
41
- member: string;
42
- direction: "client-to-server" | "server-to-client";
43
- kind: "channel" | "method" | "state";
44
- input: boolean | object;
45
- output?: boolean | object | undefined;
46
- errors?: boolean | object | undefined;
47
- }[];
48
- dynamic: string[];
49
- gaps?: string[] | undefined;
50
- };
51
- //#endregion
52
- export { apiContracts as default };
53
- //# sourceMappingURL=apiContracts.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../src/schemas/apiContracts.ts"],"mappings":";;qBAuBa"}
@@ -1,2 +0,0 @@
1
- import{defineApiContract as e}from"@agimon-ai/doompi-core/api-contracts";import{Type as t}from"typebox";const n=t.String(),r=t.Number(),i=t.Optional,a=t.Object({tasks:t.Array(t.Object({id:r,subject:n,description:i(n),activeForm:i(n),status:(e=>t.Union(e.map(e=>t.Literal(e))))([`pending`,`in_progress`,`completed`,`failed`,`deleted`]),blockedBy:t.Array(r),owner:i(n),updatedAt:i(n),delegation:i(t.Object({agent:i(n),state:i(n)}))})),rev:r}),o=e({version:1,http:[],dynamic:[],sockets:[`global`,`workspace`].map(e=>({id:`tasks.channel`,scope:e,service:`doompi.hub.v1`,member:`task_graph`,kind:`channel`,direction:`server-to-client`,description:`Task graph channel payload.`,input:a}))});export{a as TasksPayloadSchema,o as apiContracts,o as default};
2
- //# sourceMappingURL=apiContracts.mjs.map
@@ -1 +0,0 @@
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":"wGAGA,MAAM,EAAI,EAAK,OAAO,EAChB,EAAI,EAAK,OAAO,EAChB,EAAI,EAAK,SAEF,EAAqB,EAAK,OAAO,CAC5C,MAAO,EAAK,MACV,EAAK,OAAO,CACV,GAAI,EACJ,QAAS,EACT,YAAa,EAAE,CAAC,EAChB,WAAY,EAAE,CAAC,EACf,QAR8B,GAAgB,EAAK,MAAM,EAAO,IAAK,GAAU,EAAK,QAAQ,CAAK,CAAC,CAAC,EAQ3F,CAAS,CAAC,UAAW,cAAe,YAAa,SAAU,SAAS,CAAC,EAC7E,UAAW,EAAK,MAAM,CAAC,EACvB,MAAO,EAAE,CAAC,EACV,UAAW,EAAE,CAAC,EACd,WAAY,EAAE,EAAK,OAAO,CAAE,MAAO,EAAE,CAAC,EAAG,MAAO,EAAE,CAAC,CAAE,CAAC,CAAC,CACzD,CAAC,CACH,EACA,IAAK,CACP,CAAC,EACY,EAAe,EAAkB,CAC5C,QAAS,EACT,KAAM,CAAC,EACP,QAAS,CAAC,EACV,QAAU,CAAC,SAAU,WAAW,CAAC,CAAW,IAAK,IAAW,CAC1D,GAAI,gBACJ,QACA,QAAS,gBACT,OAAQ,aACR,KAAM,UACN,UAAW,mBACX,YAAa,8BACb,MAAO,CACT,EAAE,CACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- require("../types/delegation.cjs");const e=require("../constants/task.cjs");let t=require("typebox"),n=require("@agimon-ai/doompi-core/delegation");const r=[`upsert`,`list`,`get`,`delete`,`clear`,`assign`,`cancel`],i=[`pending`,`in_progress`,`completed`,`failed`,`deleted`],a=[`fresh`,`fork`],o={upsert:[`action`,`tasks`],list:[`action`,`status`,`includeDeleted`],get:[`action`,`id`],delete:[`action`,`id`],clear:[`action`],assign:[`action`,`assignments`],cancel:[`action`,`id`]};function s(e,t){return o[e].includes(t)}const c=t.Type.Union([t.Type.Integer(),t.Type.String()]),l=t.Type.Object({id:t.Type.Optional(t.Type.Integer({description:`Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.`})),ref:t.Type.Optional(t.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.`})),subject:t.Type.Optional(t.Type.String({description:`Short imperative subject. Required when the entry has no id; on an entry with an id it renames.`})),description:t.Type.Optional(t.Type.String({description:`Long-form detail; becomes the brief handed to the subagent on assign.`})),activeForm:t.Type.Optional(t.Type.String({description:`Present-continuous label shown while in_progress (e.g. 'writing tests')`})),status:t.Type.Optional(t.Type.String({enum:[...i],description:`New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.`})),blockedBy:t.Type.Optional(t.Type.Array(c,{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.`})),addBlockedBy:t.Type.Optional(t.Type.Array(c,{description:`Dependencies to add (ids or earlier refs). Additive; do not resend the full array.`})),removeBlockedBy:t.Type.Optional(t.Type.Array(c,{description:`Dependencies to remove. Additive; do not resend the full array.`})),owner:t.Type.Optional(t.Type.String({description:`Owner label; assign sets it to the subagent name.`})),metadata:t.Type.Optional(t.Type.Record(t.Type.String(),t.Type.Unknown(),{description:`Merged into the task; a null value deletes that key.`}))},{additionalProperties:!1}),u=t.Type.Object({id:t.Type.Integer({description:`Pending, unblocked task id to delegate`}),agent:t.Type.String({description:`Exact discovered subagent name`}),inlineAgent:t.Type.Optional(n.InlineAgentSchema),instructions:t.Type.Optional(t.Type.String({description:`Extra instructions appended to this delegated brief`})),relevantFiles:t.Type.Optional(t.Type.Array(t.Type.String(),{description:`Files already read or located, relative to the working directory; at most 12 are used.`})),priorFindings:t.Type.Optional(t.Type.String({description:`Established facts this child should consume rather than re-derive`})),model:t.Type.Optional(t.Type.String({description:`Model override for this delegated run`})),context:t.Type.Optional(t.Type.String({enum:[...a],description:`Starting context for this child: 'fresh' or 'fork'`}))},{additionalProperties:!1}),d=t.Type.Object({action:t.Type.String({enum:[...r]}),tasks:t.Type.Optional(t.Type.Array(l,{minItems:1,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.`})),assignments:t.Type.Optional(t.Type.Array(u,{minItems:1,description:`Required for assign, one entry per task, including when there is only one.`})),id:t.Type.Optional(t.Type.Integer({description:`Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.`})),status:t.Type.Optional(t.Type.String({enum:[...i],description:`list only: return just the tasks in this status. To SET a status, upsert the task by id.`})),includeDeleted:t.Type.Optional(t.Type.Boolean({description:`list only: also return deleted tombstones. Default false.`}))});exports.COMMAND_NAME=e.COMMAND_NAME,exports.ERR_REQUIRES_INTERACTIVE=`/tasks requires interactive mode`,exports.MSG_NO_TASKS=`No tasks yet. Ask the agent to add some!`,exports.MSG_UPSERT_FIELD_MISPLACED=`Per-task fields belong inside each tasks[] entry, not at the top level: {"action":"upsert","tasks":[{"id":3,"status":"completed"}]}.`,exports.TASK_ACTIONS=r,exports.TASK_ACTION_FIELDS=o,exports.TASK_CONTEXTS=a,exports.TASK_STATUSES=i,exports.TOOL_LABEL=`Task`,exports.TOOL_NAME=`task`,exports.TaskAssignmentSchema=u,exports.TaskItemSchema=l,exports.TaskParamsSchema=d,exports.taskActionAcceptsField=s;
2
- //# sourceMappingURL=task.cjs.map
@@ -1 +0,0 @@
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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"}
@@ -1,103 +0,0 @@
1
- import { TaskAction } from "../models/task.cjs";
2
- import { COMMAND_NAME } from "../constants/task.cjs";
3
- import { Static, Type } from "typebox";
4
- //#region src/schemas/task.d.ts
5
- export declare const TASK_ACTIONS: readonly ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'];
6
- export declare const TASK_STATUSES: readonly ['pending', 'in_progress', 'completed', 'failed', 'deleted'];
7
- export declare const TASK_CONTEXTS: readonly ['fresh', 'fork'];
8
- export declare const TOOL_NAME = "task";
9
- export declare const TOOL_LABEL = "Task";
10
- export declare const ERR_REQUIRES_INTERACTIVE = "/tasks requires interactive mode";
11
- export declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
12
- /**
13
- * Which top-level fields each action accepts.
14
- *
15
- * The params object is flat and shared across every action, so the schema alone
16
- * cannot express "upsert has no top-level id". That gap matters: a call like
17
- * `{"action":"upsert","id":3,"tasks":[{"status":"completed"}]}` would otherwise
18
- * silently create a duplicate task, because the entry itself carries no id.
19
- */
20
- export declare const TASK_ACTION_FIELDS: {
21
- readonly upsert: readonly ["action", "tasks"];
22
- readonly list: readonly ["action", "status", "includeDeleted"];
23
- readonly get: readonly ["action", "id"];
24
- readonly delete: readonly ["action", "id"];
25
- readonly clear: readonly ["action"];
26
- readonly assign: readonly ["action", "assignments"];
27
- readonly cancel: readonly ["action", "id"];
28
- };
29
- export declare function taskActionAcceptsField(action: TaskAction, field: string): boolean;
30
- /** Correction hint appended when a per-task field lands at the top level. */
31
- export declare 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\"}]}.";
32
- /**
33
- * One entry of an upsert. `additionalProperties: false` is load-bearing: pi
34
- * validates tool arguments against this schema before `execute` runs, so a
35
- * stray `{"action":"update"}` inside an entry is rejected at the boundary.
36
- */
37
- export declare const TaskItemSchema: Type.TObject<{
38
- id: Type.TOptional<Type.TInteger>;
39
- ref: Type.TOptional<Type.TString>;
40
- subject: Type.TOptional<Type.TString>;
41
- description: Type.TOptional<Type.TString>;
42
- activeForm: Type.TOptional<Type.TString>;
43
- status: Type.TOptional<Type.TString>;
44
- blockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
45
- addBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
46
- removeBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
47
- owner: Type.TOptional<Type.TString>;
48
- metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
49
- }>;
50
- /** One task-to-agent handoff in a native assignment batch. */
51
- export declare const TaskAssignmentSchema: Type.TObject<{
52
- id: Type.TInteger;
53
- agent: Type.TString;
54
- inlineAgent: Type.TOptional<Type.TObject<{
55
- systemPrompt: Type.TString;
56
- }>>;
57
- instructions: Type.TOptional<Type.TString>;
58
- relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
59
- priorFindings: Type.TOptional<Type.TString>;
60
- model: Type.TOptional<Type.TString>;
61
- context: Type.TOptional<Type.TString>;
62
- }>;
63
- /**
64
- * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so
65
- * wording changes here change model behaviour.
66
- */
67
- export declare const TaskParamsSchema: Type.TObject<{
68
- action: Type.TString;
69
- tasks: Type.TOptional<Type.TArray<Type.TObject<{
70
- id: Type.TOptional<Type.TInteger>;
71
- ref: Type.TOptional<Type.TString>;
72
- subject: Type.TOptional<Type.TString>;
73
- description: Type.TOptional<Type.TString>;
74
- activeForm: Type.TOptional<Type.TString>;
75
- status: Type.TOptional<Type.TString>;
76
- blockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
77
- addBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
78
- removeBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
79
- owner: Type.TOptional<Type.TString>;
80
- metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
81
- }>>>;
82
- assignments: Type.TOptional<Type.TArray<Type.TObject<{
83
- id: Type.TInteger;
84
- agent: Type.TString;
85
- inlineAgent: Type.TOptional<Type.TObject<{
86
- systemPrompt: Type.TString;
87
- }>>;
88
- instructions: Type.TOptional<Type.TString>;
89
- relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
90
- priorFindings: Type.TOptional<Type.TString>;
91
- model: Type.TOptional<Type.TString>;
92
- context: Type.TOptional<Type.TString>;
93
- }>>>;
94
- id: Type.TOptional<Type.TInteger>;
95
- status: Type.TOptional<Type.TString>;
96
- includeDeleted: Type.TOptional<Type.TBoolean>;
97
- }>;
98
- export type TaskItemParams = Static<typeof TaskItemSchema>;
99
- export type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;
100
- export type TaskParams = Static<typeof TaskParamsSchema>;
101
- //#endregion
102
- export { COMMAND_NAME };
103
- //# sourceMappingURL=task.d.cts.map
@@ -1 +0,0 @@
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"}
@@ -1,103 +0,0 @@
1
- import { TaskAction } from "../models/task.mjs";
2
- import { COMMAND_NAME } from "../constants/task.mjs";
3
- import { Static, Type } from "typebox";
4
- //#region src/schemas/task.d.ts
5
- export declare const TASK_ACTIONS: readonly ['upsert', 'list', 'get', 'delete', 'clear', 'assign', 'cancel'];
6
- export declare const TASK_STATUSES: readonly ['pending', 'in_progress', 'completed', 'failed', 'deleted'];
7
- export declare const TASK_CONTEXTS: readonly ['fresh', 'fork'];
8
- export declare const TOOL_NAME = "task";
9
- export declare const TOOL_LABEL = "Task";
10
- export declare const ERR_REQUIRES_INTERACTIVE = "/tasks requires interactive mode";
11
- export declare const MSG_NO_TASKS = "No tasks yet. Ask the agent to add some!";
12
- /**
13
- * Which top-level fields each action accepts.
14
- *
15
- * The params object is flat and shared across every action, so the schema alone
16
- * cannot express "upsert has no top-level id". That gap matters: a call like
17
- * `{"action":"upsert","id":3,"tasks":[{"status":"completed"}]}` would otherwise
18
- * silently create a duplicate task, because the entry itself carries no id.
19
- */
20
- export declare const TASK_ACTION_FIELDS: {
21
- readonly upsert: readonly ["action", "tasks"];
22
- readonly list: readonly ["action", "status", "includeDeleted"];
23
- readonly get: readonly ["action", "id"];
24
- readonly delete: readonly ["action", "id"];
25
- readonly clear: readonly ["action"];
26
- readonly assign: readonly ["action", "assignments"];
27
- readonly cancel: readonly ["action", "id"];
28
- };
29
- export declare function taskActionAcceptsField(action: TaskAction, field: string): boolean;
30
- /** Correction hint appended when a per-task field lands at the top level. */
31
- export declare 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\"}]}.";
32
- /**
33
- * One entry of an upsert. `additionalProperties: false` is load-bearing: pi
34
- * validates tool arguments against this schema before `execute` runs, so a
35
- * stray `{"action":"update"}` inside an entry is rejected at the boundary.
36
- */
37
- export declare const TaskItemSchema: Type.TObject<{
38
- id: Type.TOptional<Type.TInteger>;
39
- ref: Type.TOptional<Type.TString>;
40
- subject: Type.TOptional<Type.TString>;
41
- description: Type.TOptional<Type.TString>;
42
- activeForm: Type.TOptional<Type.TString>;
43
- status: Type.TOptional<Type.TString>;
44
- blockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
45
- addBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
46
- removeBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
47
- owner: Type.TOptional<Type.TString>;
48
- metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
49
- }>;
50
- /** One task-to-agent handoff in a native assignment batch. */
51
- export declare const TaskAssignmentSchema: Type.TObject<{
52
- id: Type.TInteger;
53
- agent: Type.TString;
54
- inlineAgent: Type.TOptional<Type.TObject<{
55
- systemPrompt: Type.TString;
56
- }>>;
57
- instructions: Type.TOptional<Type.TString>;
58
- relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
59
- priorFindings: Type.TOptional<Type.TString>;
60
- model: Type.TOptional<Type.TString>;
61
- context: Type.TOptional<Type.TString>;
62
- }>;
63
- /**
64
- * Tool parameters. Every `description` doubles as LLM-facing prompt copy, so
65
- * wording changes here change model behaviour.
66
- */
67
- export declare const TaskParamsSchema: Type.TObject<{
68
- action: Type.TString;
69
- tasks: Type.TOptional<Type.TArray<Type.TObject<{
70
- id: Type.TOptional<Type.TInteger>;
71
- ref: Type.TOptional<Type.TString>;
72
- subject: Type.TOptional<Type.TString>;
73
- description: Type.TOptional<Type.TString>;
74
- activeForm: Type.TOptional<Type.TString>;
75
- status: Type.TOptional<Type.TString>;
76
- blockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
77
- addBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
78
- removeBlockedBy: Type.TOptional<Type.TArray<Type.TUnion<[Type.TInteger, Type.TString]>>>;
79
- owner: Type.TOptional<Type.TString>;
80
- metadata: Type.TOptional<Type.TRecord<"^.*$", Type.TUnknown>>;
81
- }>>>;
82
- assignments: Type.TOptional<Type.TArray<Type.TObject<{
83
- id: Type.TInteger;
84
- agent: Type.TString;
85
- inlineAgent: Type.TOptional<Type.TObject<{
86
- systemPrompt: Type.TString;
87
- }>>;
88
- instructions: Type.TOptional<Type.TString>;
89
- relevantFiles: Type.TOptional<Type.TArray<Type.TString>>;
90
- priorFindings: Type.TOptional<Type.TString>;
91
- model: Type.TOptional<Type.TString>;
92
- context: Type.TOptional<Type.TString>;
93
- }>>>;
94
- id: Type.TOptional<Type.TInteger>;
95
- status: Type.TOptional<Type.TString>;
96
- includeDeleted: Type.TOptional<Type.TBoolean>;
97
- }>;
98
- export type TaskItemParams = Static<typeof TaskItemSchema>;
99
- export type TaskAssignmentParams = Static<typeof TaskAssignmentSchema>;
100
- export type TaskParams = Static<typeof TaskParamsSchema>;
101
- //#endregion
102
- export { COMMAND_NAME };
103
- //# sourceMappingURL=task.d.mts.map
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- import"../types/delegation.mjs";import{COMMAND_NAME as e}from"../constants/task.mjs";import{Type as t}from"typebox";import{InlineAgentSchema as n}from"@agimon-ai/doompi-core/delegation";const r=[`upsert`,`list`,`get`,`delete`,`clear`,`assign`,`cancel`],i=[`pending`,`in_progress`,`completed`,`failed`,`deleted`],a=[`fresh`,`fork`],o=`task`,s=`Task`,c=`/tasks requires interactive mode`,l=`No tasks yet. Ask the agent to add some!`,u={upsert:[`action`,`tasks`],list:[`action`,`status`,`includeDeleted`],get:[`action`,`id`],delete:[`action`,`id`],clear:[`action`],assign:[`action`,`assignments`],cancel:[`action`,`id`]};function d(e,t){return u[e].includes(t)}const f=`Per-task fields belong inside each tasks[] entry, not at the top level: {"action":"upsert","tasks":[{"id":3,"status":"completed"}]}.`,p=t.Union([t.Integer(),t.String()]),m=t.Object({id:t.Optional(t.Integer({description:`Existing task id to change. Omit to create. An unknown id fails only that entry; it never creates.`})),ref:t.Optional(t.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.`})),subject:t.Optional(t.String({description:`Short imperative subject. Required when the entry has no id; on an entry with an id it renames.`})),description:t.Optional(t.String({description:`Long-form detail; becomes the brief handed to the subagent on assign.`})),activeForm:t.Optional(t.String({description:`Present-continuous label shown while in_progress (e.g. 'writing tests')`})),status:t.Optional(t.String({enum:[...i],description:`New entries default to pending and cannot start deleted; on an entry with an id the transition must be legal.`})),blockedBy:t.Optional(t.Array(p,{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.`})),addBlockedBy:t.Optional(t.Array(p,{description:`Dependencies to add (ids or earlier refs). Additive; do not resend the full array.`})),removeBlockedBy:t.Optional(t.Array(p,{description:`Dependencies to remove. Additive; do not resend the full array.`})),owner:t.Optional(t.String({description:`Owner label; assign sets it to the subagent name.`})),metadata:t.Optional(t.Record(t.String(),t.Unknown(),{description:`Merged into the task; a null value deletes that key.`}))},{additionalProperties:!1}),h=t.Object({id:t.Integer({description:`Pending, unblocked task id to delegate`}),agent:t.String({description:`Exact discovered subagent name`}),inlineAgent:t.Optional(n),instructions:t.Optional(t.String({description:`Extra instructions appended to this delegated brief`})),relevantFiles:t.Optional(t.Array(t.String(),{description:`Files already read or located, relative to the working directory; at most 12 are used.`})),priorFindings:t.Optional(t.String({description:`Established facts this child should consume rather than re-derive`})),model:t.Optional(t.String({description:`Model override for this delegated run`})),context:t.Optional(t.String({enum:[...a],description:`Starting context for this child: 'fresh' or 'fork'`}))},{additionalProperties:!1}),g=t.Object({action:t.String({enum:[...r]}),tasks:t.Optional(t.Array(m,{minItems:1,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.`})),assignments:t.Optional(t.Array(h,{minItems:1,description:`Required for assign, one entry per task, including when there is only one.`})),id:t.Optional(t.Integer({description:`Task id, for get, delete and cancel. Not accepted by upsert or assign: those carry ids inside tasks[] and assignments[] entries.`})),status:t.Optional(t.String({enum:[...i],description:`list only: return just the tasks in this status. To SET a status, upsert the task by id.`})),includeDeleted:t.Optional(t.Boolean({description:`list only: also return deleted tombstones. Default false.`}))});export{e as COMMAND_NAME,c as ERR_REQUIRES_INTERACTIVE,l as MSG_NO_TASKS,f as MSG_UPSERT_FIELD_MISPLACED,r as TASK_ACTIONS,u as TASK_ACTION_FIELDS,a as TASK_CONTEXTS,i as TASK_STATUSES,s as TOOL_LABEL,o as TOOL_NAME,h as TaskAssignmentSchema,m as TaskItemSchema,g as TaskParamsSchema,d as taskActionAcceptsField};
2
- //# sourceMappingURL=task.mjs.map
@@ -1 +0,0 @@
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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"}
@@ -1,2 +0,0 @@
1
- const e=`DOOM_TASK_MAX_TASKS`,t=`DOOM_TASK_COLLAPSE_KEY`,n=`DOOM_TASK_STORE_TTL_MS`,r=`DOOM_TASK_DELEGATION_TIMEOUT_MS`,i=`ctrl+shift+t`,a=2592e6,o=12e5;function s(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:{}}function c(e){let t=s(e),n=typeof t.maxWidgetLines==`number`&&Number.isFinite(t.maxWidgetLines)?Math.min(Math.max(t.maxWidgetLines,3),60):12,r=typeof t.maxTasks==`number`&&Number.isSafeInteger(t.maxTasks)&&t.maxTasks>0?t.maxTasks:15,c=typeof t.storeTtlMs==`number`&&Number.isFinite(t.storeTtlMs)&&t.storeTtlMs>0?t.storeTtlMs:a,l=typeof t.delegationTimeoutMs==`number`&&Number.isFinite(t.delegationTimeoutMs)&&t.delegationTimeoutMs>0?t.delegationTimeoutMs:o;return{maxWidgetLines:n,maxTasks:r,storeTtlMs:c,collapseKey:typeof t.collapseKey==`string`&&t.collapseKey.trim()?t.collapseKey.trim().toLowerCase()===`off`?`off`:t.collapseKey.trim():i,delegationTimeoutMs:l}}function l(e=process.env){let t=Number.parseInt(e.DOOM_TASK_MAX_WIDGET_LINES??``,10);return Number.isFinite(t)?Math.min(Math.max(t,3),60):12}function u(t=process.env){let n=Number(t[e]);return Number.isSafeInteger(n)&&n>0?n:15}function d(e=process.env){let t=Number(e[n]);return Number.isFinite(t)&&t>0?t:a}function f(e=process.env){let t=Number(e[r]);return Number.isFinite(t)&&t>0?t:o}function p(e=process.env){let n=e[t]?.trim();return n?n.toLowerCase()===`off`?`off`:n:i}exports.COLLAPSE_KEY_ENV=t,exports.COLLAPSE_KEY_OFF=`off`,exports.DEFAULT_COLLAPSE_KEY=i,exports.DEFAULT_DELEGATION_TIMEOUT_MS=o,exports.DEFAULT_MAX_TASKS=15,exports.DEFAULT_MAX_WIDGET_LINES=12,exports.DEFAULT_STORE_TTL_MS=a,exports.DELEGATION_TIMEOUT_MS_ENV=r,exports.MAX_TASKS_ENV=e,exports.MAX_WIDGET_LINES_ENV=`DOOM_TASK_MAX_WIDGET_LINES`,exports.STORE_TTL_MS_ENV=n,exports.getDelegationTimeoutMs=f,exports.getMaxTasks=u,exports.getMaxWidgetLines=l,exports.getStoreTtlMs=d,exports.parsePiTaskConfig=c,exports.resolveCollapseKey=p;
2
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
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,MACa,EAAgB,sBAChB,EAAmB,yBACnB,EAAmB,yBACnB,EAA4B,kCAI5B,EAAuB,eACvB,EAAuB,OAGvB,EAAgC,KAc7C,SAAS,EAAa,EAAyC,CAC7D,OAAyB,OAAO,GAAU,UAAnC,GAA+C,CAAC,MAAM,QAAQ,CAAK,EAAK,EAAoC,CAAC,CACtH,CAGA,SAAgB,EAAkB,EAA8B,CAC9D,IAAM,EAAS,EAAa,CAAK,EAC3B,EACJ,OAAO,EAAO,gBAAmB,UAAY,OAAO,SAAS,EAAO,cAAc,EAC9E,KAAK,IAAI,KAAK,IAAI,EAAO,eAAgB,CAAgB,EAAG,EAAgB,EAAA,GAE5E,EACJ,OAAO,EAAO,UAAa,UAAY,OAAO,cAAc,EAAO,QAAQ,GAAK,EAAO,SAAW,EAC9F,EAAO,SAAA,GAEP,EACJ,OAAO,EAAO,YAAe,UAAY,OAAO,SAAS,EAAO,UAAU,GAAK,EAAO,WAAa,EAC/F,EAAO,WACP,EACA,EACJ,OAAO,EAAO,qBAAwB,UACtC,OAAO,SAAS,EAAO,mBAAmB,GAC1C,EAAO,oBAAsB,EACzB,EAAO,oBACP,EAQN,MAAO,CAAE,iBAAgB,WAAU,aAAY,YAN7C,OAAO,EAAO,aAAgB,UAAY,EAAO,YAAY,KAAK,EAC9D,EAAO,YAAY,KAAK,CAAC,CAAC,YAAY,IAAA,MAAA,MAEpC,EAAO,YAAY,KAAK,EAC1B,EAEsD,qBAAoB,CAClF,CAGA,SAAgB,EAAkB,EAAyB,QAAQ,IAAa,CAC9E,IAAM,EAAM,OAAO,SAAS,EAAA,4BAA6B,GAAI,EAAE,EAE/D,OADK,OAAO,SAAS,CAAG,EACjB,KAAK,IAAI,KAAK,IAAI,EAAK,CAAgB,EAAG,EAAgB,EADtC,EAE7B,CAGA,SAAgB,EAAY,EAAyB,QAAQ,IAAa,CACxE,IAAM,EAAM,OAAO,EAAI,EAAc,EACrC,OAAO,OAAO,cAAc,CAAG,GAAK,EAAM,EAAI,EAAA,EAChD,CAGA,SAAgB,EAAc,EAAyB,QAAQ,IAAa,CAC1E,IAAM,EAAM,OAAO,EAAI,EAAiB,EACxC,OAAO,OAAO,SAAS,CAAG,GAAK,EAAM,EAAI,EAAM,CACjD,CAGA,SAAgB,EAAuB,EAAyB,QAAQ,IAAa,CACnF,IAAM,EAAM,OAAO,EAAI,EAA0B,EACjD,OAAO,OAAO,SAAS,CAAG,GAAK,EAAM,EAAI,EAAM,CACjD,CAGA,SAAgB,EAAmB,EAAyB,QAAQ,IAAa,CAC/E,IAAM,EAAa,EAAI,EAAiB,EAAE,KAAK,EAE/C,OADK,EACE,EAAW,YAAY,IAAA,MAAA,MAA4C,EADlD,CAE1B"}
@@ -1,42 +0,0 @@
1
- //#region src/services/config/index.d.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
- export declare const MAX_WIDGET_LINES_ENV = "DOOM_TASK_MAX_WIDGET_LINES";
10
- export declare const MAX_TASKS_ENV = "DOOM_TASK_MAX_TASKS";
11
- export declare const COLLAPSE_KEY_ENV = "DOOM_TASK_COLLAPSE_KEY";
12
- export declare const STORE_TTL_MS_ENV = "DOOM_TASK_STORE_TTL_MS";
13
- export declare const DELEGATION_TIMEOUT_MS_ENV = "DOOM_TASK_DELEGATION_TIMEOUT_MS";
14
- export declare const DEFAULT_MAX_WIDGET_LINES = 12;
15
- export declare const DEFAULT_MAX_TASKS = 15;
16
- export declare const DEFAULT_COLLAPSE_KEY = "ctrl+shift+t";
17
- export declare const DEFAULT_STORE_TTL_MS: number;
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
- export declare const DEFAULT_DELEGATION_TIMEOUT_MS: number;
21
- export declare const COLLAPSE_KEY_OFF = "off";
22
- export interface PiTaskConfig {
23
- maxWidgetLines: number;
24
- maxTasks: number;
25
- storeTtlMs: number;
26
- collapseKey: string;
27
- delegationTimeoutMs: number;
28
- }
29
- /** Parse configuration only after the Pi host has applied its project-trust policy. */
30
- export declare function parsePiTaskConfig(value: unknown): PiTaskConfig;
31
- /** Rows the overlay may use for content, clamped to a sane range. */
32
- export declare function getMaxWidgetLines(env?: NodeJS.ProcessEnv): number;
33
- /** Maximum number of non-deleted tasks retained on one board. */
34
- export declare function getMaxTasks(env?: NodeJS.ProcessEnv): number;
35
- /** Retention window for inactive session-tree stores. */
36
- export declare function getStoreTtlMs(env?: NodeJS.ProcessEnv): number;
37
- /** How long a delegated run may go without reporting a result. */
38
- export declare function getDelegationTimeoutMs(env?: NodeJS.ProcessEnv): number;
39
- /** Collapse shortcut, or the `off` sentinel when the user disabled it. */
40
- export declare function resolveCollapseKey(env?: NodeJS.ProcessEnv): string;
41
- //#endregion
42
- //# sourceMappingURL=index.d.cts.map
@@ -1 +0,0 @@
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"}