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

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
@@ -1,4 +1,8 @@
1
- let _agimon_ai_doompi_core_api_contracts = require("@agimon-ai/doompi-core/api-contracts");
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ let _agimon_ai_doompi_core_apiContracts = require("@agimon-ai/doompi-core/apiContracts");
2
6
  let typebox = require("typebox");
3
7
  //#region src/schemas/apiContracts.ts
4
8
  const S = typebox.Type.String();
@@ -85,9 +89,9 @@ const internal = (method, path, output, body, status = 200) => ({
85
89
  contentType: "application/json",
86
90
  schema: body
87
91
  } } : {},
88
- responses: (0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(output, status)
92
+ responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(output, status)
89
93
  });
90
- const apiContracts = (0, _agimon_ai_doompi_core_api_contracts.defineApiContract)({
94
+ const apiContracts = (0, _agimon_ai_doompi_core_apiContracts.defineApiContract)({
91
95
  version: 1,
92
96
  dynamic: ["Desktop provider target extensions, observations and operation results are runtime-defined JSON."],
93
97
  http: [
@@ -113,7 +117,7 @@ const apiContracts = (0, _agimon_ai_doompi_core_api_contracts.defineApiContract)
113
117
  })
114
118
  })
115
119
  },
116
- responses: (0, _agimon_ai_doompi_core_api_contracts.jsonApiResponses)(ComputerStateSchema, 202)
120
+ responses: (0, _agimon_ai_doompi_core_apiContracts.jsonApiResponses)(ComputerStateSchema, 202)
117
121
  },
118
122
  internal("GET", "/agent/state", ComputerStateSchema),
119
123
  internal("GET", "/hub/state", ComputerStateSchema),
@@ -186,8 +190,6 @@ const apiContracts = (0, _agimon_ai_doompi_core_api_contracts.defineApiContract)
186
190
  }])
187
191
  });
188
192
  //#endregion
189
- exports.ComputerActionSchema = ComputerActionSchema;
190
- exports.ComputerStateSchema = ComputerStateSchema;
191
193
  exports.apiContracts = apiContracts;
192
194
  exports.default = apiContracts;
193
195
 
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.cjs","names":["Type","jsonApiResponses","defineApiContract"],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst O = Type.Optional;\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Json = Type.Unknown({\n description:\n 'Desktop provider JSON value. Targets, observations and action results are supplied by the admitted Desktop provider.',\n});\nconst Target = Type.Record(S, Json);\nconst Error = Type.Object({ code: S, message: S });\nconst Artifact = Type.Object({\n artifactId: S,\n status: values(['ready', 'failed']),\n downloadUrl: O(S),\n previewUrl: O(S),\n actionCount: O(N),\n completedAt: O(S),\n failure: O(Error),\n});\nexport const ComputerStateSchema = Type.Object({\n sessionId: S,\n revision: N,\n wake: N,\n phase: values(['inactive', 'awaiting_confirmation', 'activating', 'active', 'stopping', 'failed']),\n requestId: O(S),\n target: O(Target),\n durationMs: O(N),\n expiresAt: O(N),\n failure: O(Error),\n artifact: O(Artifact),\n});\nconst Reference = { snapshotId: Type.String({ minLength: 1 }), elementRef: Type.String({ minLength: 1 }) };\nexport const ComputerActionSchema = Type.Union([\n Type.Object({ kind: values(['press', 'focus']), ...Reference }, { additionalProperties: false }),\n Type.Object({ kind: Type.Literal('set_value'), ...Reference, value: S }, { additionalProperties: false }),\n Type.Object(\n {\n kind: Type.Literal('scroll'),\n ...Reference,\n direction: values(['up', 'down', 'left', 'right']),\n amount: values(['line', 'page']),\n },\n { additionalProperties: false },\n ),\n]);\nconst internal = (\n method: 'GET' | 'POST',\n path: string,\n output: object,\n body?: object,\n status = 200,\n): DoomHttpContract => ({\n id: `computer.${path.slice(1).replaceAll('/', '.')}`,\n scope: 'session',\n basePath: 'computer-use',\n path,\n method,\n authentication: 'owner',\n description: `Computer use broker ${path}. Requires the host-issued ${path.startsWith('/agent/') ? 'agent' : 'hub'} bearer token.`,\n availability: 'Internal broker route; ordinary browser credentials are insufficient.',\n parameters: [{ name: 'Authorization', in: 'header', required: true, schema: Type.String({ pattern: '^Bearer .+' }) }],\n ...(body ? { body: { required: true, contentType: 'application/json', schema: body } } : {}),\n responses: jsonApiResponses(output, status),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: ['Desktop provider target extensions, observations and operation results are runtime-defined JSON.'],\n http: [\n {\n id: 'computer.activate',\n scope: 'session',\n basePath: 'computer-use',\n path: '/activate',\n method: 'POST',\n authentication: 'owner',\n description: 'Request confirmed Desktop access with admitted caller and remote step-up context.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n target: Type.Object({ windowId: S, bundleId: S }),\n durationMs: Type.Integer({ minimum: 1000, maximum: 1800000 }),\n }),\n },\n responses: jsonApiResponses(ComputerStateSchema, 202),\n },\n internal('GET', '/agent/state', ComputerStateSchema),\n internal('GET', '/hub/state', ComputerStateSchema),\n internal('POST', '/agent/observe', Json),\n internal('POST', '/agent/action', Json, ComputerActionSchema),\n internal('POST', '/agent/stop', ComputerStateSchema, undefined, 202),\n internal(\n 'GET',\n '/hub/activation',\n Type.Union([\n Type.Null(),\n Type.Object({\n requestId: S,\n target: Target,\n durationSeconds: N,\n createdAt: N,\n confirmationExpiresAt: N,\n caller: Type.Object({ locality: values(['local', 'remote']), stepUp: S }),\n }),\n ]),\n ),\n internal('GET', '/hub/authorization', Type.Union([Type.Null(), Type.Object({ grantId: S, expiresAt: O(N) })])),\n internal(\n 'GET',\n '/hub/next',\n Type.Union([\n Type.Null(),\n Type.Object({ id: S, operation: values(['observe', 'act']), payload: O(Json), grantId: S, sequence: O(N) }),\n ]),\n ),\n internal('POST', '/hub/complete', ComputerStateSchema, Type.Object({ id: S, error: O(S), result: O(Json) })),\n internal(\n 'POST',\n '/hub/stop',\n ComputerStateSchema,\n Type.Object({ error: O(S), host: O(Type.Object({ grantId: S, expiresAt: N })), artifact: O(Artifact) }),\n ),\n ],\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'computer.state',\n scope,\n service: 'doompi.hub.v1',\n member: 'computer_use_state',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Computer use channel payload.',\n input: Type.Object({ state: ComputerStateSchema, targets: Type.Array(Target), busy: O(Type.Literal(true)) }),\n },\n {\n id: 'computer.command',\n scope,\n service: 'doompi.hub.v1',\n member: 'computer_use_state',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Computer use browser channel command.',\n input: Type.Object({ action: values(['status', 'targets', 'stop', 'artifacts']) }),\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../../../src/schemas/apiContracts.ts"],"mappings":";;qBAmEa"}
1
+ {"version":3,"file":"apiContracts.d.mts","names":[],"sources":["../src/schemas/apiContracts.ts"],"mappings":";;qBAmEa"}
@@ -1,4 +1,4 @@
1
- import { defineApiContract, jsonApiResponses } from "@agimon-ai/doompi-core/api-contracts";
1
+ import { defineApiContract, jsonApiResponses } from "@agimon-ai/doompi-core/apiContracts";
2
2
  import { Type } from "typebox";
3
3
  //#region src/schemas/apiContracts.ts
4
4
  const S = Type.String();
@@ -186,6 +186,6 @@ const apiContracts = defineApiContract({
186
186
  }])
187
187
  });
188
188
  //#endregion
189
- export { ComputerActionSchema, ComputerStateSchema, apiContracts, apiContracts as default };
189
+ export { apiContracts, apiContracts as default };
190
190
 
191
191
  //# sourceMappingURL=apiContracts.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiContracts.mjs","names":[],"sources":["../src/schemas/apiContracts.ts"],"sourcesContent":["import { defineApiContract, jsonApiResponses, type DoomHttpContract } from '@agimon-ai/doompi-core/apiContracts';\nimport { Type } from 'typebox';\n\nconst S = Type.String();\nconst N = Type.Number();\nconst O = Type.Optional;\nconst values = <T extends string>(items: T[]) => Type.Union(items.map((item) => Type.Literal(item)));\nconst Json = Type.Unknown({\n description:\n 'Desktop provider JSON value. Targets, observations and action results are supplied by the admitted Desktop provider.',\n});\nconst Target = Type.Record(S, Json);\nconst Error = Type.Object({ code: S, message: S });\nconst Artifact = Type.Object({\n artifactId: S,\n status: values(['ready', 'failed']),\n downloadUrl: O(S),\n previewUrl: O(S),\n actionCount: O(N),\n completedAt: O(S),\n failure: O(Error),\n});\nexport const ComputerStateSchema = Type.Object({\n sessionId: S,\n revision: N,\n wake: N,\n phase: values(['inactive', 'awaiting_confirmation', 'activating', 'active', 'stopping', 'failed']),\n requestId: O(S),\n target: O(Target),\n durationMs: O(N),\n expiresAt: O(N),\n failure: O(Error),\n artifact: O(Artifact),\n});\nconst Reference = { snapshotId: Type.String({ minLength: 1 }), elementRef: Type.String({ minLength: 1 }) };\nexport const ComputerActionSchema = Type.Union([\n Type.Object({ kind: values(['press', 'focus']), ...Reference }, { additionalProperties: false }),\n Type.Object({ kind: Type.Literal('set_value'), ...Reference, value: S }, { additionalProperties: false }),\n Type.Object(\n {\n kind: Type.Literal('scroll'),\n ...Reference,\n direction: values(['up', 'down', 'left', 'right']),\n amount: values(['line', 'page']),\n },\n { additionalProperties: false },\n ),\n]);\nconst internal = (\n method: 'GET' | 'POST',\n path: string,\n output: object,\n body?: object,\n status = 200,\n): DoomHttpContract => ({\n id: `computer.${path.slice(1).replaceAll('/', '.')}`,\n scope: 'session',\n basePath: 'computer-use',\n path,\n method,\n authentication: 'owner',\n description: `Computer use broker ${path}. Requires the host-issued ${path.startsWith('/agent/') ? 'agent' : 'hub'} bearer token.`,\n availability: 'Internal broker route; ordinary browser credentials are insufficient.',\n parameters: [{ name: 'Authorization', in: 'header', required: true, schema: Type.String({ pattern: '^Bearer .+' }) }],\n ...(body ? { body: { required: true, contentType: 'application/json', schema: body } } : {}),\n responses: jsonApiResponses(output, status),\n});\nexport const apiContracts = defineApiContract({\n version: 1,\n dynamic: ['Desktop provider target extensions, observations and operation results are runtime-defined JSON.'],\n http: [\n {\n id: 'computer.activate',\n scope: 'session',\n basePath: 'computer-use',\n path: '/activate',\n method: 'POST',\n authentication: 'owner',\n description: 'Request confirmed Desktop access with admitted caller and remote step-up context.',\n body: {\n required: true,\n contentType: 'application/json',\n schema: Type.Object({\n target: Type.Object({ windowId: S, bundleId: S }),\n durationMs: Type.Integer({ minimum: 1000, maximum: 1800000 }),\n }),\n },\n responses: jsonApiResponses(ComputerStateSchema, 202),\n },\n internal('GET', '/agent/state', ComputerStateSchema),\n internal('GET', '/hub/state', ComputerStateSchema),\n internal('POST', '/agent/observe', Json),\n internal('POST', '/agent/action', Json, ComputerActionSchema),\n internal('POST', '/agent/stop', ComputerStateSchema, undefined, 202),\n internal(\n 'GET',\n '/hub/activation',\n Type.Union([\n Type.Null(),\n Type.Object({\n requestId: S,\n target: Target,\n durationSeconds: N,\n createdAt: N,\n confirmationExpiresAt: N,\n caller: Type.Object({ locality: values(['local', 'remote']), stepUp: S }),\n }),\n ]),\n ),\n internal('GET', '/hub/authorization', Type.Union([Type.Null(), Type.Object({ grantId: S, expiresAt: O(N) })])),\n internal(\n 'GET',\n '/hub/next',\n Type.Union([\n Type.Null(),\n Type.Object({ id: S, operation: values(['observe', 'act']), payload: O(Json), grantId: S, sequence: O(N) }),\n ]),\n ),\n internal('POST', '/hub/complete', ComputerStateSchema, Type.Object({ id: S, error: O(S), result: O(Json) })),\n internal(\n 'POST',\n '/hub/stop',\n ComputerStateSchema,\n Type.Object({ error: O(S), host: O(Type.Object({ grantId: S, expiresAt: N })), artifact: O(Artifact) }),\n ),\n ],\n sockets: (['global', 'workspace'] as const).flatMap((scope) => [\n {\n id: 'computer.state',\n scope,\n service: 'doompi.hub.v1',\n member: 'computer_use_state',\n kind: 'channel',\n direction: 'server-to-client',\n description: 'Computer use channel payload.',\n input: Type.Object({ state: ComputerStateSchema, targets: Type.Array(Target), busy: O(Type.Literal(true)) }),\n },\n {\n id: 'computer.command',\n scope,\n service: 'doompi.hub.v1',\n member: 'computer_use_state',\n kind: 'channel',\n direction: 'client-to-server',\n description: 'Computer use browser channel command.',\n input: Type.Object({ action: values(['status', 'targets', 'stop', 'artifacts']) }),\n },\n ]),\n});\nexport default apiContracts;\n"],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ const require_extensionService = require("./extensionService-44mLS5b_.cjs");
2
+ //#region src/types/computerUseApi.ts
3
+ const API_BASE_PATH = "computer-use";
4
+ const computerUseChannelType = "computer_use_state";
5
+ const COMPUTER_USE_MODE_ID = "computer-use";
6
+ const COMPUTER_USE_STATUS_KEY = "doom-computer-use";
7
+ const COMPUTER_USE_MODE_STATUS_KEY = "doom-computer-use-mode";
8
+ const COMPUTER_USE_MAX_DURATION_MS = 18e5;
9
+ const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 12e4;
10
+ /**
11
+ * Every path this API answers on, below its mount.
12
+ *
13
+ * The typed route table in `./apiRoutes` is built from this, the dispatcher
14
+ * reads that table, and the hub channel addresses the broker with these same
15
+ * strings, so a route cannot move on one side alone.
16
+ */
17
+ const COMPUTER_USE_ROUTES = {
18
+ activate: "/activate",
19
+ agentState: "/agent/state",
20
+ agentObserve: "/agent/observe",
21
+ agentAction: "/agent/action",
22
+ agentStop: "/agent/stop",
23
+ hubState: "/hub/state",
24
+ hubActivation: "/hub/activation",
25
+ hubAuthorization: "/hub/authorization",
26
+ hubNext: "/hub/next",
27
+ hubComplete: "/hub/complete",
28
+ hubStop: "/hub/stop"
29
+ };
30
+ const COMPUTER_USE_WAKE_LIMIT = 1e6;
31
+ //#endregion
32
+ //#region src/models/computerUseMode.ts
33
+ function modeState(state, enabled = false) {
34
+ const phase = state?.phase ?? "inactive";
35
+ const modeEnabled = enabled || phase !== "inactive" && phase !== "failed";
36
+ return {
37
+ activation: modeEnabled ? phase === "stopping" ? "deactivating" : phase === "awaiting_confirmation" || phase === "activating" ? "activating" : "active" : "inactive",
38
+ condition: phase === "awaiting_confirmation" ? "blocked" : phase === "failed" ? "failed" : phase === "activating" || phase === "stopping" ? "queued" : "ready",
39
+ ...modeEnabled && phase === "inactive" ? { detail: "configure computer use in Activity" } : {},
40
+ ...phase === "awaiting_confirmation" ? { detail: "awaiting confirmation in Activity" } : {},
41
+ actions: [
42
+ {
43
+ id: "activate",
44
+ enabled: !modeEnabled,
45
+ ...!modeEnabled ? {} : { disabledReason: "Computer use is already enabled." }
46
+ },
47
+ {
48
+ id: "deactivate",
49
+ enabled: modeEnabled,
50
+ ...modeEnabled ? {} : { disabledReason: "Computer use is not enabled." }
51
+ },
52
+ {
53
+ id: "doctor",
54
+ enabled: true
55
+ }
56
+ ]
57
+ };
58
+ }
59
+ /**
60
+ * Hides the computer-use tools while the mode is off.
61
+ *
62
+ * The arbiter starts from every registered tool, so an active mode only has to
63
+ * return the list untouched: nothing has to add the tools back.
64
+ */
65
+ function computerUseRestriction(active) {
66
+ const owned = new Set(require_extensionService.COMPUTER_USE_TOOL_NAMES);
67
+ return (incoming) => active ? incoming : incoming.filter((name) => !owned.has(name));
68
+ }
69
+ //#endregion
70
+ Object.defineProperty(exports, "API_BASE_PATH", {
71
+ enumerable: true,
72
+ get: function() {
73
+ return API_BASE_PATH;
74
+ }
75
+ });
76
+ Object.defineProperty(exports, "COMPUTER_USE_CONFIRMATION_WINDOW_MS", {
77
+ enumerable: true,
78
+ get: function() {
79
+ return COMPUTER_USE_CONFIRMATION_WINDOW_MS;
80
+ }
81
+ });
82
+ Object.defineProperty(exports, "COMPUTER_USE_MAX_DURATION_MS", {
83
+ enumerable: true,
84
+ get: function() {
85
+ return COMPUTER_USE_MAX_DURATION_MS;
86
+ }
87
+ });
88
+ Object.defineProperty(exports, "COMPUTER_USE_MODE_ID", {
89
+ enumerable: true,
90
+ get: function() {
91
+ return COMPUTER_USE_MODE_ID;
92
+ }
93
+ });
94
+ Object.defineProperty(exports, "COMPUTER_USE_MODE_STATUS_KEY", {
95
+ enumerable: true,
96
+ get: function() {
97
+ return COMPUTER_USE_MODE_STATUS_KEY;
98
+ }
99
+ });
100
+ Object.defineProperty(exports, "COMPUTER_USE_ROUTES", {
101
+ enumerable: true,
102
+ get: function() {
103
+ return COMPUTER_USE_ROUTES;
104
+ }
105
+ });
106
+ Object.defineProperty(exports, "COMPUTER_USE_STATUS_KEY", {
107
+ enumerable: true,
108
+ get: function() {
109
+ return COMPUTER_USE_STATUS_KEY;
110
+ }
111
+ });
112
+ Object.defineProperty(exports, "COMPUTER_USE_WAKE_LIMIT", {
113
+ enumerable: true,
114
+ get: function() {
115
+ return COMPUTER_USE_WAKE_LIMIT;
116
+ }
117
+ });
118
+ Object.defineProperty(exports, "computerUseChannelType", {
119
+ enumerable: true,
120
+ get: function() {
121
+ return computerUseChannelType;
122
+ }
123
+ });
124
+ Object.defineProperty(exports, "computerUseRestriction", {
125
+ enumerable: true,
126
+ get: function() {
127
+ return computerUseRestriction;
128
+ }
129
+ });
130
+ Object.defineProperty(exports, "modeState", {
131
+ enumerable: true,
132
+ get: function() {
133
+ return modeState;
134
+ }
135
+ });
136
+
137
+ //# sourceMappingURL=computerUseMode-BgtaVx_z.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computerUseMode-BgtaVx_z.cjs","names":["COMPUTER_USE_TOOL_NAMES"],"sources":["../src/types/computerUseApi.ts","../src/models/computerUseMode.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 { DoomToolRestriction } from '@agimon-ai/doompi-core/toolSurface';\nimport type { MinorModeState } from '@agimon-ai/doompi-minor-mode';\n\nimport { COMPUTER_USE_TOOL_NAMES } from '../constants/computerUse';\nimport type { ComputerUseSessionView } from '../types/computerUseApi';\nexport function modeState(state?: ComputerUseSessionView, enabled = false): MinorModeState {\n const phase = state?.phase ?? 'inactive';\n const running = phase !== 'inactive' && phase !== 'failed';\n const modeEnabled = enabled || running;\n const activation = modeEnabled\n ? phase === 'stopping'\n ? 'deactivating'\n : phase === 'awaiting_confirmation' || phase === 'activating'\n ? 'activating'\n : 'active'\n : 'inactive';\n return {\n activation,\n condition:\n phase === 'awaiting_confirmation'\n ? 'blocked'\n : phase === 'failed'\n ? 'failed'\n : phase === 'activating' || phase === 'stopping'\n ? 'queued'\n : 'ready',\n ...(modeEnabled && phase === 'inactive' ? { detail: 'configure computer use in Activity' } : {}),\n ...(phase === 'awaiting_confirmation' ? { detail: 'awaiting confirmation in Activity' } : {}),\n actions: [\n {\n id: 'activate',\n enabled: !modeEnabled,\n ...(!modeEnabled ? {} : { disabledReason: 'Computer use is already enabled.' }),\n },\n {\n id: 'deactivate',\n enabled: modeEnabled,\n ...(modeEnabled ? {} : { disabledReason: 'Computer use is not enabled.' }),\n },\n { id: 'doctor', enabled: true },\n ],\n };\n}\n\n/**\n * Hides the computer-use tools while the mode is off.\n *\n * The arbiter starts from every registered tool, so an active mode only has to\n * return the list untouched: nothing has to add the tools back.\n */\nexport function computerUseRestriction(active: boolean): DoomToolRestriction {\n const owned = new Set<string>(COMPUTER_USE_TOOL_NAMES);\n return (incoming) => (active ? incoming : incoming.filter((name) => !owned.has(name)));\n}\n"],"mappings":";;AAEA,MAAa,gBAAgB;AAC7B,MAAa,yBAAyB;AACtC,MAAa,uBAAuB;AACpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,+BAA+B;AAE5C,MAAa,sCAAsC;;;;;;;;AASnD,MAAa,sBAAsB;CACjC,UAAU;CACV,YAAY;CACZ,cAAc;CACd,aAAa;CACb,WAAW;CACX,UAAU;CACV,eAAe;CACf,kBAAkB;CAClB,SAAS;CACT,aAAa;CACb,SAAS;AACX;AAEA,MAAa,0BAA0B;;;AC3BvC,SAAgB,UAAU,OAAgC,UAAU,OAAuB;CACzF,MAAM,QAAQ,OAAO,SAAS;CAE9B,MAAM,cAAc,WADJ,UAAU,cAAc,UAAU;CASlD,OAAO;EACL,YARiB,cACf,UAAU,aACR,iBACA,UAAU,2BAA2B,UAAU,eAC7C,eACA,WACJ;EAGF,WACE,UAAU,0BACN,YACA,UAAU,WACR,WACA,UAAU,gBAAgB,UAAU,aAClC,WACA;EACV,GAAI,eAAe,UAAU,aAAa,EAAE,QAAQ,qCAAqC,IAAI,CAAC;EAC9F,GAAI,UAAU,0BAA0B,EAAE,QAAQ,oCAAoC,IAAI,CAAC;EAC3F,SAAS;GACP;IACE,IAAI;IACJ,SAAS,CAAC;IACV,GAAI,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,mCAAmC;GAC/E;GACA;IACE,IAAI;IACJ,SAAS;IACT,GAAI,cAAc,CAAC,IAAI,EAAE,gBAAgB,+BAA+B;GAC1E;GACA;IAAE,IAAI;IAAU,SAAS;GAAK;EAChC;CACF;AACF;;;;;;;AAQA,SAAgB,uBAAuB,QAAsC;CAC3E,MAAM,QAAQ,IAAI,IAAYA,yBAAAA,uBAAuB;CACrD,QAAQ,aAAc,SAAS,WAAW,SAAS,QAAQ,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC;AACtF"}
@@ -0,0 +1,72 @@
1
+ import { s as COMPUTER_USE_TOOL_NAMES } from "./extensionService-nFT_46iM.mjs";
2
+ //#region src/types/computerUseApi.ts
3
+ const API_BASE_PATH = "computer-use";
4
+ const computerUseChannelType = "computer_use_state";
5
+ const COMPUTER_USE_MODE_ID = "computer-use";
6
+ const COMPUTER_USE_STATUS_KEY = "doom-computer-use";
7
+ const COMPUTER_USE_MODE_STATUS_KEY = "doom-computer-use-mode";
8
+ const COMPUTER_USE_MAX_DURATION_MS = 18e5;
9
+ const COMPUTER_USE_CONFIRMATION_WINDOW_MS = 12e4;
10
+ /**
11
+ * Every path this API answers on, below its mount.
12
+ *
13
+ * The typed route table in `./apiRoutes` is built from this, the dispatcher
14
+ * reads that table, and the hub channel addresses the broker with these same
15
+ * strings, so a route cannot move on one side alone.
16
+ */
17
+ const COMPUTER_USE_ROUTES = {
18
+ activate: "/activate",
19
+ agentState: "/agent/state",
20
+ agentObserve: "/agent/observe",
21
+ agentAction: "/agent/action",
22
+ agentStop: "/agent/stop",
23
+ hubState: "/hub/state",
24
+ hubActivation: "/hub/activation",
25
+ hubAuthorization: "/hub/authorization",
26
+ hubNext: "/hub/next",
27
+ hubComplete: "/hub/complete",
28
+ hubStop: "/hub/stop"
29
+ };
30
+ const COMPUTER_USE_WAKE_LIMIT = 1e6;
31
+ //#endregion
32
+ //#region src/models/computerUseMode.ts
33
+ function modeState(state, enabled = false) {
34
+ const phase = state?.phase ?? "inactive";
35
+ const modeEnabled = enabled || phase !== "inactive" && phase !== "failed";
36
+ return {
37
+ activation: modeEnabled ? phase === "stopping" ? "deactivating" : phase === "awaiting_confirmation" || phase === "activating" ? "activating" : "active" : "inactive",
38
+ condition: phase === "awaiting_confirmation" ? "blocked" : phase === "failed" ? "failed" : phase === "activating" || phase === "stopping" ? "queued" : "ready",
39
+ ...modeEnabled && phase === "inactive" ? { detail: "configure computer use in Activity" } : {},
40
+ ...phase === "awaiting_confirmation" ? { detail: "awaiting confirmation in Activity" } : {},
41
+ actions: [
42
+ {
43
+ id: "activate",
44
+ enabled: !modeEnabled,
45
+ ...!modeEnabled ? {} : { disabledReason: "Computer use is already enabled." }
46
+ },
47
+ {
48
+ id: "deactivate",
49
+ enabled: modeEnabled,
50
+ ...modeEnabled ? {} : { disabledReason: "Computer use is not enabled." }
51
+ },
52
+ {
53
+ id: "doctor",
54
+ enabled: true
55
+ }
56
+ ]
57
+ };
58
+ }
59
+ /**
60
+ * Hides the computer-use tools while the mode is off.
61
+ *
62
+ * The arbiter starts from every registered tool, so an active mode only has to
63
+ * return the list untouched: nothing has to add the tools back.
64
+ */
65
+ function computerUseRestriction(active) {
66
+ const owned = new Set(COMPUTER_USE_TOOL_NAMES);
67
+ return (incoming) => active ? incoming : incoming.filter((name) => !owned.has(name));
68
+ }
69
+ //#endregion
70
+ export { COMPUTER_USE_MAX_DURATION_MS as a, COMPUTER_USE_ROUTES as c, computerUseChannelType as d, COMPUTER_USE_CONFIRMATION_WINDOW_MS as i, COMPUTER_USE_STATUS_KEY as l, modeState as n, COMPUTER_USE_MODE_ID as o, API_BASE_PATH as r, COMPUTER_USE_MODE_STATUS_KEY as s, computerUseRestriction as t, COMPUTER_USE_WAKE_LIMIT as u };
71
+
72
+ //# sourceMappingURL=computerUseMode-nb6yoF4Y.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computerUseMode-nb6yoF4Y.mjs","names":[],"sources":["../src/types/computerUseApi.ts","../src/models/computerUseMode.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 { DoomToolRestriction } from '@agimon-ai/doompi-core/toolSurface';\nimport type { MinorModeState } from '@agimon-ai/doompi-minor-mode';\n\nimport { COMPUTER_USE_TOOL_NAMES } from '../constants/computerUse';\nimport type { ComputerUseSessionView } from '../types/computerUseApi';\nexport function modeState(state?: ComputerUseSessionView, enabled = false): MinorModeState {\n const phase = state?.phase ?? 'inactive';\n const running = phase !== 'inactive' && phase !== 'failed';\n const modeEnabled = enabled || running;\n const activation = modeEnabled\n ? phase === 'stopping'\n ? 'deactivating'\n : phase === 'awaiting_confirmation' || phase === 'activating'\n ? 'activating'\n : 'active'\n : 'inactive';\n return {\n activation,\n condition:\n phase === 'awaiting_confirmation'\n ? 'blocked'\n : phase === 'failed'\n ? 'failed'\n : phase === 'activating' || phase === 'stopping'\n ? 'queued'\n : 'ready',\n ...(modeEnabled && phase === 'inactive' ? { detail: 'configure computer use in Activity' } : {}),\n ...(phase === 'awaiting_confirmation' ? { detail: 'awaiting confirmation in Activity' } : {}),\n actions: [\n {\n id: 'activate',\n enabled: !modeEnabled,\n ...(!modeEnabled ? {} : { disabledReason: 'Computer use is already enabled.' }),\n },\n {\n id: 'deactivate',\n enabled: modeEnabled,\n ...(modeEnabled ? {} : { disabledReason: 'Computer use is not enabled.' }),\n },\n { id: 'doctor', enabled: true },\n ],\n };\n}\n\n/**\n * Hides the computer-use tools while the mode is off.\n *\n * The arbiter starts from every registered tool, so an active mode only has to\n * return the list untouched: nothing has to add the tools back.\n */\nexport function computerUseRestriction(active: boolean): DoomToolRestriction {\n const owned = new Set<string>(COMPUTER_USE_TOOL_NAMES);\n return (incoming) => (active ? incoming : incoming.filter((name) => !owned.has(name)));\n}\n"],"mappings":";;AAEA,MAAa,gBAAgB;AAC7B,MAAa,yBAAyB;AACtC,MAAa,uBAAuB;AACpC,MAAa,0BAA0B;AACvC,MAAa,+BAA+B;AAC5C,MAAa,+BAA+B;AAE5C,MAAa,sCAAsC;;;;;;;;AASnD,MAAa,sBAAsB;CACjC,UAAU;CACV,YAAY;CACZ,cAAc;CACd,aAAa;CACb,WAAW;CACX,UAAU;CACV,eAAe;CACf,kBAAkB;CAClB,SAAS;CACT,aAAa;CACb,SAAS;AACX;AAEA,MAAa,0BAA0B;;;AC3BvC,SAAgB,UAAU,OAAgC,UAAU,OAAuB;CACzF,MAAM,QAAQ,OAAO,SAAS;CAE9B,MAAM,cAAc,WADJ,UAAU,cAAc,UAAU;CASlD,OAAO;EACL,YARiB,cACf,UAAU,aACR,iBACA,UAAU,2BAA2B,UAAU,eAC7C,eACA,WACJ;EAGF,WACE,UAAU,0BACN,YACA,UAAU,WACR,WACA,UAAU,gBAAgB,UAAU,aAClC,WACA;EACV,GAAI,eAAe,UAAU,aAAa,EAAE,QAAQ,qCAAqC,IAAI,CAAC;EAC9F,GAAI,UAAU,0BAA0B,EAAE,QAAQ,oCAAoC,IAAI,CAAC;EAC3F,SAAS;GACP;IACE,IAAI;IACJ,SAAS,CAAC;IACV,GAAI,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,mCAAmC;GAC/E;GACA;IACE,IAAI;IACJ,SAAS;IACT,GAAI,cAAc,CAAC,IAAI,EAAE,gBAAgB,+BAA+B;GAC1E;GACA;IAAE,IAAI;IAAU,SAAS;GAAK;EAChC;CACF;AACF;;;;;;;AAQA,SAAgB,uBAAuB,QAAsC;CAC3E,MAAM,QAAQ,IAAI,IAAY,uBAAuB;CACrD,QAAQ,aAAc,SAAS,WAAW,SAAS,QAAQ,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC;AACtF"}
@@ -1,27 +1,34 @@
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");
1
+ const require_extensionService = require("./extensionService-44mLS5b_.cjs");
5
2
  let node_path = require("node:path");
6
- node_path = require_runtime.__toESM(node_path, 1);
3
+ node_path = require_extensionService.__toESM(node_path, 1);
7
4
  let _agimon_ai_doompi_config = require("@agimon-ai/doompi-config");
8
5
  //#region src/services/dependencies/index.ts
9
6
  const COMPUTER_USE_SCRIPT_PATHS_ENV = "DOOMPI_COMPUTER_USE_SCRIPT_PATHS";
10
7
  function createComputerUseDependencies(overrides = {}) {
11
- const client = overrides.client ?? require_index.createComputerUseSessionClient();
8
+ const client = overrides.client ?? require_extensionService.createComputerUseSessionClient();
12
9
  const allowedScriptPaths = (process.env["DOOMPI_COMPUTER_USE_SCRIPT_PATHS"] ?? "").split(node_path.default.delimiter).filter((entry) => entry.length > 0);
13
10
  return {
14
- service: overrides.service ?? new require_index$2.DefaultComputerUseExtensionService(client),
11
+ service: overrides.service ?? new require_extensionService.DefaultComputerUseExtensionService(client),
15
12
  enabled: overrides.enabled ?? (() => (0, _agimon_ai_doompi_config.loadDoomConfig)(process.env.PI_PROJECT_ROOT ?? process.cwd()).computerUse?.enabled === true),
16
13
  ...client === void 0 ? {} : { client },
17
- ...overrides.scriptRunner !== void 0 ? { scriptRunner: overrides.scriptRunner } : client === void 0 ? {} : { scriptRunner: new require_index$1.ComputerScriptRunner({
14
+ ...overrides.scriptRunner !== void 0 ? { scriptRunner: overrides.scriptRunner } : client === void 0 ? {} : { scriptRunner: new require_extensionService.ComputerScriptRunner({
18
15
  client,
19
16
  allowedScriptPaths
20
17
  }) }
21
18
  };
22
19
  }
23
20
  //#endregion
24
- exports.COMPUTER_USE_SCRIPT_PATHS_ENV = COMPUTER_USE_SCRIPT_PATHS_ENV;
25
- exports.createComputerUseDependencies = createComputerUseDependencies;
21
+ Object.defineProperty(exports, "COMPUTER_USE_SCRIPT_PATHS_ENV", {
22
+ enumerable: true,
23
+ get: function() {
24
+ return COMPUTER_USE_SCRIPT_PATHS_ENV;
25
+ }
26
+ });
27
+ Object.defineProperty(exports, "createComputerUseDependencies", {
28
+ enumerable: true,
29
+ get: function() {
30
+ return createComputerUseDependencies;
31
+ }
32
+ });
26
33
 
27
- //# sourceMappingURL=index.cjs.map
34
+ //# sourceMappingURL=dependencies-CuOzd5Pm.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies-CuOzd5Pm.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,yBAAAA,+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,yBAAAA,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,yBAAAA,qBAAqB;GAAE;GAAQ;EAAmB,CAAC,EAAE;CACjF;AACF"}
@@ -1,6 +1,4 @@
1
- import { createComputerUseSessionClient } from "../sessionApiClient/index.mjs";
2
- import { ComputerScriptRunner } from "../computerScriptRunner/index.mjs";
3
- import { DefaultComputerUseExtensionService } from "../extensionService/index.mjs";
1
+ import { n as ComputerScriptRunner, r as createComputerUseSessionClient, t as DefaultComputerUseExtensionService } from "./extensionService-nFT_46iM.mjs";
4
2
  import path from "node:path";
5
3
  import { loadDoomConfig } from "@agimon-ai/doompi-config";
6
4
  //#region src/services/dependencies/index.ts
@@ -19,6 +17,6 @@ function createComputerUseDependencies(overrides = {}) {
19
17
  };
20
18
  }
21
19
  //#endregion
22
- export { COMPUTER_USE_SCRIPT_PATHS_ENV, createComputerUseDependencies };
20
+ export { createComputerUseDependencies as n, COMPUTER_USE_SCRIPT_PATHS_ENV as t };
23
21
 
24
- //# sourceMappingURL=index.mjs.map
22
+ //# sourceMappingURL=dependencies-gtxIMe7d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies-gtxIMe7d.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"}
@@ -1,5 +1,44 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
1
23
  let node_child_process = require("node:child_process");
2
24
  let node_fs_promises = require("node:fs/promises");
25
+ //#region src/constants/computerUse.ts
26
+ const COMPUTER_USE_GUIDANCE = `[COMPUTER USE ACTIVE]
27
+ Use 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.`;
28
+ const COMMAND_NAME = "computer-use";
29
+ const COMMAND_DESCRIPTION = "Inspect or manage the session computer use mode";
30
+ const COMPUTER_USE_TOOL_NAMES = [
31
+ "computer_state",
32
+ "computer_action",
33
+ "computer_exec"
34
+ ];
35
+ //#endregion
36
+ //#region src/services/sessionApiClient/index.ts
37
+ /** Uses the host-owned typed service directly. Internal package APIs are in-process. */
38
+ function createComputerUseSessionClient(host) {
39
+ return host;
40
+ }
41
+ //#endregion
3
42
  //#region src/services/computerScriptRunner/index.ts
4
43
  const DEFAULT_TIMEOUT_MS = 3e4;
5
44
  const DEFAULT_MAX_OUTPUT_BYTES = 262144;
@@ -166,6 +205,71 @@ var ComputerScriptRunner = class {
166
205
  }
167
206
  };
168
207
  //#endregion
169
- exports.ComputerScriptRunner = ComputerScriptRunner;
208
+ //#region src/services/extensionService/index.ts
209
+ var DefaultComputerUseExtensionService = class {
210
+ client;
211
+ constructor(client) {
212
+ this.client = client;
213
+ }
214
+ async execute() {
215
+ if (this.client === void 0) return {
216
+ message: "Computer use requires a DoomPi Desktop session.",
217
+ level: "error"
218
+ };
219
+ return {
220
+ message: `Computer use is ${(await this.client.state()).phase.replaceAll("_", " ")}.`,
221
+ level: "info"
222
+ };
223
+ }
224
+ };
225
+ //#endregion
226
+ Object.defineProperty(exports, "COMMAND_DESCRIPTION", {
227
+ enumerable: true,
228
+ get: function() {
229
+ return COMMAND_DESCRIPTION;
230
+ }
231
+ });
232
+ Object.defineProperty(exports, "COMMAND_NAME", {
233
+ enumerable: true,
234
+ get: function() {
235
+ return COMMAND_NAME;
236
+ }
237
+ });
238
+ Object.defineProperty(exports, "COMPUTER_USE_GUIDANCE", {
239
+ enumerable: true,
240
+ get: function() {
241
+ return COMPUTER_USE_GUIDANCE;
242
+ }
243
+ });
244
+ Object.defineProperty(exports, "COMPUTER_USE_TOOL_NAMES", {
245
+ enumerable: true,
246
+ get: function() {
247
+ return COMPUTER_USE_TOOL_NAMES;
248
+ }
249
+ });
250
+ Object.defineProperty(exports, "ComputerScriptRunner", {
251
+ enumerable: true,
252
+ get: function() {
253
+ return ComputerScriptRunner;
254
+ }
255
+ });
256
+ Object.defineProperty(exports, "DefaultComputerUseExtensionService", {
257
+ enumerable: true,
258
+ get: function() {
259
+ return DefaultComputerUseExtensionService;
260
+ }
261
+ });
262
+ Object.defineProperty(exports, "__toESM", {
263
+ enumerable: true,
264
+ get: function() {
265
+ return __toESM;
266
+ }
267
+ });
268
+ Object.defineProperty(exports, "createComputerUseSessionClient", {
269
+ enumerable: true,
270
+ get: function() {
271
+ return createComputerUseSessionClient;
272
+ }
273
+ });
170
274
 
171
- //# sourceMappingURL=index.cjs.map
275
+ //# sourceMappingURL=extensionService-44mLS5b_.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensionService-44mLS5b_.cjs","names":["realpath","spawn"],"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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"}
@@ -1,5 +1,22 @@
1
1
  import { spawn } from "node:child_process";
2
2
  import { realpath } from "node:fs/promises";
3
+ //#region src/constants/computerUse.ts
4
+ const COMPUTER_USE_GUIDANCE = `[COMPUTER USE ACTIVE]
5
+ Use 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.`;
6
+ const COMMAND_NAME = "computer-use";
7
+ const COMMAND_DESCRIPTION = "Inspect or manage the session computer use mode";
8
+ const COMPUTER_USE_TOOL_NAMES = [
9
+ "computer_state",
10
+ "computer_action",
11
+ "computer_exec"
12
+ ];
13
+ //#endregion
14
+ //#region src/services/sessionApiClient/index.ts
15
+ /** Uses the host-owned typed service directly. Internal package APIs are in-process. */
16
+ function createComputerUseSessionClient(host) {
17
+ return host;
18
+ }
19
+ //#endregion
3
20
  //#region src/services/computerScriptRunner/index.ts
4
21
  const DEFAULT_TIMEOUT_MS = 3e4;
5
22
  const DEFAULT_MAX_OUTPUT_BYTES = 262144;
@@ -166,6 +183,24 @@ var ComputerScriptRunner = class {
166
183
  }
167
184
  };
168
185
  //#endregion
169
- export { ComputerScriptRunner };
186
+ //#region src/services/extensionService/index.ts
187
+ var DefaultComputerUseExtensionService = class {
188
+ client;
189
+ constructor(client) {
190
+ this.client = client;
191
+ }
192
+ async execute() {
193
+ if (this.client === void 0) return {
194
+ message: "Computer use requires a DoomPi Desktop session.",
195
+ level: "error"
196
+ };
197
+ return {
198
+ message: `Computer use is ${(await this.client.state()).phase.replaceAll("_", " ")}.`,
199
+ level: "info"
200
+ };
201
+ }
202
+ };
203
+ //#endregion
204
+ export { COMMAND_NAME as a, COMMAND_DESCRIPTION as i, ComputerScriptRunner as n, COMPUTER_USE_GUIDANCE as o, createComputerUseSessionClient as r, COMPUTER_USE_TOOL_NAMES as s, DefaultComputerUseExtensionService as t };
170
205
 
171
- //# sourceMappingURL=index.mjs.map
206
+ //# sourceMappingURL=extensionService-nFT_46iM.mjs.map