@agimon-ai/doompi-computer-use 0.0.1-alpha.2 → 0.0.1-alpha.21

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 (341) hide show
  1. package/README.md +11 -4
  2. package/dist/_virtual/_rolldown/runtime.cjs +23 -1
  3. package/dist/api-contracts.cjs +7 -0
  4. package/dist/api-contracts.d.cts +2 -0
  5. package/dist/api-contracts.d.mts +2 -0
  6. package/dist/api-contracts.mjs +2 -0
  7. package/dist/extensions/mcp.cjs +56 -0
  8. package/dist/extensions/mcp.cjs.map +1 -0
  9. package/dist/extensions/mcp.d.cts +5 -0
  10. package/dist/extensions/mcp.d.cts.map +1 -0
  11. package/dist/extensions/mcp.d.mts +5 -0
  12. package/dist/extensions/mcp.d.mts.map +1 -0
  13. package/dist/extensions/mcp.mjs +51 -0
  14. package/dist/extensions/mcp.mjs.map +1 -0
  15. package/dist/extensions/pi.cjs +51 -1
  16. package/dist/extensions/pi.cjs.map +1 -0
  17. package/dist/extensions/pi.d.cts +7 -2
  18. package/dist/extensions/pi.d.cts.map +1 -0
  19. package/dist/extensions/pi.d.mts +7 -2
  20. package/dist/extensions/pi.d.mts.map +1 -0
  21. package/dist/extensions/pi.mjs +46 -1
  22. package/dist/extensions/pi.mjs.map +1 -0
  23. package/dist/extensions/server.cjs +72 -0
  24. package/dist/extensions/server.cjs.map +1 -0
  25. package/dist/extensions/server.d.cts +5 -0
  26. package/dist/extensions/server.d.cts.map +1 -0
  27. package/dist/extensions/server.d.mts +5 -0
  28. package/dist/extensions/server.d.mts.map +1 -0
  29. package/dist/extensions/server.mjs +67 -0
  30. package/dist/extensions/server.mjs.map +1 -0
  31. package/dist/extensions/web.mjs +625 -0
  32. package/dist/extensions/web.mjs.map +1 -0
  33. package/dist/index.cjs +18 -1
  34. package/dist/index.d.cts +12 -10
  35. package/dist/index.d.mts +12 -10
  36. package/dist/index.mjs +8 -1
  37. package/dist/src/constants/computerUse.cjs +17 -0
  38. package/dist/src/constants/computerUse.cjs.map +1 -0
  39. package/dist/src/constants/computerUse.d.cts +5 -0
  40. package/dist/src/constants/computerUse.d.cts.map +1 -0
  41. package/dist/src/constants/computerUse.d.mts +5 -0
  42. package/dist/src/constants/computerUse.d.mts.map +1 -0
  43. package/dist/src/constants/computerUse.mjs +14 -0
  44. package/dist/src/constants/computerUse.mjs.map +1 -0
  45. package/dist/src/extensions/(backend)/channel/computer-use.server.cjs +7 -0
  46. package/dist/src/extensions/(backend)/channel/computer-use.server.cjs.map +1 -0
  47. package/dist/src/extensions/(backend)/channel/computer-use.server.mjs +8 -0
  48. package/dist/src/extensions/(backend)/channel/computer-use.server.mjs.map +1 -0
  49. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.cjs +8 -0
  50. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.cjs.map +1 -0
  51. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.mjs +8 -0
  52. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.mjs.map +1 -0
  53. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.cjs +11 -0
  54. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.cjs.map +1 -0
  55. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.mjs +11 -0
  56. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.mjs.map +1 -0
  57. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.cjs +6 -0
  58. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.cjs.map +1 -0
  59. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.mjs +7 -0
  60. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.mjs.map +1 -0
  61. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs +6 -0
  62. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs.map +1 -0
  63. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.mjs +7 -0
  64. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.mjs.map +1 -0
  65. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.cjs +6 -0
  66. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.cjs.map +1 -0
  67. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.mjs +7 -0
  68. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.mjs.map +1 -0
  69. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs +6 -0
  70. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs.map +1 -0
  71. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs +7 -0
  72. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs.map +1 -0
  73. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs +6 -0
  74. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs.map +1 -0
  75. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs +7 -0
  76. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs.map +1 -0
  77. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs +6 -0
  78. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map +1 -0
  79. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs +7 -0
  80. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map +1 -0
  81. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +6 -0
  82. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +1 -0
  83. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +7 -0
  84. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +1 -0
  85. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +15 -0
  86. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +1 -0
  87. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +16 -0
  88. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +1 -0
  89. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +17 -0
  90. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +1 -0
  91. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +18 -0
  92. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +1 -0
  93. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs +6 -0
  94. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs.map +1 -0
  95. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.mjs +7 -0
  96. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.mjs.map +1 -0
  97. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.cjs +6 -0
  98. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.cjs.map +1 -0
  99. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.mjs +7 -0
  100. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.mjs.map +1 -0
  101. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs +6 -0
  102. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs.map +1 -0
  103. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.mjs +7 -0
  104. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.mjs.map +1 -0
  105. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.cjs +6 -0
  106. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.cjs.map +1 -0
  107. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.mjs +7 -0
  108. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.mjs.map +1 -0
  109. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs +6 -0
  110. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs.map +1 -0
  111. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.mjs +7 -0
  112. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.mjs.map +1 -0
  113. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.cjs +6 -0
  114. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.cjs.map +1 -0
  115. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.mjs +7 -0
  116. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.mjs.map +1 -0
  117. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs +6 -0
  118. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs.map +1 -0
  119. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.mjs +7 -0
  120. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.mjs.map +1 -0
  121. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.cjs +6 -0
  122. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.cjs.map +1 -0
  123. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.mjs +7 -0
  124. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.server.mjs.map +1 -0
  125. package/dist/src/models/computerUseMode.cjs +43 -0
  126. package/dist/src/models/computerUseMode.cjs.map +1 -0
  127. package/dist/src/models/computerUseMode.mjs +42 -0
  128. package/dist/src/models/computerUseMode.mjs.map +1 -0
  129. package/dist/src/models/computerUseState.cjs +89 -0
  130. package/dist/src/models/computerUseState.cjs.map +1 -0
  131. package/dist/src/models/computerUseState.d.cts +6 -0
  132. package/dist/src/models/computerUseState.d.cts.map +1 -0
  133. package/dist/src/models/computerUseState.d.mts +6 -0
  134. package/dist/src/models/computerUseState.d.mts.map +1 -0
  135. package/dist/src/models/computerUseState.mjs +88 -0
  136. package/dist/src/models/computerUseState.mjs.map +1 -0
  137. package/dist/src/schemas/apiContracts.cjs +194 -0
  138. package/dist/src/schemas/apiContracts.cjs.map +1 -0
  139. package/dist/src/schemas/apiContracts.d.cts +53 -0
  140. package/dist/src/schemas/apiContracts.d.cts.map +1 -0
  141. package/dist/src/schemas/apiContracts.d.mts +53 -0
  142. package/dist/src/schemas/apiContracts.d.mts.map +1 -0
  143. package/dist/src/schemas/apiContracts.mjs +191 -0
  144. package/dist/src/schemas/apiContracts.mjs.map +1 -0
  145. package/dist/src/services/computerScriptRunner/index.cjs +171 -0
  146. package/dist/src/services/computerScriptRunner/index.cjs.map +1 -0
  147. package/dist/src/services/computerScriptRunner/index.d.cts +12 -0
  148. package/dist/src/services/computerScriptRunner/index.d.cts.map +1 -0
  149. package/dist/src/services/computerScriptRunner/index.d.mts +12 -0
  150. package/dist/src/services/computerScriptRunner/index.d.mts.map +1 -0
  151. package/dist/src/services/computerScriptRunner/index.mjs +171 -0
  152. package/dist/src/services/computerScriptRunner/index.mjs.map +1 -0
  153. package/dist/src/services/computerUseApi/index.cjs +291 -0
  154. package/dist/src/services/computerUseApi/index.cjs.map +1 -0
  155. package/dist/src/services/computerUseApi/index.mjs +289 -0
  156. package/dist/src/services/computerUseApi/index.mjs.map +1 -0
  157. package/dist/src/services/computerUseCommand/index.cjs +15 -0
  158. package/dist/src/services/computerUseCommand/index.cjs.map +1 -0
  159. package/dist/src/services/computerUseCommand/index.mjs +15 -0
  160. package/dist/src/services/computerUseCommand/index.mjs.map +1 -0
  161. package/dist/src/services/computerUseRuntime/index.cjs +300 -0
  162. package/dist/src/services/computerUseRuntime/index.cjs.map +1 -0
  163. package/dist/src/services/computerUseRuntime/index.mjs +299 -0
  164. package/dist/src/services/computerUseRuntime/index.mjs.map +1 -0
  165. package/dist/src/services/computerUseServer/index.cjs +350 -0
  166. package/dist/src/services/computerUseServer/index.cjs.map +1 -0
  167. package/dist/src/services/computerUseServer/index.mjs +348 -0
  168. package/dist/src/services/computerUseServer/index.mjs.map +1 -0
  169. package/dist/src/services/dependencies/index.cjs +27 -0
  170. package/dist/src/services/dependencies/index.cjs.map +1 -0
  171. package/dist/src/services/dependencies/index.d.cts +6 -0
  172. package/dist/src/services/dependencies/index.d.cts.map +1 -0
  173. package/dist/src/services/dependencies/index.d.mts +6 -0
  174. package/dist/src/services/dependencies/index.d.mts.map +1 -0
  175. package/dist/src/services/dependencies/index.mjs +24 -0
  176. package/dist/src/services/dependencies/index.mjs.map +1 -0
  177. package/dist/src/services/extensionService/index.cjs +21 -0
  178. package/dist/src/services/extensionService/index.cjs.map +1 -0
  179. package/dist/src/services/extensionService/index.d.cts +10 -0
  180. package/dist/src/services/extensionService/index.d.cts.map +1 -0
  181. package/dist/src/services/extensionService/index.d.mts +10 -0
  182. package/dist/src/services/extensionService/index.d.mts.map +1 -0
  183. package/dist/src/services/extensionService/index.mjs +21 -0
  184. package/dist/src/services/extensionService/index.mjs.map +1 -0
  185. package/dist/src/services/mcpTools/index.cjs +17 -0
  186. package/dist/src/services/mcpTools/index.cjs.map +1 -0
  187. package/dist/src/services/mcpTools/index.mjs +16 -0
  188. package/dist/src/services/mcpTools/index.mjs.map +1 -0
  189. package/dist/src/services/sessionApiClient/index.cjs +9 -0
  190. package/dist/src/services/sessionApiClient/index.cjs.map +1 -0
  191. package/dist/src/services/sessionApiClient/index.d.cts +15 -0
  192. package/dist/src/services/sessionApiClient/index.d.cts.map +1 -0
  193. package/dist/src/services/sessionApiClient/index.d.mts +15 -0
  194. package/dist/src/services/sessionApiClient/index.d.mts.map +1 -0
  195. package/dist/src/services/sessionApiClient/index.mjs +9 -0
  196. package/dist/src/services/sessionApiClient/index.mjs.map +1 -0
  197. package/dist/src/services/traceRedaction/index.cjs +19 -0
  198. package/dist/src/services/traceRedaction/index.cjs.map +1 -0
  199. package/dist/{services/traceRedaction.d.mts → src/services/traceRedaction/index.d.cts} +6 -7
  200. package/dist/src/services/traceRedaction/index.d.cts.map +1 -0
  201. package/dist/{services/traceRedaction.d.cts → src/services/traceRedaction/index.d.mts} +6 -7
  202. package/dist/src/services/traceRedaction/index.d.mts.map +1 -0
  203. package/dist/src/services/traceRedaction/index.mjs +19 -0
  204. package/dist/src/services/traceRedaction/index.mjs.map +1 -0
  205. package/dist/src/services/webComputerUseAvailability/index.cjs +13 -0
  206. package/dist/src/services/webComputerUseAvailability/index.cjs.map +1 -0
  207. package/dist/src/services/webComputerUseAvailability/index.mjs +12 -0
  208. package/dist/src/services/webComputerUseAvailability/index.mjs.map +1 -0
  209. package/dist/src/services/webComputerUseChannel/index.cjs +251 -0
  210. package/dist/src/services/webComputerUseChannel/index.cjs.map +1 -0
  211. package/dist/src/services/webComputerUseChannel/index.mjs +250 -0
  212. package/dist/src/services/webComputerUseChannel/index.mjs.map +1 -0
  213. package/dist/src/types/apiRoutes.cjs +84 -0
  214. package/dist/src/types/apiRoutes.cjs.map +1 -0
  215. package/dist/src/types/apiRoutes.mjs +84 -0
  216. package/dist/src/types/apiRoutes.mjs.map +1 -0
  217. package/dist/src/types/computerScript.d.cts +38 -0
  218. package/dist/src/types/computerScript.d.cts.map +1 -0
  219. package/dist/src/types/computerScript.d.mts +38 -0
  220. package/dist/src/types/computerScript.d.mts.map +1 -0
  221. package/dist/{types → src/types}/computerUse.d.cts +14 -14
  222. package/dist/src/types/computerUse.d.cts.map +1 -0
  223. package/dist/{types → src/types}/computerUse.d.mts +14 -14
  224. package/dist/src/types/computerUse.d.mts.map +1 -0
  225. package/dist/src/types/computerUseApi.cjs +41 -0
  226. package/dist/src/types/computerUseApi.cjs.map +1 -0
  227. package/dist/{types → src/types}/computerUseApi.d.cts +28 -20
  228. package/dist/src/types/computerUseApi.d.cts.map +1 -0
  229. package/dist/{types → src/types}/computerUseApi.d.mts +28 -20
  230. package/dist/src/types/computerUseApi.d.mts.map +1 -0
  231. package/dist/src/types/computerUseApi.mjs +33 -0
  232. package/dist/src/types/computerUseApi.mjs.map +1 -0
  233. package/dist/src/types/extension.d.cts +19 -0
  234. package/dist/src/types/extension.d.cts.map +1 -0
  235. package/dist/src/types/extension.d.mts +19 -0
  236. package/dist/src/types/extension.d.mts.map +1 -0
  237. package/docs/computer-scripts.md +37 -0
  238. package/llms.txt +1 -0
  239. package/package.json +55 -33
  240. package/src/prompts/doompi-use-computer-use/SKILL.md +1 -1
  241. package/src/types/computerUse.ts +3 -2
  242. package/src/types/computerUseApi.ts +9 -6
  243. package/dist/adapters/computerUseApi.cjs +0 -2
  244. package/dist/adapters/computerUseApi.cjs.map +0 -1
  245. package/dist/adapters/computerUseApi.d.cts +0 -37
  246. package/dist/adapters/computerUseApi.d.cts.map +0 -1
  247. package/dist/adapters/computerUseApi.d.mts +0 -37
  248. package/dist/adapters/computerUseApi.d.mts.map +0 -1
  249. package/dist/adapters/computerUseApi.mjs +0 -2
  250. package/dist/adapters/computerUseApi.mjs.map +0 -1
  251. package/dist/adapters/pi/extension.cjs +0 -3
  252. package/dist/adapters/pi/extension.cjs.map +0 -1
  253. package/dist/adapters/pi/extension.d.cts +0 -12
  254. package/dist/adapters/pi/extension.d.cts.map +0 -1
  255. package/dist/adapters/pi/extension.d.mts +0 -12
  256. package/dist/adapters/pi/extension.d.mts.map +0 -1
  257. package/dist/adapters/pi/extension.mjs +0 -3
  258. package/dist/adapters/pi/extension.mjs.map +0 -1
  259. package/dist/adapters/pi/sessionApiClient.cjs +0 -2
  260. package/dist/adapters/pi/sessionApiClient.cjs.map +0 -1
  261. package/dist/adapters/pi/sessionApiClient.d.cts +0 -26
  262. package/dist/adapters/pi/sessionApiClient.d.cts.map +0 -1
  263. package/dist/adapters/pi/sessionApiClient.d.mts +0 -26
  264. package/dist/adapters/pi/sessionApiClient.d.mts.map +0 -1
  265. package/dist/adapters/pi/sessionApiClient.mjs +0 -2
  266. package/dist/adapters/pi/sessionApiClient.mjs.map +0 -1
  267. package/dist/adapters/webComputerUseAvailability.cjs +0 -2
  268. package/dist/adapters/webComputerUseAvailability.cjs.map +0 -1
  269. package/dist/adapters/webComputerUseAvailability.mjs +0 -2
  270. package/dist/adapters/webComputerUseAvailability.mjs.map +0 -1
  271. package/dist/adapters/webComputerUseChannel.cjs +0 -2
  272. package/dist/adapters/webComputerUseChannel.cjs.map +0 -1
  273. package/dist/adapters/webComputerUseChannel.d.cts +0 -10
  274. package/dist/adapters/webComputerUseChannel.d.cts.map +0 -1
  275. package/dist/adapters/webComputerUseChannel.d.mts +0 -10
  276. package/dist/adapters/webComputerUseChannel.d.mts.map +0 -1
  277. package/dist/adapters/webComputerUseChannel.mjs +0 -2
  278. package/dist/adapters/webComputerUseChannel.mjs.map +0 -1
  279. package/dist/commands/computerUseCommand.cjs +0 -2
  280. package/dist/commands/computerUseCommand.cjs.map +0 -1
  281. package/dist/commands/computerUseCommand.mjs +0 -2
  282. package/dist/commands/computerUseCommand.mjs.map +0 -1
  283. package/dist/container/index.cjs +0 -2
  284. package/dist/container/index.cjs.map +0 -1
  285. package/dist/container/index.d.cts +0 -6
  286. package/dist/container/index.d.cts.map +0 -1
  287. package/dist/container/index.d.mts +0 -6
  288. package/dist/container/index.d.mts.map +0 -1
  289. package/dist/container/index.mjs +0 -2
  290. package/dist/container/index.mjs.map +0 -1
  291. package/dist/services/extensionService.cjs +0 -2
  292. package/dist/services/extensionService.cjs.map +0 -1
  293. package/dist/services/extensionService.d.cts +0 -11
  294. package/dist/services/extensionService.d.cts.map +0 -1
  295. package/dist/services/extensionService.d.mts +0 -11
  296. package/dist/services/extensionService.d.mts.map +0 -1
  297. package/dist/services/extensionService.mjs +0 -2
  298. package/dist/services/extensionService.mjs.map +0 -1
  299. package/dist/services/sessionController.cjs +0 -2
  300. package/dist/services/sessionController.cjs.map +0 -1
  301. package/dist/services/sessionController.d.cts +0 -7
  302. package/dist/services/sessionController.d.cts.map +0 -1
  303. package/dist/services/sessionController.d.mts +0 -7
  304. package/dist/services/sessionController.d.mts.map +0 -1
  305. package/dist/services/sessionController.mjs +0 -2
  306. package/dist/services/sessionController.mjs.map +0 -1
  307. package/dist/services/traceRedaction.cjs +0 -2
  308. package/dist/services/traceRedaction.cjs.map +0 -1
  309. package/dist/services/traceRedaction.d.cts.map +0 -1
  310. package/dist/services/traceRedaction.d.mts.map +0 -1
  311. package/dist/services/traceRedaction.mjs +0 -2
  312. package/dist/services/traceRedaction.mjs.map +0 -1
  313. package/dist/sessionApi.cjs +0 -1
  314. package/dist/sessionApi.d.cts +0 -2
  315. package/dist/sessionApi.d.mts +0 -2
  316. package/dist/sessionApi.mjs +0 -1
  317. package/dist/types/computerUse.d.cts.map +0 -1
  318. package/dist/types/computerUse.d.mts.map +0 -1
  319. package/dist/types/computerUseApi.cjs +0 -2
  320. package/dist/types/computerUseApi.cjs.map +0 -1
  321. package/dist/types/computerUseApi.d.cts.map +0 -1
  322. package/dist/types/computerUseApi.d.mts.map +0 -1
  323. package/dist/types/computerUseApi.mjs +0 -2
  324. package/dist/types/computerUseApi.mjs.map +0 -1
  325. package/dist/types/extension.d.cts +0 -17
  326. package/dist/types/extension.d.cts.map +0 -1
  327. package/dist/types/extension.d.mts +0 -17
  328. package/dist/types/extension.d.mts.map +0 -1
  329. package/dist/webHub.cjs +0 -1
  330. package/dist/webHub.d.cts +0 -3
  331. package/dist/webHub.d.mts +0 -3
  332. package/dist/webHub.mjs +0 -1
  333. package/src/exports/webClient.ts +0 -2
  334. package/src/web/ComputerActionToolCard.tsx +0 -51
  335. package/src/web/ComputerStateToolCard.tsx +0 -51
  336. package/src/web/ComputerUsePanel.tsx +0 -136
  337. package/src/web/computerActionToolRender.ts +0 -20
  338. package/src/web/computerStateToolRender.ts +0 -18
  339. package/src/web/computerUseStore.ts +0 -26
  340. package/src/web/index.ts +0 -41
  341. package/src/web/tsconfig.json +0 -28
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["createComputerUseSessionClient","path","ComputerScriptRunner","DefaultComputerUseExtensionService","COMPUTER_USE_MODE_ID","COMPUTER_USE_STATUS_KEY","defineMinorMode","modeState","serverMinorModes","COMPUTER_USE_TOOL_NAMES","COMMAND_NAME","COMMAND_DESCRIPTION"],"sources":["../../../../src/services/computerUseServer/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { type DoomHeadlessToolResult } from '@agimon-ai/doompi-core/headless';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport { defineMinorMode, type MinorModeOwner } from '@agimon-ai/doompi-minor-mode';\n\nimport { COMMAND_NAME, COMMAND_DESCRIPTION } from '../../constants/computerUse';\nimport { COMPUTER_USE_TOOL_NAMES } from '../../constants/computerUse';\nimport { modeState } from '../../models/computerUseMode';\nimport { ComputerScriptRunner } from '../../services/computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../../services/extensionService';\nimport { createComputerUseSessionClient } from '../../services/sessionApiClient';\nimport type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport { COMPUTER_USE_MODE_ID, COMPUTER_USE_STATUS_KEY } from '../../types/computerUseApi';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\n/** This package's identity for mode, activity and restriction ownership, not a status key. */\nconst SOURCE = '@agimon-ai/doompi-computer-use';\n\nconst SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nconst GUIDANCE =\n '[COMPUTER USE ACTIVE]\\nUse computer_state before acting and after any action that may change the interface. Use only element refs and snapshot ids returned by computer_state. Never infer coordinates or bypass secure elements.';\n\nfunction output(value: unknown, isError = false): DoomHeadlessToolResult {\n return {\n content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }],\n details: value,\n ...(isError ? { isError: true } : {}),\n };\n}\n\nfunction observationOutput(value: ComputerUseObservation): DoomHeadlessToolResult {\n return {\n content: [\n { type: 'text', text: JSON.stringify({ ...value, screenshot: undefined }, null, 2) },\n { type: 'image', data: value.screenshot.data, mimeType: value.screenshot.mimeType },\n ],\n details: value,\n };\n}\n\nimport {\n type DoomHeadlessHostService,\n type DoomHeadlessTool,\n type DoomHeadlessCommand,\n} from '@agimon-ai/doompi-core/headless';\nimport { type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nexport function createComputerUseServer(host: DoomHeadlessHostService): Omit<\n DoomServerSessionPlugin,\n 'tools' | 'commands'\n> & {\n tools: readonly DoomHeadlessTool[];\n commands: readonly DoomHeadlessCommand[];\n} {\n const client = createComputerUseSessionClient();\n const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n const scriptRunner = client === undefined ? undefined : new ComputerScriptRunner({ client, allowedScriptPaths });\n const service = new DefaultComputerUseExtensionService(client);\n const dependencies = { client, scriptRunner, service };\n let state: ComputerUseSessionView | undefined;\n let stopActivity: (() => void) | undefined;\n let modeOwner: MinorModeOwner | undefined;\n const modeSelected = (): boolean =>\n (host.context.selection.state?.['minor-mode'] ?? []).includes(COMPUTER_USE_MODE_ID);\n const publishMode = (): void => modeOwner?.publish();\n const applyState = (next: ComputerUseSessionView | undefined): void => {\n state = next;\n host.context.client.setStatus(\n COMPUTER_USE_STATUS_KEY,\n next === undefined || next.phase === 'inactive' ? undefined : `computer use: ${next.phase}`,\n );\n publishMode();\n };\n const selectMode = async (enabled: boolean): Promise<void> => {\n const modes = (host.context.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID);\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: enabled ? [...modes, COMPUTER_USE_MODE_ID] : modes,\n });\n publishMode();\n };\n const refresh = async (signal?: AbortSignal): Promise<void> => {\n if (!client) {\n applyState(undefined);\n return;\n }\n try {\n applyState(await client.state(signal));\n } catch {\n applyState(undefined);\n }\n };\n const requireActive = (): NonNullable<typeof client> => {\n if (!client || state?.phase !== 'active') throw new Error('Computer use is not active for this session.');\n return client;\n };\n modeOwner = defineMinorMode<undefined>({\n descriptor: {\n source: SOURCE,\n id: COMPUTER_USE_MODE_ID,\n label: 'Computer Use',\n description: 'Session-scoped semantic control through DoomPi Desktop.',\n order: 450,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Enable computer use for this session.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Stop this session computer-use run.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'doctor',\n label: 'Doctor',\n description: 'Report Desktop availability and session state.',\n contexts: ['headless'],\n parameters: [],\n },\n ],\n },\n state: () => modeState(state, modeSelected()),\n async handleAction(_runtime, actionId, _argumentsValue, execution) {\n execution.signal.throwIfAborted();\n if (actionId === 'activate') {\n if (!client) throw new Error('DoomPi Desktop computer use is unavailable.');\n await selectMode(true);\n await refresh(execution.signal);\n return { message: 'Computer use activated.' };\n }\n if (actionId === 'doctor') {\n await refresh(execution.signal);\n return {\n message: client\n ? `Computer use is ${state?.phase ?? 'unavailable'}.`\n : 'DoomPi Desktop session API is unavailable.',\n };\n }\n if (actionId === 'deactivate') {\n if (client && state?.phase !== undefined && state.phase !== 'inactive' && state.phase !== 'failed')\n await client.stop(execution.signal);\n await selectMode(false);\n await refresh(execution.signal);\n return { message: 'Computer use deactivated.' };\n }\n throw new Error(`Unknown computer-use action: ${actionId}`);\n },\n }).createOwner(undefined);\n return {\n services: [serverMinorModes([modeOwner])],\n toolRestrictions: [\n {\n when: { state: { 'minor-mode': COMPUTER_USE_MODE_ID } },\n allowedTools: [...COMPUTER_USE_TOOL_NAMES],\n },\n ],\n activities: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: SOURCE,\n async start() {\n await refresh();\n const unsubscribe = client?.subscribeStatus?.(applyState);\n stopActivity = () => {\n unsubscribe?.();\n applyState(undefined);\n };\n return () => {\n stopActivity?.();\n stopActivity = undefined;\n };\n },\n },\n ],\n tools: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_state',\n label: 'Computer State',\n description: 'Observe the authorized application window and return semantic accessibility state.',\n parameters: { type: 'object', properties: {}, additionalProperties: false },\n executionMode: 'serial',\n async execute(_toolCallId, _parameters, signal) {\n try {\n const session = requireActive();\n const observation = await session.observe(signal);\n return observationOutput(observation);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_action',\n label: 'Computer Action',\n description: 'Perform one constrained semantic action in the authorized application window.',\n parameters: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['press', 'focus', 'set_value', 'scroll'] },\n snapshotId: { type: 'string', minLength: 1 },\n elementRef: { type: 'string', minLength: 1 },\n value: { type: 'string' },\n direction: { type: 'string', enum: ['up', 'down', 'left', 'right'] },\n amount: { type: 'string', enum: ['line', 'page'] },\n },\n required: ['kind', 'snapshotId', 'elementRef'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n const result = await requireActive().act(parameters as unknown as ComputerUseAction, signal);\n await refresh(signal);\n return output(result);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_exec',\n label: 'Computer Script',\n description:\n 'Run a trusted, explicitly allowed local TypeScript script against the authorized application session.',\n parameters: {\n type: 'object',\n properties: { scriptPath: { type: 'string', minLength: 1 }, input: {} },\n required: ['scriptPath', 'input'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n if (!dependencies.scriptRunner) throw new Error('Computer script execution is unavailable.');\n const input = parameters as { scriptPath: string; input: unknown };\n return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n ],\n commands: [\n {\n name: COMMAND_NAME,\n description: COMMAND_DESCRIPTION,\n async execute(args, execution) {\n const result = await dependencies.service.execute();\n await execution.client.notify({ body: result.message, level: result.level });\n if (args.trim() === 'deactivate' && client && state?.phase !== 'inactive' && state?.phase !== 'failed') {\n await client.stop();\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: (execution.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID),\n });\n await refresh();\n }\n },\n },\n ],\n hooks: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'before_agent_start',\n handle(event) {\n if (state?.phase !== 'active') return undefined;\n const prompt = typeof event.systemPrompt === 'string' ? event.systemPrompt : '';\n return { systemPrompt: `${prompt}\\n\\n${GUIDANCE}`.trim() };\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'session_shutdown',\n handle: async () => {\n stopActivity?.();\n if (client && state?.phase !== 'inactive' && state?.phase !== 'failed') await client.stop();\n },\n },\n ],\n onDispose() {\n stopActivity?.();\n stopActivity = undefined;\n host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, undefined);\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,348 @@
1
+ import { COMMAND_DESCRIPTION, COMMAND_NAME, COMPUTER_USE_TOOL_NAMES } from "../../constants/computerUse.mjs";
2
+ import { createComputerUseSessionClient } from "../sessionApiClient/index.mjs";
3
+ import { ComputerScriptRunner } from "../computerScriptRunner/index.mjs";
4
+ import { DefaultComputerUseExtensionService } from "../extensionService/index.mjs";
5
+ import { COMPUTER_USE_MODE_ID, COMPUTER_USE_STATUS_KEY } from "../../types/computerUseApi.mjs";
6
+ import { modeState } from "../../models/computerUseMode.mjs";
7
+ import path from "node:path";
8
+ import { defineMinorMode, serverMinorModes } from "@agimon-ai/doompi-minor-mode";
9
+ //#region src/services/computerUseServer/index.ts
10
+ /** This package's identity for mode, activity and restriction ownership, not a status key. */
11
+ const SOURCE = "@agimon-ai/doompi-computer-use";
12
+ const SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
13
+ const GUIDANCE = "[COMPUTER USE ACTIVE]\nUse computer_state before acting and after any action that may change the interface. Use only element refs and snapshot ids returned by computer_state. Never infer coordinates or bypass secure elements.";
14
+ function output(value, isError = false) {
15
+ return {
16
+ content: [{
17
+ type: "text",
18
+ text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
19
+ }],
20
+ details: value,
21
+ ...isError ? { isError: true } : {}
22
+ };
23
+ }
24
+ function observationOutput(value) {
25
+ return {
26
+ content: [{
27
+ type: "text",
28
+ text: JSON.stringify({
29
+ ...value,
30
+ screenshot: void 0
31
+ }, null, 2)
32
+ }, {
33
+ type: "image",
34
+ data: value.screenshot.data,
35
+ mimeType: value.screenshot.mimeType
36
+ }],
37
+ details: value
38
+ };
39
+ }
40
+ function createComputerUseServer(host) {
41
+ const client = createComputerUseSessionClient();
42
+ const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? "").split(path.delimiter).filter((entry) => entry.length > 0);
43
+ const dependencies = {
44
+ client,
45
+ scriptRunner: client === void 0 ? void 0 : new ComputerScriptRunner({
46
+ client,
47
+ allowedScriptPaths
48
+ }),
49
+ service: new DefaultComputerUseExtensionService(client)
50
+ };
51
+ let state;
52
+ let stopActivity;
53
+ let modeOwner;
54
+ const modeSelected = () => (host.context.selection.state?.["minor-mode"] ?? []).includes(COMPUTER_USE_MODE_ID);
55
+ const publishMode = () => modeOwner?.publish();
56
+ const applyState = (next) => {
57
+ state = next;
58
+ host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, next === void 0 || next.phase === "inactive" ? void 0 : `computer use: ${next.phase}`);
59
+ publishMode();
60
+ };
61
+ const selectMode = async (enabled) => {
62
+ const modes = (host.context.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID);
63
+ await host.changeSelection({
64
+ axis: "state",
65
+ key: "minor-mode",
66
+ values: enabled ? [...modes, COMPUTER_USE_MODE_ID] : modes
67
+ });
68
+ publishMode();
69
+ };
70
+ const refresh = async (signal) => {
71
+ if (!client) {
72
+ applyState(void 0);
73
+ return;
74
+ }
75
+ try {
76
+ applyState(await client.state(signal));
77
+ } catch {
78
+ applyState(void 0);
79
+ }
80
+ };
81
+ const requireActive = () => {
82
+ if (!client || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
83
+ return client;
84
+ };
85
+ modeOwner = defineMinorMode({
86
+ descriptor: {
87
+ source: SOURCE,
88
+ id: COMPUTER_USE_MODE_ID,
89
+ label: "Computer Use",
90
+ description: "Session-scoped semantic control through DoomPi Desktop.",
91
+ order: 450,
92
+ actions: [
93
+ {
94
+ id: "activate",
95
+ label: "Activate",
96
+ description: "Enable computer use for this session.",
97
+ contexts: ["headless"],
98
+ parameters: []
99
+ },
100
+ {
101
+ id: "deactivate",
102
+ label: "Deactivate",
103
+ description: "Stop this session computer-use run.",
104
+ contexts: ["headless"],
105
+ parameters: []
106
+ },
107
+ {
108
+ id: "doctor",
109
+ label: "Doctor",
110
+ description: "Report Desktop availability and session state.",
111
+ contexts: ["headless"],
112
+ parameters: []
113
+ }
114
+ ]
115
+ },
116
+ state: () => modeState(state, modeSelected()),
117
+ async handleAction(_runtime, actionId, _argumentsValue, execution) {
118
+ execution.signal.throwIfAborted();
119
+ if (actionId === "activate") {
120
+ if (!client) throw new Error("DoomPi Desktop computer use is unavailable.");
121
+ await selectMode(true);
122
+ await refresh(execution.signal);
123
+ return { message: "Computer use activated." };
124
+ }
125
+ if (actionId === "doctor") {
126
+ await refresh(execution.signal);
127
+ return { message: client ? `Computer use is ${state?.phase ?? "unavailable"}.` : "DoomPi Desktop session API is unavailable." };
128
+ }
129
+ if (actionId === "deactivate") {
130
+ if (client && state?.phase !== void 0 && state.phase !== "inactive" && state.phase !== "failed") await client.stop(execution.signal);
131
+ await selectMode(false);
132
+ await refresh(execution.signal);
133
+ return { message: "Computer use deactivated." };
134
+ }
135
+ throw new Error(`Unknown computer-use action: ${actionId}`);
136
+ }
137
+ }).createOwner(void 0);
138
+ return {
139
+ services: [serverMinorModes([modeOwner])],
140
+ toolRestrictions: [{
141
+ when: { state: { "minor-mode": COMPUTER_USE_MODE_ID } },
142
+ allowedTools: [...COMPUTER_USE_TOOL_NAMES]
143
+ }],
144
+ activities: [{
145
+ when: {
146
+ state: { "minor-mode": COMPUTER_USE_MODE_ID },
147
+ attribution: {
148
+ kind: "minor",
149
+ mode: COMPUTER_USE_MODE_ID
150
+ }
151
+ },
152
+ name: SOURCE,
153
+ async start() {
154
+ await refresh();
155
+ const unsubscribe = client?.subscribeStatus?.(applyState);
156
+ stopActivity = () => {
157
+ unsubscribe?.();
158
+ applyState(void 0);
159
+ };
160
+ return () => {
161
+ stopActivity?.();
162
+ stopActivity = void 0;
163
+ };
164
+ }
165
+ }],
166
+ tools: [
167
+ {
168
+ when: {
169
+ state: { "minor-mode": COMPUTER_USE_MODE_ID },
170
+ attribution: {
171
+ kind: "minor",
172
+ mode: COMPUTER_USE_MODE_ID
173
+ }
174
+ },
175
+ name: "computer_state",
176
+ label: "Computer State",
177
+ description: "Observe the authorized application window and return semantic accessibility state.",
178
+ parameters: {
179
+ type: "object",
180
+ properties: {},
181
+ additionalProperties: false
182
+ },
183
+ executionMode: "serial",
184
+ async execute(_toolCallId, _parameters, signal) {
185
+ try {
186
+ return observationOutput(await requireActive().observe(signal));
187
+ } catch (error) {
188
+ return output(error instanceof Error ? error.message : String(error), true);
189
+ }
190
+ }
191
+ },
192
+ {
193
+ when: {
194
+ state: { "minor-mode": COMPUTER_USE_MODE_ID },
195
+ attribution: {
196
+ kind: "minor",
197
+ mode: COMPUTER_USE_MODE_ID
198
+ }
199
+ },
200
+ name: "computer_action",
201
+ label: "Computer Action",
202
+ description: "Perform one constrained semantic action in the authorized application window.",
203
+ parameters: {
204
+ type: "object",
205
+ properties: {
206
+ kind: {
207
+ type: "string",
208
+ enum: [
209
+ "press",
210
+ "focus",
211
+ "set_value",
212
+ "scroll"
213
+ ]
214
+ },
215
+ snapshotId: {
216
+ type: "string",
217
+ minLength: 1
218
+ },
219
+ elementRef: {
220
+ type: "string",
221
+ minLength: 1
222
+ },
223
+ value: { type: "string" },
224
+ direction: {
225
+ type: "string",
226
+ enum: [
227
+ "up",
228
+ "down",
229
+ "left",
230
+ "right"
231
+ ]
232
+ },
233
+ amount: {
234
+ type: "string",
235
+ enum: ["line", "page"]
236
+ }
237
+ },
238
+ required: [
239
+ "kind",
240
+ "snapshotId",
241
+ "elementRef"
242
+ ],
243
+ additionalProperties: false
244
+ },
245
+ executionMode: "serial",
246
+ async execute(_toolCallId, parameters, signal) {
247
+ try {
248
+ const result = await requireActive().act(parameters, signal);
249
+ await refresh(signal);
250
+ return output(result);
251
+ } catch (error) {
252
+ return output(error instanceof Error ? error.message : String(error), true);
253
+ }
254
+ }
255
+ },
256
+ {
257
+ when: {
258
+ state: { "minor-mode": COMPUTER_USE_MODE_ID },
259
+ attribution: {
260
+ kind: "minor",
261
+ mode: COMPUTER_USE_MODE_ID
262
+ }
263
+ },
264
+ name: "computer_exec",
265
+ label: "Computer Script",
266
+ description: "Run a trusted, explicitly allowed local TypeScript script against the authorized application session.",
267
+ parameters: {
268
+ type: "object",
269
+ properties: {
270
+ scriptPath: {
271
+ type: "string",
272
+ minLength: 1
273
+ },
274
+ input: {}
275
+ },
276
+ required: ["scriptPath", "input"],
277
+ additionalProperties: false
278
+ },
279
+ executionMode: "serial",
280
+ async execute(_toolCallId, parameters, signal) {
281
+ try {
282
+ if (!dependencies.scriptRunner) throw new Error("Computer script execution is unavailable.");
283
+ const input = parameters;
284
+ return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));
285
+ } catch (error) {
286
+ return output(error instanceof Error ? error.message : String(error), true);
287
+ }
288
+ }
289
+ }
290
+ ],
291
+ commands: [{
292
+ name: COMMAND_NAME,
293
+ description: COMMAND_DESCRIPTION,
294
+ async execute(args, execution) {
295
+ const result = await dependencies.service.execute();
296
+ await execution.client.notify({
297
+ body: result.message,
298
+ level: result.level
299
+ });
300
+ if (args.trim() === "deactivate" && client && state?.phase !== "inactive" && state?.phase !== "failed") {
301
+ await client.stop();
302
+ await host.changeSelection({
303
+ axis: "state",
304
+ key: "minor-mode",
305
+ values: (execution.selection.state?.["minor-mode"] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID)
306
+ });
307
+ await refresh();
308
+ }
309
+ }
310
+ }],
311
+ hooks: [{
312
+ when: {
313
+ state: { "minor-mode": COMPUTER_USE_MODE_ID },
314
+ attribution: {
315
+ kind: "minor",
316
+ mode: COMPUTER_USE_MODE_ID
317
+ }
318
+ },
319
+ event: "before_agent_start",
320
+ handle(event) {
321
+ if (state?.phase !== "active") return void 0;
322
+ return { systemPrompt: `${typeof event.systemPrompt === "string" ? event.systemPrompt : ""}\n\n${GUIDANCE}`.trim() };
323
+ }
324
+ }, {
325
+ when: {
326
+ state: { "minor-mode": COMPUTER_USE_MODE_ID },
327
+ attribution: {
328
+ kind: "minor",
329
+ mode: COMPUTER_USE_MODE_ID
330
+ }
331
+ },
332
+ event: "session_shutdown",
333
+ handle: async () => {
334
+ stopActivity?.();
335
+ if (client && state?.phase !== "inactive" && state?.phase !== "failed") await client.stop();
336
+ }
337
+ }],
338
+ onDispose() {
339
+ stopActivity?.();
340
+ stopActivity = void 0;
341
+ host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, void 0);
342
+ }
343
+ };
344
+ }
345
+ //#endregion
346
+ export { createComputerUseServer };
347
+
348
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/computerUseServer/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { type DoomHeadlessToolResult } from '@agimon-ai/doompi-core/headless';\nimport { serverMinorModes } from '@agimon-ai/doompi-minor-mode';\nimport { defineMinorMode, type MinorModeOwner } from '@agimon-ai/doompi-minor-mode';\n\nimport { COMMAND_NAME, COMMAND_DESCRIPTION } from '../../constants/computerUse';\nimport { COMPUTER_USE_TOOL_NAMES } from '../../constants/computerUse';\nimport { modeState } from '../../models/computerUseMode';\nimport { ComputerScriptRunner } from '../../services/computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../../services/extensionService';\nimport { createComputerUseSessionClient } from '../../services/sessionApiClient';\nimport type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport { COMPUTER_USE_MODE_ID, COMPUTER_USE_STATUS_KEY } from '../../types/computerUseApi';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\n/** This package's identity for mode, activity and restriction ownership, not a status key. */\nconst SOURCE = '@agimon-ai/doompi-computer-use';\n\nconst SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nconst GUIDANCE =\n '[COMPUTER USE ACTIVE]\\nUse computer_state before acting and after any action that may change the interface. Use only element refs and snapshot ids returned by computer_state. Never infer coordinates or bypass secure elements.';\n\nfunction output(value: unknown, isError = false): DoomHeadlessToolResult {\n return {\n content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }],\n details: value,\n ...(isError ? { isError: true } : {}),\n };\n}\n\nfunction observationOutput(value: ComputerUseObservation): DoomHeadlessToolResult {\n return {\n content: [\n { type: 'text', text: JSON.stringify({ ...value, screenshot: undefined }, null, 2) },\n { type: 'image', data: value.screenshot.data, mimeType: value.screenshot.mimeType },\n ],\n details: value,\n };\n}\n\nimport {\n type DoomHeadlessHostService,\n type DoomHeadlessTool,\n type DoomHeadlessCommand,\n} from '@agimon-ai/doompi-core/headless';\nimport { type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/server-facet';\nexport function createComputerUseServer(host: DoomHeadlessHostService): Omit<\n DoomServerSessionPlugin,\n 'tools' | 'commands'\n> & {\n tools: readonly DoomHeadlessTool[];\n commands: readonly DoomHeadlessCommand[];\n} {\n const client = createComputerUseSessionClient();\n const allowedScriptPaths = (host.context.environment[SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n const scriptRunner = client === undefined ? undefined : new ComputerScriptRunner({ client, allowedScriptPaths });\n const service = new DefaultComputerUseExtensionService(client);\n const dependencies = { client, scriptRunner, service };\n let state: ComputerUseSessionView | undefined;\n let stopActivity: (() => void) | undefined;\n let modeOwner: MinorModeOwner | undefined;\n const modeSelected = (): boolean =>\n (host.context.selection.state?.['minor-mode'] ?? []).includes(COMPUTER_USE_MODE_ID);\n const publishMode = (): void => modeOwner?.publish();\n const applyState = (next: ComputerUseSessionView | undefined): void => {\n state = next;\n host.context.client.setStatus(\n COMPUTER_USE_STATUS_KEY,\n next === undefined || next.phase === 'inactive' ? undefined : `computer use: ${next.phase}`,\n );\n publishMode();\n };\n const selectMode = async (enabled: boolean): Promise<void> => {\n const modes = (host.context.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID);\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: enabled ? [...modes, COMPUTER_USE_MODE_ID] : modes,\n });\n publishMode();\n };\n const refresh = async (signal?: AbortSignal): Promise<void> => {\n if (!client) {\n applyState(undefined);\n return;\n }\n try {\n applyState(await client.state(signal));\n } catch {\n applyState(undefined);\n }\n };\n const requireActive = (): NonNullable<typeof client> => {\n if (!client || state?.phase !== 'active') throw new Error('Computer use is not active for this session.');\n return client;\n };\n modeOwner = defineMinorMode<undefined>({\n descriptor: {\n source: SOURCE,\n id: COMPUTER_USE_MODE_ID,\n label: 'Computer Use',\n description: 'Session-scoped semantic control through DoomPi Desktop.',\n order: 450,\n actions: [\n {\n id: 'activate',\n label: 'Activate',\n description: 'Enable computer use for this session.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'deactivate',\n label: 'Deactivate',\n description: 'Stop this session computer-use run.',\n contexts: ['headless'],\n parameters: [],\n },\n {\n id: 'doctor',\n label: 'Doctor',\n description: 'Report Desktop availability and session state.',\n contexts: ['headless'],\n parameters: [],\n },\n ],\n },\n state: () => modeState(state, modeSelected()),\n async handleAction(_runtime, actionId, _argumentsValue, execution) {\n execution.signal.throwIfAborted();\n if (actionId === 'activate') {\n if (!client) throw new Error('DoomPi Desktop computer use is unavailable.');\n await selectMode(true);\n await refresh(execution.signal);\n return { message: 'Computer use activated.' };\n }\n if (actionId === 'doctor') {\n await refresh(execution.signal);\n return {\n message: client\n ? `Computer use is ${state?.phase ?? 'unavailable'}.`\n : 'DoomPi Desktop session API is unavailable.',\n };\n }\n if (actionId === 'deactivate') {\n if (client && state?.phase !== undefined && state.phase !== 'inactive' && state.phase !== 'failed')\n await client.stop(execution.signal);\n await selectMode(false);\n await refresh(execution.signal);\n return { message: 'Computer use deactivated.' };\n }\n throw new Error(`Unknown computer-use action: ${actionId}`);\n },\n }).createOwner(undefined);\n return {\n services: [serverMinorModes([modeOwner])],\n toolRestrictions: [\n {\n when: { state: { 'minor-mode': COMPUTER_USE_MODE_ID } },\n allowedTools: [...COMPUTER_USE_TOOL_NAMES],\n },\n ],\n activities: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: SOURCE,\n async start() {\n await refresh();\n const unsubscribe = client?.subscribeStatus?.(applyState);\n stopActivity = () => {\n unsubscribe?.();\n applyState(undefined);\n };\n return () => {\n stopActivity?.();\n stopActivity = undefined;\n };\n },\n },\n ],\n tools: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_state',\n label: 'Computer State',\n description: 'Observe the authorized application window and return semantic accessibility state.',\n parameters: { type: 'object', properties: {}, additionalProperties: false },\n executionMode: 'serial',\n async execute(_toolCallId, _parameters, signal) {\n try {\n const session = requireActive();\n const observation = await session.observe(signal);\n return observationOutput(observation);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_action',\n label: 'Computer Action',\n description: 'Perform one constrained semantic action in the authorized application window.',\n parameters: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['press', 'focus', 'set_value', 'scroll'] },\n snapshotId: { type: 'string', minLength: 1 },\n elementRef: { type: 'string', minLength: 1 },\n value: { type: 'string' },\n direction: { type: 'string', enum: ['up', 'down', 'left', 'right'] },\n amount: { type: 'string', enum: ['line', 'page'] },\n },\n required: ['kind', 'snapshotId', 'elementRef'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n const result = await requireActive().act(parameters as unknown as ComputerUseAction, signal);\n await refresh(signal);\n return output(result);\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n name: 'computer_exec',\n label: 'Computer Script',\n description:\n 'Run a trusted, explicitly allowed local TypeScript script against the authorized application session.',\n parameters: {\n type: 'object',\n properties: { scriptPath: { type: 'string', minLength: 1 }, input: {} },\n required: ['scriptPath', 'input'],\n additionalProperties: false,\n },\n executionMode: 'serial',\n async execute(_toolCallId, parameters, signal) {\n try {\n if (!dependencies.scriptRunner) throw new Error('Computer script execution is unavailable.');\n const input = parameters as { scriptPath: string; input: unknown };\n return output(await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal));\n } catch (error) {\n return output(error instanceof Error ? error.message : String(error), true);\n }\n },\n },\n ],\n commands: [\n {\n name: COMMAND_NAME,\n description: COMMAND_DESCRIPTION,\n async execute(args, execution) {\n const result = await dependencies.service.execute();\n await execution.client.notify({ body: result.message, level: result.level });\n if (args.trim() === 'deactivate' && client && state?.phase !== 'inactive' && state?.phase !== 'failed') {\n await client.stop();\n await host.changeSelection({\n axis: 'state',\n key: 'minor-mode',\n values: (execution.selection.state?.['minor-mode'] ?? []).filter((mode) => mode !== COMPUTER_USE_MODE_ID),\n });\n await refresh();\n }\n },\n },\n ],\n hooks: [\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'before_agent_start',\n handle(event) {\n if (state?.phase !== 'active') return undefined;\n const prompt = typeof event.systemPrompt === 'string' ? event.systemPrompt : '';\n return { systemPrompt: `${prompt}\\n\\n${GUIDANCE}`.trim() };\n },\n },\n {\n when: {\n state: { 'minor-mode': COMPUTER_USE_MODE_ID },\n attribution: { kind: 'minor', mode: COMPUTER_USE_MODE_ID },\n },\n event: 'session_shutdown',\n handle: async () => {\n stopActivity?.();\n if (client && state?.phase !== 'inactive' && state?.phase !== 'failed') await client.stop();\n },\n },\n ],\n onDispose() {\n stopActivity?.();\n stopActivity = undefined;\n host.context.client.setStatus(COMPUTER_USE_STATUS_KEY, undefined);\n },\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ const require_runtime = require("../../../_virtual/_rolldown/runtime.cjs");
2
+ const require_index = require("../sessionApiClient/index.cjs");
3
+ const require_index$1 = require("../computerScriptRunner/index.cjs");
4
+ const require_index$2 = require("../extensionService/index.cjs");
5
+ let node_path = require("node:path");
6
+ node_path = require_runtime.__toESM(node_path, 1);
7
+ let _agimon_ai_doompi_config = require("@agimon-ai/doompi-config");
8
+ //#region src/services/dependencies/index.ts
9
+ const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
10
+ function createComputerUseDependencies(overrides = {}) {
11
+ const client = overrides.client ?? require_index.createComputerUseSessionClient();
12
+ const allowedScriptPaths = (process.env["DOOMPI_COMPUTER_USE_SCRIPT_PATHS"] ?? "").split(node_path.default.delimiter).filter((entry) => entry.length > 0);
13
+ return {
14
+ service: overrides.service ?? new require_index$2.DefaultComputerUseExtensionService(client),
15
+ enabled: overrides.enabled ?? (() => (0, _agimon_ai_doompi_config.loadDoomConfig)(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),
16
+ ...client === void 0 ? {} : { client },
17
+ ...overrides.scriptRunner !== void 0 ? { scriptRunner: overrides.scriptRunner } : client === void 0 ? {} : { scriptRunner: new require_index$1.ComputerScriptRunner({
18
+ client,
19
+ allowedScriptPaths
20
+ }) }
21
+ };
22
+ }
23
+ //#endregion
24
+ exports.COMPUTER_USE_SCRIPT_PATHS_ENV = COMPUTER_USE_SCRIPT_PATHS_ENV;
25
+ exports.createComputerUseDependencies = createComputerUseDependencies;
26
+
27
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["createComputerUseSessionClient","path","DefaultComputerUseExtensionService","loadDoomConfig","ComputerScriptRunner"],"sources":["../../../../src/services/dependencies/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { loadDoomConfig } from '@agimon-ai/doompi-config';\n\nimport type { ComputerUseExtensionDependencies } from '../../types/extension';\nimport { ComputerScriptRunner } from '../computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../extensionService';\nimport { createComputerUseSessionClient } from '../sessionApiClient';\n\nexport const COMPUTER_USE_SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nexport function createComputerUseDependencies(\n overrides: Partial<ComputerUseExtensionDependencies> = {},\n): ComputerUseExtensionDependencies {\n const client = overrides.client ?? createComputerUseSessionClient();\n const allowedScriptPaths = (process.env[COMPUTER_USE_SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n return {\n service: overrides.service ?? new DefaultComputerUseExtensionService(client),\n enabled:\n overrides.enabled ??\n (() => loadDoomConfig(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),\n ...(client === undefined ? {} : { client }),\n ...(overrides.scriptRunner !== undefined\n ? { scriptRunner: overrides.scriptRunner }\n : client === undefined\n ? {}\n : { scriptRunner: new ComputerScriptRunner({ client, allowedScriptPaths }) }),\n };\n}\n"],"mappings":";;;;;;;;AASA,MAAa,gCAAgC;AAC7C,SAAgB,8BACd,YAAuD,CAAC,GACtB;CAClC,MAAM,SAAS,UAAU,UAAUA,cAAAA,+BAA+B;CAClE,MAAM,sBAAsB,QAAQ,IAAA,uCAAsC,GAAA,CACvE,MAAMC,UAAAA,QAAK,SAAS,CAAC,CACrB,QAAQ,UAAU,MAAM,SAAS,CAAC;CACrC,OAAO;EACL,SAAS,UAAU,WAAW,IAAIC,gBAAAA,mCAAmC,MAAM;EAC3E,SACE,UAAU,mBAAA,GACHC,yBAAAA,eAAAA,CAAe,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,YAAY;EAC/F,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;EACzC,GAAI,UAAU,iBAAiB,KAAA,IAC3B,EAAE,cAAc,UAAU,aAAa,IACvC,WAAW,KAAA,IACT,CAAC,IACD,EAAE,cAAc,IAAIC,gBAAAA,qBAAqB;GAAE;GAAQ;EAAmB,CAAC,EAAE;CACjF;AACF"}
@@ -0,0 +1,6 @@
1
+ import { ComputerUseExtensionDependencies } from "../../types/extension.cjs";
2
+ //#region src/services/dependencies/index.d.ts
3
+ export declare const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
4
+ export declare function createComputerUseDependencies(overrides?: Partial<ComputerUseExtensionDependencies>): ComputerUseExtensionDependencies;
5
+ //#endregion
6
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/dependencies/index.ts"],"mappings":";;qBASa;wBACG,8BACd,YAAW,QAAQ,oCAClB"}
@@ -0,0 +1,6 @@
1
+ import { ComputerUseExtensionDependencies } from "../../types/extension.mjs";
2
+ //#region src/services/dependencies/index.d.ts
3
+ export declare const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
4
+ export declare function createComputerUseDependencies(overrides?: Partial<ComputerUseExtensionDependencies>): ComputerUseExtensionDependencies;
5
+ //#endregion
6
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/dependencies/index.ts"],"mappings":";;qBASa;wBACG,8BACd,YAAW,QAAQ,oCAClB"}
@@ -0,0 +1,24 @@
1
+ import { createComputerUseSessionClient } from "../sessionApiClient/index.mjs";
2
+ import { ComputerScriptRunner } from "../computerScriptRunner/index.mjs";
3
+ import { DefaultComputerUseExtensionService } from "../extensionService/index.mjs";
4
+ import path from "node:path";
5
+ import { loadDoomConfig } from "@agimon-ai/doompi-config";
6
+ //#region src/services/dependencies/index.ts
7
+ const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
8
+ function createComputerUseDependencies(overrides = {}) {
9
+ const client = overrides.client ?? createComputerUseSessionClient();
10
+ const allowedScriptPaths = (process.env["DOOMPI_COMPUTER_USE_SCRIPT_PATHS"] ?? "").split(path.delimiter).filter((entry) => entry.length > 0);
11
+ return {
12
+ service: overrides.service ?? new DefaultComputerUseExtensionService(client),
13
+ enabled: overrides.enabled ?? (() => loadDoomConfig(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),
14
+ ...client === void 0 ? {} : { client },
15
+ ...overrides.scriptRunner !== void 0 ? { scriptRunner: overrides.scriptRunner } : client === void 0 ? {} : { scriptRunner: new ComputerScriptRunner({
16
+ client,
17
+ allowedScriptPaths
18
+ }) }
19
+ };
20
+ }
21
+ //#endregion
22
+ export { COMPUTER_USE_SCRIPT_PATHS_ENV, createComputerUseDependencies };
23
+
24
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/dependencies/index.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { loadDoomConfig } from '@agimon-ai/doompi-config';\n\nimport type { ComputerUseExtensionDependencies } from '../../types/extension';\nimport { ComputerScriptRunner } from '../computerScriptRunner';\nimport { DefaultComputerUseExtensionService } from '../extensionService';\nimport { createComputerUseSessionClient } from '../sessionApiClient';\n\nexport const COMPUTER_USE_SCRIPT_PATHS_ENV = 'DOOMPI_COMPUTER_USE_SCRIPT_PATHS';\nexport function createComputerUseDependencies(\n overrides: Partial<ComputerUseExtensionDependencies> = {},\n): ComputerUseExtensionDependencies {\n const client = overrides.client ?? createComputerUseSessionClient();\n const allowedScriptPaths = (process.env[COMPUTER_USE_SCRIPT_PATHS_ENV] ?? '')\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n return {\n service: overrides.service ?? new DefaultComputerUseExtensionService(client),\n enabled:\n overrides.enabled ??\n (() => loadDoomConfig(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),\n ...(client === undefined ? {} : { client }),\n ...(overrides.scriptRunner !== undefined\n ? { scriptRunner: overrides.scriptRunner }\n : client === undefined\n ? {}\n : { scriptRunner: new ComputerScriptRunner({ client, allowedScriptPaths }) }),\n };\n}\n"],"mappings":";;;;;;AASA,MAAa,gCAAgC;AAC7C,SAAgB,8BACd,YAAuD,CAAC,GACtB;CAClC,MAAM,SAAS,UAAU,UAAU,+BAA+B;CAClE,MAAM,sBAAsB,QAAQ,IAAA,uCAAsC,GAAA,CACvE,MAAM,KAAK,SAAS,CAAC,CACrB,QAAQ,UAAU,MAAM,SAAS,CAAC;CACrC,OAAO;EACL,SAAS,UAAU,WAAW,IAAI,mCAAmC,MAAM;EAC3E,SACE,UAAU,kBACH,eAAe,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa,YAAY;EAC/F,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;EACzC,GAAI,UAAU,iBAAiB,KAAA,IAC3B,EAAE,cAAc,UAAU,aAAa,IACvC,WAAW,KAAA,IACT,CAAC,IACD,EAAE,cAAc,IAAI,qBAAqB;GAAE;GAAQ;EAAmB,CAAC,EAAE;CACjF;AACF"}
@@ -0,0 +1,21 @@
1
+ //#region src/services/extensionService/index.ts
2
+ var DefaultComputerUseExtensionService = class {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ async execute() {
8
+ if (this.client === void 0) return {
9
+ message: "Computer use requires a DoomPi Desktop session.",
10
+ level: "error"
11
+ };
12
+ return {
13
+ message: `Computer use is ${(await this.client.state()).phase.replaceAll("_", " ")}.`,
14
+ level: "info"
15
+ };
16
+ }
17
+ };
18
+ //#endregion
19
+ exports.DefaultComputerUseExtensionService = DefaultComputerUseExtensionService;
20
+
21
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"sourcesContent":["import type { ComputerUseExtensionResult, ComputerUseExtensionService } from '../../types/extension';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nexport class DefaultComputerUseExtensionService implements ComputerUseExtensionService {\n public constructor(private readonly client?: ComputerUseSessionClient) {}\n\n public async execute(): Promise<ComputerUseExtensionResult> {\n if (this.client === undefined)\n return { message: 'Computer use requires a DoomPi Desktop session.', level: 'error' };\n const state = await this.client.state();\n return { message: `Computer use is ${state.phase.replaceAll('_', ' ')}.`, level: 'info' };\n }\n}\n"],"mappings":";AAGA,IAAa,qCAAb,MAAuF;CACjD;CAApC,YAAmB,QAAoD;EAAnC,KAAA,SAAA;CAAoC;CAExE,MAAa,UAA+C;EAC1D,IAAI,KAAK,WAAW,KAAA,GAClB,OAAO;GAAE,SAAS;GAAmD,OAAO;EAAQ;EAEtF,OAAO;GAAE,SAAS,oBAAmB,MADjB,KAAK,OAAO,MAAM,EAAA,CACK,MAAM,WAAW,KAAK,GAAG,EAAE;GAAI,OAAO;EAAO;CAC1F;AACF"}
@@ -0,0 +1,10 @@
1
+ import { ComputerUseSessionClient } from "../sessionApiClient/index.cjs";
2
+ import { ComputerUseExtensionResult, ComputerUseExtensionService } from "../../types/extension.cjs";
3
+ //#region src/services/extensionService/index.d.ts
4
+ export declare class DefaultComputerUseExtensionService implements ComputerUseExtensionService {
5
+ private readonly client?;
6
+ constructor(client?: ComputerUseSessionClient | undefined);
7
+ execute(): Promise<ComputerUseExtensionResult>;
8
+ }
9
+ //#endregion
10
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"mappings":";;;qBAGa,8CAA8C;mBACrB;EAApC,YAAoC,SAAS;EAEhC,WAAW,QAAQ"}
@@ -0,0 +1,10 @@
1
+ import { ComputerUseSessionClient } from "../sessionApiClient/index.mjs";
2
+ import { ComputerUseExtensionResult, ComputerUseExtensionService } from "../../types/extension.mjs";
3
+ //#region src/services/extensionService/index.d.ts
4
+ export declare class DefaultComputerUseExtensionService implements ComputerUseExtensionService {
5
+ private readonly client?;
6
+ constructor(client?: ComputerUseSessionClient | undefined);
7
+ execute(): Promise<ComputerUseExtensionResult>;
8
+ }
9
+ //#endregion
10
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"mappings":";;;qBAGa,8CAA8C;mBACrB;EAApC,YAAoC,SAAS;EAEhC,WAAW,QAAQ"}
@@ -0,0 +1,21 @@
1
+ //#region src/services/extensionService/index.ts
2
+ var DefaultComputerUseExtensionService = class {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ async execute() {
8
+ if (this.client === void 0) return {
9
+ message: "Computer use requires a DoomPi Desktop session.",
10
+ level: "error"
11
+ };
12
+ return {
13
+ message: `Computer use is ${(await this.client.state()).phase.replaceAll("_", " ")}.`,
14
+ level: "info"
15
+ };
16
+ }
17
+ };
18
+ //#endregion
19
+ export { DefaultComputerUseExtensionService };
20
+
21
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/services/extensionService/index.ts"],"sourcesContent":["import type { ComputerUseExtensionResult, ComputerUseExtensionService } from '../../types/extension';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nexport class DefaultComputerUseExtensionService implements ComputerUseExtensionService {\n public constructor(private readonly client?: ComputerUseSessionClient) {}\n\n public async execute(): Promise<ComputerUseExtensionResult> {\n if (this.client === undefined)\n return { message: 'Computer use requires a DoomPi Desktop session.', level: 'error' };\n const state = await this.client.state();\n return { message: `Computer use is ${state.phase.replaceAll('_', ' ')}.`, level: 'info' };\n }\n}\n"],"mappings":";AAGA,IAAa,qCAAb,MAAuF;CACjD;CAApC,YAAmB,QAAoD;EAAnC,KAAA,SAAA;CAAoC;CAExE,MAAa,UAA+C;EAC1D,IAAI,KAAK,WAAW,KAAA,GAClB,OAAO;GAAE,SAAS;GAAmD,OAAO;EAAQ;EAEtF,OAAO;GAAE,SAAS,oBAAmB,MADjB,KAAK,OAAO,MAAM,EAAA,CACK,MAAM,WAAW,KAAK,GAAG,EAAE;GAAI,OAAO;EAAO;CAC1F;AACF"}
@@ -0,0 +1,17 @@
1
+ //#region src/services/mcpTools/index.ts
2
+ const COMPUTER_USE_MCP_TOOLS_SERVICE = "doom/computer-use-mcp-tools";
3
+ function mountMcpTools(tools) {
4
+ return (context) => {
5
+ context.plugin((providerContext) => {
6
+ providerContext.provide(COMPUTER_USE_MCP_TOOLS_SERVICE, {
7
+ get: (name) => tools.find((tool) => tool.name === name),
8
+ names: () => tools.map((tool) => tool.name)
9
+ });
10
+ });
11
+ };
12
+ }
13
+ //#endregion
14
+ exports.COMPUTER_USE_MCP_TOOLS_SERVICE = COMPUTER_USE_MCP_TOOLS_SERVICE;
15
+ exports.mountMcpTools = mountMcpTools;
16
+
17
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/services/mcpTools/index.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { COMPUTER_USE_MODE_ID } from '../../types/computerUseApi';\n\nexport const COMPUTER_USE_MCP_TOOLS_SERVICE = 'doom/computer-use-mcp-tools';\n\nconst MODE_LABEL = 'Computer Use';\n\nexport interface McpToolCatalog {\n get(name: string): DoomHeadlessTool | undefined;\n names(): readonly string[];\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n return (context: Context): void => {\n context.plugin((providerContext) => {\n providerContext.provide(COMPUTER_USE_MCP_TOOLS_SERVICE, {\n get: (name) => tools.find((tool) => tool.name === name),\n names: () => tools.map((tool) => tool.name),\n } satisfies McpToolCatalog);\n });\n };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n const catalog = context.services.get<McpToolCatalog>(COMPUTER_USE_MCP_TOOLS_SERVICE);\n const tool = catalog?.get(name);\n if (!tool || !catalog) throw new Error(`Computer use tool is unavailable: ${name}`);\n return {\n ...tool,\n execute(toolCallId, parameters, signal, onUpdate) {\n const activeModes = context.selection.read().state?.['minor-mode'] ?? [];\n if (!activeModes.includes(COMPUTER_USE_MODE_ID)) {\n const inactiveTools = [...catalog.names()].sort().join(', ');\n throw new Error(`${MODE_LABEL} minor mode is inactive. Inactive ${MODE_LABEL} tools: ${inactiveTools}.`);\n }\n const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n },\n };\n}\n"],"mappings":";AAMA,MAAa,iCAAiC;AAS9C,SAAgB,cAAc,OAAoC;CAChE,QAAQ,YAA2B;EACjC,QAAQ,QAAQ,oBAAoB;GAClC,gBAAgB,QAAQ,gCAAgC;IACtD,MAAM,SAAS,MAAM,MAAM,SAAS,KAAK,SAAS,IAAI;IACtD,aAAa,MAAM,KAAK,SAAS,KAAK,IAAI;GAC5C,CAA0B;EAC5B,CAAC;CACH;AACF"}