@moxxy/plugin-computer-control 0.41.2 → 0.42.0

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 (269) hide show
  1. package/bin/win32-x64/moxxy-computer.exe +0 -0
  2. package/bin/win32-x64/moxxy-computer.exe.json +1 -1
  3. package/dist/backend/access.d.ts +129 -0
  4. package/dist/backend/access.d.ts.map +1 -0
  5. package/dist/backend/access.js +158 -0
  6. package/dist/backend/access.js.map +1 -0
  7. package/dist/backend/app-hints.d.ts +14 -0
  8. package/dist/backend/app-hints.d.ts.map +1 -0
  9. package/dist/backend/app-hints.js +30 -0
  10. package/dist/backend/app-hints.js.map +1 -0
  11. package/dist/backend/backend.d.ts +70 -0
  12. package/dist/backend/backend.d.ts.map +1 -0
  13. package/dist/backend/backend.js +466 -0
  14. package/dist/backend/backend.js.map +1 -0
  15. package/dist/backend/rpc.d.ts +1438 -0
  16. package/dist/backend/rpc.d.ts.map +1 -0
  17. package/dist/backend/rpc.js +75 -0
  18. package/dist/backend/rpc.js.map +1 -0
  19. package/dist/backend/turn-controls.d.ts +20 -0
  20. package/dist/backend/turn-controls.d.ts.map +1 -0
  21. package/dist/backend/turn-controls.js +115 -0
  22. package/dist/backend/turn-controls.js.map +1 -0
  23. package/dist/contract/guidance.d.ts +12 -0
  24. package/dist/contract/guidance.d.ts.map +1 -0
  25. package/dist/contract/guidance.js +42 -0
  26. package/dist/contract/guidance.js.map +1 -0
  27. package/dist/contract/image.d.ts +29 -0
  28. package/dist/contract/image.d.ts.map +1 -0
  29. package/dist/contract/image.js +46 -0
  30. package/dist/contract/image.js.map +1 -0
  31. package/dist/contract/keys.d.ts +15 -0
  32. package/dist/contract/keys.d.ts.map +1 -0
  33. package/dist/contract/keys.js +118 -0
  34. package/dist/contract/keys.js.map +1 -0
  35. package/dist/contract/outcome.d.ts +61 -0
  36. package/dist/contract/outcome.d.ts.map +1 -0
  37. package/dist/contract/outcome.js +63 -0
  38. package/dist/contract/outcome.js.map +1 -0
  39. package/dist/contract/progress.d.ts +27 -0
  40. package/dist/contract/progress.d.ts.map +1 -0
  41. package/dist/contract/progress.js +36 -0
  42. package/dist/contract/progress.js.map +1 -0
  43. package/dist/contract/tools.d.ts +338 -0
  44. package/dist/contract/tools.d.ts.map +1 -0
  45. package/dist/contract/tools.js +195 -0
  46. package/dist/contract/tools.js.map +1 -0
  47. package/dist/contract/untrusted.d.ts +3 -0
  48. package/dist/contract/untrusted.d.ts.map +1 -0
  49. package/dist/contract/untrusted.js +8 -0
  50. package/dist/contract/untrusted.js.map +1 -0
  51. package/dist/helper/artifact.d.ts +41 -0
  52. package/dist/helper/artifact.d.ts.map +1 -0
  53. package/dist/helper/artifact.js +189 -0
  54. package/dist/helper/artifact.js.map +1 -0
  55. package/dist/helper/protocol.d.ts +80 -0
  56. package/dist/helper/protocol.d.ts.map +1 -0
  57. package/dist/helper/protocol.js +49 -0
  58. package/dist/helper/protocol.js.map +1 -0
  59. package/dist/helper/transport.d.ts +43 -0
  60. package/dist/helper/transport.d.ts.map +1 -0
  61. package/dist/{windows → helper}/transport.js +45 -19
  62. package/dist/helper/transport.js.map +1 -0
  63. package/dist/index.d.ts +9 -22
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +35 -42
  66. package/dist/index.js.map +1 -1
  67. package/dist/jev/ladder.d.ts +32 -0
  68. package/dist/jev/ladder.d.ts.map +1 -0
  69. package/dist/jev/ladder.js +66 -0
  70. package/dist/jev/ladder.js.map +1 -0
  71. package/dist/jev/memory.d.ts +11 -0
  72. package/dist/jev/memory.d.ts.map +1 -0
  73. package/dist/jev/memory.js +16 -0
  74. package/dist/jev/memory.js.map +1 -0
  75. package/dist/jev/run.d.ts +93 -0
  76. package/dist/jev/run.d.ts.map +1 -0
  77. package/dist/jev/run.js +403 -0
  78. package/dist/jev/run.js.map +1 -0
  79. package/dist/jev/train.d.ts +97 -0
  80. package/dist/jev/train.d.ts.map +1 -0
  81. package/dist/jev/train.js +28 -0
  82. package/dist/jev/train.js.map +1 -0
  83. package/dist/linux/profile.d.ts +6 -0
  84. package/dist/linux/profile.d.ts.map +1 -0
  85. package/dist/linux/profile.js +21 -0
  86. package/dist/linux/profile.js.map +1 -0
  87. package/dist/macos/profile.d.ts +5 -0
  88. package/dist/macos/profile.d.ts.map +1 -0
  89. package/dist/macos/profile.js +17 -0
  90. package/dist/macos/profile.js.map +1 -0
  91. package/dist/preview/controller.d.ts +127 -0
  92. package/dist/preview/controller.d.ts.map +1 -0
  93. package/dist/preview/controller.js +203 -0
  94. package/dist/preview/controller.js.map +1 -0
  95. package/dist/preview/surface.d.ts +9 -0
  96. package/dist/preview/surface.d.ts.map +1 -0
  97. package/dist/preview/surface.js +50 -0
  98. package/dist/preview/surface.js.map +1 -0
  99. package/dist/windows/maintenance.d.ts +1 -1
  100. package/dist/windows/maintenance.d.ts.map +1 -1
  101. package/dist/windows/maintenance.js +6 -5
  102. package/dist/windows/maintenance.js.map +1 -1
  103. package/dist/windows/profile.d.ts +5 -0
  104. package/dist/windows/profile.d.ts.map +1 -0
  105. package/dist/windows/profile.js +17 -0
  106. package/dist/windows/profile.js.map +1 -0
  107. package/learned/README.md +26 -0
  108. package/learned/cases/com.apple.calculator.json +395 -0
  109. package/learned/cases/com.apple.finder.json +115 -0
  110. package/learned/cases/com.apple.safari.json +112 -0
  111. package/learned/cases/com.apple.systempreferences.json +255 -0
  112. package/learned/com.apple.calculator-eace95fc.json +334 -0
  113. package/learned/com.apple.finder-27cf6ce8.json +260 -0
  114. package/learned/com.apple.safari-7cd9df4f.json +143 -0
  115. package/learned/com.apple.systempreferences-02cf0b8b.json +535 -0
  116. package/package.json +13 -7
  117. package/scripts/promote-learned.mjs +8 -0
  118. package/scripts/summarize-trial.mjs +68 -0
  119. package/scripts/train-learned.mjs +64 -0
  120. package/skills/computer-apps/blender.md +29 -0
  121. package/skills/computer-apps/browsers.md +50 -0
  122. package/skills/computer-apps/design-tools.md +37 -0
  123. package/skills/computer-apps/finder.md +23 -0
  124. package/skills/computer-apps/office.md +46 -0
  125. package/skills/computer-apps/video-editors.md +44 -0
  126. package/skills/computer-control.md +154 -191
  127. package/src/backend/access.test.ts +158 -0
  128. package/src/backend/access.ts +168 -0
  129. package/src/backend/app-hints.test.ts +59 -0
  130. package/src/backend/app-hints.ts +39 -0
  131. package/src/backend/backend.test.ts +725 -0
  132. package/src/backend/backend.ts +482 -0
  133. package/src/backend/contract-helper.fixture.mjs +138 -0
  134. package/src/backend/helper.fixture.ts +38 -0
  135. package/src/backend/rpc.ts +90 -0
  136. package/src/backend/turn-controls.test.ts +178 -0
  137. package/src/backend/turn-controls.ts +120 -0
  138. package/src/contract/guidance.test.ts +75 -0
  139. package/src/contract/guidance.ts +48 -0
  140. package/src/contract/image.test.ts +74 -0
  141. package/src/contract/image.ts +54 -0
  142. package/src/contract/keys.test.ts +103 -0
  143. package/src/contract/keys.ts +117 -0
  144. package/src/contract/outcome.test.ts +71 -0
  145. package/src/contract/outcome.ts +72 -0
  146. package/src/contract/progress.test.ts +56 -0
  147. package/src/contract/progress.ts +43 -0
  148. package/src/contract/tools.test.ts +210 -0
  149. package/src/contract/tools.ts +212 -0
  150. package/src/contract/untrusted.test.ts +20 -0
  151. package/src/contract/untrusted.ts +8 -0
  152. package/src/helper/artifact.test.ts +131 -0
  153. package/src/helper/artifact.ts +182 -0
  154. package/src/helper/protocol.test.ts +29 -0
  155. package/src/helper/protocol.ts +50 -0
  156. package/src/{windows → helper}/transport.test.ts +76 -19
  157. package/src/{windows → helper}/transport.ts +54 -16
  158. package/src/index.test.ts +112 -0
  159. package/src/index.ts +36 -53
  160. package/src/jev/ladder.test.ts +113 -0
  161. package/src/jev/ladder.ts +88 -0
  162. package/src/jev/memory.ts +20 -0
  163. package/src/jev/run.test.ts +700 -0
  164. package/src/jev/run.ts +443 -0
  165. package/src/jev/train.test.ts +40 -0
  166. package/src/jev/train.ts +41 -0
  167. package/src/linux/helper.test.ts +481 -0
  168. package/src/linux/profile.ts +25 -0
  169. package/src/macos/helper.test.ts +988 -0
  170. package/src/macos/profile.ts +19 -0
  171. package/src/preview/controller.test.ts +308 -0
  172. package/src/preview/controller.ts +262 -0
  173. package/src/preview/surface.test.ts +68 -0
  174. package/src/preview/surface.ts +45 -0
  175. package/src/skill.test.ts +34 -0
  176. package/src/windows/maintenance.ts +8 -7
  177. package/src/windows/profile.ts +19 -0
  178. package/dist/shell.d.ts +0 -56
  179. package/dist/shell.d.ts.map +0 -1
  180. package/dist/shell.js +0 -189
  181. package/dist/shell.js.map +0 -1
  182. package/dist/temporary-files.d.ts +0 -2
  183. package/dist/temporary-files.d.ts.map +0 -1
  184. package/dist/temporary-files.js +0 -10
  185. package/dist/temporary-files.js.map +0 -1
  186. package/dist/tools/applescript.d.ts +0 -2
  187. package/dist/tools/applescript.d.ts.map +0 -1
  188. package/dist/tools/applescript.js +0 -50
  189. package/dist/tools/applescript.js.map +0 -1
  190. package/dist/tools/click.d.ts +0 -2
  191. package/dist/tools/click.d.ts.map +0 -1
  192. package/dist/tools/click.js +0 -58
  193. package/dist/tools/click.js.map +0 -1
  194. package/dist/tools/clipboard.d.ts +0 -2
  195. package/dist/tools/clipboard.d.ts.map +0 -1
  196. package/dist/tools/clipboard.js +0 -71
  197. package/dist/tools/clipboard.js.map +0 -1
  198. package/dist/tools/key.d.ts +0 -11
  199. package/dist/tools/key.d.ts.map +0 -1
  200. package/dist/tools/key.js +0 -143
  201. package/dist/tools/key.js.map +0 -1
  202. package/dist/tools/open.d.ts +0 -2
  203. package/dist/tools/open.d.ts.map +0 -1
  204. package/dist/tools/open.js +0 -91
  205. package/dist/tools/open.js.map +0 -1
  206. package/dist/tools/screenshot.d.ts +0 -2
  207. package/dist/tools/screenshot.d.ts.map +0 -1
  208. package/dist/tools/screenshot.js +0 -162
  209. package/dist/tools/screenshot.js.map +0 -1
  210. package/dist/tools/type.d.ts +0 -8
  211. package/dist/tools/type.d.ts.map +0 -1
  212. package/dist/tools/type.js +0 -65
  213. package/dist/tools/type.js.map +0 -1
  214. package/dist/windows/artifact.d.ts +0 -3
  215. package/dist/windows/artifact.d.ts.map +0 -1
  216. package/dist/windows/artifact.js +0 -57
  217. package/dist/windows/artifact.js.map +0 -1
  218. package/dist/windows/backend.d.ts +0 -11
  219. package/dist/windows/backend.d.ts.map +0 -1
  220. package/dist/windows/backend.js +0 -122
  221. package/dist/windows/backend.js.map +0 -1
  222. package/dist/windows/contracts.d.ts +0 -1627
  223. package/dist/windows/contracts.d.ts.map +0 -1
  224. package/dist/windows/contracts.js +0 -137
  225. package/dist/windows/contracts.js.map +0 -1
  226. package/dist/windows/control-service.d.ts +0 -12
  227. package/dist/windows/control-service.d.ts.map +0 -1
  228. package/dist/windows/control-service.js +0 -65
  229. package/dist/windows/control-service.js.map +0 -1
  230. package/dist/windows/guidance.d.ts +0 -3
  231. package/dist/windows/guidance.d.ts.map +0 -1
  232. package/dist/windows/guidance.js +0 -20
  233. package/dist/windows/guidance.js.map +0 -1
  234. package/dist/windows/protocol.d.ts +0 -9
  235. package/dist/windows/protocol.d.ts.map +0 -1
  236. package/dist/windows/protocol.js +0 -32
  237. package/dist/windows/protocol.js.map +0 -1
  238. package/dist/windows/transport.d.ts +0 -23
  239. package/dist/windows/transport.d.ts.map +0 -1
  240. package/dist/windows/transport.js.map +0 -1
  241. package/src/shell.test.ts +0 -186
  242. package/src/shell.ts +0 -213
  243. package/src/temporary-files.test.ts +0 -18
  244. package/src/temporary-files.ts +0 -9
  245. package/src/tools/applescript-serialize.test.ts +0 -74
  246. package/src/tools/applescript.ts +0 -53
  247. package/src/tools/click.ts +0 -60
  248. package/src/tools/clipboard.ts +0 -72
  249. package/src/tools/key.ts +0 -155
  250. package/src/tools/open.ts +0 -96
  251. package/src/tools/screenshot.test.ts +0 -137
  252. package/src/tools/screenshot.ts +0 -180
  253. package/src/tools/type.ts +0 -68
  254. package/src/tools.test.ts +0 -94
  255. package/src/windows/action-contracts.test.ts +0 -13
  256. package/src/windows/artifact.test.ts +0 -16
  257. package/src/windows/artifact.ts +0 -57
  258. package/src/windows/backend.test.ts +0 -41
  259. package/src/windows/backend.ts +0 -122
  260. package/src/windows/contracts.test.ts +0 -81
  261. package/src/windows/contracts.ts +0 -143
  262. package/src/windows/control-service.test.ts +0 -58
  263. package/src/windows/control-service.ts +0 -68
  264. package/src/windows/guidance.test.ts +0 -29
  265. package/src/windows/guidance.ts +0 -21
  266. package/src/windows/model-contract.test.ts +0 -37
  267. package/src/windows/protocol.ts +0 -27
  268. package/src/windows/text-contracts.test.ts +0 -14
  269. package/src/windows/window-typing.test.ts +0 -14
@@ -0,0 +1,466 @@
1
+ import { defineTool, zodToJsonSchema } from '@moxxy/sdk';
2
+ import { z } from 'zod';
3
+ import { FILE_PANEL_NOTE, withComputerGuidance } from '../contract/guidance.js';
4
+ import { parseKeyCombo } from '../contract/keys.js';
5
+ import { ComputerUseError, describeResult, isErrorCode } from '../contract/outcome.js';
6
+ import { ProgressTracker, fingerprint } from '../contract/progress.js';
7
+ import { computerTools } from '../contract/tools.js';
8
+ import { diffTrees, formatTree, sameElements } from '@moxxy/jev';
9
+ import { JEV_HOST, JEV_OFF, JEV_SECRET, jevClient } from '@moxxy/jev';
10
+ import { traceRun, tracedFromEnv } from '@moxxy/jev';
11
+ import { RunMemory, describeRoutes, guess, labelOf, recall, shippedLearned, targetOf } from '../jev/memory.js';
12
+ import { describeRun, pictured, runSteps } from '../jev/run.js';
13
+ import { wrapUntrusted } from '../contract/untrusted.js';
14
+ import { controlStateSchemaFor } from '../helper/protocol.js';
15
+ import { HelperError, HelperTransport } from '../helper/transport.js';
16
+ import { accessFromLog, accessGrantSchema, approvedThroughRun, categorize, checkAccess, checkKeys, defaultTier, maxTier, requiredTier, } from './access.js';
17
+ import { hintFor, loadAppHints } from './app-hints.js';
18
+ import { actResultSchema, appStateSchema, batchResultSchema, contractEventsFor, imageSchema, listAppsResultSchema, readTextResultSchema, resolveAppsResultSchema, statusResultSchema, } from './rpc.js';
19
+ import { PreviewController } from '../preview/controller.js';
20
+ import { buildComputerPreviewSurface } from '../preview/surface.js';
21
+ import { TurnControls } from './turn-controls.js';
22
+ /** The single tool that does what a step of a run does. */
23
+ const SINGLE = { click: 'click', type: 'type_text', set_value: 'set_value' };
24
+ const turnKey = (sessionId, turnId) => JSON.stringify([sessionId, turnId]);
25
+ function withImage(text, image) {
26
+ return image ? { mediaType: image.mediaType, base64: image.base64, forModel: text } : text;
27
+ }
28
+ /** Long enough for an app to read the gesture as a drag, not a click. */
29
+ const DRAG_MS = 600;
30
+ /** Tools that only look: the same call between actions is how the agent watches an app. */
31
+ const LOOKING = new Set(['computer_status', 'computer_list_apps', 'computer_get_app_state', 'computer_zoom']);
32
+ /** What a task starts with: sent even when the tool list is gated, since loading them first is a model round. */
33
+ const ENTRY = new Set(['computer_request_access', 'computer_run']);
34
+ /** Helpers get chords from the one xdotool parser instead of parsing key syntax themselves, and a drag as a path. */
35
+ function forHelper(step) {
36
+ if (step.action === 'drag') {
37
+ return { action: 'drag', path: [[step.from_x, step.from_y], [step.to_x, step.to_y]], duration_ms: DRAG_MS, mouse_button: 'left' };
38
+ }
39
+ const fields = { ...step };
40
+ if (typeof fields.key === 'string')
41
+ fields.chord = parseKeyCombo(fields.key);
42
+ if (typeof fields.modifiers === 'string')
43
+ fields.held = parseKeyCombo(fields.modifiers).modifiers;
44
+ return fields;
45
+ }
46
+ /** A coded helper refusal becomes a Computer Use error carrying the model's next step. */
47
+ function asComputerUseError(error) {
48
+ return error instanceof HelperError && isErrorCode(error.code) ? new ComputerUseError(error.code, error.detail) : error;
49
+ }
50
+ /** The Codex/Claude-style tool set on top of one disposable native helper per session turn. */
51
+ export class ComputerBackend {
52
+ profile;
53
+ hints;
54
+ jev;
55
+ memory;
56
+ turns = new Map();
57
+ controls = new TurnControls();
58
+ /** The human's live picture of the app in use; frames never reach the model or the session log. */
59
+ preview = new PreviewController();
60
+ hooks;
61
+ constructor(profile, hints = loadAppHints(),
62
+ /** Jev for a TypeSafe key; a seam so tests need no network. */
63
+ jev = (apiKey) => tracedFromEnv(jevClient(apiKey)), memory = new RunMemory(undefined, Date.now, shippedLearned)) {
64
+ this.profile = profile;
65
+ this.hints = hints;
66
+ this.jev = jev;
67
+ this.memory = memory;
68
+ this.hooks = {
69
+ // Until a tool call has looked into the vault, the environment says whether there is a key.
70
+ onBeforeProviderCall: withComputerGuidance(profile.platform, (sessionId) => this.keyed.get(sessionId) ?? Boolean(process.env[JEV_SECRET])),
71
+ onInit: (ctx) => { ctx.services.register('computerControl', this.controls.forSession(ctx.sessionId)); },
72
+ onTurnEnd: (ctx) => this.release(ctx.sessionId, ctx.turnId),
73
+ onShutdown: (ctx) => this.release(ctx.sessionId),
74
+ };
75
+ }
76
+ /** Per session, whether the last tool call found a TypeSafe key: without one, runs of steps are not offered. */
77
+ keyed = new Map();
78
+ /** Per session, the names apps were asked for under and the app each resolved to: the model keeps using its own name. */
79
+ asked = new Map();
80
+ /** Per session, the apps approved through a run, placed by the helper once: the name asked for → its grant, or null when it has none. */
81
+ reached = new Map();
82
+ async jevKey(ctx) {
83
+ const secret = async (name) => (await ctx.getSecret?.(name)?.catch(() => null)) || undefined;
84
+ // The switch is a vault entry, so every surface of the session reads the same one.
85
+ const key = (await secret(JEV_OFF)) ? undefined : (await secret(JEV_SECRET)) || process.env[JEV_SECRET] || undefined;
86
+ this.keyed.set(ctx.sessionId, key !== undefined);
87
+ return key;
88
+ }
89
+ surfaces() {
90
+ return [buildComputerPreviewSurface(this.preview)];
91
+ }
92
+ tools() {
93
+ return Object.keys(computerTools).map((name) => {
94
+ const { description, input } = computerTools[name];
95
+ const handle = this.handlers[name];
96
+ const handler = async (input, ctx) => { await this.jevKey(ctx); return handle(input, ctx); };
97
+ return defineTool({
98
+ name, description, inputSchema: input,
99
+ inputJsonSchema: zodToJsonSchema(input),
100
+ permission: { action: 'prompt' }, icon: 'workspace',
101
+ ...(LOOKING.has(name) ? { liveState: true } : {}),
102
+ ...(ENTRY.has(name) ? { alwaysLoaded: true } : {}),
103
+ // Only a run of steps leaves the machine: it asks Jev where each element is.
104
+ isolation: { capabilities: { subprocess: true, commands: [this.profile.helperPath], net: name === 'computer_run' ? { mode: 'allowlist', hosts: [JEV_HOST] } : { mode: 'none' } } },
105
+ handler,
106
+ });
107
+ });
108
+ }
109
+ async release(sessionId, turnId) {
110
+ if (turnId === undefined)
111
+ this.keyed.delete(sessionId);
112
+ if (turnId === undefined)
113
+ this.asked.delete(sessionId);
114
+ if (turnId === undefined)
115
+ this.reached.delete(sessionId);
116
+ const closing = [];
117
+ for (const [key, turn] of this.turns) {
118
+ if (turn.sessionId !== sessionId || (turnId !== undefined && key !== turnKey(sessionId, turnId)))
119
+ continue;
120
+ this.turns.delete(key);
121
+ turn.dispose();
122
+ closing.push(turn.transport.close());
123
+ this.controls.detach(turn.sessionId, turn.turnId);
124
+ }
125
+ await Promise.all(closing);
126
+ }
127
+ handlers = {
128
+ computer_status: async (input, ctx) => {
129
+ const { turn, result } = await this.call(ctx, 'status', {}, statusResultSchema);
130
+ // A model fills this optional field even when nothing is missing; a pane is opened only for a missing permission.
131
+ const missing = input.open_settings === 'accessibility' ? !result.permissions.accessibility : !result.permissions.screenRecording;
132
+ if (!input.open_settings || !missing)
133
+ return { platform: this.profile.platform, ...result };
134
+ const opened = z.object({ opened: z.boolean() }).parse(await turn.transport.request('permissions.request', { kind: input.open_settings }, ctx.signal));
135
+ return { platform: this.profile.platform, ...result, settings_opened: opened.opened };
136
+ },
137
+ computer_list_apps: async (input, ctx) => {
138
+ const { result } = await this.call(ctx, 'list_apps', input, listAppsResultSchema);
139
+ const granted = new Map((await this.access(ctx)).apps.map((app) => [app.id, app.tier]));
140
+ return { ...result, apps: result.apps.map((app) => ({ ...app, ...(granted.has(app.id) ? { access: granted.get(app.id) } : {}) })) };
141
+ },
142
+ computer_request_access: async (input, ctx) => {
143
+ const { result } = await this.call(ctx, 'resolve_apps', { names: input.apps }, resolveAppsResultSchema);
144
+ const elevated = new Set((input.full_access ?? []).map((name) => name.toLowerCase()));
145
+ const granted = new Map();
146
+ const unresolved = [];
147
+ const asked = this.asked.get(ctx.sessionId) ?? new Map();
148
+ this.asked.set(ctx.sessionId, asked);
149
+ for (const app of result.apps) {
150
+ if (app.status === 'resolved')
151
+ asked.set(app.request.toLowerCase(), app.id);
152
+ if (app.status === 'not_found') {
153
+ unresolved.push({ app: app.request, reason: 'not_found' });
154
+ continue;
155
+ }
156
+ if (app.status === 'ambiguous') {
157
+ unresolved.push({ app: app.request, reason: 'ambiguous', candidates: app.candidates });
158
+ continue;
159
+ }
160
+ const tier = elevated.has(app.request.toLowerCase()) ? 'full' : defaultTier(categorize(app));
161
+ const previous = granted.get(app.id);
162
+ granted.set(app.id, { id: app.id, name: app.name, tier: previous ? maxTier(previous.tier, tier) : tier });
163
+ }
164
+ return accessGrantSchema.parse({
165
+ kind: 'computer_access', granted: [...granted.values()], unresolved,
166
+ clipboard_read: input.clipboard_read ?? false, clipboard_write: input.clipboard_write ?? false,
167
+ system_key_combos: input.system_key_combos ?? false,
168
+ });
169
+ },
170
+ computer_get_app_state: async (input, ctx) => {
171
+ const grant = this.granted(ctx, await this.access(ctx), input.app, 'read');
172
+ const { turn, result } = await this.observe(ctx, grant, input.window_id);
173
+ const shown = `${grant.id}#routes`;
174
+ const routes = this.keyed.get(ctx.sessionId) && !turn.hinted.has(shown) ? describeRoutes(await this.memory.read(grant.id)) : undefined;
175
+ turn.hinted.add(shown);
176
+ return this.present(turn, grant, result, routes ? [routes] : [], input.disable_diff);
177
+ },
178
+ computer_run: async (input, ctx) => {
179
+ const grant = this.granted(ctx, await this.access(ctx), input.app, 'read');
180
+ const apiKey = await this.jevKey(ctx);
181
+ // The run looks without pictures except around clicks; the model gets one with the state at the end.
182
+ const { turn, result: initial } = await this.observe(ctx, grant, undefined, !apiKey || pictured(input.steps[0]));
183
+ if (!apiKey) {
184
+ return this.present(turn, grant, initial, [`computer_run is off: there is no TypeSafe key (secret ${JEV_SECRET}), or Jev is switched off (secret ${JEV_OFF}). Nothing was done. Carry out the steps with the single tools on the state below.`]);
185
+ }
186
+ const learned = await this.memory.read(grant.id);
187
+ const report = await runSteps(input.goal, input.steps, initial, {
188
+ ask: this.jev(apiKey), signal: ctx.signal, known: (step, tree) => recall(learned, step, tree), guess: (step, tree) => guess(learned, step, tree),
189
+ selectAll: this.profile.platform === 'darwin' ? 'super+a' : 'ctrl+a',
190
+ observe: async (picture) => (await this.observe(ctx, grant, undefined, picture === true)).result,
191
+ act: async (step, wait) => (await this.perform(input.app, step, ctx, undefined, wait)).result,
192
+ ...(this.profile.platform === 'darwin' ? {
193
+ batch: (actions, picture) => this.performAll(input.app, actions, ctx, picture),
194
+ readText: async () => {
195
+ const allowed = (await this.access(ctx)).apps.map((app) => app.id);
196
+ return (await this.call(ctx, 'read_text', { app: grant.id, allowed }, readTextResultSchema, grant.name)).result.lines;
197
+ },
198
+ } : {}),
199
+ });
200
+ turn.progress.forget(grant.id);
201
+ await traceRun(process.env.MOXXY_JEV_TRACE, {
202
+ app: grant.name, goal: input.goal, steps: input.steps.length, ms: report.ms, asks: report.asks, time: report.time,
203
+ outcomes: report.outcomes.map((outcome) => outcome.status),
204
+ });
205
+ await this.learn(turn, grant.id, input.goal, input.steps, report);
206
+ const final = report.state.screenshot || report.state.screenshotUnavailable ? report.state : (await this.observe(ctx, grant)).result;
207
+ return this.present(turn, grant, final, [describeRun(report, input.steps)]);
208
+ },
209
+ computer_click: (input, ctx) => this.act(input, 'click', ctx),
210
+ computer_type_text: (input, ctx) => this.act(input, 'type_text', ctx),
211
+ computer_press_key: (input, ctx) => this.act(input, 'press_key', ctx),
212
+ computer_scroll: (input, ctx) => this.act(input, 'scroll', ctx),
213
+ computer_drag: (input, ctx) => this.act(input, 'drag', ctx),
214
+ computer_set_value: (input, ctx) => this.act(input, 'set_value', ctx),
215
+ computer_perform_secondary_action: (input, ctx) => this.act(input, 'perform_secondary_action', ctx),
216
+ computer_zoom: async (input, ctx) => {
217
+ const access = await this.access(ctx);
218
+ const grant = this.granted(ctx, access, input.app, 'read');
219
+ const params = { region: input.region, app: grant.id, allowed: access.apps.map((app) => app.id) };
220
+ const { result } = await this.call(ctx, 'zoom', params, imageSchema, grant.name);
221
+ return withImage(`Zoomed region [${input.region.join(', ')}] at ${result.width}x${result.height}. Reading aid only: coordinates keep referring to the screenshot, never to this image.`, result);
222
+ },
223
+ };
224
+ observe(ctx, grant, windowId, picture = true) {
225
+ const web = categorize(grant) === 'browser' ? { web: true } : {};
226
+ return this.call(ctx, 'get_app_state', { app: grant.id, ...(windowId ? { window_id: windowId } : {}), screenshot: picture, ...web }, appStateSchema, grant.name);
227
+ }
228
+ /**
229
+ * What the conversation may use: the grants of the access dialog, then the apps approved through a run at their
230
+ * default level. Auto-approve raises none of them: it skips the prompt for a request of full control, not the
231
+ * policy that request goes through.
232
+ */
233
+ async access(ctx) {
234
+ const access = accessFromLog(ctx.log);
235
+ const reached = this.reached.get(ctx.sessionId) ?? new Map();
236
+ this.reached.set(ctx.sessionId, reached);
237
+ const asked = this.asked.get(ctx.sessionId) ?? new Map();
238
+ this.asked.set(ctx.sessionId, asked);
239
+ const held = (name) => access.apps.some((grant) => [grant.id, grant.name].some((known) => known.toLowerCase() === name) || grant.id === asked.get(name));
240
+ const names = approvedThroughRun(ctx.log).map((name) => name.toLowerCase()).filter((name) => !held(name));
241
+ const unplaced = names.filter((name) => !reached.has(name));
242
+ if (unplaced.length > 0) {
243
+ const { result } = await this.call(ctx, 'resolve_apps', { names: unplaced }, resolveAppsResultSchema);
244
+ for (const app of result.apps) {
245
+ reached.set(app.request.toLowerCase(), app.status === 'resolved' ? { id: app.id, name: app.name, tier: defaultTier(categorize(app)) } : null);
246
+ }
247
+ }
248
+ const apps = new Map(access.apps.map((grant) => [grant.id, grant]));
249
+ for (const name of names) {
250
+ const grant = reached.get(name);
251
+ if (!grant)
252
+ continue;
253
+ asked.set(name, grant.id);
254
+ if (!apps.has(grant.id))
255
+ apps.set(grant.id, grant);
256
+ }
257
+ return { apps: [...apps.values()], flags: access.flags };
258
+ }
259
+ /** The grant for `app`, which may be the name it was asked for under instead of the one it has on this system. */
260
+ granted(ctx, access, app, needed) {
261
+ const known = access.apps.some((grant) => [grant.id, grant.name].some((name) => name.toLowerCase() === app.toLowerCase()));
262
+ return checkAccess(access, known ? app : this.asked.get(ctx.sessionId)?.get(app.toLowerCase()) ?? app, needed);
263
+ }
264
+ /** One action on an app, behind the grant's level and the key rules. */
265
+ async perform(app, step, ctx, beforeSending = () => undefined, wait = { picture: true }) {
266
+ const access = await this.access(ctx);
267
+ const grant = this.granted(ctx, access, app, requiredTier(step));
268
+ checkKeys(step, access.flags, this.profile.platform);
269
+ // Only the macOS helper knows how to wait for an effect or a typed text, and how to leave the picture out of the state after an action.
270
+ const darwin = this.profile.platform === 'darwin';
271
+ const awaited = darwin ? { ...(wait.until?.length ? { until: wait.until } : {}) } : {};
272
+ const pictured = !wait.picture && darwin ? { screenshot: false } : {};
273
+ const params = { app: grant.id, action: forHelper(step), allowed: access.apps.map((granted) => granted.id), ...awaited, ...pictured };
274
+ beforeSending(await this.turn(ctx), grant);
275
+ return { grant, ...(await this.call(ctx, 'act', params, actResultSchema, grant.name)) };
276
+ }
277
+ /** Several actions on one app in one helper request, each behind the grant's level and the key rules. */
278
+ async performAll(app, steps, ctx, picture) {
279
+ const access = await this.access(ctx);
280
+ for (const step of steps) {
281
+ this.granted(ctx, access, app, requiredTier(step));
282
+ checkKeys(step, access.flags, this.profile.platform);
283
+ }
284
+ const grant = this.granted(ctx, access, app, 'read');
285
+ const params = { app: grant.id, actions: steps.map(forHelper), allowed: access.apps.map((granted) => granted.id), screenshot: picture };
286
+ return (await this.call(ctx, 'batch', params, batchResultSchema, grant.name)).result;
287
+ }
288
+ async act(input, action, ctx) {
289
+ const { app, ...fields } = input;
290
+ const step = { action, ...fields };
291
+ const signature = JSON.stringify(step);
292
+ const { turn, grant, result } = await this.perform(app, step, ctx, (current, granted) => current.progress.check(granted.id, signature));
293
+ const { state } = result;
294
+ if (!state)
295
+ return describeResult(result.result);
296
+ await this.learnFromModel(turn, grant.id, step, result.result, state);
297
+ const [outcome, note] = this.judge(turn, grant.id, signature, result.result, state);
298
+ return this.present(turn, grant, state, [describeResult(outcome), ...note]);
299
+ }
300
+ /** What a run teaches: the element of every verified step, a memory that proved stale, and a route that reached its end. */
301
+ async learn(turn, app, goal, steps, report) {
302
+ const targets = [];
303
+ for (const [index, outcome] of report.outcomes.entries()) {
304
+ const step = steps[index];
305
+ const target = step ? targetOf(step) : undefined;
306
+ if (!step || target === undefined)
307
+ continue;
308
+ if (outcome.used) {
309
+ const { effect, ...element } = outcome.used;
310
+ targets.push({ do: step.do, target, ...element, ...(effect ? { effect: [...effect] } : {}) });
311
+ }
312
+ else if (outcome.stale)
313
+ await this.memory.forget(app, { do: step.do, target });
314
+ if (outcome.status === 'failed')
315
+ turn.failed.set(app, step);
316
+ }
317
+ const finished = report.outcomes.length === steps.length && report.outcomes.every((outcome) => outcome.status !== 'failed');
318
+ if (finished)
319
+ turn.failed.delete(app);
320
+ const route = finished && report.outcomes.some((outcome) => outcome.status === 'verified') ? { goal, steps } : undefined;
321
+ if (targets.length > 0 || route)
322
+ await this.memory.learn(app, { targets, ...(route ? { route } : {}) });
323
+ }
324
+ /** After a run could not do a step, the element the model then uses the same way, with effect, is that step's element. */
325
+ async learnFromModel(turn, app, action, result, state) {
326
+ const step = turn.failed.get(app);
327
+ if (!step || step.target === undefined)
328
+ return;
329
+ turn.failed.delete(app);
330
+ const index = action.element_index;
331
+ if (SINGLE[step.do] !== action.action || index === undefined || result.outcome !== 'delivered')
332
+ return;
333
+ const before = turn.trees.get(app);
334
+ const element = before?.elements.find((candidate) => candidate.index === index);
335
+ // A click that changed only the picture may have lit the element up and done nothing else.
336
+ if (!before || !element || sameElements(before, state.tree))
337
+ return;
338
+ await this.memory.learn(app, { targets: [{ do: step.do, target: step.target, key: element.key, label: labelOf(element), way: 0 }] });
339
+ }
340
+ /** A delivered action that leaves the app looking the same twice in a row did not work: say so. */
341
+ judge(turn, app, signature, result, state) {
342
+ if (result.outcome === 'ineffective') {
343
+ // The helper saw no change itself: that counts toward the limit like an unchanged state.
344
+ turn.progress.record(app, signature, false);
345
+ return [result, []];
346
+ }
347
+ if (result.outcome !== 'delivered') {
348
+ turn.progress.forget(app);
349
+ return [result, []];
350
+ }
351
+ const before = turn.seen.get(app);
352
+ const unchanged = turn.progress.record(app, signature, before === undefined || before !== fingerprint(state.tree, state.screenshot));
353
+ if (unchanged >= 2)
354
+ return [{ outcome: 'ineffective', code: 'no_progress' }, []];
355
+ return [result, unchanged === 1 ? ['Nothing visible changed after this action: the tree and screenshot are the same as before it.'] : []];
356
+ }
357
+ present(turn, grant, state, prefix, disableDiff = false) {
358
+ this.controls.target(turn.sessionId, turn.turnId, { app: grant.name, window: state.tree.window ?? null });
359
+ const view = disableDiff ? { kind: 'full', text: formatTree(state.tree) } : diffTrees(turn.trees.get(grant.id), state.tree);
360
+ turn.trees.set(grant.id, state.tree);
361
+ turn.seen.set(grant.id, fingerprint(state.tree, state.screenshot));
362
+ const hint = turn.hinted.has(grant.id) ? undefined : hintFor(this.hints, grant);
363
+ turn.hinted.add(grant.id);
364
+ const panel = `${grant.id}#file-panel`;
365
+ const panelNote = state.filePanel && !turn.hinted.has(panel) ? [FILE_PANEL_NOTE] : [];
366
+ if (state.filePanel)
367
+ turn.hinted.add(panel);
368
+ const parts = [...prefix, ...(hint ? [`Notes for ${grant.name}:\n${hint}`] : []), ...panelNote, wrapUntrusted(view.text, grant.name)];
369
+ if (state.screenshot)
370
+ parts.push(`Screenshot ${state.screenshot.width}x${state.screenshot.height}: x and y in actions are pixels of this image.`);
371
+ else if (state.screenshotUnavailable)
372
+ parts.push(`No screenshot: ${state.screenshotUnavailable}`);
373
+ if (state.contentPending)
374
+ parts.push('The page content is not readable yet (still loading, or the window is hidden): look again before you report what the page says.');
375
+ return withImage(parts.join('\n\n'), state.screenshot);
376
+ }
377
+ async call(ctx, method, params, schema, target) {
378
+ const turn = await this.turn(ctx);
379
+ this.controls.activity(ctx.sessionId, ctx.turnId, 'recovering', target);
380
+ let raw;
381
+ try {
382
+ raw = await turn.transport.request(method, params, ctx.signal);
383
+ }
384
+ catch (error) {
385
+ throw asComputerUseError(error);
386
+ }
387
+ finally {
388
+ this.controls.activity(ctx.sessionId, ctx.turnId, 'idle');
389
+ }
390
+ const parsed = schema.safeParse(raw);
391
+ if (!parsed.success) {
392
+ const [issue] = parsed.error.issues;
393
+ const where = issue ? ` (${issue.path.join('.')}: ${issue.message})` : '';
394
+ throw new ComputerUseError('helper_failed', `The helper returned an invalid ${method} result${where}`);
395
+ }
396
+ return { turn, result: parsed.data };
397
+ }
398
+ async turn(ctx) {
399
+ ctx.signal.throwIfAborted();
400
+ const key = turnKey(ctx.sessionId, ctx.turnId);
401
+ const previous = this.turns.get(key);
402
+ if (previous && !previous.transport.closed)
403
+ return previous;
404
+ if (previous)
405
+ throw new Error('Computer Use stopped for this turn. Start a new turn to regain control and observe again.');
406
+ try {
407
+ await this.profile.verifyHelper();
408
+ }
409
+ catch {
410
+ throw new Error(this.profile.unavailableMessage);
411
+ }
412
+ ctx.signal.throwIfAborted();
413
+ // No await between the final lookup and registration: parallel calls share one child.
414
+ const existing = this.turns.get(key);
415
+ if (existing)
416
+ return existing;
417
+ const controlState = controlStateSchemaFor(this.profile.protocolVersion);
418
+ const events = contractEventsFor(this.profile.protocolVersion);
419
+ // Preview requests carry a signal that never aborts: an aborted request ends the helper.
420
+ const idle = new AbortController().signal;
421
+ const source = {
422
+ codecs: this.profile.previewCodecs ?? ['jpeg'],
423
+ // A helper that only makes pictures does not know the `codec` field.
424
+ start: async (fps, codec) => { await transport.request('preview.start', codec === 'jpeg' ? { fps } : { fps, codec }, idle); },
425
+ stop: async () => { if (!transport.closed)
426
+ await transport.request('preview.stop', {}, idle); },
427
+ keyframe: async () => { if (!transport.closed)
428
+ await transport.request('preview.keyframe', {}, idle); },
429
+ };
430
+ const transport = new HelperTransport(this.profile.helperPath, [...this.profile.helperArgs, '--parent', String(process.pid)], {
431
+ protocolVersion: this.profile.protocolVersion,
432
+ timeoutMs: this.profile.timeoutMs ?? 15_000,
433
+ events,
434
+ onEvent: (event) => {
435
+ if (event.event === 'control_state')
436
+ this.controls.update(ctx.sessionId, ctx.turnId, controlState.parse(event).state);
437
+ else if (event.event === 'cursor')
438
+ this.controls.cursor(ctx.sessionId, ctx.turnId, events.cursor.parse(event).cursor);
439
+ else if (event.event === 'preview_frame') {
440
+ const frame = events.preview_frame.parse(event);
441
+ if (frame.error)
442
+ this.preview.failed(source, frame.error);
443
+ else
444
+ this.preview.frame(source, frame.image);
445
+ }
446
+ else if (event.event === 'preview_chunk') {
447
+ const { version: _version, event: _event, ...chunk } = events.preview_chunk.parse(event);
448
+ this.preview.chunk(source, chunk);
449
+ }
450
+ },
451
+ });
452
+ const abort = () => { void this.release(ctx.sessionId, ctx.turnId); };
453
+ ctx.signal.addEventListener('abort', abort, { once: true });
454
+ const detachPreview = this.preview.attach(source);
455
+ // A helper that stopped or died has no picture to show any more.
456
+ void transport.done.then(detachPreview);
457
+ const turn = {
458
+ sessionId: ctx.sessionId, turnId: ctx.turnId, transport, trees: new Map(), seen: new Map(), progress: new ProgressTracker(), hinted: new Set(), failed: new Map(),
459
+ dispose: () => { ctx.signal.removeEventListener('abort', abort); detachPreview(); },
460
+ };
461
+ this.turns.set(key, turn);
462
+ this.controls.attach(ctx.sessionId, ctx.turnId, transport);
463
+ return turn;
464
+ }
465
+ }
466
+ //# sourceMappingURL=backend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.js","sourceRoot":"","sources":["../../src/backend/backend.ts"],"names":[],"mappings":"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"}