@skillful-agents/agent-computer 0.0.3

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 (185) hide show
  1. package/README.md +458 -0
  2. package/bin/ac-core-darwin-arm64 +0 -0
  3. package/bin/ac-core-darwin-x64 +0 -0
  4. package/bin/ac-core-win32-arm64.exe +0 -0
  5. package/bin/ac-core-win32-x64.exe +0 -0
  6. package/dist/bin/ac.d.ts +3 -0
  7. package/dist/bin/ac.d.ts.map +1 -0
  8. package/dist/bin/ac.js +126 -0
  9. package/dist/bin/ac.js.map +1 -0
  10. package/dist/src/bridge.d.ts +69 -0
  11. package/dist/src/bridge.d.ts.map +1 -0
  12. package/dist/src/bridge.js +687 -0
  13. package/dist/src/bridge.js.map +1 -0
  14. package/dist/src/cdp/ax-tree.d.ts +19 -0
  15. package/dist/src/cdp/ax-tree.d.ts.map +1 -0
  16. package/dist/src/cdp/ax-tree.js +159 -0
  17. package/dist/src/cdp/ax-tree.js.map +1 -0
  18. package/dist/src/cdp/bounds.d.ts +25 -0
  19. package/dist/src/cdp/bounds.d.ts.map +1 -0
  20. package/dist/src/cdp/bounds.js +62 -0
  21. package/dist/src/cdp/bounds.js.map +1 -0
  22. package/dist/src/cdp/client.d.ts +115 -0
  23. package/dist/src/cdp/client.d.ts.map +1 -0
  24. package/dist/src/cdp/client.js +269 -0
  25. package/dist/src/cdp/client.js.map +1 -0
  26. package/dist/src/cdp/connection.d.ts +25 -0
  27. package/dist/src/cdp/connection.d.ts.map +1 -0
  28. package/dist/src/cdp/connection.js +249 -0
  29. package/dist/src/cdp/connection.js.map +1 -0
  30. package/dist/src/cdp/diff.d.ts +17 -0
  31. package/dist/src/cdp/diff.d.ts.map +1 -0
  32. package/dist/src/cdp/diff.js +52 -0
  33. package/dist/src/cdp/diff.js.map +1 -0
  34. package/dist/src/cdp/discovery.d.ts +8 -0
  35. package/dist/src/cdp/discovery.d.ts.map +1 -0
  36. package/dist/src/cdp/discovery.js +54 -0
  37. package/dist/src/cdp/discovery.js.map +1 -0
  38. package/dist/src/cdp/index.d.ts +12 -0
  39. package/dist/src/cdp/index.d.ts.map +1 -0
  40. package/dist/src/cdp/index.js +10 -0
  41. package/dist/src/cdp/index.js.map +1 -0
  42. package/dist/src/cdp/interactions.d.ts +47 -0
  43. package/dist/src/cdp/interactions.d.ts.map +1 -0
  44. package/dist/src/cdp/interactions.js +298 -0
  45. package/dist/src/cdp/interactions.js.map +1 -0
  46. package/dist/src/cdp/port-manager.d.ts +3 -0
  47. package/dist/src/cdp/port-manager.d.ts.map +1 -0
  48. package/dist/src/cdp/port-manager.js +33 -0
  49. package/dist/src/cdp/port-manager.js.map +1 -0
  50. package/dist/src/cdp/role-map.d.ts +8 -0
  51. package/dist/src/cdp/role-map.d.ts.map +1 -0
  52. package/dist/src/cdp/role-map.js +99 -0
  53. package/dist/src/cdp/role-map.js.map +1 -0
  54. package/dist/src/cdp/types.d.ts +53 -0
  55. package/dist/src/cdp/types.d.ts.map +1 -0
  56. package/dist/src/cdp/types.js +2 -0
  57. package/dist/src/cdp/types.js.map +1 -0
  58. package/dist/src/cli/commands/apps.d.ts +2 -0
  59. package/dist/src/cli/commands/apps.d.ts.map +1 -0
  60. package/dist/src/cli/commands/apps.js +62 -0
  61. package/dist/src/cli/commands/apps.js.map +1 -0
  62. package/dist/src/cli/commands/batch.d.ts +2 -0
  63. package/dist/src/cli/commands/batch.d.ts.map +1 -0
  64. package/dist/src/cli/commands/batch.js +36 -0
  65. package/dist/src/cli/commands/batch.js.map +1 -0
  66. package/dist/src/cli/commands/click.d.ts +2 -0
  67. package/dist/src/cli/commands/click.d.ts.map +1 -0
  68. package/dist/src/cli/commands/click.js +60 -0
  69. package/dist/src/cli/commands/click.js.map +1 -0
  70. package/dist/src/cli/commands/clipboard.d.ts +2 -0
  71. package/dist/src/cli/commands/clipboard.d.ts.map +1 -0
  72. package/dist/src/cli/commands/clipboard.js +30 -0
  73. package/dist/src/cli/commands/clipboard.js.map +1 -0
  74. package/dist/src/cli/commands/dialog.d.ts +2 -0
  75. package/dist/src/cli/commands/dialog.d.ts.map +1 -0
  76. package/dist/src/cli/commands/dialog.js +44 -0
  77. package/dist/src/cli/commands/dialog.js.map +1 -0
  78. package/dist/src/cli/commands/drag.d.ts +2 -0
  79. package/dist/src/cli/commands/drag.d.ts.map +1 -0
  80. package/dist/src/cli/commands/drag.js +25 -0
  81. package/dist/src/cli/commands/drag.js.map +1 -0
  82. package/dist/src/cli/commands/find.d.ts +2 -0
  83. package/dist/src/cli/commands/find.d.ts.map +1 -0
  84. package/dist/src/cli/commands/find.js +98 -0
  85. package/dist/src/cli/commands/find.js.map +1 -0
  86. package/dist/src/cli/commands/menu.d.ts +2 -0
  87. package/dist/src/cli/commands/menu.d.ts.map +1 -0
  88. package/dist/src/cli/commands/menu.js +35 -0
  89. package/dist/src/cli/commands/menu.js.map +1 -0
  90. package/dist/src/cli/commands/screenshot.d.ts +2 -0
  91. package/dist/src/cli/commands/screenshot.d.ts.map +1 -0
  92. package/dist/src/cli/commands/screenshot.js +26 -0
  93. package/dist/src/cli/commands/screenshot.js.map +1 -0
  94. package/dist/src/cli/commands/scroll.d.ts +2 -0
  95. package/dist/src/cli/commands/scroll.d.ts.map +1 -0
  96. package/dist/src/cli/commands/scroll.js +76 -0
  97. package/dist/src/cli/commands/scroll.js.map +1 -0
  98. package/dist/src/cli/commands/session.d.ts +2 -0
  99. package/dist/src/cli/commands/session.d.ts.map +1 -0
  100. package/dist/src/cli/commands/session.js +26 -0
  101. package/dist/src/cli/commands/session.js.map +1 -0
  102. package/dist/src/cli/commands/snapshot.d.ts +2 -0
  103. package/dist/src/cli/commands/snapshot.d.ts.map +1 -0
  104. package/dist/src/cli/commands/snapshot.js +23 -0
  105. package/dist/src/cli/commands/snapshot.js.map +1 -0
  106. package/dist/src/cli/commands/type.d.ts +2 -0
  107. package/dist/src/cli/commands/type.d.ts.map +1 -0
  108. package/dist/src/cli/commands/type.js +68 -0
  109. package/dist/src/cli/commands/type.js.map +1 -0
  110. package/dist/src/cli/commands/windowmgmt.d.ts +2 -0
  111. package/dist/src/cli/commands/windowmgmt.d.ts.map +1 -0
  112. package/dist/src/cli/commands/windowmgmt.js +61 -0
  113. package/dist/src/cli/commands/windowmgmt.js.map +1 -0
  114. package/dist/src/cli/commands/windows.d.ts +2 -0
  115. package/dist/src/cli/commands/windows.d.ts.map +1 -0
  116. package/dist/src/cli/commands/windows.js +9 -0
  117. package/dist/src/cli/commands/windows.js.map +1 -0
  118. package/dist/src/cli/commands.d.ts +13 -0
  119. package/dist/src/cli/commands.d.ts.map +1 -0
  120. package/dist/src/cli/commands.js +177 -0
  121. package/dist/src/cli/commands.js.map +1 -0
  122. package/dist/src/cli/output.d.ts +4 -0
  123. package/dist/src/cli/output.d.ts.map +1 -0
  124. package/dist/src/cli/output.js +249 -0
  125. package/dist/src/cli/output.js.map +1 -0
  126. package/dist/src/cli/parser.d.ts +19 -0
  127. package/dist/src/cli/parser.d.ts.map +1 -0
  128. package/dist/src/cli/parser.js +125 -0
  129. package/dist/src/cli/parser.js.map +1 -0
  130. package/dist/src/config.d.ts +14 -0
  131. package/dist/src/config.d.ts.map +1 -0
  132. package/dist/src/config.js +73 -0
  133. package/dist/src/config.js.map +1 -0
  134. package/dist/src/daemon.d.ts +21 -0
  135. package/dist/src/daemon.d.ts.map +1 -0
  136. package/dist/src/daemon.js +180 -0
  137. package/dist/src/daemon.js.map +1 -0
  138. package/dist/src/errors.d.ts +39 -0
  139. package/dist/src/errors.d.ts.map +1 -0
  140. package/dist/src/errors.js +103 -0
  141. package/dist/src/errors.js.map +1 -0
  142. package/dist/src/index.d.ts +8 -0
  143. package/dist/src/index.d.ts.map +1 -0
  144. package/dist/src/index.js +8 -0
  145. package/dist/src/index.js.map +1 -0
  146. package/dist/src/platform/index.d.ts +6 -0
  147. package/dist/src/platform/index.d.ts.map +1 -0
  148. package/dist/src/platform/index.js +14 -0
  149. package/dist/src/platform/index.js.map +1 -0
  150. package/dist/src/platform/resolve.d.ts +2 -0
  151. package/dist/src/platform/resolve.d.ts.map +1 -0
  152. package/dist/src/platform/resolve.js +54 -0
  153. package/dist/src/platform/resolve.js.map +1 -0
  154. package/dist/src/refs.d.ts +12 -0
  155. package/dist/src/refs.d.ts.map +1 -0
  156. package/dist/src/refs.js +85 -0
  157. package/dist/src/refs.js.map +1 -0
  158. package/dist/src/sdk.d.ts +258 -0
  159. package/dist/src/sdk.d.ts.map +1 -0
  160. package/dist/src/sdk.js +285 -0
  161. package/dist/src/sdk.js.map +1 -0
  162. package/dist/src/types.d.ts +93 -0
  163. package/dist/src/types.d.ts.map +1 -0
  164. package/dist/src/types.js +9 -0
  165. package/dist/src/types.js.map +1 -0
  166. package/package.json +67 -0
  167. package/schema/examples/click.response.example.json +9 -0
  168. package/schema/examples/error.response.example.json +12 -0
  169. package/schema/examples/ping.response.example.json +7 -0
  170. package/schema/examples/snapshot.response.example.json +50 -0
  171. package/schema/methods/click.request.json +26 -0
  172. package/schema/methods/click.response.json +24 -0
  173. package/schema/methods/error.response.json +19 -0
  174. package/schema/methods/ping.request.json +12 -0
  175. package/schema/methods/ping.response.json +17 -0
  176. package/schema/methods/snapshot.request.json +24 -0
  177. package/schema/methods/snapshot.response.json +23 -0
  178. package/schema/methods/status.request.json +12 -0
  179. package/schema/methods/status.response.json +20 -0
  180. package/schema/types/element.json +26 -0
  181. package/schema/types/normalized-role.json +13 -0
  182. package/schema/types/ref.json +7 -0
  183. package/schema/types/window-info.json +24 -0
  184. package/scripts/build-macos.sh +5 -0
  185. package/scripts/postinstall.js +35 -0
@@ -0,0 +1,180 @@
1
+ import { spawn } from 'child_process';
2
+ import { connect } from 'net';
3
+ import { existsSync, readFileSync, unlinkSync, mkdirSync } from 'fs';
4
+ import { AC_DIR, SOCKET_PATH, DAEMON_JSON_PATH, IS_NAMED_PIPE } from './platform/index.js';
5
+ import { resolveBinary } from './platform/resolve.js';
6
+ export class DaemonManager {
7
+ binaryPath;
8
+ constructor(binaryPath) {
9
+ this.binaryPath = binaryPath ?? resolveBinary();
10
+ }
11
+ async start() {
12
+ // Check if already running
13
+ const current = this.readDaemonInfo();
14
+ if (current && this.isProcessAlive(current.pid)) {
15
+ return this.buildStatus(current, true);
16
+ }
17
+ // Clean up stale files
18
+ this.cleanupStale();
19
+ // Spawn daemon
20
+ mkdirSync(AC_DIR, { recursive: true });
21
+ const proc = spawn(this.binaryPath, ['--daemon'], {
22
+ detached: true,
23
+ stdio: ['ignore', 'ignore', 'pipe'],
24
+ });
25
+ proc.unref();
26
+ // Wait for daemon to be ready
27
+ const start = Date.now();
28
+ if (IS_NAMED_PIPE) {
29
+ // Named pipes: wait for daemon.json to appear (pipe has no file)
30
+ while (Date.now() - start < 5000) {
31
+ if (existsSync(DAEMON_JSON_PATH)) {
32
+ await sleep(50);
33
+ break;
34
+ }
35
+ await sleep(50);
36
+ }
37
+ if (!existsSync(DAEMON_JSON_PATH)) {
38
+ throw new Error('Daemon failed to start: daemon.json not created within 5s');
39
+ }
40
+ }
41
+ else {
42
+ // Unix socket: wait for socket file to appear
43
+ while (Date.now() - start < 5000) {
44
+ if (existsSync(SOCKET_PATH)) {
45
+ await sleep(50);
46
+ break;
47
+ }
48
+ await sleep(50);
49
+ }
50
+ if (!existsSync(SOCKET_PATH)) {
51
+ throw new Error('Daemon failed to start: socket not created within 5s');
52
+ }
53
+ }
54
+ const info = this.readDaemonInfo();
55
+ if (!info) {
56
+ throw new Error('Daemon started but daemon.json not found');
57
+ }
58
+ return this.buildStatus(info, true);
59
+ }
60
+ async stop() {
61
+ const info = this.readDaemonInfo();
62
+ if (!info)
63
+ return;
64
+ if (this.isProcessAlive(info.pid)) {
65
+ // On Windows, SIGTERM is a hard kill — try graceful RPC shutdown first
66
+ if (IS_NAMED_PIPE) {
67
+ try {
68
+ await this.sendShutdownRPC(info.socket);
69
+ }
70
+ catch { /* fall through to SIGTERM */ }
71
+ }
72
+ // Wait for process to exit (may already be gone from RPC shutdown)
73
+ let start = Date.now();
74
+ while (Date.now() - start < 3000) {
75
+ if (!this.isProcessAlive(info.pid))
76
+ break;
77
+ await sleep(50);
78
+ }
79
+ // Send SIGTERM if still alive
80
+ if (this.isProcessAlive(info.pid)) {
81
+ try {
82
+ process.kill(info.pid, 'SIGTERM');
83
+ }
84
+ catch { /* ok */ }
85
+ start = Date.now();
86
+ while (Date.now() - start < 3000) {
87
+ if (!this.isProcessAlive(info.pid))
88
+ break;
89
+ await sleep(50);
90
+ }
91
+ }
92
+ // Force kill if still alive
93
+ if (this.isProcessAlive(info.pid)) {
94
+ try {
95
+ process.kill(info.pid, 'SIGKILL');
96
+ }
97
+ catch { /* ok */ }
98
+ }
99
+ }
100
+ this.cleanupStale();
101
+ }
102
+ sendShutdownRPC(socketPath) {
103
+ return new Promise((resolve, reject) => {
104
+ const sock = connect({ path: socketPath });
105
+ const timeout = setTimeout(() => { sock.destroy(); reject(new Error('shutdown timeout')); }, 2000);
106
+ sock.on('connect', () => {
107
+ const req = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'shutdown', params: {} }) + '\n';
108
+ sock.write(req, () => {
109
+ clearTimeout(timeout);
110
+ // Give daemon a moment to process before closing
111
+ setTimeout(() => { sock.destroy(); resolve(); }, 100);
112
+ });
113
+ });
114
+ sock.on('error', (err) => { clearTimeout(timeout); reject(err); });
115
+ });
116
+ }
117
+ async status() {
118
+ const info = this.readDaemonInfo();
119
+ if (!info) {
120
+ return { running: false };
121
+ }
122
+ const alive = this.isProcessAlive(info.pid);
123
+ if (!alive) {
124
+ this.cleanupStale();
125
+ return { running: false };
126
+ }
127
+ return this.buildStatus(info, true);
128
+ }
129
+ async restart() {
130
+ await this.stop();
131
+ return this.start();
132
+ }
133
+ readDaemonInfo() {
134
+ try {
135
+ if (!existsSync(DAEMON_JSON_PATH))
136
+ return null;
137
+ const raw = readFileSync(DAEMON_JSON_PATH, 'utf-8');
138
+ return JSON.parse(raw);
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ isProcessAlive(pid) {
145
+ try {
146
+ process.kill(pid, 0);
147
+ return true;
148
+ }
149
+ catch {
150
+ return false;
151
+ }
152
+ }
153
+ cleanupStale() {
154
+ if (!IS_NAMED_PIPE) {
155
+ try {
156
+ unlinkSync(SOCKET_PATH);
157
+ }
158
+ catch { /* ok */ }
159
+ }
160
+ try {
161
+ unlinkSync(DAEMON_JSON_PATH);
162
+ }
163
+ catch { /* ok */ }
164
+ }
165
+ buildStatus(info, running) {
166
+ const startedAt = new Date(info.started_at);
167
+ const uptime = Date.now() - startedAt.getTime();
168
+ return {
169
+ running,
170
+ pid: info.pid,
171
+ socket: info.socket,
172
+ started_at: info.started_at,
173
+ uptime_ms: Math.max(0, uptime),
174
+ };
175
+ }
176
+ }
177
+ function sleep(ms) {
178
+ return new Promise((resolve) => setTimeout(resolve, ms));
179
+ }
180
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export declare class ACError extends Error {
2
+ readonly code: number;
3
+ readonly exitCode: number;
4
+ readonly data?: Record<string, unknown> | undefined;
5
+ constructor(message: string, code: number, exitCode: number, data?: Record<string, unknown> | undefined);
6
+ }
7
+ export declare class ElementNotFoundError extends ACError {
8
+ constructor(message: string, data?: Record<string, unknown>);
9
+ }
10
+ export declare class PermissionDeniedError extends ACError {
11
+ constructor(message: string, data?: Record<string, unknown>);
12
+ }
13
+ export declare class TimeoutError extends ACError {
14
+ constructor(message: string, data?: Record<string, unknown>);
15
+ }
16
+ export declare class AppNotFoundError extends ACError {
17
+ constructor(message: string, data?: Record<string, unknown>);
18
+ }
19
+ export declare class WindowNotFoundError extends ACError {
20
+ constructor(message: string, data?: Record<string, unknown>);
21
+ }
22
+ export declare class InvalidRefError extends ACError {
23
+ constructor(message: string, data?: Record<string, unknown>);
24
+ }
25
+ export declare class OCRFallbackFailedError extends ACError {
26
+ constructor(message: string, data?: Record<string, unknown>);
27
+ }
28
+ export declare class InvalidRequestError extends ACError {
29
+ constructor(message: string, data?: Record<string, unknown>);
30
+ }
31
+ export declare class MethodNotFoundError extends ACError {
32
+ constructor(message: string, data?: Record<string, unknown>);
33
+ }
34
+ export declare class InvalidParamsError extends ACError {
35
+ constructor(message: string, data?: Record<string, unknown>);
36
+ }
37
+ export declare function errorFromCode(code: number, message: string, data?: Record<string, unknown>): ACError;
38
+ export declare function exitCodeFromErrorCode(code: number): number;
39
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,OAAQ,SAAQ,KAAK;aAGd,IAAI,EAAE,MAAM;aACZ,QAAQ,EAAE,MAAM;aAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAH9C,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKjD;AAED,qBAAa,oBAAqB,SAAQ,OAAO;gBACnC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,qBAAsB,SAAQ,OAAO;gBACpC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,YAAa,SAAQ,OAAO;gBAC3B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,gBAAiB,SAAQ,OAAO;gBAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,mBAAoB,SAAQ,OAAO;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,eAAgB,SAAQ,OAAO;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,sBAAuB,SAAQ,OAAO;gBACrC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAGD,qBAAa,mBAAoB,SAAQ,OAAO;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,mBAAoB,SAAQ,OAAO;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAED,qBAAa,kBAAmB,SAAQ,OAAO;gBACjC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI5D;AAgBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAMpG;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ1D"}
@@ -0,0 +1,103 @@
1
+ export class ACError extends Error {
2
+ code;
3
+ exitCode;
4
+ data;
5
+ constructor(message, code, exitCode, data) {
6
+ super(message);
7
+ this.code = code;
8
+ this.exitCode = exitCode;
9
+ this.data = data;
10
+ this.name = 'ACError';
11
+ }
12
+ }
13
+ export class ElementNotFoundError extends ACError {
14
+ constructor(message, data) {
15
+ super(message, -32001, 1, data);
16
+ this.name = 'ELEMENT_NOT_FOUND';
17
+ }
18
+ }
19
+ export class PermissionDeniedError extends ACError {
20
+ constructor(message, data) {
21
+ super(message, -32002, 2, data);
22
+ this.name = 'PERMISSION_DENIED';
23
+ }
24
+ }
25
+ export class TimeoutError extends ACError {
26
+ constructor(message, data) {
27
+ super(message, -32003, 3, data);
28
+ this.name = 'TIMEOUT';
29
+ }
30
+ }
31
+ export class AppNotFoundError extends ACError {
32
+ constructor(message, data) {
33
+ super(message, -32004, 4, data);
34
+ this.name = 'APP_NOT_FOUND';
35
+ }
36
+ }
37
+ export class WindowNotFoundError extends ACError {
38
+ constructor(message, data) {
39
+ super(message, -32005, 5, data);
40
+ this.name = 'WINDOW_NOT_FOUND';
41
+ }
42
+ }
43
+ export class InvalidRefError extends ACError {
44
+ constructor(message, data) {
45
+ super(message, -32006, 6, data);
46
+ this.name = 'INVALID_REF';
47
+ }
48
+ }
49
+ export class OCRFallbackFailedError extends ACError {
50
+ constructor(message, data) {
51
+ super(message, -32007, 7, data);
52
+ this.name = 'OCR_FALLBACK_FAILED';
53
+ }
54
+ }
55
+ // JSON-RPC standard errors
56
+ export class InvalidRequestError extends ACError {
57
+ constructor(message, data) {
58
+ super(message, -32600, 126, data);
59
+ this.name = 'INVALID_REQUEST';
60
+ }
61
+ }
62
+ export class MethodNotFoundError extends ACError {
63
+ constructor(message, data) {
64
+ super(message, -32601, 126, data);
65
+ this.name = 'METHOD_NOT_FOUND';
66
+ }
67
+ }
68
+ export class InvalidParamsError extends ACError {
69
+ constructor(message, data) {
70
+ super(message, -32602, 126, data);
71
+ this.name = 'INVALID_PARAMS';
72
+ }
73
+ }
74
+ // Error code → error class mapping
75
+ const ERROR_MAP = {
76
+ [-32001]: ElementNotFoundError,
77
+ [-32002]: PermissionDeniedError,
78
+ [-32003]: TimeoutError,
79
+ [-32004]: AppNotFoundError,
80
+ [-32005]: WindowNotFoundError,
81
+ [-32006]: InvalidRefError,
82
+ [-32007]: OCRFallbackFailedError,
83
+ [-32600]: InvalidRequestError,
84
+ [-32601]: MethodNotFoundError,
85
+ [-32602]: InvalidParamsError,
86
+ };
87
+ export function errorFromCode(code, message, data) {
88
+ const ErrorClass = ERROR_MAP[code];
89
+ if (ErrorClass) {
90
+ return new ErrorClass(message, data);
91
+ }
92
+ return new ACError(message, code, 126, data);
93
+ }
94
+ export function exitCodeFromErrorCode(code) {
95
+ const instance = ERROR_MAP[code];
96
+ if (instance) {
97
+ // Create a temporary instance to get the exit code
98
+ const temp = new instance('');
99
+ return temp.exitCode;
100
+ }
101
+ return 126;
102
+ }
103
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type { Element, Snapshot, WindowInfo, ScreenshotResult, RecordingStatus, DialogInfo, AppInfo, StatusInfo, PermissionsInfo, DoctorResult, DisplayInfo, Ref, RefPrefix, NormalizedRole, } from './types.js';
2
+ export { parseRef, isValidRef, refToRole, REF_PREFIXES } from './refs.js';
3
+ export { ACError, ElementNotFoundError, PermissionDeniedError, TimeoutError } from './errors.js';
4
+ export { Bridge, type BridgeOptions } from './bridge.js';
5
+ export { AC } from './sdk.js';
6
+ export { CDPClient, CDPConnection, CDPAXTree, CDPInteractions } from './cdp/index.js';
7
+ export type { CDPTarget, CDPAXNode, CDPNodeRef, CDPSnapshotOptions, CDPSnapshotResult } from './cdp/index.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,YAAY,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,OAAO,EACP,UAAU,EACV,eAAe,EACf,YAAY,EACZ,WAAW,EACX,GAAG,EACH,SAAS,EACT,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtF,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ // @skillful-agents/ac — TypeScript SDK for macOS desktop automation
2
+ export { parseRef, isValidRef, refToRole, REF_PREFIXES } from './refs.js';
3
+ export { ACError, ElementNotFoundError, PermissionDeniedError, TimeoutError } from './errors.js';
4
+ export { Bridge } from './bridge.js';
5
+ export { AC } from './sdk.js';
6
+ // CDP support
7
+ export { CDPClient, CDPConnection, CDPAXTree, CDPInteractions } from './cdp/index.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAmBpE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAE9B,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const AC_DIR: string;
2
+ export declare const DAEMON_JSON_PATH: string;
3
+ export declare const SNAPSHOTS_DIR: string;
4
+ export declare const SOCKET_PATH: string;
5
+ export declare const IS_NAMED_PIPE: boolean;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/platform/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,MAAM,QAAyB,CAAC;AAC7C,eAAO,MAAM,gBAAgB,QAA8B,CAAC;AAC5D,eAAO,MAAM,aAAa,QAA4B,CAAC;AAIvD,eAAO,MAAM,WAAW,QAEO,CAAC;AAGhC,eAAO,MAAM,aAAa,SAAiB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { join } from 'path';
2
+ import { homedir, platform } from 'os';
3
+ const os = platform();
4
+ export const AC_DIR = join(homedir(), '.ac');
5
+ export const DAEMON_JSON_PATH = join(AC_DIR, 'daemon.json');
6
+ export const SNAPSHOTS_DIR = join(AC_DIR, 'snapshots');
7
+ // macOS: Unix domain socket file on disk
8
+ // Windows: Named pipe (kernel object, no file on disk)
9
+ export const SOCKET_PATH = os === 'win32'
10
+ ? '\\\\.\\pipe\\ac-daemon'
11
+ : join(AC_DIR, 'daemon.sock');
12
+ // Named pipes don't exist as files — connection-based detection needed
13
+ export const IS_NAMED_PIPE = os === 'win32';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAEvC,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AAEtB,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEvD,yCAAyC;AACzC,uDAAuD;AACvD,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,KAAK,OAAO;IACvC,CAAC,CAAC,wBAAwB;IAC1B,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAEhC,uEAAuE;AACvE,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,KAAK,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveBinary(): string;
2
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/platform/resolve.ts"],"names":[],"mappings":"AAOA,wBAAgB,aAAa,IAAI,MAAM,CAsDtC"}
@@ -0,0 +1,54 @@
1
+ import { platform, arch } from 'os';
2
+ import { join, dirname } from 'path';
3
+ import { existsSync } from 'fs';
4
+ import { fileURLToPath } from 'url';
5
+ const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ export function resolveBinary() {
7
+ const os = platform();
8
+ const cpu = arch();
9
+ if (os !== 'darwin' && os !== 'win32') {
10
+ throw new Error(`Unsupported platform: ${os}. agent-computer supports macOS and Windows.`);
11
+ }
12
+ const ext = os === 'win32' ? '.exe' : '';
13
+ const key = `${os}-${cpu === 'arm64' ? 'arm64' : 'x64'}`;
14
+ // Bundled platform-specific binary (npm package)
15
+ const bundledPath = join(__dirname, '..', '..', 'bin', `ac-core-${key}${ext}`);
16
+ if (existsSync(bundledPath)) {
17
+ return bundledPath;
18
+ }
19
+ if (os === 'darwin') {
20
+ // Development: locally-built Swift binary (release)
21
+ const devBinaryPath = join(__dirname, '..', '..', 'native', 'macos', '.build', 'release', 'ac-core');
22
+ if (existsSync(devBinaryPath))
23
+ return devBinaryPath;
24
+ // Development: Swift debug build
25
+ const debugBinaryPath = join(__dirname, '..', '..', 'native', 'macos', '.build', 'debug', 'ac-core');
26
+ if (existsSync(debugBinaryPath))
27
+ return debugBinaryPath;
28
+ }
29
+ if (os === 'win32') {
30
+ const rid = cpu === 'arm64' ? 'win-arm64' : 'win-x64';
31
+ const tfms = ['net9.0-windows', 'net9.0'];
32
+ const base = join(__dirname, '..', '..', 'native', 'windows', 'ACCore', 'bin');
33
+ for (const tfm of tfms) {
34
+ // Development: self-contained release publish
35
+ const publishPath = join(base, 'Release', tfm, rid, 'publish', 'ac-core.exe');
36
+ if (existsSync(publishPath))
37
+ return publishPath;
38
+ // Development: release build (framework-dependent)
39
+ const releasePath = join(base, 'Release', tfm, 'ac-core.exe');
40
+ if (existsSync(releasePath))
41
+ return releasePath;
42
+ // Development: debug build (framework-dependent)
43
+ const debugPath = join(base, 'Debug', tfm, 'ac-core.exe');
44
+ if (existsSync(debugPath))
45
+ return debugPath;
46
+ }
47
+ }
48
+ const buildHint = os === 'win32'
49
+ ? 'cd native/windows && dotnet build'
50
+ : 'cd native/macos && swift build -c release';
51
+ throw new Error(`Native binary not found for ${key}. ` +
52
+ `Build from source: ${buildHint}`);
53
+ }
54
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../src/platform/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { NormalizedRole } from './types.js';
2
+ export declare const REF_PREFIXES: Record<string, NormalizedRole>;
3
+ export declare function roleToPrefix(role: string): string;
4
+ export interface ParsedRef {
5
+ prefix: string;
6
+ role: NormalizedRole;
7
+ id: number;
8
+ }
9
+ export declare function parseRef(input: string): ParsedRef;
10
+ export declare function isValidRef(input: string): boolean;
11
+ export declare function refToRole(prefix: string): NormalizedRole | undefined;
12
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,YAAY,CAAC;AAiC5D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAGvD,CAAC;AAaF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAQD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CA0BjD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAOjD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEpE"}
@@ -0,0 +1,85 @@
1
+ // Single-letter prefix → role mapping
2
+ const SINGLE_LETTER_PREFIXES = {
3
+ b: 'button',
4
+ t: 'textfield',
5
+ l: 'link',
6
+ m: 'menuitem',
7
+ c: 'checkbox',
8
+ r: 'radio',
9
+ s: 'slider',
10
+ d: 'dropdown',
11
+ i: 'image',
12
+ g: 'group',
13
+ w: 'window',
14
+ x: 'table',
15
+ o: 'row',
16
+ a: 'tab',
17
+ e: 'generic',
18
+ };
19
+ // Two-letter prefix → role mapping (for less common roles)
20
+ const TWO_LETTER_PREFIXES = {
21
+ cb: 'combobox',
22
+ sa: 'scrollarea',
23
+ st: 'stepper',
24
+ sp: 'splitgroup',
25
+ tl: 'timeline',
26
+ pg: 'progress',
27
+ tv: 'treeview',
28
+ wb: 'webarea',
29
+ };
30
+ export const REF_PREFIXES = {
31
+ ...SINGLE_LETTER_PREFIXES,
32
+ ...TWO_LETTER_PREFIXES,
33
+ };
34
+ // Reverse mapping: role → prefix
35
+ const ROLE_TO_PREFIX = {};
36
+ for (const [prefix, role] of Object.entries(REF_PREFIXES)) {
37
+ // Prefer shorter prefix if role already mapped
38
+ if (!ROLE_TO_PREFIX[role] || prefix.length < ROLE_TO_PREFIX[role].length) {
39
+ ROLE_TO_PREFIX[role] = prefix;
40
+ }
41
+ }
42
+ // textfield and textarea both map to 't' — textarea gets 't' by convention
43
+ ROLE_TO_PREFIX['textarea'] = 't';
44
+ export function roleToPrefix(role) {
45
+ return ROLE_TO_PREFIX[role] ?? 'e';
46
+ }
47
+ const ALL_PREFIXES = new Set(Object.keys(REF_PREFIXES));
48
+ // Ref pattern: @<prefix><positive integer>
49
+ // Try two-letter prefix first, then single-letter
50
+ const REF_REGEX = /^@([a-z]{1,2})([1-9]\d*)$/;
51
+ export function parseRef(input) {
52
+ const match = REF_REGEX.exec(input);
53
+ if (!match) {
54
+ throw new Error(`Invalid ref format: "${input}". Expected @<prefix><number> (e.g., @b1, @cb3)`);
55
+ }
56
+ const rawPrefix = match[1];
57
+ const id = parseInt(match[2], 10);
58
+ // Try two-letter prefix first (e.g., "@cb1" → prefix "cb", not "c" with "b1")
59
+ if (rawPrefix.length === 2 && ALL_PREFIXES.has(rawPrefix)) {
60
+ return { prefix: rawPrefix, role: REF_PREFIXES[rawPrefix], id };
61
+ }
62
+ // Try single-letter prefix
63
+ if (rawPrefix.length === 1 && ALL_PREFIXES.has(rawPrefix)) {
64
+ return { prefix: rawPrefix, role: REF_PREFIXES[rawPrefix], id };
65
+ }
66
+ // Two-letter prefix but only first letter is valid (e.g., "@bx1" is not valid)
67
+ if (rawPrefix.length === 2) {
68
+ // Check if first letter alone is a valid prefix — if so, reject because the second char is part of the number parsing issue
69
+ throw new Error(`Invalid ref prefix: "${rawPrefix}" in "${input}". Valid prefixes: ${[...ALL_PREFIXES].sort().join(', ')}`);
70
+ }
71
+ throw new Error(`Unknown ref prefix: "${rawPrefix}" in "${input}". Valid prefixes: ${[...ALL_PREFIXES].sort().join(', ')}`);
72
+ }
73
+ export function isValidRef(input) {
74
+ try {
75
+ parseRef(input);
76
+ return true;
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ export function refToRole(prefix) {
83
+ return REF_PREFIXES[prefix];
84
+ }
85
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/refs.ts"],"names":[],"mappings":"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"}