@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.
- package/bin/win32-x64/moxxy-computer.exe +0 -0
- package/bin/win32-x64/moxxy-computer.exe.json +1 -1
- package/dist/backend/access.d.ts +129 -0
- package/dist/backend/access.d.ts.map +1 -0
- package/dist/backend/access.js +158 -0
- package/dist/backend/access.js.map +1 -0
- package/dist/backend/app-hints.d.ts +14 -0
- package/dist/backend/app-hints.d.ts.map +1 -0
- package/dist/backend/app-hints.js +30 -0
- package/dist/backend/app-hints.js.map +1 -0
- package/dist/backend/backend.d.ts +70 -0
- package/dist/backend/backend.d.ts.map +1 -0
- package/dist/backend/backend.js +466 -0
- package/dist/backend/backend.js.map +1 -0
- package/dist/backend/rpc.d.ts +1438 -0
- package/dist/backend/rpc.d.ts.map +1 -0
- package/dist/backend/rpc.js +75 -0
- package/dist/backend/rpc.js.map +1 -0
- package/dist/backend/turn-controls.d.ts +20 -0
- package/dist/backend/turn-controls.d.ts.map +1 -0
- package/dist/backend/turn-controls.js +115 -0
- package/dist/backend/turn-controls.js.map +1 -0
- package/dist/contract/guidance.d.ts +12 -0
- package/dist/contract/guidance.d.ts.map +1 -0
- package/dist/contract/guidance.js +42 -0
- package/dist/contract/guidance.js.map +1 -0
- package/dist/contract/image.d.ts +29 -0
- package/dist/contract/image.d.ts.map +1 -0
- package/dist/contract/image.js +46 -0
- package/dist/contract/image.js.map +1 -0
- package/dist/contract/keys.d.ts +15 -0
- package/dist/contract/keys.d.ts.map +1 -0
- package/dist/contract/keys.js +118 -0
- package/dist/contract/keys.js.map +1 -0
- package/dist/contract/outcome.d.ts +61 -0
- package/dist/contract/outcome.d.ts.map +1 -0
- package/dist/contract/outcome.js +63 -0
- package/dist/contract/outcome.js.map +1 -0
- package/dist/contract/progress.d.ts +27 -0
- package/dist/contract/progress.d.ts.map +1 -0
- package/dist/contract/progress.js +36 -0
- package/dist/contract/progress.js.map +1 -0
- package/dist/contract/tools.d.ts +338 -0
- package/dist/contract/tools.d.ts.map +1 -0
- package/dist/contract/tools.js +195 -0
- package/dist/contract/tools.js.map +1 -0
- package/dist/contract/untrusted.d.ts +3 -0
- package/dist/contract/untrusted.d.ts.map +1 -0
- package/dist/contract/untrusted.js +8 -0
- package/dist/contract/untrusted.js.map +1 -0
- package/dist/helper/artifact.d.ts +41 -0
- package/dist/helper/artifact.d.ts.map +1 -0
- package/dist/helper/artifact.js +189 -0
- package/dist/helper/artifact.js.map +1 -0
- package/dist/helper/protocol.d.ts +80 -0
- package/dist/helper/protocol.d.ts.map +1 -0
- package/dist/helper/protocol.js +49 -0
- package/dist/helper/protocol.js.map +1 -0
- package/dist/helper/transport.d.ts +43 -0
- package/dist/helper/transport.d.ts.map +1 -0
- package/dist/{windows → helper}/transport.js +45 -19
- package/dist/helper/transport.js.map +1 -0
- package/dist/index.d.ts +9 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -42
- package/dist/index.js.map +1 -1
- package/dist/jev/ladder.d.ts +32 -0
- package/dist/jev/ladder.d.ts.map +1 -0
- package/dist/jev/ladder.js +66 -0
- package/dist/jev/ladder.js.map +1 -0
- package/dist/jev/memory.d.ts +11 -0
- package/dist/jev/memory.d.ts.map +1 -0
- package/dist/jev/memory.js +16 -0
- package/dist/jev/memory.js.map +1 -0
- package/dist/jev/run.d.ts +93 -0
- package/dist/jev/run.d.ts.map +1 -0
- package/dist/jev/run.js +403 -0
- package/dist/jev/run.js.map +1 -0
- package/dist/jev/train.d.ts +97 -0
- package/dist/jev/train.d.ts.map +1 -0
- package/dist/jev/train.js +28 -0
- package/dist/jev/train.js.map +1 -0
- package/dist/linux/profile.d.ts +6 -0
- package/dist/linux/profile.d.ts.map +1 -0
- package/dist/linux/profile.js +21 -0
- package/dist/linux/profile.js.map +1 -0
- package/dist/macos/profile.d.ts +5 -0
- package/dist/macos/profile.d.ts.map +1 -0
- package/dist/macos/profile.js +17 -0
- package/dist/macos/profile.js.map +1 -0
- package/dist/preview/controller.d.ts +127 -0
- package/dist/preview/controller.d.ts.map +1 -0
- package/dist/preview/controller.js +203 -0
- package/dist/preview/controller.js.map +1 -0
- package/dist/preview/surface.d.ts +9 -0
- package/dist/preview/surface.d.ts.map +1 -0
- package/dist/preview/surface.js +50 -0
- package/dist/preview/surface.js.map +1 -0
- package/dist/windows/maintenance.d.ts +1 -1
- package/dist/windows/maintenance.d.ts.map +1 -1
- package/dist/windows/maintenance.js +6 -5
- package/dist/windows/maintenance.js.map +1 -1
- package/dist/windows/profile.d.ts +5 -0
- package/dist/windows/profile.d.ts.map +1 -0
- package/dist/windows/profile.js +17 -0
- package/dist/windows/profile.js.map +1 -0
- package/learned/README.md +26 -0
- package/learned/cases/com.apple.calculator.json +395 -0
- package/learned/cases/com.apple.finder.json +115 -0
- package/learned/cases/com.apple.safari.json +112 -0
- package/learned/cases/com.apple.systempreferences.json +255 -0
- package/learned/com.apple.calculator-eace95fc.json +334 -0
- package/learned/com.apple.finder-27cf6ce8.json +260 -0
- package/learned/com.apple.safari-7cd9df4f.json +143 -0
- package/learned/com.apple.systempreferences-02cf0b8b.json +535 -0
- package/package.json +13 -7
- package/scripts/promote-learned.mjs +8 -0
- package/scripts/summarize-trial.mjs +68 -0
- package/scripts/train-learned.mjs +64 -0
- package/skills/computer-apps/blender.md +29 -0
- package/skills/computer-apps/browsers.md +50 -0
- package/skills/computer-apps/design-tools.md +37 -0
- package/skills/computer-apps/finder.md +23 -0
- package/skills/computer-apps/office.md +46 -0
- package/skills/computer-apps/video-editors.md +44 -0
- package/skills/computer-control.md +154 -191
- package/src/backend/access.test.ts +158 -0
- package/src/backend/access.ts +168 -0
- package/src/backend/app-hints.test.ts +59 -0
- package/src/backend/app-hints.ts +39 -0
- package/src/backend/backend.test.ts +725 -0
- package/src/backend/backend.ts +482 -0
- package/src/backend/contract-helper.fixture.mjs +138 -0
- package/src/backend/helper.fixture.ts +38 -0
- package/src/backend/rpc.ts +90 -0
- package/src/backend/turn-controls.test.ts +178 -0
- package/src/backend/turn-controls.ts +120 -0
- package/src/contract/guidance.test.ts +75 -0
- package/src/contract/guidance.ts +48 -0
- package/src/contract/image.test.ts +74 -0
- package/src/contract/image.ts +54 -0
- package/src/contract/keys.test.ts +103 -0
- package/src/contract/keys.ts +117 -0
- package/src/contract/outcome.test.ts +71 -0
- package/src/contract/outcome.ts +72 -0
- package/src/contract/progress.test.ts +56 -0
- package/src/contract/progress.ts +43 -0
- package/src/contract/tools.test.ts +210 -0
- package/src/contract/tools.ts +212 -0
- package/src/contract/untrusted.test.ts +20 -0
- package/src/contract/untrusted.ts +8 -0
- package/src/helper/artifact.test.ts +131 -0
- package/src/helper/artifact.ts +182 -0
- package/src/helper/protocol.test.ts +29 -0
- package/src/helper/protocol.ts +50 -0
- package/src/{windows → helper}/transport.test.ts +76 -19
- package/src/{windows → helper}/transport.ts +54 -16
- package/src/index.test.ts +112 -0
- package/src/index.ts +36 -53
- package/src/jev/ladder.test.ts +113 -0
- package/src/jev/ladder.ts +88 -0
- package/src/jev/memory.ts +20 -0
- package/src/jev/run.test.ts +700 -0
- package/src/jev/run.ts +443 -0
- package/src/jev/train.test.ts +40 -0
- package/src/jev/train.ts +41 -0
- package/src/linux/helper.test.ts +481 -0
- package/src/linux/profile.ts +25 -0
- package/src/macos/helper.test.ts +988 -0
- package/src/macos/profile.ts +19 -0
- package/src/preview/controller.test.ts +308 -0
- package/src/preview/controller.ts +262 -0
- package/src/preview/surface.test.ts +68 -0
- package/src/preview/surface.ts +45 -0
- package/src/skill.test.ts +34 -0
- package/src/windows/maintenance.ts +8 -7
- package/src/windows/profile.ts +19 -0
- package/dist/shell.d.ts +0 -56
- package/dist/shell.d.ts.map +0 -1
- package/dist/shell.js +0 -189
- package/dist/shell.js.map +0 -1
- package/dist/temporary-files.d.ts +0 -2
- package/dist/temporary-files.d.ts.map +0 -1
- package/dist/temporary-files.js +0 -10
- package/dist/temporary-files.js.map +0 -1
- package/dist/tools/applescript.d.ts +0 -2
- package/dist/tools/applescript.d.ts.map +0 -1
- package/dist/tools/applescript.js +0 -50
- package/dist/tools/applescript.js.map +0 -1
- package/dist/tools/click.d.ts +0 -2
- package/dist/tools/click.d.ts.map +0 -1
- package/dist/tools/click.js +0 -58
- package/dist/tools/click.js.map +0 -1
- package/dist/tools/clipboard.d.ts +0 -2
- package/dist/tools/clipboard.d.ts.map +0 -1
- package/dist/tools/clipboard.js +0 -71
- package/dist/tools/clipboard.js.map +0 -1
- package/dist/tools/key.d.ts +0 -11
- package/dist/tools/key.d.ts.map +0 -1
- package/dist/tools/key.js +0 -143
- package/dist/tools/key.js.map +0 -1
- package/dist/tools/open.d.ts +0 -2
- package/dist/tools/open.d.ts.map +0 -1
- package/dist/tools/open.js +0 -91
- package/dist/tools/open.js.map +0 -1
- package/dist/tools/screenshot.d.ts +0 -2
- package/dist/tools/screenshot.d.ts.map +0 -1
- package/dist/tools/screenshot.js +0 -162
- package/dist/tools/screenshot.js.map +0 -1
- package/dist/tools/type.d.ts +0 -8
- package/dist/tools/type.d.ts.map +0 -1
- package/dist/tools/type.js +0 -65
- package/dist/tools/type.js.map +0 -1
- package/dist/windows/artifact.d.ts +0 -3
- package/dist/windows/artifact.d.ts.map +0 -1
- package/dist/windows/artifact.js +0 -57
- package/dist/windows/artifact.js.map +0 -1
- package/dist/windows/backend.d.ts +0 -11
- package/dist/windows/backend.d.ts.map +0 -1
- package/dist/windows/backend.js +0 -122
- package/dist/windows/backend.js.map +0 -1
- package/dist/windows/contracts.d.ts +0 -1627
- package/dist/windows/contracts.d.ts.map +0 -1
- package/dist/windows/contracts.js +0 -137
- package/dist/windows/contracts.js.map +0 -1
- package/dist/windows/control-service.d.ts +0 -12
- package/dist/windows/control-service.d.ts.map +0 -1
- package/dist/windows/control-service.js +0 -65
- package/dist/windows/control-service.js.map +0 -1
- package/dist/windows/guidance.d.ts +0 -3
- package/dist/windows/guidance.d.ts.map +0 -1
- package/dist/windows/guidance.js +0 -20
- package/dist/windows/guidance.js.map +0 -1
- package/dist/windows/protocol.d.ts +0 -9
- package/dist/windows/protocol.d.ts.map +0 -1
- package/dist/windows/protocol.js +0 -32
- package/dist/windows/protocol.js.map +0 -1
- package/dist/windows/transport.d.ts +0 -23
- package/dist/windows/transport.d.ts.map +0 -1
- package/dist/windows/transport.js.map +0 -1
- package/src/shell.test.ts +0 -186
- package/src/shell.ts +0 -213
- package/src/temporary-files.test.ts +0 -18
- package/src/temporary-files.ts +0 -9
- package/src/tools/applescript-serialize.test.ts +0 -74
- package/src/tools/applescript.ts +0 -53
- package/src/tools/click.ts +0 -60
- package/src/tools/clipboard.ts +0 -72
- package/src/tools/key.ts +0 -155
- package/src/tools/open.ts +0 -96
- package/src/tools/screenshot.test.ts +0 -137
- package/src/tools/screenshot.ts +0 -180
- package/src/tools/type.ts +0 -68
- package/src/tools.test.ts +0 -94
- package/src/windows/action-contracts.test.ts +0 -13
- package/src/windows/artifact.test.ts +0 -16
- package/src/windows/artifact.ts +0 -57
- package/src/windows/backend.test.ts +0 -41
- package/src/windows/backend.ts +0 -122
- package/src/windows/contracts.test.ts +0 -81
- package/src/windows/contracts.ts +0 -143
- package/src/windows/control-service.test.ts +0 -58
- package/src/windows/control-service.ts +0 -68
- package/src/windows/guidance.test.ts +0 -29
- package/src/windows/guidance.ts +0 -21
- package/src/windows/model-contract.test.ts +0 -37
- package/src/windows/protocol.ts +0 -27
- package/src/windows/text-contracts.test.ts +0 -14
- 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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"}
|