@anionex/dsh-computer-use 0.1.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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.i18n.yaml +6 -0
  3. package/README.md +307 -0
  4. package/README.zh.md +307 -0
  5. package/assets/computer-use-fixture.png +0 -0
  6. package/assets/cursor.png +0 -0
  7. package/cordis.patch.yml +13 -0
  8. package/docs/interaction-policy.i18n.yaml +4 -0
  9. package/docs/interaction-policy.md +140 -0
  10. package/docs/interaction-policy.zh.md +140 -0
  11. package/lib/approval-policy.js +12 -0
  12. package/lib/approval-policy.js.map +1 -0
  13. package/lib/artifacts.js +79 -0
  14. package/lib/artifacts.js.map +1 -0
  15. package/lib/backend.js +3 -0
  16. package/lib/backend.js.map +1 -0
  17. package/lib/client.js +349 -0
  18. package/lib/client.js.map +1 -0
  19. package/lib/config.js +120 -0
  20. package/lib/config.js.map +1 -0
  21. package/lib/confirmations.js +99 -0
  22. package/lib/confirmations.js.map +1 -0
  23. package/lib/diff.js +58 -0
  24. package/lib/diff.js.map +1 -0
  25. package/lib/errors.js +22 -0
  26. package/lib/errors.js.map +1 -0
  27. package/lib/exposure.js +231 -0
  28. package/lib/exposure.js.map +1 -0
  29. package/lib/index.js +56 -0
  30. package/lib/index.js.map +1 -0
  31. package/lib/leases.js +259 -0
  32. package/lib/leases.js.map +1 -0
  33. package/lib/providers/macos.js +148 -0
  34. package/lib/providers/macos.js.map +1 -0
  35. package/lib/providers/native-helper.js +356 -0
  36. package/lib/providers/native-helper.js.map +1 -0
  37. package/lib/service.js +480 -0
  38. package/lib/service.js.map +1 -0
  39. package/lib/skill.js +119 -0
  40. package/lib/skill.js.map +1 -0
  41. package/lib/target-resolver.js +180 -0
  42. package/lib/target-resolver.js.map +1 -0
  43. package/lib/tools.js +493 -0
  44. package/lib/tools.js.map +1 -0
  45. package/lib/types/approval-policy.d.ts +13 -0
  46. package/lib/types/approval-policy.d.ts.map +1 -0
  47. package/lib/types/artifacts.d.ts +10 -0
  48. package/lib/types/artifacts.d.ts.map +1 -0
  49. package/lib/types/backend.d.ts +94 -0
  50. package/lib/types/backend.d.ts.map +1 -0
  51. package/lib/types/client/index.d.ts +78 -0
  52. package/lib/types/client/index.d.ts.map +1 -0
  53. package/lib/types/config.d.ts +75 -0
  54. package/lib/types/config.d.ts.map +1 -0
  55. package/lib/types/confirmations.d.ts +23 -0
  56. package/lib/types/confirmations.d.ts.map +1 -0
  57. package/lib/types/diff.d.ts +5 -0
  58. package/lib/types/diff.d.ts.map +1 -0
  59. package/lib/types/errors.d.ts +15 -0
  60. package/lib/types/errors.d.ts.map +1 -0
  61. package/lib/types/exposure.d.ts +30 -0
  62. package/lib/types/exposure.d.ts.map +1 -0
  63. package/lib/types/index.d.ts +21 -0
  64. package/lib/types/index.d.ts.map +1 -0
  65. package/lib/types/leases.d.ts +80 -0
  66. package/lib/types/leases.d.ts.map +1 -0
  67. package/lib/types/providers/macos.d.ts +15 -0
  68. package/lib/types/providers/macos.d.ts.map +1 -0
  69. package/lib/types/providers/native-helper.d.ts +36 -0
  70. package/lib/types/providers/native-helper.d.ts.map +1 -0
  71. package/lib/types/service.d.ts +52 -0
  72. package/lib/types/service.d.ts.map +1 -0
  73. package/lib/types/skill.d.ts +9 -0
  74. package/lib/types/skill.d.ts.map +1 -0
  75. package/lib/types/target-resolver.d.ts +38 -0
  76. package/lib/types/target-resolver.d.ts.map +1 -0
  77. package/lib/types/tools.d.ts +6 -0
  78. package/lib/types/tools.d.ts.map +1 -0
  79. package/lib/types/types.d.ts +246 -0
  80. package/lib/types/types.d.ts.map +1 -0
  81. package/lib/types/web.d.ts +32 -0
  82. package/lib/types/web.d.ts.map +1 -0
  83. package/lib/types.js +9 -0
  84. package/lib/types.js.map +1 -0
  85. package/lib/web.js +163 -0
  86. package/lib/web.js.map +1 -0
  87. package/native/macos/Sources/Fixture/main.swift +366 -0
  88. package/native/macos/Sources/Helper/CursorImage.swift +11 -0
  89. package/native/macos/Sources/Helper/CursorOverlay.swift +488 -0
  90. package/native/macos/Sources/Helper/TargetedPointer.swift +314 -0
  91. package/native/macos/Sources/Helper/main.swift +1140 -0
  92. package/native/macos/Sources/Monitor/main.swift +139 -0
  93. package/native/macos/bin/dsh-computer-use-helper +0 -0
  94. package/native/macos/manifest.json +14 -0
  95. package/package.json +128 -0
  96. package/scripts/build-client.mjs +24 -0
  97. package/scripts/build-native.mjs +158 -0
  98. package/scripts/check-native.mjs +92 -0
  99. package/scripts/model-e2e.mjs +291 -0
  100. package/scripts/session-transcript.mjs +117 -0
  101. package/scripts/validate.mjs +256 -0
  102. package/src/approval-policy.ts +16 -0
  103. package/src/artifacts.ts +93 -0
  104. package/src/backend.ts +103 -0
  105. package/src/client/index.tsx +539 -0
  106. package/src/config.ts +196 -0
  107. package/src/confirmations.ts +128 -0
  108. package/src/diff.ts +52 -0
  109. package/src/errors.ts +39 -0
  110. package/src/exposure.ts +236 -0
  111. package/src/index.ts +66 -0
  112. package/src/leases.ts +337 -0
  113. package/src/providers/macos.ts +185 -0
  114. package/src/providers/native-helper.ts +393 -0
  115. package/src/service.ts +583 -0
  116. package/src/skill.ts +123 -0
  117. package/src/target-resolver.ts +237 -0
  118. package/src/tools.ts +528 -0
  119. package/src/types.ts +299 -0
  120. package/src/web.ts +180 -0
@@ -0,0 +1,356 @@
1
+ /** Managed invocation and integrity checks for the fixed-command Swift helper. */
2
+ import { createHash } from 'node:crypto';
3
+ import { access, chmod, lstat, readFile, realpath, stat } from 'node:fs/promises';
4
+ import { constants } from 'node:fs';
5
+ import { dirname, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { ComputerUseError, computerUseError } from "../errors.js";
8
+ const CURSOR_READY_TIMEOUT_MS = 2_000;
9
+ const CURSOR_PROTOCOL_MAX_BYTES = 64 * 1024;
10
+ function collected(reader) {
11
+ if (reader === undefined)
12
+ return '';
13
+ const value = reader.readFrom(0);
14
+ if (value.lossy)
15
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native helper output exceeded its protocol limit');
16
+ return value.text;
17
+ }
18
+ async function sha256(path) {
19
+ return createHash('sha256').update(await readFile(path)).digest('hex');
20
+ }
21
+ function nativeRoot() {
22
+ return fileURLToPath(new URL('../../native/macos/', import.meta.url));
23
+ }
24
+ /** Invokes only the packaged JSON protocol through `ctx.subprocess`; no source or shell reaches the helper. */
25
+ export class NativeHelperClient {
26
+ ctx;
27
+ config;
28
+ managedRoot;
29
+ prepared;
30
+ cursor;
31
+ cursorStart;
32
+ constructor(ctx, config, managedRoot = nativeRoot()) {
33
+ this.ctx = ctx;
34
+ this.config = config;
35
+ this.managedRoot = managedRoot;
36
+ }
37
+ /** Absolute executable path selected by explicit override or the packaged managed binary. */
38
+ get helperPath() {
39
+ return this.prepared?.path ?? this.config.helper.path ?? resolve(this.managedRoot, 'bin', 'dsh-computer-use-helper');
40
+ }
41
+ /** Verify platform, file type, packaged hash, and executable mode before use. */
42
+ async prepare(signal) {
43
+ if (process.platform !== 'darwin') {
44
+ throw new ComputerUseError('COMPUTER_UNSUPPORTED_PLATFORM', `macOS provider cannot run on ${process.platform}`);
45
+ }
46
+ const managed = this.config.helper.path === undefined;
47
+ let path = this.helperPath;
48
+ let selectedInfo;
49
+ try {
50
+ selectedInfo = await lstat(path);
51
+ }
52
+ catch (error) {
53
+ const missing = error.code === 'ENOENT';
54
+ if (!managed || !missing || !this.config.helper.allowSourceBuild) {
55
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', `native helper is missing or unreadable: ${path}`, { cause: error });
56
+ }
57
+ await this.buildManaged(signal);
58
+ selectedInfo = await lstat(path);
59
+ }
60
+ if (!selectedInfo.isFile() || selectedInfo.isSymbolicLink()) {
61
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native helper must be a regular non-symbolic-link executable');
62
+ }
63
+ path = await realpath(path);
64
+ const digest = await sha256(path);
65
+ let version = 'external';
66
+ if (managed) {
67
+ const manifestPath = resolve(this.managedRoot, 'manifest.json');
68
+ const manifest = JSON.parse(await readFile(manifestPath, 'utf8'));
69
+ if (manifest.schemaVersion !== 1 || manifest.binary.path !== 'bin/dsh-computer-use-helper') {
70
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native helper manifest is malformed');
71
+ }
72
+ if (manifest.binary.sha256 !== digest) {
73
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native helper hash does not match native/macos/manifest.json');
74
+ }
75
+ version = manifest.helperVersion;
76
+ }
77
+ try {
78
+ await access(path, constants.X_OK);
79
+ }
80
+ catch (error) {
81
+ if (!managed) {
82
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', `external native helper is not executable: ${path}`, { cause: error });
83
+ }
84
+ try {
85
+ // npm-compatible tarballs normalize non-bin payloads to 0644. Restore
86
+ // only the owner's execute bit after the committed hash is verified.
87
+ await chmod(path, (selectedInfo.mode & 0o777) | 0o100);
88
+ await access(path, constants.X_OK);
89
+ }
90
+ catch (chmodError) {
91
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', `managed native helper cannot be marked executable: ${path}`, { cause: chmodError });
92
+ }
93
+ }
94
+ this.prepared = { path, version, sha256: digest };
95
+ return this.prepared;
96
+ }
97
+ /** Invoke one fixed helper command and parse its bounded JSON envelope. */
98
+ async invoke(request, signal) {
99
+ const prepared = this.prepared ?? await this.prepare(signal);
100
+ const timeout = AbortSignal.timeout(this.config.actionTimeoutMs);
101
+ const combined = AbortSignal.any([signal, timeout]);
102
+ const handle = this.ctx.subprocess.spawn({
103
+ argv: [prepared.path],
104
+ cwd: dirname(prepared.path),
105
+ stdio: {
106
+ stdin: { data: `${JSON.stringify({ protocolVersion: 1, ...request })}\n` },
107
+ stdout: { maxBytes: 4 * 1024 * 1024 },
108
+ stderr: { maxBytes: 64 * 1024 },
109
+ },
110
+ graceMs: 1000,
111
+ signal: combined,
112
+ env: {
113
+ LANG: process.env.LANG ?? 'en_US.UTF-8',
114
+ LC_ALL: process.env.LC_ALL ?? 'en_US.UTF-8',
115
+ },
116
+ });
117
+ let outcome;
118
+ try {
119
+ outcome = await handle.done;
120
+ }
121
+ catch (error) {
122
+ throw computerUseError(error, 'native helper failed to start');
123
+ }
124
+ if (combined.aborted) {
125
+ if (signal.aborted)
126
+ throw new ComputerUseError('COMPUTER_CANCELLED', 'native helper call was cancelled');
127
+ throw new ComputerUseError('COMPUTER_TIMEOUT', `native helper exceeded ${this.config.actionTimeoutMs} milliseconds`);
128
+ }
129
+ const stdout = collected(handle.collected.stdout);
130
+ const stderr = collected(handle.collected.stderr);
131
+ if (outcome.exitCode !== 0 && stdout.trim().length === 0) {
132
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', `native helper exited ${String(outcome.exitCode)}${stderr.trim().length === 0 ? '' : `: ${stderr.trim().slice(0, 1000)}`}`);
133
+ }
134
+ let envelope;
135
+ try {
136
+ envelope = JSON.parse(stdout);
137
+ }
138
+ catch (error) {
139
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native helper returned invalid JSON', { cause: error });
140
+ }
141
+ if (envelope.ok !== true)
142
+ throw new ComputerUseError(envelope.error.code, envelope.error.message.slice(0, 1000));
143
+ return envelope.value;
144
+ }
145
+ /** Send one best-effort command to the persistent, click-through Agent cursor overlay. */
146
+ async cursorCommand(command, signal) {
147
+ const prepared = this.prepared ?? await this.prepare(signal);
148
+ const cursor = await this.getCursor(prepared, signal);
149
+ signal.throwIfAborted();
150
+ try {
151
+ await new Promise((resolveWrite, rejectWrite) => {
152
+ cursor.stdin.write(`${JSON.stringify(command)}\n`, error => {
153
+ if (error === undefined || error === null)
154
+ resolveWrite();
155
+ else
156
+ rejectWrite(error);
157
+ });
158
+ });
159
+ }
160
+ catch (error) {
161
+ if (this.cursor === cursor)
162
+ this.cursor = undefined;
163
+ cursor.terminate();
164
+ throw computerUseError(error, 'native cursor overlay command failed');
165
+ }
166
+ }
167
+ /** Stop the cursor process before a provider generation is replaced or disposed. */
168
+ async dispose() {
169
+ const cursor = this.cursor ?? await this.cursorStart?.promise.catch(() => undefined);
170
+ this.cursorStart = undefined;
171
+ this.cursor = undefined;
172
+ if (cursor === undefined)
173
+ return;
174
+ try {
175
+ cursor.stdin.end(`${JSON.stringify({ op: 'stop' })}\n`);
176
+ }
177
+ catch {
178
+ // A child that already closed its pipe is handled by the tree-exit wait below.
179
+ }
180
+ if (await cursor.waitForExit(AbortSignal.timeout(1_000)))
181
+ return;
182
+ cursor.terminate();
183
+ await cursor.waitForExit();
184
+ }
185
+ /** Prepared integrity facts used by provider health. */
186
+ preparedInfo() {
187
+ if (this.prepared === undefined)
188
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native helper is not prepared');
189
+ return this.prepared;
190
+ }
191
+ async buildManaged(signal) {
192
+ const script = fileURLToPath(new URL('../../scripts/build-native.mjs', import.meta.url));
193
+ const handle = this.ctx.subprocess.spawn({
194
+ argv: [process.execPath, script, '--helper-only'],
195
+ cwd: dirname(script),
196
+ stdio: {
197
+ stdin: 'ignore',
198
+ stdout: { maxBytes: 256 * 1024 },
199
+ stderr: { maxBytes: 256 * 1024 },
200
+ },
201
+ graceMs: 1000,
202
+ signal,
203
+ env: {},
204
+ });
205
+ const outcome = await handle.done;
206
+ if (outcome.exitCode !== 0) {
207
+ const stderr = collected(handle.collected.stderr);
208
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', `explicit native source build failed: ${stderr.slice(0, 1000)}`);
209
+ }
210
+ const info = await stat(this.helperPath).catch(() => undefined);
211
+ if (info?.isFile() !== true)
212
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native source build completed without producing the helper');
213
+ }
214
+ async getCursor(prepared, signal) {
215
+ signal.throwIfAborted();
216
+ if (this.cursor !== undefined)
217
+ return this.cursor;
218
+ if (this.cursorStart === undefined) {
219
+ const start = { promise: Promise.resolve(undefined) };
220
+ start.promise = this.spawnCursor(prepared).then(cursor => {
221
+ this.cursor = cursor;
222
+ void cursor.done.catch(() => undefined).finally(() => {
223
+ if (this.cursor === cursor)
224
+ this.cursor = undefined;
225
+ });
226
+ return cursor;
227
+ }).finally(() => {
228
+ if (this.cursorStart === start)
229
+ this.cursorStart = undefined;
230
+ });
231
+ this.cursorStart = start;
232
+ }
233
+ const cursor = await this.cursorStart.promise;
234
+ signal.throwIfAborted();
235
+ return cursor;
236
+ }
237
+ async spawnCursor(prepared) {
238
+ const cursorSignal = new AbortController();
239
+ const handle = this.ctx.subprocess.spawn({
240
+ argv: [prepared.path, '--cursor-overlay'],
241
+ cwd: dirname(prepared.path),
242
+ stdio: {
243
+ stdin: 'pipe',
244
+ stdout: 'pipe',
245
+ stderr: { maxBytes: 64 * 1024 },
246
+ },
247
+ graceMs: 1000,
248
+ signal: cursorSignal.signal,
249
+ env: {
250
+ LANG: process.env.LANG ?? 'en_US.UTF-8',
251
+ LC_ALL: process.env.LC_ALL ?? 'en_US.UTF-8',
252
+ },
253
+ });
254
+ if (handle.stdin === undefined || handle.stdout === undefined) {
255
+ handle.terminate();
256
+ await handle.waitForExit();
257
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', 'native cursor overlay protocol pipes are unavailable');
258
+ }
259
+ handle.stdin.on('error', () => {
260
+ // Process outcome and the next command own recovery from a closed protocol pipe.
261
+ });
262
+ try {
263
+ await this.waitForCursorReady(handle);
264
+ }
265
+ catch (error) {
266
+ handle.terminate();
267
+ await handle.waitForExit();
268
+ const stderr = collected(handle.collected.stderr).trim();
269
+ throw new ComputerUseError('COMPUTER_PROVIDER_FAILURE', `native cursor overlay failed to become ready${stderr.length === 0 ? '' : `: ${stderr.slice(0, 1000)}`}`, { cause: error });
270
+ }
271
+ handle.stdout.resume();
272
+ return {
273
+ stdin: handle.stdin,
274
+ done: handle.done,
275
+ terminate: () => {
276
+ cursorSignal.abort();
277
+ handle.terminate();
278
+ },
279
+ waitForExit: signal => handle.waitForExit(signal),
280
+ };
281
+ }
282
+ async waitForCursorReady(handle) {
283
+ const stdout = handle.stdout;
284
+ if (stdout === undefined)
285
+ throw new Error('cursor stdout is unavailable');
286
+ const timeout = AbortSignal.timeout(CURSOR_READY_TIMEOUT_MS);
287
+ await new Promise((resolveReady, rejectReady) => {
288
+ let buffer = '';
289
+ let settled = false;
290
+ const cleanup = () => {
291
+ clearListeners();
292
+ timeout.removeEventListener('abort', onTimeout);
293
+ };
294
+ const succeed = () => {
295
+ if (settled)
296
+ return;
297
+ settled = true;
298
+ cleanup();
299
+ resolveReady();
300
+ };
301
+ const fail = (error) => {
302
+ if (settled)
303
+ return;
304
+ settled = true;
305
+ cleanup();
306
+ rejectReady(error);
307
+ };
308
+ const onData = (chunk) => {
309
+ buffer += chunk.toString();
310
+ if (Buffer.byteLength(buffer) > CURSOR_PROTOCOL_MAX_BYTES) {
311
+ fail(new Error('cursor ready response exceeded its protocol limit'));
312
+ return;
313
+ }
314
+ while (true) {
315
+ const newline = buffer.indexOf('\n');
316
+ if (newline < 0)
317
+ return;
318
+ const line = buffer.slice(0, newline);
319
+ buffer = buffer.slice(newline + 1);
320
+ if (line.length === 0)
321
+ continue;
322
+ let response;
323
+ try {
324
+ response = JSON.parse(line);
325
+ }
326
+ catch (error) {
327
+ fail(error);
328
+ return;
329
+ }
330
+ if (typeof response === 'object' && response !== null
331
+ && response.ok === true
332
+ && response.ready === true) {
333
+ succeed();
334
+ return;
335
+ }
336
+ fail(new Error('cursor overlay returned an unexpected ready response'));
337
+ return;
338
+ }
339
+ };
340
+ const onEnd = () => { fail(new Error('cursor overlay stdout closed before ready')); };
341
+ const onError = (error) => { fail(error); };
342
+ const onTimeout = () => { fail(new Error(`cursor overlay ready timeout after ${CURSOR_READY_TIMEOUT_MS} milliseconds`)); };
343
+ const clearListeners = () => {
344
+ stdout.removeListener('data', onData);
345
+ stdout.removeListener('end', onEnd);
346
+ stdout.removeListener('error', onError);
347
+ };
348
+ stdout.on('data', onData);
349
+ stdout.once('end', onEnd);
350
+ stdout.once('error', onError);
351
+ timeout.addEventListener('abort', onTimeout, { once: true });
352
+ void handle.done.then(outcome => { fail(new Error(`cursor overlay exited before ready (${String(outcome.exitCode ?? outcome.signal)})`)); }, error => { fail(error); });
353
+ });
354
+ }
355
+ }
356
+ //# sourceMappingURL=native-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-helper.js","sourceRoot":"","sources":["../../src/providers/native-helper.ts"],"names":[],"mappings":"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"}