@agimon-ai/doompi-computer-use 0.0.1-alpha.24 → 0.0.1-alpha.26

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 (246) hide show
  1. package/dist/{src/schemas/apiContracts.cjs → apiContracts.cjs} +8 -6
  2. package/dist/apiContracts.cjs.map +1 -0
  3. package/dist/{src/schemas/apiContracts.d.mts.map → apiContracts.d.mts.map} +1 -1
  4. package/dist/{src/schemas/apiContracts.mjs → apiContracts.mjs} +2 -2
  5. package/dist/apiContracts.mjs.map +1 -0
  6. package/dist/computerUseMode-BgtaVx_z.cjs +137 -0
  7. package/dist/computerUseMode-BgtaVx_z.cjs.map +1 -0
  8. package/dist/computerUseMode-nb6yoF4Y.mjs +72 -0
  9. package/dist/computerUseMode-nb6yoF4Y.mjs.map +1 -0
  10. package/dist/{src/services/dependencies/index.cjs → dependencies-CuOzd5Pm.cjs} +18 -11
  11. package/dist/dependencies-CuOzd5Pm.cjs.map +1 -0
  12. package/dist/{src/services/dependencies/index.mjs → dependencies-gtxIMe7d.mjs} +3 -5
  13. package/dist/dependencies-gtxIMe7d.mjs.map +1 -0
  14. package/dist/{src/services/computerScriptRunner/index.cjs → extensionService-44mLS5b_.cjs} +106 -2
  15. package/dist/extensionService-44mLS5b_.cjs.map +1 -0
  16. package/dist/{src/services/computerScriptRunner/index.mjs → extensionService-nFT_46iM.mjs} +37 -2
  17. package/dist/extensionService-nFT_46iM.mjs.map +1 -0
  18. package/dist/extensions/mcp.cjs +5 -5
  19. package/dist/extensions/mcp.cjs.map +1 -1
  20. package/dist/extensions/mcp.d.mts +1 -1
  21. package/dist/extensions/mcp.d.mts.map +1 -1
  22. package/dist/extensions/mcp.mjs +1 -1
  23. package/dist/extensions/mcp.mjs.map +1 -1
  24. package/dist/extensions/pi.cjs +354 -21
  25. package/dist/extensions/pi.cjs.map +1 -1
  26. package/dist/extensions/pi.d.mts +2 -3
  27. package/dist/extensions/pi.d.mts.map +1 -1
  28. package/dist/extensions/pi.mjs +345 -12
  29. package/dist/extensions/pi.mjs.map +1 -1
  30. package/dist/extensions/server.cjs +1023 -23
  31. package/dist/extensions/server.cjs.map +1 -1
  32. package/dist/extensions/server.d.mts +1 -1
  33. package/dist/extensions/server.d.mts.map +1 -1
  34. package/dist/extensions/server.mjs +1014 -15
  35. package/dist/extensions/server.mjs.map +1 -1
  36. package/dist/extensions/web.mjs.map +1 -1
  37. package/dist/index-CazCNSuR.d.mts +305 -0
  38. package/dist/index-CazCNSuR.d.mts.map +1 -0
  39. package/dist/index.cjs +115 -17
  40. package/dist/index.cjs.map +1 -0
  41. package/dist/index.d.mts +1 -11
  42. package/dist/index.mjs +105 -7
  43. package/dist/index.mjs.map +1 -0
  44. package/package.json +12 -11
  45. package/src/types/computerUseApi.ts +1 -1
  46. package/dist/_virtual/_rolldown/runtime.cjs +0 -23
  47. package/dist/api-contracts.cjs +0 -7
  48. package/dist/api-contracts.d.cts +0 -2
  49. package/dist/api-contracts.d.mts +0 -2
  50. package/dist/api-contracts.mjs +0 -2
  51. package/dist/extensions/mcp.d.cts +0 -5
  52. package/dist/extensions/mcp.d.cts.map +0 -1
  53. package/dist/extensions/pi.d.cts +0 -7
  54. package/dist/extensions/pi.d.cts.map +0 -1
  55. package/dist/extensions/server.d.cts +0 -5
  56. package/dist/extensions/server.d.cts.map +0 -1
  57. package/dist/index.d.cts +0 -12
  58. package/dist/src/constants/computerUse.cjs +0 -17
  59. package/dist/src/constants/computerUse.cjs.map +0 -1
  60. package/dist/src/constants/computerUse.d.cts +0 -5
  61. package/dist/src/constants/computerUse.d.cts.map +0 -1
  62. package/dist/src/constants/computerUse.d.mts +0 -5
  63. package/dist/src/constants/computerUse.d.mts.map +0 -1
  64. package/dist/src/constants/computerUse.mjs +0 -14
  65. package/dist/src/constants/computerUse.mjs.map +0 -1
  66. package/dist/src/extensions/(backend)/channel/computer-use.server.cjs +0 -7
  67. package/dist/src/extensions/(backend)/channel/computer-use.server.cjs.map +0 -1
  68. package/dist/src/extensions/(backend)/channel/computer-use.server.mjs +0 -8
  69. package/dist/src/extensions/(backend)/channel/computer-use.server.mjs.map +0 -1
  70. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.cjs +0 -8
  71. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.cjs.map +0 -1
  72. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.mjs +0 -8
  73. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.mjs.map +0 -1
  74. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.cjs +0 -11
  75. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.cjs.map +0 -1
  76. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.mjs +0 -11
  77. package/dist/src/extensions/workspaces/sessions/(backend)/_runtime/index.server.mjs.map +0 -1
  78. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.cjs +0 -6
  79. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.cjs.map +0 -1
  80. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.mjs +0 -7
  81. package/dist/src/extensions/workspaces/sessions/(backend)/api/computer-use/route.server.mjs.map +0 -1
  82. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs +0 -6
  83. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs.map +0 -1
  84. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.mjs +0 -7
  85. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.mjs.map +0 -1
  86. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.cjs +0 -6
  87. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.cjs.map +0 -1
  88. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.mjs +0 -7
  89. package/dist/src/extensions/workspaces/sessions/(backend)/command/computer-use.server.mjs.map +0 -1
  90. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs +0 -6
  91. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs.map +0 -1
  92. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs +0 -7
  93. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.mjs.map +0 -1
  94. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs +0 -6
  95. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.cjs.map +0 -1
  96. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs +0 -7
  97. package/dist/src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.server.mjs.map +0 -1
  98. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs +0 -6
  99. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.cjs.map +0 -1
  100. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs +0 -7
  101. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-shutdown.server.mjs.map +0 -1
  102. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs +0 -6
  103. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs.map +0 -1
  104. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs +0 -7
  105. package/dist/src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.mjs.map +0 -1
  106. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs +0 -15
  107. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.cjs.map +0 -1
  108. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs +0 -16
  109. package/dist/src/extensions/workspaces/sessions/(backend)/root.cli.mjs.map +0 -1
  110. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs +0 -17
  111. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.cjs.map +0 -1
  112. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs +0 -18
  113. package/dist/src/extensions/workspaces/sessions/(backend)/root.server.mjs.map +0 -1
  114. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs +0 -6
  115. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs.map +0 -1
  116. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.mjs +0 -7
  117. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.mjs.map +0 -1
  118. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.cjs +0 -6
  119. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.cjs.map +0 -1
  120. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.mjs +0 -7
  121. package/dist/src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.server.mjs.map +0 -1
  122. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs +0 -6
  123. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs.map +0 -1
  124. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.mjs +0 -7
  125. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.mjs.map +0 -1
  126. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.cjs +0 -6
  127. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.cjs.map +0 -1
  128. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.mjs +0 -7
  129. package/dist/src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.server.mjs.map +0 -1
  130. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs +0 -6
  131. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs.map +0 -1
  132. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.mjs +0 -7
  133. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.mjs.map +0 -1
  134. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.cjs +0 -6
  135. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.cjs.map +0 -1
  136. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.mjs +0 -7
  137. package/dist/src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.server.mjs.map +0 -1
  138. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs +0 -6
  139. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs.map +0 -1
  140. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.mjs +0 -7
  141. package/dist/src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.mjs.map +0 -1
  142. package/dist/src/models/computerUseMode.cjs +0 -43
  143. package/dist/src/models/computerUseMode.cjs.map +0 -1
  144. package/dist/src/models/computerUseMode.mjs +0 -42
  145. package/dist/src/models/computerUseMode.mjs.map +0 -1
  146. package/dist/src/models/computerUseState.cjs +0 -89
  147. package/dist/src/models/computerUseState.cjs.map +0 -1
  148. package/dist/src/models/computerUseState.d.cts +0 -6
  149. package/dist/src/models/computerUseState.d.cts.map +0 -1
  150. package/dist/src/models/computerUseState.d.mts +0 -6
  151. package/dist/src/models/computerUseState.d.mts.map +0 -1
  152. package/dist/src/models/computerUseState.mjs +0 -88
  153. package/dist/src/models/computerUseState.mjs.map +0 -1
  154. package/dist/src/schemas/apiContracts.cjs.map +0 -1
  155. package/dist/src/schemas/apiContracts.d.cts +0 -53
  156. package/dist/src/schemas/apiContracts.d.cts.map +0 -1
  157. package/dist/src/schemas/apiContracts.mjs.map +0 -1
  158. package/dist/src/services/computerScriptRunner/index.cjs.map +0 -1
  159. package/dist/src/services/computerScriptRunner/index.d.cts +0 -12
  160. package/dist/src/services/computerScriptRunner/index.d.cts.map +0 -1
  161. package/dist/src/services/computerScriptRunner/index.d.mts +0 -12
  162. package/dist/src/services/computerScriptRunner/index.d.mts.map +0 -1
  163. package/dist/src/services/computerScriptRunner/index.mjs.map +0 -1
  164. package/dist/src/services/computerUseApi/index.cjs +0 -291
  165. package/dist/src/services/computerUseApi/index.cjs.map +0 -1
  166. package/dist/src/services/computerUseApi/index.mjs +0 -289
  167. package/dist/src/services/computerUseApi/index.mjs.map +0 -1
  168. package/dist/src/services/computerUseCommand/index.cjs +0 -15
  169. package/dist/src/services/computerUseCommand/index.cjs.map +0 -1
  170. package/dist/src/services/computerUseCommand/index.mjs +0 -15
  171. package/dist/src/services/computerUseCommand/index.mjs.map +0 -1
  172. package/dist/src/services/computerUseRuntime/index.cjs +0 -300
  173. package/dist/src/services/computerUseRuntime/index.cjs.map +0 -1
  174. package/dist/src/services/computerUseRuntime/index.mjs +0 -299
  175. package/dist/src/services/computerUseRuntime/index.mjs.map +0 -1
  176. package/dist/src/services/computerUseServer/index.cjs +0 -346
  177. package/dist/src/services/computerUseServer/index.cjs.map +0 -1
  178. package/dist/src/services/computerUseServer/index.mjs +0 -344
  179. package/dist/src/services/computerUseServer/index.mjs.map +0 -1
  180. package/dist/src/services/dependencies/index.cjs.map +0 -1
  181. package/dist/src/services/dependencies/index.d.cts +0 -6
  182. package/dist/src/services/dependencies/index.d.cts.map +0 -1
  183. package/dist/src/services/dependencies/index.d.mts +0 -6
  184. package/dist/src/services/dependencies/index.d.mts.map +0 -1
  185. package/dist/src/services/dependencies/index.mjs.map +0 -1
  186. package/dist/src/services/extensionService/index.cjs +0 -21
  187. package/dist/src/services/extensionService/index.cjs.map +0 -1
  188. package/dist/src/services/extensionService/index.d.cts +0 -10
  189. package/dist/src/services/extensionService/index.d.cts.map +0 -1
  190. package/dist/src/services/extensionService/index.d.mts +0 -10
  191. package/dist/src/services/extensionService/index.d.mts.map +0 -1
  192. package/dist/src/services/extensionService/index.mjs +0 -21
  193. package/dist/src/services/extensionService/index.mjs.map +0 -1
  194. package/dist/src/services/mcpTools/index.cjs +0 -17
  195. package/dist/src/services/mcpTools/index.cjs.map +0 -1
  196. package/dist/src/services/mcpTools/index.mjs +0 -16
  197. package/dist/src/services/mcpTools/index.mjs.map +0 -1
  198. package/dist/src/services/sessionApiClient/index.cjs +0 -9
  199. package/dist/src/services/sessionApiClient/index.cjs.map +0 -1
  200. package/dist/src/services/sessionApiClient/index.d.cts +0 -15
  201. package/dist/src/services/sessionApiClient/index.d.cts.map +0 -1
  202. package/dist/src/services/sessionApiClient/index.d.mts +0 -15
  203. package/dist/src/services/sessionApiClient/index.d.mts.map +0 -1
  204. package/dist/src/services/sessionApiClient/index.mjs +0 -9
  205. package/dist/src/services/sessionApiClient/index.mjs.map +0 -1
  206. package/dist/src/services/traceRedaction/index.cjs +0 -19
  207. package/dist/src/services/traceRedaction/index.cjs.map +0 -1
  208. package/dist/src/services/traceRedaction/index.d.cts +0 -28
  209. package/dist/src/services/traceRedaction/index.d.cts.map +0 -1
  210. package/dist/src/services/traceRedaction/index.d.mts +0 -28
  211. package/dist/src/services/traceRedaction/index.d.mts.map +0 -1
  212. package/dist/src/services/traceRedaction/index.mjs +0 -19
  213. package/dist/src/services/traceRedaction/index.mjs.map +0 -1
  214. package/dist/src/services/webComputerUseAvailability/index.cjs +0 -13
  215. package/dist/src/services/webComputerUseAvailability/index.cjs.map +0 -1
  216. package/dist/src/services/webComputerUseAvailability/index.mjs +0 -12
  217. package/dist/src/services/webComputerUseAvailability/index.mjs.map +0 -1
  218. package/dist/src/services/webComputerUseChannel/index.cjs +0 -251
  219. package/dist/src/services/webComputerUseChannel/index.cjs.map +0 -1
  220. package/dist/src/services/webComputerUseChannel/index.mjs +0 -250
  221. package/dist/src/services/webComputerUseChannel/index.mjs.map +0 -1
  222. package/dist/src/types/apiRoutes.cjs +0 -84
  223. package/dist/src/types/apiRoutes.cjs.map +0 -1
  224. package/dist/src/types/apiRoutes.mjs +0 -84
  225. package/dist/src/types/apiRoutes.mjs.map +0 -1
  226. package/dist/src/types/computerScript.d.cts +0 -38
  227. package/dist/src/types/computerScript.d.cts.map +0 -1
  228. package/dist/src/types/computerScript.d.mts +0 -38
  229. package/dist/src/types/computerScript.d.mts.map +0 -1
  230. package/dist/src/types/computerUse.d.cts +0 -104
  231. package/dist/src/types/computerUse.d.cts.map +0 -1
  232. package/dist/src/types/computerUse.d.mts +0 -104
  233. package/dist/src/types/computerUse.d.mts.map +0 -1
  234. package/dist/src/types/computerUseApi.cjs +0 -41
  235. package/dist/src/types/computerUseApi.cjs.map +0 -1
  236. package/dist/src/types/computerUseApi.d.cts +0 -83
  237. package/dist/src/types/computerUseApi.d.cts.map +0 -1
  238. package/dist/src/types/computerUseApi.d.mts +0 -83
  239. package/dist/src/types/computerUseApi.d.mts.map +0 -1
  240. package/dist/src/types/computerUseApi.mjs +0 -33
  241. package/dist/src/types/computerUseApi.mjs.map +0 -1
  242. package/dist/src/types/extension.d.cts +0 -19
  243. package/dist/src/types/extension.d.cts.map +0 -1
  244. package/dist/src/types/extension.d.mts +0 -19
  245. package/dist/src/types/extension.d.mts.map +0 -1
  246. /package/dist/{src/schemas/apiContracts.d.mts → apiContracts.d.mts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionService-nFT_46iM.mjs","names":[],"sources":["../src/constants/computerUse.ts","../src/services/sessionApiClient/index.ts","../src/services/computerScriptRunner/index.ts","../src/services/extensionService/index.ts"],"sourcesContent":["export const COMPUTER_USE_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. Use computer_action for one semantic press, focus, set_value, or scroll at a time. Use computer_exec only for a trusted, explicitly allowed local TypeScript script. Never infer coordinates, inspect another application, bypass secure elements, or retry an uncertain outcome. Stop computer use when the task is complete.`;\nexport const COMMAND_NAME = 'computer-use';\nexport const COMMAND_DESCRIPTION = 'Inspect or manage the session computer use mode';\n\nexport const COMPUTER_USE_TOOL_NAMES = ['computer_state', 'computer_action', 'computer_exec'] as const;\n","import type { ComputerUseAction, ComputerUseObservation } from '../../types/computerUse';\nimport type { ComputerUseSessionView } from '../../types/computerUseApi';\n\nexport interface ComputerUseSessionClient {\n state(signal?: AbortSignal): Promise<ComputerUseSessionView>;\n /** Subscribes to lifecycle-owned state changes, without polling the session API. */\n subscribeStatus?(listener: (state: ComputerUseSessionView) => void): () => void;\n observe(signal?: AbortSignal): Promise<ComputerUseObservation>;\n act(action: ComputerUseAction, signal?: AbortSignal): Promise<unknown>;\n stop(signal?: AbortSignal): Promise<ComputerUseSessionView>;\n}\n\n/** Uses the host-owned typed service directly. Internal package APIs are in-process. */\nexport function createComputerUseSessionClient(host?: ComputerUseSessionClient): ComputerUseSessionClient | undefined {\n return host;\n}\n","import { spawn } from 'node:child_process';\nimport { realpath } from 'node:fs/promises';\n\nimport type { ComputerScriptExecutionResult, ComputerScriptRunnerOptions } from '../../types/computerScript';\nimport type { ComputerUseAction } from '../../types/computerUse';\nimport type { ComputerUseSessionClient } from '../sessionApiClient';\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 256 * 1024;\n\nconst WORKER_SOURCE = String.raw`\nimport { readFile } from 'node:fs/promises';\nimport { stripTypeScriptTypes } from 'node:module';\n\nlet nextRequestId = 0;\nconst pending = new Map();\nconst call = (operation, payload) => new Promise((resolve, reject) => {\n const id = String(++nextRequestId);\n pending.set(id, { resolve, reject });\n process.send({ type: 'program', id, operation, payload });\n});\nprocess.on('message', async (message) => {\n if (message?.type === 'response') {\n const request = pending.get(message.id);\n if (!request) return;\n pending.delete(message.id);\n if (message.error) request.reject(new Error(message.error));\n else request.resolve(message.value);\n return;\n }\n if (message?.type !== 'start') return;\n const controller = new AbortController();\n process.once('SIGTERM', () => controller.abort());\n const logger = Object.fromEntries(['debug', 'info', 'warn', 'error'].map((level) => [level, (value) => {\n process.send({ type: 'log', level, message: String(value) });\n }]));\n try {\n const source = await readFile(message.scriptPath, 'utf8');\n const compiled = stripTypeScriptTypes(source, { mode: 'strip' });\n const moduleUrl = 'data:text/javascript;base64,' + Buffer.from(compiled).toString('base64');\n const loaded = await import(moduleUrl);\n if (typeof loaded.run !== 'function') throw new Error('Computer script must export a named run function.');\n const program = {\n observe: () => call('observe'),\n act: (action) => call('act', action),\n };\n const result = await loaded.run({ context: { program }, input: message.input, logger, signal: controller.signal });\n const resultJson = result === undefined ? undefined : JSON.stringify(result);\n process.send({ type: 'complete', resultJson });\n } catch (error) {\n process.send({ type: 'failed', error: error instanceof Error ? error.message : String(error) });\n }\n});\n`;\n\ninterface WorkerMessage {\n readonly type?: unknown;\n readonly id?: unknown;\n readonly operation?: unknown;\n readonly payload?: unknown;\n readonly level?: unknown;\n readonly message?: unknown;\n readonly resultJson?: unknown;\n readonly error?: unknown;\n}\n\nexport class ComputerScriptRunner {\n private readonly client: ComputerUseSessionClient;\n private readonly allowedScriptPaths: readonly string[];\n private readonly timeoutMs: number;\n private readonly maxOutputBytes: number;\n\n public constructor(options: ComputerScriptRunnerOptions) {\n this.client = options.client;\n this.allowedScriptPaths = options.allowedScriptPaths;\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n }\n\n public async execute(\n scriptPath: string,\n input: unknown,\n signal?: AbortSignal,\n ): Promise<ComputerScriptExecutionResult> {\n const resolvedPath = await realpath(scriptPath);\n const allowedPaths = await Promise.all(\n this.allowedScriptPaths.map(async (candidate) => realpath(candidate).catch(() => '')),\n );\n if (!allowedPaths.includes(resolvedPath)) throw new Error('Computer script path is not explicitly allowed.');\n if (!resolvedPath.endsWith('.ts')) throw new Error('Computer scripts must be TypeScript files.');\n\n const serializedInput = JSON.stringify(input);\n if (serializedInput === undefined) throw new Error('Computer script input must be JSON serializable.');\n if (Buffer.byteLength(serializedInput) > this.maxOutputBytes)\n throw new Error('Computer script input exceeds the size limit.');\n\n return new Promise((resolve, reject) => {\n const child = spawn(process.execPath, ['--input-type=module', '--eval', WORKER_SOURCE], {\n stdio: ['ignore', 'pipe', 'pipe', 'ipc'],\n });\n const controller = new AbortController();\n const logs: string[] = [];\n let outputBytes = 0;\n let settled = false;\n let operation = Promise.resolve();\n\n const terminate = (): void => {\n controller.abort();\n child.kill('SIGTERM');\n const killTimer = setTimeout(() => child.kill('SIGKILL'), 250);\n killTimer.unref?.();\n };\n const finish = (error?: Error, value?: ComputerScriptExecutionResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timeout);\n signal?.removeEventListener('abort', onAbort);\n terminate();\n if (error !== undefined) reject(error);\n else resolve(value as ComputerScriptExecutionResult);\n };\n const addOutput = (value: string): boolean => {\n outputBytes += Buffer.byteLength(value);\n if (outputBytes <= this.maxOutputBytes) return true;\n finish(new Error('Computer script output exceeded the size limit.'));\n return false;\n };\n const onAbort = () => finish(new Error('Computer script execution was cancelled.'));\n const timeout = setTimeout(() => finish(new Error('Computer script execution timed out.')), this.timeoutMs);\n timeout.unref?.();\n signal?.addEventListener('abort', onAbort, { once: true });\n if (signal?.aborted === true) return onAbort();\n\n child.stdout?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.stderr?.on('data', (chunk: Buffer) => addOutput(chunk.toString('utf8')));\n child.on('error', (error) => finish(error));\n child.on('exit', (code, exitSignal) => {\n if (!settled)\n finish(new Error(`Computer script worker exited before completion (${exitSignal ?? code ?? 'unknown'}).`));\n });\n child.on('message', (rawMessage: WorkerMessage) => {\n if (settled) return;\n if (rawMessage.type === 'log' && typeof rawMessage.message === 'string') {\n const line = `[${String(rawMessage.level)}] ${rawMessage.message}`;\n if (addOutput(line)) logs.push(line);\n return;\n }\n if (\n rawMessage.type === 'program' &&\n typeof rawMessage.id === 'string' &&\n (rawMessage.operation === 'observe' || rawMessage.operation === 'act')\n ) {\n operation = operation.then(async () => {\n try {\n const value =\n rawMessage.operation === 'observe'\n ? await this.client.observe(controller.signal)\n : await this.client.act(rawMessage.payload as ComputerUseAction, controller.signal);\n child.send({ type: 'response', id: rawMessage.id, value });\n } catch (error) {\n child.send({\n type: 'response',\n id: rawMessage.id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n });\n return;\n }\n if (rawMessage.type === 'failed' && typeof rawMessage.error === 'string') {\n finish(new Error(rawMessage.error));\n return;\n }\n if (rawMessage.type === 'complete') {\n operation = operation\n .then(async () => {\n const resultJson = rawMessage.resultJson;\n if (resultJson !== undefined && typeof resultJson !== 'string') {\n finish(new Error('Computer script returned an invalid result.'));\n return;\n }\n if (typeof resultJson === 'string' && !addOutput(resultJson)) return;\n const observation = await this.client.observe(controller.signal);\n finish(undefined, {\n ...(typeof resultJson === 'string' ? { result: JSON.parse(resultJson) as unknown } : {}),\n observation,\n logs,\n });\n })\n .catch((error: unknown) => finish(error instanceof Error ? error : new Error(String(error))));\n }\n });\n child.send({ type: 'start', scriptPath: resolvedPath, input: JSON.parse(serializedInput) as unknown });\n });\n }\n}\n","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":"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"}
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- let _agimon_ai_doompi_core_mcp_facet = require("@agimon-ai/doompi-core/mcp-facet");
5
+ let _agimon_ai_doompi_core_mcpFacet = require("@agimon-ai/doompi-core/mcpFacet");
6
6
  //#endregion
7
7
  //#region src/services/mcpTools/index.ts
8
8
  const COMPUTER_USE_MCP_TOOLS_SERVICE = "doom/computer-use-mcp-tools";
@@ -25,13 +25,13 @@ function bindMcpTool(context, name) {
25
25
  }
26
26
  //#endregion
27
27
  //#region src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp.ts
28
- var computer_action_mcp_default = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpTool)((context) => bindMcpTool(context, "computer_action"));
28
+ var computer_action_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpTool)((context) => bindMcpTool(context, "computer_action"));
29
29
  //#endregion
30
30
  //#region src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp.ts
31
- var computer_exec_mcp_default = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpTool)((context) => bindMcpTool(context, "computer_exec"));
31
+ var computer_exec_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpTool)((context) => bindMcpTool(context, "computer_exec"));
32
32
  //#endregion
33
33
  //#region src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp.ts
34
- var computer_state_mcp_default = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpTool)((context) => bindMcpTool(context, "computer_state"));
34
+ var computer_state_mcp_default = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpTool)((context) => bindMcpTool(context, "computer_state"));
35
35
  //#endregion
36
36
  //#region generated/mcp.ts
37
37
  const at = (value, context) => typeof value === "function" ? value(context) : value;
@@ -39,7 +39,7 @@ const via = (identity, value) => ({
39
39
  ...identity,
40
40
  ...value
41
41
  });
42
- const mcp = (0, _agimon_ai_doompi_core_mcp_facet.defineMcpPlugin)({
42
+ const mcp = (0, _agimon_ai_doompi_core_mcpFacet.defineMcpPlugin)({
43
43
  name: "@agimon-ai/doompi-computer-use",
44
44
  session: (context) => ({ get tools() {
45
45
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.cjs","names":["defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","toolComputerAction","toolComputerExec","toolComputerState"],"sources":["../../src/types/computerUseApi.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-core/package-api';\n\nexport const API_BASE_PATH = 'computer-use';\nexport const computerUseChannelType = 'computer_use_state';\nexport const COMPUTER_USE_MODE_ID = 'computer-use';\nexport const COMPUTER_USE_STATUS_KEY = 'doom-computer-use';\nexport const COMPUTER_USE_MODE_STATUS_KEY = 'doom-computer-use-mode';\nexport const COMPUTER_USE_MAX_DURATION_MS = 1_800 * 1_000;\nexport const COMPUTER_USE_DEFAULT_DURATION_MS = 300 * 1_000;\nexport const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 2 * 60 * 1_000;\n\n/**\n * Every path this API answers on, below its mount.\n *\n * The typed route table in `./apiRoutes` is built from this, the dispatcher\n * reads that table, and the hub channel addresses the broker with these same\n * strings, so a route cannot move on one side alone.\n */\nexport const COMPUTER_USE_ROUTES = {\n activate: '/activate',\n agentState: '/agent/state',\n agentObserve: '/agent/observe',\n agentAction: '/agent/action',\n agentStop: '/agent/stop',\n hubState: '/hub/state',\n hubActivation: '/hub/activation',\n hubAuthorization: '/hub/authorization',\n hubNext: '/hub/next',\n hubComplete: '/hub/complete',\n hubStop: '/hub/stop',\n} as const;\n\nexport const COMPUTER_USE_WAKE_LIMIT = 1_000_000;\n\nexport interface ComputerUseArtifactView {\n readonly artifactId: string;\n readonly status: 'ready' | 'failed';\n readonly downloadUrl?: string;\n readonly previewUrl?: string;\n readonly actionCount?: number;\n readonly completedAt?: string;\n readonly failure?: { readonly code: string; readonly message: string };\n}\n\nexport interface ComputerUseSessionView {\n readonly sessionId: string;\n readonly revision: number;\n readonly wake: number;\n readonly phase: 'inactive' | 'awaiting_confirmation' | 'activating' | 'active' | 'stopping' | 'failed';\n readonly requestId?: string;\n readonly target?: Record<string, unknown>;\n readonly durationMs?: number;\n readonly expiresAt?: number;\n readonly failure?: { readonly code: string; readonly message: string };\n readonly artifact?: ComputerUseArtifactView;\n}\n\nexport interface ComputerUseActivationRequest {\n readonly requestId: string;\n readonly target: Record<string, unknown>;\n readonly durationSeconds: number;\n readonly createdAt: number;\n readonly confirmationExpiresAt: number;\n readonly caller: DoomApiCaller;\n}\n\nexport interface ComputerUseBrokerRequest {\n readonly id: string;\n readonly operation: 'observe' | 'act';\n readonly payload?: unknown;\n readonly grantId: string;\n readonly sequence?: number;\n}\n\nexport interface ComputerUseChannelPayload {\n readonly state: ComputerUseSessionView;\n readonly targets: readonly Record<string, unknown>[];\n readonly busy?: true;\n}\n\nexport type ComputerUseBrowserCommand = { readonly action: 'status' | 'targets' | 'stop' | 'artifacts' };\n","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","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_action'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_exec'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_state'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport toolComputerAction from '../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp';\nimport toolComputerExec from '../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp';\nimport toolComputerState from '../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T => ({ ...identity, ...(value as object) }) as T;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-computer-use',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [via({ name: 'computer_action' }, at(toolComputerAction, context)), via({ name: 'computer_exec' }, at(toolComputerExec, context)), via({ name: 'computer_state' }, at(toolComputerState, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;ACMA,MAAa,iCAAiC;AAE9C,MAAM,aAAa;AAkBnB,SAAgB,YAAY,SAA+B,MAAgC;CACzF,MAAM,UAAU,QAAQ,SAAS,IAAoB,8BAA8B;CACnF,MAAM,OAAO,SAAS,IAAI,IAAI;CAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,MAAM,IAAI,MAAM,qCAAqC,MAAM;CAClF,OAAO;EACL,GAAG;EACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAEhD,IAAI,EADgB,QAAQ,UAAU,KAAK,CAAC,CAAC,QAAQ,iBAAiB,CAAC,EAAA,CACtD,SAAA,cAA6B,GAAG;IAC/C,MAAM,gBAAgB,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAC3D,MAAM,IAAI,MAAM,GAAG,WAAW,oCAAoC,WAAW,UAAU,cAAc,EAAE;GACzG;GACA,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;ACtCA,IAAA,+BAAA,GAAeA,iCAAAA,cAAAA,EAAe,YAAkC,YAAY,SAAS,iBAAiB,CAAC;;;ACAvG,IAAA,6BAAA,GAAeC,iCAAAA,cAAAA,EAAe,YAAkC,YAAY,SAAS,eAAe,CAAC;;;ACArG,IAAA,8BAAA,GAAeC,iCAAAA,cAAAA,EAAe,YAAkC,YAAY,SAAS,gBAAgB,CAAC;;;ACItG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,WAAuB;CAAE,GAAG;CAAU,GAAI;AAAiB;AAE9G,MAAa,OAAA,GAAMC,iCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,IAAI,EAAE,MAAM,kBAAkB,GAAG,GAAGC,6BAAoB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,2BAAkB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,iBAAiB,GAAG,GAAGC,4BAAmB,OAAO,CAAC;EAAC;CAAG,EAC3P;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.cjs","names":["defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","toolComputerAction","toolComputerExec","toolComputerState"],"sources":["../../src/types/computerUseApi.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-core/packageApi';\n\nexport const API_BASE_PATH = 'computer-use';\nexport const computerUseChannelType = 'computer_use_state';\nexport const COMPUTER_USE_MODE_ID = 'computer-use';\nexport const COMPUTER_USE_STATUS_KEY = 'doom-computer-use';\nexport const COMPUTER_USE_MODE_STATUS_KEY = 'doom-computer-use-mode';\nexport const COMPUTER_USE_MAX_DURATION_MS = 1_800 * 1_000;\nexport const COMPUTER_USE_DEFAULT_DURATION_MS = 300 * 1_000;\nexport const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 2 * 60 * 1_000;\n\n/**\n * Every path this API answers on, below its mount.\n *\n * The typed route table in `./apiRoutes` is built from this, the dispatcher\n * reads that table, and the hub channel addresses the broker with these same\n * strings, so a route cannot move on one side alone.\n */\nexport const COMPUTER_USE_ROUTES = {\n activate: '/activate',\n agentState: '/agent/state',\n agentObserve: '/agent/observe',\n agentAction: '/agent/action',\n agentStop: '/agent/stop',\n hubState: '/hub/state',\n hubActivation: '/hub/activation',\n hubAuthorization: '/hub/authorization',\n hubNext: '/hub/next',\n hubComplete: '/hub/complete',\n hubStop: '/hub/stop',\n} as const;\n\nexport const COMPUTER_USE_WAKE_LIMIT = 1_000_000;\n\nexport interface ComputerUseArtifactView {\n readonly artifactId: string;\n readonly status: 'ready' | 'failed';\n readonly downloadUrl?: string;\n readonly previewUrl?: string;\n readonly actionCount?: number;\n readonly completedAt?: string;\n readonly failure?: { readonly code: string; readonly message: string };\n}\n\nexport interface ComputerUseSessionView {\n readonly sessionId: string;\n readonly revision: number;\n readonly wake: number;\n readonly phase: 'inactive' | 'awaiting_confirmation' | 'activating' | 'active' | 'stopping' | 'failed';\n readonly requestId?: string;\n readonly target?: Record<string, unknown>;\n readonly durationMs?: number;\n readonly expiresAt?: number;\n readonly failure?: { readonly code: string; readonly message: string };\n readonly artifact?: ComputerUseArtifactView;\n}\n\nexport interface ComputerUseActivationRequest {\n readonly requestId: string;\n readonly target: Record<string, unknown>;\n readonly durationSeconds: number;\n readonly createdAt: number;\n readonly confirmationExpiresAt: number;\n readonly caller: DoomApiCaller;\n}\n\nexport interface ComputerUseBrokerRequest {\n readonly id: string;\n readonly operation: 'observe' | 'act';\n readonly payload?: unknown;\n readonly grantId: string;\n readonly sequence?: number;\n}\n\nexport interface ComputerUseChannelPayload {\n readonly state: ComputerUseSessionView;\n readonly targets: readonly Record<string, unknown>[];\n readonly busy?: true;\n}\n\nexport type ComputerUseBrowserCommand = { readonly action: 'status' | 'targets' | 'stop' | 'artifacts' };\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\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","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_action'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_exec'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_state'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport toolComputerAction from '../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp';\nimport toolComputerExec from '../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp';\nimport toolComputerState from '../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T => ({ ...identity, ...(value as object) }) as T;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-computer-use',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [via({ name: 'computer_action' }, at(toolComputerAction, context)), via({ name: 'computer_exec' }, at(toolComputerExec, context)), via({ name: 'computer_state' }, at(toolComputerState, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;ACMA,MAAa,iCAAiC;AAE9C,MAAM,aAAa;AAkBnB,SAAgB,YAAY,SAA+B,MAAgC;CACzF,MAAM,UAAU,QAAQ,SAAS,IAAoB,8BAA8B;CACnF,MAAM,OAAO,SAAS,IAAI,IAAI;CAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,MAAM,IAAI,MAAM,qCAAqC,MAAM;CAClF,OAAO;EACL,GAAG;EACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAEhD,IAAI,EADgB,QAAQ,UAAU,KAAK,CAAC,CAAC,QAAQ,iBAAiB,CAAC,EAAA,CACtD,SAAA,cAA6B,GAAG;IAC/C,MAAM,gBAAgB,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAC3D,MAAM,IAAI,MAAM,GAAG,WAAW,oCAAoC,WAAW,UAAU,cAAc,EAAE;GACzG;GACA,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;ACtCA,IAAA,+BAAA,GAAeA,gCAAAA,cAAAA,EAAe,YAAkC,YAAY,SAAS,iBAAiB,CAAC;;;ACAvG,IAAA,6BAAA,GAAeC,gCAAAA,cAAAA,EAAe,YAAkC,YAAY,SAAS,eAAe,CAAC;;;ACArG,IAAA,8BAAA,GAAeC,gCAAAA,cAAAA,EAAe,YAAkC,YAAY,SAAS,gBAAgB,CAAC;;;ACItG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,WAAuB;CAAE,GAAG;CAAU,GAAI;AAAiB;AAE9G,MAAa,OAAA,GAAMC,gCAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,IAAI,EAAE,MAAM,kBAAkB,GAAG,GAAGC,6BAAoB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,2BAAkB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,iBAAiB,GAAG,GAAGC,4BAAmB,OAAO,CAAC;EAAC;CAAG,EAC3P;AACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  //#region generated/mcp.d.ts
2
- export declare const mcp: import("@agimon-ai/doompi-core/mcp-facet").DoomMcpPluginDefinition;
2
+ export declare const mcp: import("@agimon-ai/doompi-core/mcpFacet").DoomMcpPluginDefinition;
3
3
  //#endregion
4
4
  export { mcp as default };
5
5
  //# sourceMappingURL=mcp.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAYa,gDAAG"}
1
+ {"version":3,"file":"mcp.d.mts","names":[],"sources":["../../generated/mcp.ts"],"mappings":";qBAYa,+CAAG"}
@@ -1,4 +1,4 @@
1
- import { defineMcpPlugin, defineMcpTool } from "@agimon-ai/doompi-core/mcp-facet";
1
+ import { defineMcpPlugin, defineMcpTool } from "@agimon-ai/doompi-core/mcpFacet";
2
2
  //#endregion
3
3
  //#region src/services/mcpTools/index.ts
4
4
  const COMPUTER_USE_MCP_TOOLS_SERVICE = "doom/computer-use-mcp-tools";
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.mjs","names":["toolComputerAction","toolComputerExec","toolComputerState"],"sources":["../../src/types/computerUseApi.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-core/package-api';\n\nexport const API_BASE_PATH = 'computer-use';\nexport const computerUseChannelType = 'computer_use_state';\nexport const COMPUTER_USE_MODE_ID = 'computer-use';\nexport const COMPUTER_USE_STATUS_KEY = 'doom-computer-use';\nexport const COMPUTER_USE_MODE_STATUS_KEY = 'doom-computer-use-mode';\nexport const COMPUTER_USE_MAX_DURATION_MS = 1_800 * 1_000;\nexport const COMPUTER_USE_DEFAULT_DURATION_MS = 300 * 1_000;\nexport const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 2 * 60 * 1_000;\n\n/**\n * Every path this API answers on, below its mount.\n *\n * The typed route table in `./apiRoutes` is built from this, the dispatcher\n * reads that table, and the hub channel addresses the broker with these same\n * strings, so a route cannot move on one side alone.\n */\nexport const COMPUTER_USE_ROUTES = {\n activate: '/activate',\n agentState: '/agent/state',\n agentObserve: '/agent/observe',\n agentAction: '/agent/action',\n agentStop: '/agent/stop',\n hubState: '/hub/state',\n hubActivation: '/hub/activation',\n hubAuthorization: '/hub/authorization',\n hubNext: '/hub/next',\n hubComplete: '/hub/complete',\n hubStop: '/hub/stop',\n} as const;\n\nexport const COMPUTER_USE_WAKE_LIMIT = 1_000_000;\n\nexport interface ComputerUseArtifactView {\n readonly artifactId: string;\n readonly status: 'ready' | 'failed';\n readonly downloadUrl?: string;\n readonly previewUrl?: string;\n readonly actionCount?: number;\n readonly completedAt?: string;\n readonly failure?: { readonly code: string; readonly message: string };\n}\n\nexport interface ComputerUseSessionView {\n readonly sessionId: string;\n readonly revision: number;\n readonly wake: number;\n readonly phase: 'inactive' | 'awaiting_confirmation' | 'activating' | 'active' | 'stopping' | 'failed';\n readonly requestId?: string;\n readonly target?: Record<string, unknown>;\n readonly durationMs?: number;\n readonly expiresAt?: number;\n readonly failure?: { readonly code: string; readonly message: string };\n readonly artifact?: ComputerUseArtifactView;\n}\n\nexport interface ComputerUseActivationRequest {\n readonly requestId: string;\n readonly target: Record<string, unknown>;\n readonly durationSeconds: number;\n readonly createdAt: number;\n readonly confirmationExpiresAt: number;\n readonly caller: DoomApiCaller;\n}\n\nexport interface ComputerUseBrokerRequest {\n readonly id: string;\n readonly operation: 'observe' | 'act';\n readonly payload?: unknown;\n readonly grantId: string;\n readonly sequence?: number;\n}\n\nexport interface ComputerUseChannelPayload {\n readonly state: ComputerUseSessionView;\n readonly targets: readonly Record<string, unknown>[];\n readonly busy?: true;\n}\n\nexport type ComputerUseBrowserCommand = { readonly action: 'status' | 'targets' | 'stop' | 'artifacts' };\n","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","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_action'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_exec'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_state'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcp-facet';\n\nimport toolComputerAction from '../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp';\nimport toolComputerExec from '../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp';\nimport toolComputerState from '../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T => ({ ...identity, ...(value as object) }) as T;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-computer-use',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [via({ name: 'computer_action' }, at(toolComputerAction, context)), via({ name: 'computer_exec' }, at(toolComputerExec, context)), via({ name: 'computer_state' }, at(toolComputerState, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;ACMA,MAAa,iCAAiC;AAE9C,MAAM,aAAa;AAkBnB,SAAgB,YAAY,SAA+B,MAAgC;CACzF,MAAM,UAAU,QAAQ,SAAS,IAAoB,8BAA8B;CACnF,MAAM,OAAO,SAAS,IAAI,IAAI;CAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,MAAM,IAAI,MAAM,qCAAqC,MAAM;CAClF,OAAO;EACL,GAAG;EACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAEhD,IAAI,EADgB,QAAQ,UAAU,KAAK,CAAC,CAAC,QAAQ,iBAAiB,CAAC,EAAA,CACtD,SAAA,cAA6B,GAAG;IAC/C,MAAM,gBAAgB,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAC3D,MAAM,IAAI,MAAM,GAAG,WAAW,oCAAoC,WAAW,UAAU,cAAc,EAAE;GACzG;GACA,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;ACtCA,IAAA,8BAAe,eAAe,YAAkC,YAAY,SAAS,iBAAiB,CAAC;;;ACAvG,IAAA,4BAAe,eAAe,YAAkC,YAAY,SAAS,eAAe,CAAC;;;ACArG,IAAA,6BAAe,eAAe,YAAkC,YAAY,SAAS,gBAAgB,CAAC;;;ACItG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,WAAuB;CAAE,GAAG;CAAU,GAAI;AAAiB;AAE9G,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,IAAI,EAAE,MAAM,kBAAkB,GAAG,GAAGA,6BAAoB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,2BAAkB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,iBAAiB,GAAG,GAAGC,4BAAmB,OAAO,CAAC;EAAC;CAAG,EAC3P;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.mjs","names":["toolComputerAction","toolComputerExec","toolComputerState"],"sources":["../../src/types/computerUseApi.ts","../../src/services/mcpTools/index.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import type { DoomApiCaller } from '@agimon-ai/doompi-core/packageApi';\n\nexport const API_BASE_PATH = 'computer-use';\nexport const computerUseChannelType = 'computer_use_state';\nexport const COMPUTER_USE_MODE_ID = 'computer-use';\nexport const COMPUTER_USE_STATUS_KEY = 'doom-computer-use';\nexport const COMPUTER_USE_MODE_STATUS_KEY = 'doom-computer-use-mode';\nexport const COMPUTER_USE_MAX_DURATION_MS = 1_800 * 1_000;\nexport const COMPUTER_USE_DEFAULT_DURATION_MS = 300 * 1_000;\nexport const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 2 * 60 * 1_000;\n\n/**\n * Every path this API answers on, below its mount.\n *\n * The typed route table in `./apiRoutes` is built from this, the dispatcher\n * reads that table, and the hub channel addresses the broker with these same\n * strings, so a route cannot move on one side alone.\n */\nexport const COMPUTER_USE_ROUTES = {\n activate: '/activate',\n agentState: '/agent/state',\n agentObserve: '/agent/observe',\n agentAction: '/agent/action',\n agentStop: '/agent/stop',\n hubState: '/hub/state',\n hubActivation: '/hub/activation',\n hubAuthorization: '/hub/authorization',\n hubNext: '/hub/next',\n hubComplete: '/hub/complete',\n hubStop: '/hub/stop',\n} as const;\n\nexport const COMPUTER_USE_WAKE_LIMIT = 1_000_000;\n\nexport interface ComputerUseArtifactView {\n readonly artifactId: string;\n readonly status: 'ready' | 'failed';\n readonly downloadUrl?: string;\n readonly previewUrl?: string;\n readonly actionCount?: number;\n readonly completedAt?: string;\n readonly failure?: { readonly code: string; readonly message: string };\n}\n\nexport interface ComputerUseSessionView {\n readonly sessionId: string;\n readonly revision: number;\n readonly wake: number;\n readonly phase: 'inactive' | 'awaiting_confirmation' | 'activating' | 'active' | 'stopping' | 'failed';\n readonly requestId?: string;\n readonly target?: Record<string, unknown>;\n readonly durationMs?: number;\n readonly expiresAt?: number;\n readonly failure?: { readonly code: string; readonly message: string };\n readonly artifact?: ComputerUseArtifactView;\n}\n\nexport interface ComputerUseActivationRequest {\n readonly requestId: string;\n readonly target: Record<string, unknown>;\n readonly durationSeconds: number;\n readonly createdAt: number;\n readonly confirmationExpiresAt: number;\n readonly caller: DoomApiCaller;\n}\n\nexport interface ComputerUseBrokerRequest {\n readonly id: string;\n readonly operation: 'observe' | 'act';\n readonly payload?: unknown;\n readonly grantId: string;\n readonly sequence?: number;\n}\n\nexport interface ComputerUseChannelPayload {\n readonly state: ComputerUseSessionView;\n readonly targets: readonly Record<string, unknown>[];\n readonly busy?: true;\n}\n\nexport type ComputerUseBrowserCommand = { readonly action: 'status' | 'targets' | 'stop' | 'artifacts' };\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\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","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_action'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_exec'));\n","import { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport { bindMcpTool } from '../../../../../services/mcpTools';\n\nexport default defineMcpTool((context: DoomMcpPluginContext) => bindMcpTool(context, 'computer_state'));\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/doompi-core/mcpFacet';\n\nimport toolComputerAction from '../src/extensions/workspaces/sessions/(backend)/tool/computer_action.mcp';\nimport toolComputerExec from '../src/extensions/workspaces/sessions/(backend)/tool/computer_exec.mcp';\nimport toolComputerState from '../src/extensions/workspaces/sessions/(backend)/tool/computer_state.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T => ({ ...identity, ...(value as object) }) as T;\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/doompi-computer-use',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [via({ name: 'computer_action' }, at(toolComputerAction, context)), via({ name: 'computer_exec' }, at(toolComputerExec, context)), via({ name: 'computer_state' }, at(toolComputerState, context))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;ACMA,MAAa,iCAAiC;AAE9C,MAAM,aAAa;AAkBnB,SAAgB,YAAY,SAA+B,MAAgC;CACzF,MAAM,UAAU,QAAQ,SAAS,IAAoB,8BAA8B;CACnF,MAAM,OAAO,SAAS,IAAI,IAAI;CAC9B,IAAI,CAAC,QAAQ,CAAC,SAAS,MAAM,IAAI,MAAM,qCAAqC,MAAM;CAClF,OAAO;EACL,GAAG;EACH,QAAQ,YAAY,YAAY,QAAQ,UAAU;GAEhD,IAAI,EADgB,QAAQ,UAAU,KAAK,CAAC,CAAC,QAAQ,iBAAiB,CAAC,EAAA,CACtD,SAAA,cAA6B,GAAG;IAC/C,MAAM,gBAAgB,CAAC,GAAG,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI;IAC3D,MAAM,IAAI,MAAM,GAAG,WAAW,oCAAoC,WAAW,UAAU,cAAc,EAAE;GACzG;GACA,MAAM,kBAAkB,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC;GAClF,OAAO,KAAK,QAAQ,YAAY,YAAY,iBAAiB,UAAU,QAAQ,SAAS;EAC1F;CACF;AACF;;;ACtCA,IAAA,8BAAe,eAAe,YAAkC,YAAY,SAAS,iBAAiB,CAAC;;;ACAvG,IAAA,4BAAe,eAAe,YAAkC,YAAY,SAAS,eAAe,CAAC;;;ACArG,IAAA,6BAAe,eAAe,YAAkC,YAAY,SAAS,gBAAgB,CAAC;;;ACItG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,WAAuB;CAAE,GAAG;CAAU,GAAI;AAAiB;AAE9G,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,IAAI,EAAE,MAAM,kBAAkB,GAAG,GAAGA,6BAAoB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,gBAAgB,GAAG,GAAGC,2BAAkB,OAAO,CAAC;GAAG,IAAI,EAAE,MAAM,iBAAiB,GAAG,GAAGC,4BAAmB,OAAO,CAAC;EAAC;CAAG,EAC3P;AACF,CAAC"}
@@ -2,44 +2,377 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_root_cli = require("../src/extensions/workspaces/sessions/(backend)/root.cli.cjs");
6
- const require_computer_use_cli = require("../src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.cjs");
7
- const require_before_agent_start_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.cjs");
8
- const require_session_start_cli = require("../src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.cjs");
9
- const require_computer_use_cli$1 = require("../src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.cjs");
10
- const require_00_computer_state_cli = require("../src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.cjs");
11
- const require_10_computer_action_cli = require("../src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.cjs");
12
- const require_20_computer_exec_cli = require("../src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.cjs");
13
- let _agimon_ai_doompi_core_pi_extension = require("@agimon-ai/doompi-core/pi-extension");
14
- let _agimon_ai_doompi_core_extension_file = require("@agimon-ai/doompi-core/extension-file");
5
+ const require_extensionService = require("../extensionService-44mLS5b_.cjs");
6
+ const require_dependencies = require("../dependencies-CuOzd5Pm.cjs");
7
+ const require_computerUseMode = require("../computerUseMode-BgtaVx_z.cjs");
8
+ let _agimon_ai_doompi_core_piExtension = require("@agimon-ai/doompi-core/piExtension");
9
+ let _agimon_ai_doompi_core_extensionFile = require("@agimon-ai/doompi-core/extensionFile");
10
+ let _agimon_ai_doompi_minor_mode = require("@agimon-ai/doompi-minor-mode");
11
+ //#region src/services/computerUseCommand/index.ts
12
+ function createComputerUseCommand(service) {
13
+ return [require_extensionService.COMMAND_NAME, {
14
+ description: require_extensionService.COMMAND_DESCRIPTION,
15
+ handler: async (_args, ctx) => {
16
+ const result = await service.execute();
17
+ if (ctx.hasUI) ctx.ui.notify(result.message, result.level);
18
+ }
19
+ }];
20
+ }
21
+ //#endregion
22
+ //#region src/services/computerUseRuntime/index.ts
23
+ const PACKAGE_SOURCE = "@agimon-ai/doompi-computer-use";
24
+ function createComputerUseRuntime(dependencies, signal) {
25
+ const client = dependencies.client;
26
+ let state;
27
+ let enabled = false;
28
+ let restriction = require_computerUseMode.computerUseRestriction(false);
29
+ const restrictionListeners = /* @__PURE__ */ new Set();
30
+ const reconcileTools = (active) => {
31
+ restriction = require_computerUseMode.computerUseRestriction(active);
32
+ for (const listener of restrictionListeners) listener();
33
+ };
34
+ let globallyEnabled = false;
35
+ let mode;
36
+ const modeListeners = /* @__PURE__ */ new Set();
37
+ let timer;
38
+ let activeContext;
39
+ let publishedMode = "";
40
+ let publishedModeStatus;
41
+ let publishedActivityStatus;
42
+ const publish = () => {
43
+ const phase = state?.phase ?? "inactive";
44
+ const projection = `${enabled}:${phase}:${state?.revision ?? "none"}`;
45
+ if (mode !== void 0 && projection !== publishedMode) {
46
+ mode.publish();
47
+ publishedMode = projection;
48
+ }
49
+ const modeStatus = state === void 0 ? void 0 : enabled || phase !== "inactive" ? phase : "";
50
+ if (activeContext !== void 0 && modeStatus !== publishedModeStatus) {
51
+ activeContext.ui.setStatus(require_computerUseMode.COMPUTER_USE_MODE_STATUS_KEY, modeStatus);
52
+ publishedModeStatus = modeStatus;
53
+ }
54
+ const activityStatus = enabled || phase !== "inactive" ? `computer use: ${phase}` : void 0;
55
+ if (activeContext !== void 0 && activityStatus !== publishedActivityStatus) {
56
+ activeContext.ui.setStatus(require_computerUseMode.COMPUTER_USE_STATUS_KEY, activityStatus);
57
+ publishedActivityStatus = activityStatus;
58
+ }
59
+ };
60
+ const refresh = async () => {
61
+ if (signal.aborted) return;
62
+ let nextGloballyEnabled = false;
63
+ try {
64
+ nextGloballyEnabled = await dependencies.enabled?.() === true;
65
+ } catch {
66
+ nextGloballyEnabled = false;
67
+ }
68
+ if (signal.aborted) return;
69
+ if (nextGloballyEnabled !== globallyEnabled) {
70
+ globallyEnabled = nextGloballyEnabled;
71
+ if (!globallyEnabled) {
72
+ if (client !== void 0 && state !== void 0 && state.phase !== "inactive" && state.phase !== "failed") try {
73
+ await client.stop();
74
+ } catch {}
75
+ enabled = false;
76
+ state = void 0;
77
+ reconcileTools(false);
78
+ }
79
+ publishedMode = "";
80
+ for (const listener of modeListeners) listener();
81
+ }
82
+ if (!globallyEnabled || client === void 0) {
83
+ state = void 0;
84
+ reconcileTools(false);
85
+ publish();
86
+ return;
87
+ }
88
+ try {
89
+ const nextState = await client.state(signal);
90
+ if (signal.aborted) return;
91
+ state = nextState;
92
+ reconcileTools(state.phase === "active");
93
+ publish();
94
+ } catch {
95
+ state = void 0;
96
+ reconcileTools(false);
97
+ publish();
98
+ }
99
+ };
100
+ mode = (0, _agimon_ai_doompi_minor_mode.defineMinorMode)({
101
+ descriptor: {
102
+ source: PACKAGE_SOURCE,
103
+ id: require_computerUseMode.COMPUTER_USE_MODE_ID,
104
+ label: "Computer Use",
105
+ description: "Session-scoped semantic control through DoomPi Desktop.",
106
+ order: 450,
107
+ actions: [
108
+ {
109
+ id: "activate",
110
+ label: "Activate",
111
+ description: "Open the cockpit activation workflow and native confirmation.",
112
+ contexts: ["tui", "headless"],
113
+ parameters: []
114
+ },
115
+ {
116
+ id: "deactivate",
117
+ label: "Deactivate",
118
+ description: "Stop this session computer-use run.",
119
+ contexts: ["tui", "headless"],
120
+ parameters: []
121
+ },
122
+ {
123
+ id: "doctor",
124
+ label: "Doctor",
125
+ description: "Report Desktop availability and session state.",
126
+ contexts: ["tui", "headless"],
127
+ parameters: []
128
+ }
129
+ ]
130
+ },
131
+ state: () => require_computerUseMode.modeState(state, enabled),
132
+ async handleAction(_runtime, actionId, _argumentsValue, execution) {
133
+ activeContext = execution.context;
134
+ if (actionId === "activate") {
135
+ if (await dependencies.enabled?.() !== true) {
136
+ await refresh();
137
+ throw new Error("Enable computer use in global settings first.");
138
+ }
139
+ if (client === void 0) throw new Error("DoomPi Desktop computer use is unavailable.");
140
+ enabled = true;
141
+ await refresh();
142
+ publish();
143
+ return { message: "Computer use is ready to configure in Activity." };
144
+ }
145
+ if (actionId === "doctor") {
146
+ await refresh();
147
+ return { message: client === void 0 ? "DoomPi Desktop session API is unavailable." : `Computer use is ${state?.phase.replaceAll("_", " ") ?? "unavailable"}.` };
148
+ }
149
+ if (actionId === "deactivate") {
150
+ if (client === void 0) throw new Error("DoomPi Desktop computer use is unavailable.");
151
+ if (state !== void 0 && state.phase !== "inactive" && state.phase !== "failed") await client.stop(execution.signal);
152
+ enabled = false;
153
+ await refresh();
154
+ publish();
155
+ return { message: "Computer use is off." };
156
+ }
157
+ throw new Error(`Unknown computer-use action: ${actionId}`);
158
+ }
159
+ }).createOwner(void 0);
160
+ return {
161
+ commands: [createComputerUseCommand(dependencies.service)],
162
+ tools: [
163
+ {
164
+ name: "computer_state",
165
+ label: "Computer State",
166
+ description: "Observe the authorized application window and return its semantic accessibility state.",
167
+ promptSnippet: "Observe the authorized application before choosing a semantic action",
168
+ parameters: {
169
+ type: "object",
170
+ properties: {},
171
+ additionalProperties: false
172
+ },
173
+ async execute(_toolCallId, _params, signal) {
174
+ if (!globallyEnabled || client === void 0 || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
175
+ const observation = await client.observe(signal);
176
+ return {
177
+ content: [{
178
+ type: "text",
179
+ text: JSON.stringify(observation, null, 2)
180
+ }],
181
+ details: observation
182
+ };
183
+ }
184
+ },
185
+ {
186
+ name: "computer_action",
187
+ label: "Computer Action",
188
+ description: "Perform one constrained semantic action in the authorized application window.",
189
+ promptSnippet: "Perform one action using a current computer_state snapshot and element ref",
190
+ parameters: {
191
+ type: "object",
192
+ properties: {
193
+ kind: {
194
+ type: "string",
195
+ enum: [
196
+ "press",
197
+ "focus",
198
+ "set_value",
199
+ "scroll"
200
+ ]
201
+ },
202
+ snapshotId: { type: "string" },
203
+ elementRef: { type: "string" },
204
+ value: { type: "string" },
205
+ direction: {
206
+ type: "string",
207
+ enum: [
208
+ "up",
209
+ "down",
210
+ "left",
211
+ "right"
212
+ ]
213
+ },
214
+ amount: {
215
+ type: "string",
216
+ enum: ["line", "page"]
217
+ }
218
+ },
219
+ required: [
220
+ "kind",
221
+ "snapshotId",
222
+ "elementRef"
223
+ ],
224
+ additionalProperties: false
225
+ },
226
+ async execute(_toolCallId, params, signal) {
227
+ if (!globallyEnabled || client === void 0 || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
228
+ const result = await client.act(params, signal);
229
+ return {
230
+ content: [{
231
+ type: "text",
232
+ text: JSON.stringify(result, null, 2)
233
+ }],
234
+ details: result
235
+ };
236
+ }
237
+ },
238
+ {
239
+ name: "computer_exec",
240
+ label: "Computer Script",
241
+ description: "Run a trusted, explicitly allowed local TypeScript script against the authorized application session.",
242
+ promptSnippet: "Run a trusted reusable computer script by its explicitly allowed path and JSON input",
243
+ parameters: {
244
+ type: "object",
245
+ properties: {
246
+ scriptPath: { type: "string" },
247
+ input: {}
248
+ },
249
+ required: ["scriptPath", "input"],
250
+ additionalProperties: false
251
+ },
252
+ async execute(_toolCallId, params, signal) {
253
+ if (!globallyEnabled || client === void 0 || state?.phase !== "active") throw new Error("Computer use is not active for this session.");
254
+ if (dependencies.scriptRunner === void 0) throw new Error("Computer script execution is unavailable.");
255
+ const input = params;
256
+ const result = await dependencies.scriptRunner.execute(input.scriptPath, input.input, signal);
257
+ return {
258
+ content: [{
259
+ type: "text",
260
+ text: JSON.stringify(result, null, 2)
261
+ }],
262
+ details: result
263
+ };
264
+ }
265
+ }
266
+ ],
267
+ services: [(0, _agimon_ai_doompi_minor_mode.piMinorModes)({
268
+ snapshot: () => globallyEnabled ? [mode] : [],
269
+ subscribe(listener) {
270
+ modeListeners.add(listener);
271
+ return () => {
272
+ modeListeners.delete(listener);
273
+ };
274
+ }
275
+ })],
276
+ toolRestrictions: [{
277
+ source: PACKAGE_SOURCE,
278
+ restrict: (incoming, available) => restriction(incoming, available),
279
+ subscribe(listener) {
280
+ restrictionListeners.add(listener);
281
+ return () => {
282
+ restrictionListeners.delete(listener);
283
+ };
284
+ }
285
+ }],
286
+ events: {
287
+ before_agent_start: (event) => globallyEnabled && state?.phase === "active" ? { systemPrompt: `${event.systemPrompt}\n\n${require_extensionService.COMPUTER_USE_GUIDANCE}` } : void 0,
288
+ session_start: (_event, context) => {
289
+ if (signal.aborted) return;
290
+ activeContext = context;
291
+ reconcileTools(false);
292
+ refresh();
293
+ if (timer) clearInterval(timer);
294
+ timer = setInterval(() => void refresh(), 250);
295
+ timer.unref?.();
296
+ }
297
+ },
298
+ onStop() {
299
+ if (timer) clearInterval(timer);
300
+ timer = void 0;
301
+ },
302
+ onDispose() {
303
+ if (timer) clearInterval(timer);
304
+ timer = void 0;
305
+ reconcileTools(false);
306
+ activeContext?.ui.setStatus(require_computerUseMode.COMPUTER_USE_MODE_STATUS_KEY, void 0);
307
+ activeContext?.ui.setStatus(require_computerUseMode.COMPUTER_USE_STATUS_KEY, void 0);
308
+ activeContext = void 0;
309
+ }
310
+ };
311
+ }
312
+ //#endregion
313
+ //#region src/extensions/workspaces/sessions/(backend)/_runtime/index.cli.ts
314
+ var index_cli_default = (({ options, signal }) => createComputerUseRuntime(options ?? require_dependencies.createComputerUseDependencies(), signal));
315
+ //#endregion
316
+ //#region src/extensions/workspaces/sessions/(backend)/root.cli.ts
317
+ var root_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineRoot)((context) => {
318
+ const value = index_cli_default(context);
319
+ return {
320
+ value,
321
+ services: value.services,
322
+ onStop: value.onStop,
323
+ onDispose: value.onDispose
324
+ };
325
+ });
326
+ //#endregion
327
+ //#region src/extensions/workspaces/sessions/(backend)/command/computer-use.cli.ts
328
+ var computer_use_cli_default$1 = (0, _agimon_ai_doompi_core_extensionFile.defineCliCommand)((context) => context.root.commands[0]);
329
+ //#endregion
330
+ //#region src/extensions/workspaces/sessions/(backend)/hook/before-agent-start.cli.ts
331
+ var before_agent_start_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.events["before_agent_start"]);
332
+ //#endregion
333
+ //#region src/extensions/workspaces/sessions/(backend)/hook/session-start.cli.ts
334
+ var session_start_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliHook)((context) => context.root.events["session_start"]);
335
+ //#endregion
336
+ //#region src/extensions/workspaces/sessions/(backend)/tool-restriction/computer-use.cli.ts
337
+ var computer_use_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineToolRestriction)((context) => context.root.toolRestrictions[0]);
338
+ //#endregion
339
+ //#region src/extensions/workspaces/sessions/(backend)/tool/00-computer-state.cli.ts
340
+ var _00_computer_state_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[0]);
341
+ //#endregion
342
+ //#region src/extensions/workspaces/sessions/(backend)/tool/10-computer-action.cli.ts
343
+ var _10_computer_action_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[1]);
344
+ //#endregion
345
+ //#region src/extensions/workspaces/sessions/(backend)/tool/20-computer-exec.cli.ts
346
+ var _20_computer_exec_cli_default = (0, _agimon_ai_doompi_core_extensionFile.defineCliTool)((context) => context.root.tools[2]);
347
+ //#endregion
15
348
  //#region generated/pi.ts
16
349
  const at = (value, context) => typeof value === "function" ? value(context) : value;
17
350
  const via = (identity, value) => ({
18
351
  ...identity,
19
352
  ...value
20
353
  });
21
- const extension = (0, _agimon_ai_doompi_core_pi_extension.definePiExtension)("@agimon-ai/doompi-computer-use", async (context) => {
22
- const scopeSession = await require_root_cli.default(context);
354
+ const extension = (0, _agimon_ai_doompi_core_piExtension.definePiExtension)("@agimon-ai/doompi-computer-use", async (context) => {
355
+ const scopeSession = await root_cli_default(context);
23
356
  const contextSession = {
24
357
  ...context,
25
358
  root: scopeSession.value
26
359
  };
27
360
  return {
28
- ...(0, _agimon_ai_doompi_core_extension_file.composeRootHooks)(scopeSession),
361
+ ...(0, _agimon_ai_doompi_core_extensionFile.composeRootHooks)(scopeSession),
29
362
  get commands() {
30
- return [at(require_computer_use_cli.default, contextSession)];
363
+ return [at(computer_use_cli_default$1, contextSession)];
31
364
  },
32
365
  events: {
33
- before_agent_start: at(require_before_agent_start_cli.default, contextSession),
34
- session_start: at(require_session_start_cli.default, contextSession)
366
+ before_agent_start: at(before_agent_start_cli_default, contextSession),
367
+ session_start: at(session_start_cli_default, contextSession)
35
368
  },
36
369
  get toolRestrictions() {
37
- return [at(require_computer_use_cli$1.default, contextSession)];
370
+ return [at(computer_use_cli_default, contextSession)];
38
371
  },
39
- ...(0, _agimon_ai_doompi_core_pi_extension.piToolContributions)("@agimon-ai/doompi-computer-use", [
40
- via({ name: "00_computer_state" }, at(require_00_computer_state_cli.default, contextSession)),
41
- via({ name: "10_computer_action" }, at(require_10_computer_action_cli.default, contextSession)),
42
- via({ name: "20_computer_exec" }, at(require_20_computer_exec_cli.default, contextSession))
372
+ ...(0, _agimon_ai_doompi_core_piExtension.piToolContributions)("@agimon-ai/doompi-computer-use", [
373
+ via({ name: "00_computer_state" }, at(_00_computer_state_cli_default, contextSession)),
374
+ via({ name: "10_computer_action" }, at(_10_computer_action_cli_default, contextSession)),
375
+ via({ name: "20_computer_exec" }, at(_20_computer_exec_cli_default, contextSession))
43
376
  ]),
44
377
  services: [...scopeSession.services ?? []]
45
378
  };