@agimon-ai/doompi-workflow 0.0.1-alpha.7 → 0.0.1-alpha.71

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 (304) hide show
  1. package/LICENSE +6 -0
  2. package/README.md +122 -26
  3. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  4. package/dist/api-contracts.cjs +1 -0
  5. package/dist/api-contracts.d.cts +2 -0
  6. package/dist/api-contracts.d.mts +2 -0
  7. package/dist/api-contracts.mjs +1 -0
  8. package/dist/extensions/pi.cjs +1 -1
  9. package/dist/extensions/pi.cjs.map +1 -1
  10. package/dist/extensions/pi.d.cts +6 -2
  11. package/dist/extensions/pi.d.cts.map +1 -0
  12. package/dist/extensions/pi.d.mts +6 -2
  13. package/dist/extensions/pi.d.mts.map +1 -0
  14. package/dist/extensions/pi.mjs +1 -1
  15. package/dist/extensions/pi.mjs.map +1 -1
  16. package/dist/extensions/server.cjs +2 -0
  17. package/dist/extensions/server.cjs.map +1 -0
  18. package/dist/extensions/server.d.cts +5 -0
  19. package/dist/extensions/server.d.cts.map +1 -0
  20. package/dist/extensions/server.d.mts +5 -0
  21. package/dist/extensions/server.d.mts.map +1 -0
  22. package/dist/extensions/server.mjs +2 -0
  23. package/dist/extensions/server.mjs.map +1 -0
  24. package/dist/index.cjs +1 -1
  25. package/dist/index.d.cts +2 -3
  26. package/dist/index.d.mts +2 -3
  27. package/dist/index.mjs +1 -1
  28. package/dist/src/constants/workflow.cjs +2 -0
  29. package/dist/src/constants/workflow.cjs.map +1 -0
  30. package/dist/src/constants/workflow.mjs +2 -0
  31. package/dist/src/constants/workflow.mjs.map +1 -0
  32. package/dist/src/controllers/serverRuntime.cjs +2 -0
  33. package/dist/src/controllers/serverRuntime.cjs.map +1 -0
  34. package/dist/src/controllers/serverRuntime.mjs +2 -0
  35. package/dist/src/controllers/serverRuntime.mjs.map +1 -0
  36. package/dist/src/controllers/workflowCatalogChannel.cjs +2 -0
  37. package/dist/src/controllers/workflowCatalogChannel.cjs.map +1 -0
  38. package/dist/src/controllers/workflowCatalogChannel.mjs +2 -0
  39. package/dist/src/controllers/workflowCatalogChannel.mjs.map +1 -0
  40. package/dist/src/controllers/workflowHubApi.cjs +2 -0
  41. package/dist/src/controllers/workflowHubApi.cjs.map +1 -0
  42. package/dist/src/controllers/workflowHubApi.mjs +2 -0
  43. package/dist/src/controllers/workflowHubApi.mjs.map +1 -0
  44. package/dist/src/controllers/workflowsHubChannel.cjs +2 -0
  45. package/dist/src/controllers/workflowsHubChannel.cjs.map +1 -0
  46. package/dist/src/controllers/workflowsHubChannel.mjs +2 -0
  47. package/dist/src/controllers/workflowsHubChannel.mjs.map +1 -0
  48. package/dist/src/schemas/apiContracts.cjs +2 -0
  49. package/dist/src/schemas/apiContracts.cjs.map +1 -0
  50. package/dist/src/schemas/apiContracts.d.cts +53 -0
  51. package/dist/src/schemas/apiContracts.d.cts.map +1 -0
  52. package/dist/src/schemas/apiContracts.d.mts +53 -0
  53. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  54. package/dist/src/schemas/apiContracts.mjs +2 -0
  55. package/dist/src/schemas/apiContracts.mjs.map +1 -0
  56. package/dist/src/schemas/workflowPi.cjs +2 -0
  57. package/dist/src/schemas/workflowPi.cjs.map +1 -0
  58. package/dist/src/schemas/workflowPi.d.cts +1 -0
  59. package/dist/src/schemas/workflowPi.d.mts +1 -0
  60. package/dist/src/schemas/workflowPi.mjs +2 -0
  61. package/dist/src/schemas/workflowPi.mjs.map +1 -0
  62. package/dist/src/services/backgroundWork/index.cjs +2 -0
  63. package/dist/src/services/backgroundWork/index.cjs.map +1 -0
  64. package/dist/src/services/backgroundWork/index.mjs +2 -0
  65. package/dist/src/services/backgroundWork/index.mjs.map +1 -0
  66. package/dist/{workflow/piToolBridge.cjs → src/services/piToolBridge/index.cjs} +2 -2
  67. package/dist/src/services/piToolBridge/index.cjs.map +1 -0
  68. package/dist/{workflow/piToolBridge.mjs → src/services/piToolBridge/index.mjs} +2 -2
  69. package/dist/src/services/piToolBridge/index.mjs.map +1 -0
  70. package/dist/src/services/webWorkflowCatalog/index.cjs +2 -0
  71. package/dist/src/services/webWorkflowCatalog/index.cjs.map +1 -0
  72. package/dist/src/services/webWorkflowCatalog/index.mjs +2 -0
  73. package/dist/src/services/webWorkflowCatalog/index.mjs.map +1 -0
  74. package/dist/src/services/workflowCatalogDeps/index.cjs +2 -0
  75. package/dist/src/services/workflowCatalogDeps/index.cjs.map +1 -0
  76. package/dist/src/services/workflowCatalogDeps/index.mjs +2 -0
  77. package/dist/src/services/workflowCatalogDeps/index.mjs.map +1 -0
  78. package/dist/src/services/workflowExecution/index.cjs +2 -0
  79. package/dist/src/services/workflowExecution/index.cjs.map +1 -0
  80. package/dist/src/services/workflowExecution/index.d.cts +6 -0
  81. package/dist/src/services/workflowExecution/index.d.mts +6 -0
  82. package/dist/src/services/workflowExecution/index.mjs +2 -0
  83. package/dist/src/services/workflowExecution/index.mjs.map +1 -0
  84. package/dist/src/services/workflowFence/index.cjs +2 -0
  85. package/dist/src/services/workflowFence/index.cjs.map +1 -0
  86. package/dist/src/services/workflowFence/index.mjs +2 -0
  87. package/dist/src/services/workflowFence/index.mjs.map +1 -0
  88. package/dist/src/services/workflowLaunchCommand/index.cjs +2 -0
  89. package/dist/src/services/workflowLaunchCommand/index.cjs.map +1 -0
  90. package/dist/src/services/workflowLaunchCommand/index.d.cts +52 -0
  91. package/dist/src/services/workflowLaunchCommand/index.d.cts.map +1 -0
  92. package/dist/src/services/workflowLaunchCommand/index.d.mts +52 -0
  93. package/dist/src/services/workflowLaunchCommand/index.d.mts.map +1 -0
  94. package/dist/src/services/workflowLaunchCommand/index.mjs +2 -0
  95. package/dist/src/services/workflowLaunchCommand/index.mjs.map +1 -0
  96. package/dist/src/services/workflowLauncher/index.cjs +2 -0
  97. package/dist/src/services/workflowLauncher/index.cjs.map +1 -0
  98. package/dist/src/services/workflowLauncher/index.mjs +2 -0
  99. package/dist/src/services/workflowLauncher/index.mjs.map +1 -0
  100. package/dist/src/services/workflowNarration/index.cjs +2 -0
  101. package/dist/src/services/workflowNarration/index.cjs.map +1 -0
  102. package/dist/src/services/workflowNarration/index.mjs +2 -0
  103. package/dist/src/services/workflowNarration/index.mjs.map +1 -0
  104. package/dist/src/services/workflowResource/index.cjs +2 -0
  105. package/dist/src/services/workflowResource/index.cjs.map +1 -0
  106. package/dist/src/services/workflowResource/index.mjs +2 -0
  107. package/dist/src/services/workflowResource/index.mjs.map +1 -0
  108. package/dist/src/services/workflowRuns/index.cjs +3 -0
  109. package/dist/src/services/workflowRuns/index.cjs.map +1 -0
  110. package/dist/src/services/workflowRuns/index.mjs +3 -0
  111. package/dist/src/services/workflowRuns/index.mjs.map +1 -0
  112. package/dist/src/services/workflowTerminal/index.cjs +2 -0
  113. package/dist/src/services/workflowTerminal/index.cjs.map +1 -0
  114. package/dist/src/services/workflowTerminal/index.mjs +2 -0
  115. package/dist/src/services/workflowTerminal/index.mjs.map +1 -0
  116. package/dist/src/services/workflowWatcher/index.cjs +2 -0
  117. package/dist/src/services/workflowWatcher/index.cjs.map +1 -0
  118. package/dist/src/services/workflowWatcher/index.mjs +2 -0
  119. package/dist/src/services/workflowWatcher/index.mjs.map +1 -0
  120. package/dist/src/tools/workflowTools.cjs +5 -0
  121. package/dist/src/tools/workflowTools.cjs.map +1 -0
  122. package/dist/src/tools/workflowTools.mjs +5 -0
  123. package/dist/src/tools/workflowTools.mjs.map +1 -0
  124. package/dist/src/tui/leader.cjs +2 -0
  125. package/dist/src/tui/leader.cjs.map +1 -0
  126. package/dist/src/tui/leader.mjs +2 -0
  127. package/dist/src/tui/leader.mjs.map +1 -0
  128. package/dist/src/tui/workflow/doomOverlay.cjs.map +1 -0
  129. package/dist/src/tui/workflow/doomOverlay.mjs.map +1 -0
  130. package/dist/src/tui/workflow/overlayText.cjs +2 -0
  131. package/dist/src/tui/workflow/overlayText.cjs.map +1 -0
  132. package/dist/src/tui/workflow/overlayText.mjs +2 -0
  133. package/dist/src/tui/workflow/overlayText.mjs.map +1 -0
  134. package/dist/src/tui/workflow/rendering.cjs.map +1 -0
  135. package/dist/src/tui/workflow/rendering.mjs.map +1 -0
  136. package/dist/src/tui/workflow/workflowCatalog.cjs +2 -0
  137. package/dist/src/tui/workflow/workflowCatalog.cjs.map +1 -0
  138. package/dist/src/tui/workflow/workflowCatalog.mjs +2 -0
  139. package/dist/src/tui/workflow/workflowCatalog.mjs.map +1 -0
  140. package/dist/src/tui/workflow/workflowFinishedMessage.cjs +3 -0
  141. package/dist/src/tui/workflow/workflowFinishedMessage.cjs.map +1 -0
  142. package/dist/src/tui/workflow/workflowFinishedMessage.mjs +3 -0
  143. package/dist/src/tui/workflow/workflowFinishedMessage.mjs.map +1 -0
  144. package/dist/src/tui/workflow/workflowInspector.cjs +2 -0
  145. package/dist/src/tui/workflow/workflowInspector.cjs.map +1 -0
  146. package/dist/src/tui/workflow/workflowInspector.mjs +2 -0
  147. package/dist/src/tui/workflow/workflowInspector.mjs.map +1 -0
  148. package/dist/{workflow → src/tui/workflow}/workflowOverlay.cjs +1 -1
  149. package/dist/src/tui/workflow/workflowOverlay.cjs.map +1 -0
  150. package/dist/{workflow → src/tui/workflow}/workflowOverlay.mjs +1 -1
  151. package/dist/src/tui/workflow/workflowOverlay.mjs.map +1 -0
  152. package/dist/src/tui/workflow/workflowPicker.cjs.map +1 -0
  153. package/dist/src/tui/workflow/workflowPicker.mjs.map +1 -0
  154. package/dist/src/tui/workflow/workflowProgressOverlay.cjs +2 -0
  155. package/dist/src/tui/workflow/workflowProgressOverlay.cjs.map +1 -0
  156. package/dist/src/tui/workflow/workflowProgressOverlay.mjs +2 -0
  157. package/dist/src/tui/workflow/workflowProgressOverlay.mjs.map +1 -0
  158. package/dist/src/tui/workflow/workflowPrompt.cjs.map +1 -0
  159. package/dist/src/tui/workflow/workflowPrompt.mjs.map +1 -0
  160. package/dist/src/tui/workflow/workflowRunPanel.cjs +2 -0
  161. package/dist/src/tui/workflow/workflowRunPanel.cjs.map +1 -0
  162. package/dist/src/tui/workflow/workflowRunPanel.mjs +2 -0
  163. package/dist/src/tui/workflow/workflowRunPanel.mjs.map +1 -0
  164. package/dist/src/tui/workflow/workflowStatusRow.cjs +2 -0
  165. package/dist/src/tui/workflow/workflowStatusRow.cjs.map +1 -0
  166. package/dist/src/tui/workflow/workflowStatusRow.mjs +2 -0
  167. package/dist/src/tui/workflow/workflowStatusRow.mjs.map +1 -0
  168. package/dist/src/tui/workflow/workflowStepMessage.cjs +2 -0
  169. package/dist/src/tui/workflow/workflowStepMessage.cjs.map +1 -0
  170. package/dist/src/tui/workflow/workflowStepMessage.mjs +2 -0
  171. package/dist/src/tui/workflow/workflowStepMessage.mjs.map +1 -0
  172. package/dist/src/tui/workflow/workflowToolRender.cjs +7 -0
  173. package/dist/src/tui/workflow/workflowToolRender.cjs.map +1 -0
  174. package/dist/src/tui/workflow/workflowToolRender.mjs +7 -0
  175. package/dist/src/tui/workflow/workflowToolRender.mjs.map +1 -0
  176. package/dist/src/tui/workflowRuntime.cjs +9 -0
  177. package/dist/src/tui/workflowRuntime.cjs.map +1 -0
  178. package/dist/src/tui/workflowRuntime.d.cts +33 -0
  179. package/dist/src/tui/workflowRuntime.d.cts.map +1 -0
  180. package/dist/src/tui/workflowRuntime.d.mts +33 -0
  181. package/dist/src/tui/workflowRuntime.d.mts.map +1 -0
  182. package/dist/src/tui/workflowRuntime.mjs +9 -0
  183. package/dist/src/tui/workflowRuntime.mjs.map +1 -0
  184. package/dist/src/types/webWorkflowTerminal.cjs +2 -0
  185. package/dist/src/types/webWorkflowTerminal.cjs.map +1 -0
  186. package/dist/src/types/webWorkflowTerminal.mjs +2 -0
  187. package/dist/src/types/webWorkflowTerminal.mjs.map +1 -0
  188. package/dist/src/types/webWorkflows.cjs +2 -0
  189. package/dist/src/types/webWorkflows.cjs.map +1 -0
  190. package/dist/src/types/webWorkflows.mjs +2 -0
  191. package/dist/src/types/webWorkflows.mjs.map +1 -0
  192. package/llms.txt +16 -0
  193. package/package.json +88 -24
  194. package/src/extensions/web.ts +80 -0
  195. package/src/prompts/doompi-author-workflow/SKILL.md +30 -0
  196. package/src/prompts/doompi-use-workflow/SKILL.md +21 -0
  197. package/src/types/webWorkflowTerminal.ts +96 -0
  198. package/src/types/webWorkflows.ts +150 -0
  199. package/src/web/LICENSE +29 -0
  200. package/src/web/api/terminalApi.ts +207 -0
  201. package/src/web/components/ArtifactsPane.tsx +451 -0
  202. package/src/web/components/LaunchWorkflowDialog.tsx +259 -0
  203. package/src/web/components/StepTerminalPanel.tsx +243 -0
  204. package/src/web/components/WorkflowCatalogDrawer.tsx +229 -0
  205. package/src/web/components/WorkflowToolMessage.tsx +55 -0
  206. package/src/web/components/WorkflowsActivitySection.tsx +155 -0
  207. package/src/web/components/WorkflowsPanel.tsx +750 -0
  208. package/src/web/lib/launchLine.ts +66 -0
  209. package/src/web/lib/runDuration.ts +15 -0
  210. package/src/web/lib/workflowActivity.ts +102 -0
  211. package/src/web/lib/workflowToolRender.ts +585 -0
  212. package/src/web/stores/catalogStore.ts +123 -0
  213. package/src/web/stores/workflowsStore.ts +91 -0
  214. package/src/web/tsconfig.json +22 -0
  215. package/dist/dispatcher.cjs +0 -2
  216. package/dist/dispatcher.cjs.map +0 -1
  217. package/dist/dispatcher.d.cts +0 -6
  218. package/dist/dispatcher.d.cts.map +0 -1
  219. package/dist/dispatcher.d.mts +0 -6
  220. package/dist/dispatcher.d.mts.map +0 -1
  221. package/dist/dispatcher.mjs +0 -2
  222. package/dist/dispatcher.mjs.map +0 -1
  223. package/dist/extension.cjs +0 -2
  224. package/dist/extension.cjs.map +0 -1
  225. package/dist/extension.d.cts +0 -6
  226. package/dist/extension.d.cts.map +0 -1
  227. package/dist/extension.d.mts +0 -6
  228. package/dist/extension.d.mts.map +0 -1
  229. package/dist/extension.mjs +0 -2
  230. package/dist/extension.mjs.map +0 -1
  231. package/dist/extensions/dispatcher.cjs +0 -2
  232. package/dist/extensions/dispatcher.cjs.map +0 -1
  233. package/dist/extensions/dispatcher.d.cts +0 -2
  234. package/dist/extensions/dispatcher.d.mts +0 -2
  235. package/dist/extensions/dispatcher.mjs +0 -2
  236. package/dist/extensions/dispatcher.mjs.map +0 -1
  237. package/dist/leader.cjs +0 -2
  238. package/dist/leader.cjs.map +0 -1
  239. package/dist/leader.mjs +0 -2
  240. package/dist/leader.mjs.map +0 -1
  241. package/dist/types.cjs +0 -2
  242. package/dist/types.cjs.map +0 -1
  243. package/dist/types.mjs +0 -2
  244. package/dist/types.mjs.map +0 -1
  245. package/dist/workflow/backgroundWork.cjs +0 -2
  246. package/dist/workflow/backgroundWork.cjs.map +0 -1
  247. package/dist/workflow/backgroundWork.mjs +0 -2
  248. package/dist/workflow/backgroundWork.mjs.map +0 -1
  249. package/dist/workflow/doomOverlay.cjs.map +0 -1
  250. package/dist/workflow/doomOverlay.mjs.map +0 -1
  251. package/dist/workflow/overlayText.cjs +0 -2
  252. package/dist/workflow/overlayText.cjs.map +0 -1
  253. package/dist/workflow/overlayText.mjs +0 -2
  254. package/dist/workflow/overlayText.mjs.map +0 -1
  255. package/dist/workflow/piExtension.cjs +0 -11
  256. package/dist/workflow/piExtension.cjs.map +0 -1
  257. package/dist/workflow/piExtension.mjs +0 -11
  258. package/dist/workflow/piExtension.mjs.map +0 -1
  259. package/dist/workflow/piToolBridge.cjs.map +0 -1
  260. package/dist/workflow/piToolBridge.mjs.map +0 -1
  261. package/dist/workflow/piTools.cjs +0 -4
  262. package/dist/workflow/piTools.cjs.map +0 -1
  263. package/dist/workflow/piTools.mjs +0 -4
  264. package/dist/workflow/piTools.mjs.map +0 -1
  265. package/dist/workflow/rendering.cjs.map +0 -1
  266. package/dist/workflow/rendering.mjs.map +0 -1
  267. package/dist/workflow/workflowFooterStatus.cjs +0 -2
  268. package/dist/workflow/workflowFooterStatus.cjs.map +0 -1
  269. package/dist/workflow/workflowFooterStatus.mjs +0 -2
  270. package/dist/workflow/workflowFooterStatus.mjs.map +0 -1
  271. package/dist/workflow/workflowInspector.cjs +0 -2
  272. package/dist/workflow/workflowInspector.cjs.map +0 -1
  273. package/dist/workflow/workflowInspector.mjs +0 -2
  274. package/dist/workflow/workflowInspector.mjs.map +0 -1
  275. package/dist/workflow/workflowLauncher.cjs +0 -2
  276. package/dist/workflow/workflowLauncher.cjs.map +0 -1
  277. package/dist/workflow/workflowLauncher.mjs +0 -2
  278. package/dist/workflow/workflowLauncher.mjs.map +0 -1
  279. package/dist/workflow/workflowOverlay.cjs.map +0 -1
  280. package/dist/workflow/workflowOverlay.mjs.map +0 -1
  281. package/dist/workflow/workflowPicker.cjs.map +0 -1
  282. package/dist/workflow/workflowPicker.mjs.map +0 -1
  283. package/dist/workflow/workflowPrompt.cjs.map +0 -1
  284. package/dist/workflow/workflowPrompt.mjs.map +0 -1
  285. package/dist/workflow/workflowRunPanel.cjs +0 -2
  286. package/dist/workflow/workflowRunPanel.cjs.map +0 -1
  287. package/dist/workflow/workflowRunPanel.mjs +0 -2
  288. package/dist/workflow/workflowRunPanel.mjs.map +0 -1
  289. package/dist/workflow/workflowStatusRow.cjs +0 -2
  290. package/dist/workflow/workflowStatusRow.cjs.map +0 -1
  291. package/dist/workflow/workflowStatusRow.mjs +0 -2
  292. package/dist/workflow/workflowStatusRow.mjs.map +0 -1
  293. package/dist/workflow/workflowStepMessage.cjs +0 -2
  294. package/dist/workflow/workflowStepMessage.cjs.map +0 -1
  295. package/dist/workflow/workflowStepMessage.mjs +0 -2
  296. package/dist/workflow/workflowStepMessage.mjs.map +0 -1
  297. /package/dist/{workflow → src/tui/workflow}/doomOverlay.cjs +0 -0
  298. /package/dist/{workflow → src/tui/workflow}/doomOverlay.mjs +0 -0
  299. /package/dist/{workflow → src/tui/workflow}/rendering.cjs +0 -0
  300. /package/dist/{workflow → src/tui/workflow}/rendering.mjs +0 -0
  301. /package/dist/{workflow → src/tui/workflow}/workflowPicker.cjs +0 -0
  302. /package/dist/{workflow → src/tui/workflow}/workflowPicker.mjs +0 -0
  303. /package/dist/{workflow → src/tui/workflow}/workflowPrompt.cjs +0 -0
  304. /package/dist/{workflow → src/tui/workflow}/workflowPrompt.mjs +0 -0
package/package.json CHANGED
@@ -1,13 +1,41 @@
1
1
  {
2
2
  "name": "@agimon-ai/doompi-workflow",
3
- "version": "0.0.1-alpha.7",
4
- "description": "Doompi workflow execution and monitoring integration",
3
+ "version": "0.0.1-alpha.71",
4
+ "description": "GitHub Actions-style workflow graphs, artifacts, recovery, and asynchronous runs for DoomPi.",
5
+ "keywords": [
6
+ "ai",
7
+ "automation",
8
+ "coding-agent",
9
+ "developer-tools",
10
+ "doompi",
11
+ "github-actions",
12
+ "pi-extension",
13
+ "pi-package",
14
+ "workflow",
15
+ "workflow-orchestration"
16
+ ],
5
17
  "homepage": "https://agimon.ai",
18
+ "bugs": {
19
+ "url": "https://github.com/AgiFlow/doompi/issues"
20
+ },
6
21
  "license": "MIT",
7
22
  "author": "Vuong Ngo",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/AgiFlow/doompi.git",
26
+ "directory": "packages/minor/doompi-workflow"
27
+ },
8
28
  "files": [
9
29
  "dist",
10
- "skills"
30
+ "llms.txt",
31
+ "README.md",
32
+ "src/prompts",
33
+ "skills/workflow-recovery/SKILL.md",
34
+ "src/web",
35
+ "src/extensions/web.ts",
36
+ "src/types/webWorkflows.ts",
37
+ "src/types/webWorkflowTerminal.ts",
38
+ "!src/web/**/*.stories.tsx"
11
39
  ],
12
40
  "type": "module",
13
41
  "main": "./dist/index.cjs",
@@ -19,16 +47,16 @@
19
47
  "import": "./dist/index.mjs",
20
48
  "require": "./dist/index.cjs"
21
49
  },
22
- "./extensions/dispatcher": {
23
- "types": "./dist/extensions/dispatcher.d.mts",
24
- "import": "./dist/extensions/dispatcher.mjs",
25
- "require": "./dist/extensions/dispatcher.cjs"
26
- },
27
50
  "./extensions/pi": {
28
51
  "types": "./dist/extensions/pi.d.mts",
29
52
  "import": "./dist/extensions/pi.mjs",
30
53
  "require": "./dist/extensions/pi.cjs"
31
54
  },
55
+ "./extensions/server": {
56
+ "types": "./dist/extensions/server.d.mts",
57
+ "import": "./dist/extensions/server.mjs",
58
+ "require": "./dist/extensions/server.cjs"
59
+ },
32
60
  "./package.json": "./package.json",
33
61
  "./skills/workflow-recovery/SKILL.md": "./skills/workflow-recovery/SKILL.md"
34
62
  },
@@ -36,25 +64,37 @@
36
64
  "access": "public"
37
65
  },
38
66
  "dependencies": {
39
- "@modelcontextprotocol/sdk": "1.29.0",
40
- "zod": "4.4.3",
41
- "@agimon-ai/workflow-mcp": "0.22.16",
42
- "@agimon-ai/doompi-extension-contracts": "0.0.1-alpha.7",
43
- "@agimon-ai/doompi-telemetry": "0.0.1-alpha.7"
67
+ "@agimon-ai/workflow-mcp": "0.23.19",
68
+ "@deepseek-ai/cordis": "4.0.2",
69
+ "@modelcontextprotocol/sdk": "1.30.0",
70
+ "hono": "4.13.5",
71
+ "typebox": "1.3.25",
72
+ "zod": "4.5.4",
73
+ "@agimon-ai/doompi-minor-mode": "0.0.1-alpha.70",
74
+ "@agimon-ai/doompi-core": "0.0.1-alpha.70",
75
+ "@agimon-ai/doompi-telemetry": "0.0.1-alpha.68",
76
+ "@agimon-ai/doompi-web-components": "0.0.1-alpha.29",
77
+ "@agimon-ai/doompi-ui": "0.0.1-alpha.70",
78
+ "@agimon-ai/doompi-web-security": "0.0.1-alpha.31"
44
79
  },
45
80
  "devDependencies": {
46
- "@earendil-works/pi-coding-agent": "0.84.1",
47
- "@earendil-works/pi-tui": "0.84.1",
48
- "@types/node": "26.1.1",
49
- "@vitest/coverage-v8": "4.1.10",
50
- "tsdown": "0.22.14",
51
- "typescript": "6.0.3",
52
- "vitest": "4.1.10",
53
- "@agimon-ai/doompi-ui": "0.0.1-alpha.7"
81
+ "@earendil-works/pi-coding-agent": "0.85.1",
82
+ "@earendil-works/pi-tui": "0.85.1",
83
+ "@tanstack/react-store": "0.11.1",
84
+ "@tanstack/store": "0.11.1",
85
+ "@types/node": "26.4.1",
86
+ "@types/react": "19.2.18",
87
+ "@types/react-dom": "19.2.7",
88
+ "@vitest/coverage-v8": "5.0.0",
89
+ "react": "19.2.8",
90
+ "react-dom": "19.2.8",
91
+ "tsdown": "0.23.0",
92
+ "typescript": "7.0.2",
93
+ "vitest": "5.0.0"
54
94
  },
55
95
  "peerDependencies": {
56
- "@earendil-works/pi-coding-agent": "0.84.1",
57
- "@earendil-works/pi-tui": "0.84.1"
96
+ "@earendil-works/pi-coding-agent": "0.85.1",
97
+ "@earendil-works/pi-tui": "0.85.1"
58
98
  },
59
99
  "peerDependenciesMeta": {
60
100
  "@earendil-works/pi-coding-agent": {
@@ -67,6 +107,30 @@
67
107
  "engines": {
68
108
  "node": ">=22.19.0"
69
109
  },
110
+ "doompiServer": {
111
+ "entry": "./src/extensions/server.ts",
112
+ "dist": "./dist/extensions/server.mjs",
113
+ "scopes": [
114
+ "global",
115
+ "workspace",
116
+ "session"
117
+ ],
118
+ "contracts": {
119
+ "entry": "./src/exports/apiContracts.ts",
120
+ "dist": "./dist/api-contracts.mjs"
121
+ }
122
+ },
123
+ "doompiWeb": {
124
+ "pluginId": "workflows",
125
+ "channels": [
126
+ "workflow_runs",
127
+ "workflow_catalog"
128
+ ],
129
+ "client": "./src/extensions/web.ts",
130
+ "scopes": [
131
+ "session"
132
+ ]
133
+ },
70
134
  "pi": {
71
135
  "extensions": [
72
136
  "./dist/extensions/pi.mjs"
@@ -75,7 +139,7 @@
75
139
  "scripts": {
76
140
  "build": "tsdown",
77
141
  "test": "vitest --run",
78
- "typecheck": "tsc --noEmit",
142
+ "typecheck": "tsc --noEmit && tsc --noEmit -p src/web/tsconfig.json",
79
143
  "lint": "oxlint . && oxfmt . --check",
80
144
  "fixcode": "oxlint . --fix && oxfmt ."
81
145
  }
@@ -0,0 +1,80 @@
1
+ import { defineWebPlugin } from '@agimon-ai/doompi-core/web';
2
+
3
+ import { WorkflowsActivitySection } from '../web/components/WorkflowsActivitySection';
4
+ import { workflowsTab } from '../web/components/WorkflowsPanel';
5
+ import { WorkflowToolMessage } from '../web/components/WorkflowToolMessage';
6
+ import { openCatalog, openWorkflowCatalogForContext, workflowCatalogChannel } from '../web/stores/catalogStore';
7
+ import { workflowRunsChannel, workflows } from '../web/stores/workflowsStore';
8
+
9
+ const WORKFLOWS_GROUP = { key: 'w', label: 'workflows', detail: 'multi-step agent runs' };
10
+
11
+ const workflowActivitySource = {
12
+ subscribe(listener: () => void) {
13
+ const subscription = workflows.store.subscribe(listener);
14
+ return () => subscription.unsubscribe();
15
+ },
16
+ isActive(sessionId: string | null) {
17
+ return workflows.select(workflows.store.state, sessionId).runs.some((run) => run.stage === 'running');
18
+ },
19
+ };
20
+
21
+ /** The named export the generated plugin registry imports. */
22
+ export const webPlugin = defineWebPlugin({
23
+ id: 'workflows',
24
+ session: {
25
+ // No declared tab: the runs surface is a panel the reader opens from the
26
+ // dock's workflows group, and closes when they are done with it.
27
+ channels: [workflowRunsChannel, workflowCatalogChannel],
28
+ contextActions: [
29
+ {
30
+ id: 'launch-workflow',
31
+ label: 'Launch Workflow',
32
+ detail: 'Choose a workflow, review its inputs, then launch it.',
33
+ kinds: ['work-item'],
34
+ order: 20,
35
+ run: (context) => openWorkflowCatalogForContext(context, workflowsTab),
36
+ },
37
+ ],
38
+ minorModes: [{ name: 'workflow', keys: 'w e', widgetKey: 'workflow-mcp-progress', order: 50 }],
39
+ activityGroups: [
40
+ {
41
+ name: 'workflows',
42
+ keys: 'w r',
43
+ widgetKeys: ['workflow-mcp-progress', 'workflow-mcp-follow'],
44
+ activeSource: workflowActivitySource,
45
+ transientTab: workflowsTab,
46
+ order: 30,
47
+ },
48
+ ],
49
+ // Same name as the group: the dock renders this inside it, in place of the
50
+ // widget's bare presence signal.
51
+ activitySections: [{ id: 'workflows', component: WorkflowsActivitySection }],
52
+ // The workflow tools' timeline cards, the web half of src/tui/workflow/workflowToolRender.ts.
53
+ toolRenderers: [{ tools: ['list_workflows', 'launch_workflow', 'workflow_run'], message: WorkflowToolMessage }],
54
+ // The TUI's SPC w r, w l and w e; recovery (w c) is a TUI-only overlay, so
55
+ // it has no cockpit key yet.
56
+ leaderBindings: [
57
+ {
58
+ id: 'doom-workflow.manage',
59
+ path: [WORKFLOWS_GROUP, { key: 'r', label: 'runs', detail: 'runs in this session' }],
60
+ run: (context) => context.openTransientTab(workflowsTab()),
61
+ },
62
+ {
63
+ id: 'doom-workflow.catalog',
64
+ path: [WORKFLOWS_GROUP, { key: 'l', label: 'launch', detail: 'pick a workflow and launch it' }],
65
+ run: (context) => {
66
+ if (context.sessionId !== null) openCatalog(context.sessionId);
67
+ context.openTransientTab(workflowsTab());
68
+ },
69
+ },
70
+ {
71
+ id: 'doom-workflow.toggle',
72
+ path: [
73
+ WORKFLOWS_GROUP,
74
+ { key: 'e', label: 'toggle', detail: 'give the agent workflow tools or take them back' },
75
+ ],
76
+ command: 'minor workflow',
77
+ },
78
+ ],
79
+ },
80
+ });
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: doompi-author-workflow
3
+ description: Author DoomPi workflow definitions. Use when creating or changing a *.workflow.yml graph, arranging job dependencies and host-executed steps, or deciding how a command requiring a TTY should run.
4
+ ---
5
+
6
+ # Author DoomPi workflows
7
+
8
+ Create a `*.workflow.yml` file and keep its graph explicit:
9
+
10
+ ```yaml
11
+ name: verify
12
+
13
+ jobs:
14
+ test:
15
+ steps:
16
+ - name: Run tests
17
+ run: pnpm test
18
+
19
+ summarize:
20
+ needs: test
21
+ steps:
22
+ - name: Record result
23
+ run: node scripts/write-verification-summary.mjs
24
+ ```
25
+
26
+ `needs` expresses job ordering. Keep steps small enough that failure evidence identifies the command that needs attention. Use runner-specific `interactiveRun` configuration when a command genuinely requires a TTY.
27
+
28
+ Every `run` command executes on the workflow host with that process's environment and privileges. There is no VM, container, or sandbox. Review workflow changes as executable code, avoid embedding secrets, and make retry-sensitive external side effects explicit.
29
+
30
+ Before relying on the graph, enable Workflow mode, discover it with `list_workflows`, launch a disposable run, and inspect job and step status with `workflow_run`. Test a failure path when recovery behavior matters.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: doompi-use-workflow
3
+ description: Use DoomPi workflows. Use when discovering or launching workflows, monitoring or controlling asynchronous runs, interpreting terminal notifications, or recovering a failed run safely.
4
+ ---
5
+
6
+ # Use DoomPi workflows
7
+
8
+ Enable model-visible Workflow tools with `SPC w e`. In a non-interactive harness, set `WORKFLOW_MCP_MODE=on` before starting the session.
9
+
10
+ Use the tools in this order:
11
+
12
+ 1. `list_workflows` discovers available workflow definitions.
13
+ 2. `launch_workflow` registers and starts a run. A successful launch response does not mean the jobs have finished.
14
+ 3. `workflow_run` inspects status, follows progress, or applies a supported control action.
15
+ 4. Wait for a terminal notification and verify the final job and step states before reporting success.
16
+
17
+ In the TUI, `SPC w l` lists the repository's workflows and launches the one under the cursor with `r`, `SPC w r` inspects this session's runs, and `SPC w c` opens recovery. The root session can launch. Child sessions can inspect the catalog but do not receive an unrestricted workflow factory.
18
+
19
+ Recover only a record already in a terminal failure state. Inspect its evidence first, then use the package's `workflow-recovery` runtime skill for the repair workflow. Recovery atomically adopts eligible work, but it cannot make non-idempotent external side effects safe or guarantee that in-process work survives parent shutdown.
20
+
21
+ Workflow steps and model-backed repair can consume provider quota and repeat external effects. Do not relaunch or replay a run merely because progress is quiet. Inspect live ownership and persisted state first.
@@ -0,0 +1,96 @@
1
+ /**
2
+ * The wire contract between this package's hub API and its cockpit client:
3
+ * one run's terminal, and the files its run directory holds.
4
+ *
5
+ * Both halves of the cockpit import these names, so the route strings and the
6
+ * event names live here rather than being spelled twice.
7
+ */
8
+
9
+ import { DOOM_HUB_API_SESSION_QUERY_PARAM } from '@agimon-ai/doompi-core/package-api';
10
+
11
+ /** Segment this package's API is mounted under, below /api/plugin/. */
12
+ export const WORKFLOW_API_BASE_PATH = 'workflow';
13
+ /** Host query parameter that selects the focused session's hub API bundle. */
14
+ export const WORKFLOW_HUB_SESSION_QUERY_PARAM = DOOM_HUB_API_SESSION_QUERY_PARAM;
15
+
16
+ /** The SSE event name the screen stream writes. */
17
+ export const WORKFLOW_SCREEN_EVENT = 'screen';
18
+
19
+ /** Where a run's routes live, below the mount every hub-scoped package API shares. */
20
+ export function workflowRunPath(workspace: string, runKey: string): string {
21
+ return `/api/global/plugin/${WORKFLOW_API_BASE_PATH}/runs/${encodeURIComponent(workspace)}/${encodeURIComponent(runKey)}`;
22
+ }
23
+
24
+ /** What a surface may do with one run's terminal, and why anything is missing. */
25
+ export interface WorkflowTerminalCapabilitiesView {
26
+ readable: boolean;
27
+ writable: boolean;
28
+ resizable: boolean;
29
+ reason?: string;
30
+ }
31
+
32
+ /** One frame of a run's terminal, as the stream pushes it. */
33
+ export interface WorkflowScreenEvent {
34
+ /** The visible screen, newest line last, carrying the colour the run printed. */
35
+ lines: string[];
36
+ capabilities: WorkflowTerminalCapabilitiesView;
37
+ /** True once the run has settled, after which the stream ends. */
38
+ ended?: boolean;
39
+ }
40
+
41
+ /** Answer to taking or releasing the keyboard for one run. */
42
+ export interface WorkflowControlResponse {
43
+ /** True when this caller now holds the keyboard. */
44
+ held: boolean;
45
+ /** The token later writes must carry; absent when control was refused or released. */
46
+ token?: string;
47
+ /** Why control was refused, worded for a reader. */
48
+ reason?: string;
49
+ }
50
+
51
+ /** Answer after a settled run and its directory have been permanently removed. */
52
+ export interface WorkflowDeleteResponse {
53
+ deleted: true;
54
+ }
55
+
56
+ /** How a declared run-directory entry compares with what is on disk. */
57
+ export type WorkflowArtifactState = 'written' | 'empty' | 'pending' | 'unreadable';
58
+
59
+ /** One file or directory in a run's own folder. */
60
+ export interface WorkflowArtifactView {
61
+ /** Path relative to the run directory, which is also the read route's parameter. */
62
+ path: string;
63
+ kind: 'file' | 'directory';
64
+ /** What the workflow says this file is for; empty for a file it never declared. */
65
+ description: string;
66
+ /** The jobs the workflow says write it. */
67
+ producedBy: string[];
68
+ /** True when the workflow's run-directory block names this entry. */
69
+ declared: boolean;
70
+ state: WorkflowArtifactState;
71
+ /** Bytes on disk, absent until the file exists. */
72
+ size?: number;
73
+ /** ISO 8601 of the last write, absent until the file exists. */
74
+ modifiedAt?: string;
75
+ }
76
+
77
+ export interface WorkflowArtifactsResponse {
78
+ /** Absolute path of the run's own directory, which the reader may want to open. */
79
+ runDir: string;
80
+ /** What the workflow says the directory is for. */
81
+ description: string;
82
+ artifacts: WorkflowArtifactView[];
83
+ }
84
+
85
+ /** One artifact's metadata and optional text, as the viewer tab reads it. */
86
+ export interface WorkflowArtifactContentResponse {
87
+ path: string;
88
+ size: number;
89
+ modifiedAt: string;
90
+ /** Media type inferred from the file extension by the trusted hub. Absent on older hubs. */
91
+ mimeType?: string;
92
+ /** Present for text formats; binary files are streamed from the raw route instead. */
93
+ text?: string;
94
+ /** True when textual content was longer than the reader's byte budget. */
95
+ truncated: boolean;
96
+ }
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Workflow run view types shared by this package's hub channel and its web
3
+ * plugin. The shapes mirror what the embedded workflow-mcp engine records;
4
+ * the cockpit renders them as 'workflow_runs' channel payloads.
5
+ */
6
+
7
+ /** workflow-mcp's own stage vocabulary; the registry bucket a run record sits in. */
8
+ export type WorkflowStage = 'running' | 'completed' | 'error';
9
+
10
+ /** workflow-mcp's terminal outcome for a finished run. */
11
+ export type WorkflowOutcome = 'success' | 'skipped' | 'failed' | 'interrupted';
12
+
13
+ /** Job and step states as workflow-mcp records them in the progress log. */
14
+ export type WorkflowProgressState =
15
+ | 'running'
16
+ | 'completed'
17
+ | 'skipped'
18
+ | 'failed'
19
+ | 'pause_requested'
20
+ | 'paused'
21
+ | 'resumed';
22
+
23
+ export interface WorkflowStepView {
24
+ name: string;
25
+ status: WorkflowProgressState;
26
+ /** Why the step is in its state, when the engine recorded one (e.g. a skip condition). */
27
+ reason?: string;
28
+ /** ISO 8601 of the step's first running event. */
29
+ startedAt?: string;
30
+ /** ISO 8601 of the step's terminal event. */
31
+ endedAt?: string;
32
+ }
33
+
34
+ /** 'pre' and 'post' are the engine's pseudo-jobs for its pre:/post: blocks. */
35
+ export type WorkflowJobPhase = 'pre' | 'job' | 'post';
36
+
37
+ export interface WorkflowJobView {
38
+ name: string;
39
+ phase: WorkflowJobPhase;
40
+ status: WorkflowProgressState;
41
+ reason?: string;
42
+ /** Position among the run's jobs, when the engine recorded one. */
43
+ index?: number;
44
+ total?: number;
45
+ startedAt?: string;
46
+ endedAt?: string;
47
+ steps: WorkflowStepView[];
48
+ }
49
+
50
+ /** The job and step a run is on right now; drives the NOW breadcrumb. */
51
+ export interface WorkflowPosition {
52
+ job: string;
53
+ step?: string;
54
+ index?: number;
55
+ total?: number;
56
+ }
57
+
58
+ /**
59
+ * One workflow run of a session, read from workflow-mcp's registry: the
60
+ * run.json record plus the folded progress.ndjson job tree.
61
+ */
62
+ export interface WorkflowRunView {
63
+ /** Registry identity within its workspace; unique per workspace+stage. */
64
+ runKey: string;
65
+ workspace: string;
66
+ displayName: string;
67
+ workflowName?: string;
68
+ workflowPath: string;
69
+ stage: WorkflowStage;
70
+ outcome?: WorkflowOutcome;
71
+ /** Present while the engine is pausing or paused; absent for plain running. */
72
+ executionState?: 'running' | 'pause_requested' | 'paused' | 'resume_requested';
73
+ /** The prompt the run was launched with, when one was recorded. */
74
+ prompt?: string;
75
+ /** ISO 8601, from the run record. */
76
+ startedAt: string;
77
+ finishedAt?: string;
78
+ /** Failure cause with ANSI escapes stripped, present when the run errored. */
79
+ errorMessage?: string;
80
+ /** The job the engine blamed for the failure, when it recorded one. */
81
+ failedJob?: string;
82
+ /** True when reconciliation decided the recorded pid is no longer alive. */
83
+ stale?: boolean;
84
+ staleReason?: string;
85
+ worktreeBranch?: string;
86
+ position?: WorkflowPosition;
87
+ jobs: WorkflowJobView[];
88
+ }
89
+
90
+ /** What the workflow runs channel publishes for one session. */
91
+ export interface WorkflowRunsPayload {
92
+ runs: WorkflowRunView[];
93
+ }
94
+
95
+ export const WORKFLOW_RUNS_TYPE = 'workflow_runs';
96
+
97
+ /**
98
+ * One workflow the session's directory can launch, as the catalog drawer
99
+ * lists it: the engine's own catalog entry plus the parsed detail the drawer
100
+ * unfolds and the launch dialog turns into fields.
101
+ */
102
+ export interface WorkflowCatalogEntryView {
103
+ /** Absolute path, the row's stable identity. */
104
+ path: string;
105
+ relativePath: string;
106
+ name: string;
107
+ description: string;
108
+ tags: string[];
109
+ /** The trigger names the file declares, such as workflow_dispatch. */
110
+ triggers: string[];
111
+ inputs: WorkflowCatalogInputView[];
112
+ jobs: WorkflowCatalogJobView[];
113
+ artifacts: WorkflowCatalogArtifactView[];
114
+ /** Absent when the workflow names no runner map, which means any runner will do. */
115
+ runners?: string[];
116
+ /** Set when the file could not be parsed; the row shows this instead of guessing. */
117
+ error?: string;
118
+ }
119
+
120
+ export interface WorkflowCatalogInputView {
121
+ name: string;
122
+ description?: string;
123
+ required?: boolean;
124
+ default?: string;
125
+ type?: string;
126
+ options?: string[];
127
+ }
128
+
129
+ export interface WorkflowCatalogJobView {
130
+ name: string;
131
+ steps: string[];
132
+ }
133
+
134
+ export interface WorkflowCatalogArtifactView {
135
+ path: string;
136
+ kind: 'file' | 'directory';
137
+ description: string;
138
+ producedBy: string[];
139
+ }
140
+
141
+ /** What the catalog channel publishes for one session. */
142
+ export interface WorkflowCatalogPayload {
143
+ /** The directory the catalog was read from, which is the session's own. */
144
+ cwd: string;
145
+ workflows: WorkflowCatalogEntryView[];
146
+ /** Present when the directory could not be read at all. */
147
+ warning?: string;
148
+ }
149
+
150
+ export const WORKFLOW_CATALOG_TYPE = 'workflow_catalog';
@@ -0,0 +1,29 @@
1
+ The DoomPi Web License
2
+
3
+ Copyright (c) 2026 Agimon Pty Ltd
4
+
5
+ With regard to the DoomPi Web Software:
6
+
7
+ This software and associated documentation files (the "Software") may be
8
+ used, free of charge, by any person or entity, for any purpose, including
9
+ production and commercial use. You may copy the Software as reasonably
10
+ necessary to install, run, develop against, test, and back it up. You are
11
+ free to modify the Software for your own use and to publish patches to the
12
+ Software. You agree that the licensor retains all right, title, and interest
13
+ in and to the Software, and that your modifications and patches may only be
14
+ used, copied, modified, displayed, distributed, or otherwise exploited
15
+ together with the Software. You are not granted any other rights beyond what
16
+ is expressly stated herein. Subject to the foregoing, it is forbidden to
17
+ publish, distribute, sublicense, and/or sell the Software or any copy of it,
18
+ or to offer the Software to third parties as a hosted or managed service.
19
+
20
+ The above copyright notice and this permission notice shall be included in
21
+ all copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29
+ IN THE SOFTWARE.