@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,9 @@
1
+ // Normalized role names used across platforms
2
+ export const NORMALIZED_ROLES = [
3
+ 'button', 'textfield', 'textarea', 'link', 'checkbox', 'radio',
4
+ 'slider', 'dropdown', 'image', 'group', 'window', 'table', 'row',
5
+ 'cell', 'tabgroup', 'tab', 'menubar', 'menuitem', 'scrollarea',
6
+ 'text', 'toolbar', 'combobox', 'stepper', 'splitgroup', 'timeline',
7
+ 'progress', 'treeview', 'webarea', 'generic',
8
+ ];
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAkGA,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IAC9D,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK;IAChE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY;IAC9D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU;IAClE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS;CACpC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@skillful-agents/agent-computer",
3
+ "version": "0.0.3",
4
+ "description": "Agent Computer — cross-platform desktop automation CLI for AI agents",
5
+ "type": "module",
6
+ "bin": {
7
+ "agent-computer": "./dist/bin/ac.js"
8
+ },
9
+ "main": "./dist/src/index.js",
10
+ "types": "./dist/src/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/src/index.js",
14
+ "types": "./dist/src/index.d.ts"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist/",
19
+ "bin/ac-core-*",
20
+ "scripts/",
21
+ "schema/",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "build": "tsc",
27
+ "build:swift": "cd native/macos && swift build -c release",
28
+ "build:dotnet": "cd native/windows && dotnet build ACCore/ACCore.csproj",
29
+ "build:all": "npm run build && (node -e \"process.exit(process.platform==='win32'?0:1)\" && npm run build:dotnet || npm run build:swift)",
30
+ "postinstall": "node scripts/postinstall.js || true",
31
+ "prepublishOnly": "npm run build",
32
+ "test": "vitest run test/contract/ test/unit/",
33
+ "test:contract": "vitest run test/contract/",
34
+ "test:unit": "vitest run test/unit/",
35
+ "test:integration": "vitest run test/integration/",
36
+ "test:functional": "vitest run test/functional/",
37
+ "test:e2e": "vitest run test/e2e/ --timeout 120000",
38
+ "test:all": "vitest run",
39
+ "test:watch": "vitest watch test/unit/ test/contract/",
40
+ "typecheck": "tsc --noEmit",
41
+ "agent-computer": "tsx bin/ac.ts"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^25.5.0",
45
+ "ajv": "^8.17.1",
46
+ "tsx": "^4.19.0",
47
+ "typescript": "^5.6.0",
48
+ "vitest": "^2.1.0"
49
+ },
50
+ "engines": {
51
+ "node": ">=20",
52
+ "os": "darwin || win32"
53
+ },
54
+ "os": [
55
+ "darwin",
56
+ "win32"
57
+ ],
58
+ "cpu": [
59
+ "arm64",
60
+ "x64"
61
+ ],
62
+ "license": "MIT",
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "https://github.com/datawizz/ac"
66
+ }
67
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "jsonrpc": "2.0",
3
+ "id": 2,
4
+ "result": {
5
+ "ok": true,
6
+ "ref": "@b1",
7
+ "bounds": [120, 40, 80, 24]
8
+ }
9
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "jsonrpc": "2.0",
3
+ "id": 3,
4
+ "error": {
5
+ "code": -32001,
6
+ "message": "Element not found",
7
+ "data": {
8
+ "ref": "@b99",
9
+ "snapshot_id": "a1b2c3d4"
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "jsonrpc": "2.0",
3
+ "id": 1,
4
+ "result": {
5
+ "pong": true
6
+ }
7
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "jsonrpc": "2.0",
3
+ "id": 1,
4
+ "result": {
5
+ "snapshot_id": "a1b2c3d4",
6
+ "window": {
7
+ "ref": "@w1",
8
+ "title": "Untitled",
9
+ "app": "TextEdit",
10
+ "bundle_id": "com.apple.TextEdit",
11
+ "process_id": 12345,
12
+ "bounds": [0, 0, 800, 600],
13
+ "minimized": false,
14
+ "hidden": false,
15
+ "fullscreen": false
16
+ },
17
+ "elements": [
18
+ {
19
+ "ref": "@g1",
20
+ "role": "group",
21
+ "label": "Toolbar",
22
+ "value": null,
23
+ "enabled": true,
24
+ "focused": false,
25
+ "bounds": [0, 0, 800, 40],
26
+ "children": [
27
+ {
28
+ "ref": "@b1",
29
+ "role": "button",
30
+ "label": "Save",
31
+ "value": null,
32
+ "enabled": true,
33
+ "focused": false,
34
+ "bounds": [120, 40, 80, 24]
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "ref": "@t1",
40
+ "role": "textarea",
41
+ "label": "Editor",
42
+ "value": "Hello...",
43
+ "enabled": true,
44
+ "focused": true,
45
+ "bounds": [0, 64, 800, 500]
46
+ }
47
+ ],
48
+ "fallback": null
49
+ }
50
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "ClickRequest",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "method", "params"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "method": { "const": "click" },
10
+ "params": {
11
+ "type": "object",
12
+ "properties": {
13
+ "ref": { "type": "string" },
14
+ "x": { "type": "number" },
15
+ "y": { "type": "number" },
16
+ "right": { "type": "boolean" },
17
+ "double": { "type": "boolean" },
18
+ "count": { "type": "integer", "minimum": 1 },
19
+ "modifiers": { "type": "array", "items": { "type": "string" } },
20
+ "wait": { "type": "boolean" },
21
+ "human": { "type": "boolean" },
22
+ "timeout": { "type": "integer" }
23
+ }
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "ClickResponse",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "result"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "result": {
10
+ "type": "object",
11
+ "required": ["ok"],
12
+ "properties": {
13
+ "ok": { "const": true },
14
+ "ref": { "type": "string" },
15
+ "bounds": {
16
+ "type": "array",
17
+ "items": { "type": "number" },
18
+ "minItems": 4,
19
+ "maxItems": 4
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "ErrorResponse",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "error"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "error": {
10
+ "type": "object",
11
+ "required": ["code", "message"],
12
+ "properties": {
13
+ "code": { "type": "integer" },
14
+ "message": { "type": "string" },
15
+ "data": { "type": "object" }
16
+ }
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "PingRequest",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "method"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "method": { "const": "ping" },
10
+ "params": { "type": "object" }
11
+ }
12
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "PingResponse",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "result"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "result": {
10
+ "type": "object",
11
+ "required": ["pong"],
12
+ "properties": {
13
+ "pong": { "const": true }
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "SnapshotRequest",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "method"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "method": { "const": "snapshot" },
10
+ "params": {
11
+ "type": "object",
12
+ "properties": {
13
+ "interactive": { "type": "boolean" },
14
+ "compact": { "type": "boolean" },
15
+ "depth": { "type": "integer", "minimum": 1 },
16
+ "subtree": { "type": "string" },
17
+ "app": { "type": "string" },
18
+ "pid": { "type": "integer" },
19
+ "screen": { "type": "boolean" },
20
+ "window": { "type": "string" }
21
+ }
22
+ }
23
+ }
24
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "SnapshotResponse",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "result"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "result": {
10
+ "type": "object",
11
+ "required": ["snapshot_id", "window", "elements", "fallback"],
12
+ "properties": {
13
+ "snapshot_id": { "type": "string" },
14
+ "window": { "$ref": "../types/window-info.json" },
15
+ "elements": {
16
+ "type": "array",
17
+ "items": { "$ref": "../types/element.json" }
18
+ },
19
+ "fallback": { "type": ["string", "null"], "enum": ["ocr", null] }
20
+ }
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "StatusRequest",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "method"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "method": { "const": "status" },
10
+ "params": { "type": "object" }
11
+ }
12
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "StatusResponse",
4
+ "type": "object",
5
+ "required": ["jsonrpc", "id", "result"],
6
+ "properties": {
7
+ "jsonrpc": { "const": "2.0" },
8
+ "id": { "type": "integer" },
9
+ "result": {
10
+ "type": "object",
11
+ "required": ["grabbed_window", "last_snapshot_id"],
12
+ "properties": {
13
+ "grabbed_window": { "type": ["string", "null"] },
14
+ "last_snapshot_id": { "type": ["string", "null"] },
15
+ "daemon_pid": { "type": ["integer", "null"] },
16
+ "daemon_uptime_ms": { "type": ["integer", "null"] }
17
+ }
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Element",
4
+ "description": "A UI element in the accessibility tree",
5
+ "type": "object",
6
+ "required": ["ref", "role", "label", "enabled", "focused", "bounds"],
7
+ "properties": {
8
+ "ref": { "$ref": "ref.json" },
9
+ "role": { "$ref": "normalized-role.json" },
10
+ "label": { "type": ["string", "null"] },
11
+ "value": { "type": ["string", "null"] },
12
+ "enabled": { "type": "boolean" },
13
+ "focused": { "type": "boolean" },
14
+ "bounds": {
15
+ "type": "array",
16
+ "items": { "type": "number" },
17
+ "minItems": 4,
18
+ "maxItems": 4
19
+ },
20
+ "children": {
21
+ "type": "array",
22
+ "items": { "$ref": "#" }
23
+ }
24
+ },
25
+ "additionalProperties": false
26
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "NormalizedRole",
4
+ "description": "Platform-normalized UI element role",
5
+ "type": "string",
6
+ "enum": [
7
+ "button", "textfield", "textarea", "link", "checkbox", "radio",
8
+ "slider", "dropdown", "image", "group", "window", "table", "row",
9
+ "cell", "tabgroup", "tab", "menubar", "menuitem", "scrollarea",
10
+ "text", "toolbar", "combobox", "stepper", "splitgroup", "timeline",
11
+ "progress", "treeview", "webarea", "generic"
12
+ ]
13
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "Ref",
4
+ "description": "Element reference in the format @<prefix><positive_integer>",
5
+ "type": "string",
6
+ "pattern": "^@(b|t|l|m|c|r|s|d|i|g|w|x|o|a|e|cb|sa|st|sp|tl|pg|tv|wb)[1-9][0-9]*$"
7
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "WindowInfo",
4
+ "description": "Information about a window",
5
+ "type": "object",
6
+ "required": ["ref", "title", "app", "process_id", "bounds", "minimized", "hidden", "fullscreen"],
7
+ "properties": {
8
+ "ref": { "type": "string" },
9
+ "title": { "type": "string" },
10
+ "app": { "type": "string" },
11
+ "bundle_id": { "type": "string" },
12
+ "process_id": { "type": "integer" },
13
+ "bounds": {
14
+ "type": "array",
15
+ "items": { "type": "number" },
16
+ "minItems": 4,
17
+ "maxItems": 4
18
+ },
19
+ "minimized": { "type": "boolean" },
20
+ "hidden": { "type": "boolean" },
21
+ "fullscreen": { "type": "boolean" }
22
+ },
23
+ "additionalProperties": false
24
+ }
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ set -e
3
+ cd "$(dirname "$0")/../native/macos"
4
+ swift build -c release
5
+ echo "Built ac-core at $(pwd)/.build/release/ac-core"
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+
3
+ // Verify a bundled binary exists for the current platform/arch
4
+ import { platform, arch } from 'os';
5
+ import { existsSync } from 'fs';
6
+ import { join, dirname } from 'path';
7
+ import { fileURLToPath } from 'url';
8
+ import { execFileSync } from 'child_process';
9
+
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ const os = platform();
12
+ const cpu = arch() === 'arm64' ? 'arm64' : 'x64';
13
+ const ext = os === 'win32' ? '.exe' : '';
14
+ const key = `${os}-${cpu}`;
15
+ const binaryPath = join(__dirname, '..', 'bin', `ac-core-${key}${ext}`);
16
+
17
+ if (!existsSync(binaryPath)) {
18
+ const buildHint = os === 'win32'
19
+ ? 'cd native/windows && dotnet build'
20
+ : 'cd native/macos && swift build -c release';
21
+ console.log(`\n⚠️ ac: No pre-built binary found for ${key}.`);
22
+ console.log(` Build from source: ${buildHint}\n`);
23
+ process.exit(0);
24
+ }
25
+
26
+ // Verify the binary runs on this machine
27
+ try {
28
+ execFileSync(binaryPath, ['--version'], { timeout: 5000, stdio: 'pipe' });
29
+ } catch (err) {
30
+ console.log(`\n⚠️ ac: Bundled binary for ${key} failed to execute.`);
31
+ const buildHint = os === 'win32'
32
+ ? 'cd native/windows && dotnet build'
33
+ : 'cd native/macos && swift build -c release';
34
+ console.log(` Rebuild from source: ${buildHint}\n`);
35
+ }