@framers/agentos-ext-browser-automation 0.2.0 → 0.3.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 (143) hide show
  1. package/README.md +91 -0
  2. package/dist/BrowserService.js +9 -45
  3. package/dist/BrowserService.js.map +1 -1
  4. package/dist/attach/AttachController.d.ts +54 -0
  5. package/dist/attach/AttachController.d.ts.map +1 -1
  6. package/dist/attach/AttachController.js +129 -41
  7. package/dist/attach/AttachController.js.map +1 -1
  8. package/dist/attach/backends/jxa.d.ts.map +1 -1
  9. package/dist/attach/backends/jxa.js +35 -62
  10. package/dist/attach/backends/jxa.js.map +1 -1
  11. package/dist/attach/backends/raw-cdp.d.ts +14 -0
  12. package/dist/attach/backends/raw-cdp.d.ts.map +1 -1
  13. package/dist/attach/backends/raw-cdp.js +66 -35
  14. package/dist/attach/backends/raw-cdp.js.map +1 -1
  15. package/dist/attach/daemon/client.d.ts +10 -0
  16. package/dist/attach/daemon/client.d.ts.map +1 -1
  17. package/dist/attach/daemon/client.js +34 -23
  18. package/dist/attach/daemon/client.js.map +1 -1
  19. package/dist/attach/daemon/daemon-lock.js +14 -17
  20. package/dist/attach/daemon/daemon-lock.js.map +1 -1
  21. package/dist/attach/daemon/daemon-main.d.ts +11 -0
  22. package/dist/attach/daemon/daemon-main.d.ts.map +1 -1
  23. package/dist/attach/daemon/daemon-main.js +39 -18
  24. package/dist/attach/daemon/daemon-main.js.map +1 -1
  25. package/dist/attach/daemon/daemon.d.ts.map +1 -1
  26. package/dist/attach/daemon/daemon.js +49 -32
  27. package/dist/attach/daemon/daemon.js.map +1 -1
  28. package/dist/attach/daemon/index.js +7 -25
  29. package/dist/attach/daemon/index.js.map +1 -1
  30. package/dist/attach/daemon/protocol.d.ts +1 -1
  31. package/dist/attach/daemon/protocol.d.ts.map +1 -1
  32. package/dist/attach/daemon/protocol.js +33 -45
  33. package/dist/attach/daemon/protocol.js.map +1 -1
  34. package/dist/attach/daemon/runner.js +1 -4
  35. package/dist/attach/daemon/runner.js.map +1 -1
  36. package/dist/attach/daemon/surface.d.ts +5 -0
  37. package/dist/attach/daemon/surface.d.ts.map +1 -1
  38. package/dist/attach/daemon/surface.js +16 -14
  39. package/dist/attach/daemon/surface.js.map +1 -1
  40. package/dist/attach/devtools-port.js +1 -4
  41. package/dist/attach/devtools-port.js.map +1 -1
  42. package/dist/attach/errors.js +4 -9
  43. package/dist/attach/errors.js.map +1 -1
  44. package/dist/attach/evidence.d.ts +64 -0
  45. package/dist/attach/evidence.d.ts.map +1 -0
  46. package/dist/attach/evidence.js +269 -0
  47. package/dist/attach/evidence.js.map +1 -0
  48. package/dist/attach/lease.js +18 -23
  49. package/dist/attach/lease.js.map +1 -1
  50. package/dist/attach/singleton-lock.js +1 -4
  51. package/dist/attach/singleton-lock.js.map +1 -1
  52. package/dist/attach/state.js +6 -13
  53. package/dist/attach/state.js.map +1 -1
  54. package/dist/attach/tools.d.ts +42 -2
  55. package/dist/attach/tools.d.ts.map +1 -1
  56. package/dist/attach/tools.js +124 -88
  57. package/dist/attach/tools.js.map +1 -1
  58. package/dist/attach/url-policy.js +2 -6
  59. package/dist/attach/url-policy.js.map +1 -1
  60. package/dist/attach.js +7 -23
  61. package/dist/attach.js.map +1 -1
  62. package/dist/captcha/CaptchaSolver.js +4 -7
  63. package/dist/captcha/CaptchaSolver.js.map +1 -1
  64. package/dist/captcha/ICaptchaProvider.js +1 -2
  65. package/dist/captcha/ICaptchaProvider.js.map +1 -1
  66. package/dist/index.d.ts +8 -0
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +56 -75
  69. package/dist/index.js.map +1 -1
  70. package/dist/proxy/IProxyProvider.js +1 -2
  71. package/dist/proxy/IProxyProvider.js.map +1 -1
  72. package/dist/proxy/ProxyManager.js +7 -10
  73. package/dist/proxy/ProxyManager.js.map +1 -1
  74. package/dist/tools/ClickTool.js +17 -20
  75. package/dist/tools/ClickTool.js.map +1 -1
  76. package/dist/tools/EvaluateTool.js +16 -19
  77. package/dist/tools/EvaluateTool.js.map +1 -1
  78. package/dist/tools/ExtractTool.js +23 -26
  79. package/dist/tools/ExtractTool.js.map +1 -1
  80. package/dist/tools/FillTool.js +17 -20
  81. package/dist/tools/FillTool.js.map +1 -1
  82. package/dist/tools/NavigateTool.js +31 -34
  83. package/dist/tools/NavigateTool.js.map +1 -1
  84. package/dist/tools/PageSnapshotTool.js +13 -16
  85. package/dist/tools/PageSnapshotTool.js.map +1 -1
  86. package/dist/tools/ScreenshotTool.js +16 -19
  87. package/dist/tools/ScreenshotTool.js.map +1 -1
  88. package/dist/tools/ScrollTool.js +17 -20
  89. package/dist/tools/ScrollTool.js.map +1 -1
  90. package/dist/tools/SessionTool.js +24 -27
  91. package/dist/tools/SessionTool.js.map +1 -1
  92. package/dist/tools/WaitTool.js +22 -25
  93. package/dist/tools/WaitTool.js.map +1 -1
  94. package/manifest.json +1 -1
  95. package/package.json +5 -4
  96. package/dist/attach/__tests__/AttachController.test.d.ts +0 -2
  97. package/dist/attach/__tests__/AttachController.test.d.ts.map +0 -1
  98. package/dist/attach/__tests__/AttachController.test.js +0 -278
  99. package/dist/attach/__tests__/AttachController.test.js.map +0 -1
  100. package/dist/attach/__tests__/attach-primitives.test.d.ts +0 -2
  101. package/dist/attach/__tests__/attach-primitives.test.d.ts.map +0 -1
  102. package/dist/attach/__tests__/attach-primitives.test.js +0 -158
  103. package/dist/attach/__tests__/attach-primitives.test.js.map +0 -1
  104. package/dist/attach/__tests__/jxa-args.test.d.ts +0 -2
  105. package/dist/attach/__tests__/jxa-args.test.d.ts.map +0 -1
  106. package/dist/attach/__tests__/jxa-args.test.js +0 -37
  107. package/dist/attach/__tests__/jxa-args.test.js.map +0 -1
  108. package/dist/attach/__tests__/pack-registration.test.d.ts +0 -2
  109. package/dist/attach/__tests__/pack-registration.test.d.ts.map +0 -1
  110. package/dist/attach/__tests__/pack-registration.test.js +0 -34
  111. package/dist/attach/__tests__/pack-registration.test.js.map +0 -1
  112. package/dist/attach/__tests__/tools.test.d.ts +0 -2
  113. package/dist/attach/__tests__/tools.test.d.ts.map +0 -1
  114. package/dist/attach/__tests__/tools.test.js +0 -155
  115. package/dist/attach/__tests__/tools.test.js.map +0 -1
  116. package/dist/attach/backends/__tests__/raw-cdp.test.d.ts +0 -2
  117. package/dist/attach/backends/__tests__/raw-cdp.test.d.ts.map +0 -1
  118. package/dist/attach/backends/__tests__/raw-cdp.test.js +0 -133
  119. package/dist/attach/backends/__tests__/raw-cdp.test.js.map +0 -1
  120. package/dist/attach/daemon/__tests__/client.test.d.ts +0 -2
  121. package/dist/attach/daemon/__tests__/client.test.d.ts.map +0 -1
  122. package/dist/attach/daemon/__tests__/client.test.js +0 -58
  123. package/dist/attach/daemon/__tests__/client.test.js.map +0 -1
  124. package/dist/attach/daemon/__tests__/daemon-lock.test.d.ts +0 -2
  125. package/dist/attach/daemon/__tests__/daemon-lock.test.d.ts.map +0 -1
  126. package/dist/attach/daemon/__tests__/daemon-lock.test.js +0 -72
  127. package/dist/attach/daemon/__tests__/daemon-lock.test.js.map +0 -1
  128. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.d.ts +0 -2
  129. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.d.ts.map +0 -1
  130. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.js +0 -102
  131. package/dist/attach/daemon/__tests__/daemon-loop.integration.test.js.map +0 -1
  132. package/dist/attach/daemon/__tests__/harness.d.ts +0 -44
  133. package/dist/attach/daemon/__tests__/harness.d.ts.map +0 -1
  134. package/dist/attach/daemon/__tests__/harness.js +0 -96
  135. package/dist/attach/daemon/__tests__/harness.js.map +0 -1
  136. package/dist/attach/daemon/__tests__/protocol.test.d.ts +0 -2
  137. package/dist/attach/daemon/__tests__/protocol.test.d.ts.map +0 -1
  138. package/dist/attach/daemon/__tests__/protocol.test.js +0 -71
  139. package/dist/attach/daemon/__tests__/protocol.test.js.map +0 -1
  140. package/dist/attach/daemon/__tests__/runner.test.d.ts +0 -2
  141. package/dist/attach/daemon/__tests__/runner.test.d.ts.map +0 -1
  142. package/dist/attach/daemon/__tests__/runner.test.js +0 -67
  143. package/dist/attach/daemon/__tests__/runner.test.js.map +0 -1
@@ -1,133 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const ws_1 = require("ws");
5
- const node_fs_1 = require("node:fs");
6
- const node_os_1 = require("node:os");
7
- const node_path_1 = require("node:path");
8
- const raw_cdp_js_1 = require("../raw-cdp.js");
9
- /** Minimal fake CDP browser endpoint: answers exactly the methods the backend may send. */
10
- function fakeCdp(opts = {}) {
11
- const wss = new ws_1.WebSocketServer({ port: 0, path: '/devtools/browser/fake' });
12
- const seen = [];
13
- const created = [];
14
- const closed = [];
15
- wss.on('connection', (sock) => {
16
- sock.on('message', (buf) => {
17
- const m = JSON.parse(String(buf));
18
- seen.push(m.method);
19
- if (opts.wedgeAfterConnect)
20
- return; // never answer: simulates a zombie handshake
21
- const reply = (result) => sock.send(JSON.stringify({ id: m.id, result }));
22
- switch (m.method) {
23
- case 'Target.getTargets':
24
- return reply({ targetInfos: (opts.pages ?? []).map((p) => ({ ...p, type: 'page' })) });
25
- case 'Target.createTarget': {
26
- const targetId = `created-${created.length + 1}`;
27
- created.push(targetId);
28
- return reply({ targetId });
29
- }
30
- case 'Target.attachToTarget':
31
- return reply({ sessionId: 'sess-1' });
32
- case 'Target.closeTarget':
33
- closed.push(m.params.targetId);
34
- return reply({ success: true });
35
- case 'Page.enable':
36
- case 'Runtime.enable':
37
- return reply({});
38
- case 'Page.navigate':
39
- return reply({ frameId: 'f1' });
40
- case 'Runtime.evaluate':
41
- return reply({
42
- result: { value: m.params.expression.includes('location.href') ? 'https://example.com/' : 'evaluated' },
43
- });
44
- default:
45
- return reply({});
46
- }
47
- });
48
- });
49
- return { wss, seen, created, closed, port: () => wss.address().port };
50
- }
51
- /** Profile root whose DevToolsActivePort points at the fake server. */
52
- function profileRootFor(port) {
53
- const d = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-prof-'));
54
- (0, node_fs_1.writeFileSync)((0, node_path_1.join)(d, 'DevToolsActivePort'), `${port}\n/devtools/browser/fake`);
55
- return d;
56
- }
57
- const cleanup = [];
58
- (0, vitest_1.afterEach)(() => {
59
- for (const f of cleanup.splice(0))
60
- f();
61
- });
62
- (0, vitest_1.describe)('RawCdpBackend', () => {
63
- (0, vitest_1.it)('attaches to exactly ONE created target and never closes foreign targets', async () => {
64
- const srv = fakeCdp({
65
- pages: [{ targetId: 'user-tab-1', url: 'https://mail.google.com/', title: 'Inbox - user@gmail.com - Gmail' }],
66
- });
67
- cleanup.push(() => srv.wss.close());
68
- const prof = profileRootFor(srv.port());
69
- cleanup.push(() => (0, node_fs_1.rmSync)(prof, { recursive: true, force: true }));
70
- const be = new raw_cdp_js_1.RawCdpBackend({ profileRoot: prof, settleMs: 0 });
71
- await be.connect();
72
- const tab = await be.claimAgentTab();
73
- (0, vitest_1.expect)(srv.created).toContain(tab);
74
- (0, vitest_1.expect)(await be.gotoTab(tab, 'https://example.com/')).toBe('https://example.com/');
75
- (0, vitest_1.expect)(await be.readTab(tab)).toBe('evaluated');
76
- await be.disconnectTransport();
77
- (0, vitest_1.expect)(srv.seen).not.toContain('Browser.close');
78
- (0, vitest_1.expect)(srv.closed).toEqual([tab]); // ONLY our own created tab, ever
79
- });
80
- (0, vitest_1.it)('probeIdentity reads target metadata only (no attach, no navigation)', async () => {
81
- const srv = fakeCdp({
82
- pages: [{ targetId: 'user-tab-1', url: 'https://mail.google.com/mail/u/0', title: 'Inbox - user@gmail.com - Gmail' }],
83
- });
84
- cleanup.push(() => srv.wss.close());
85
- const prof = profileRootFor(srv.port());
86
- cleanup.push(() => (0, node_fs_1.rmSync)(prof, { recursive: true, force: true }));
87
- const be = new raw_cdp_js_1.RawCdpBackend({ profileRoot: prof });
88
- await be.connect();
89
- const before = srv.seen.length;
90
- const identity = await be.probeIdentity();
91
- (0, vitest_1.expect)(identity).toContain('user@gmail.com');
92
- (0, vitest_1.expect)(srv.seen.slice(before)).toEqual(['Target.getTargets']); // metadata only
93
- await be.disconnectTransport();
94
- });
95
- (0, vitest_1.it)('missing DevToolsActivePort throws CDP_UNAVAILABLE without any connection', async () => {
96
- const d = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-noprof-'));
97
- cleanup.push(() => (0, node_fs_1.rmSync)(d, { recursive: true, force: true }));
98
- const be = new raw_cdp_js_1.RawCdpBackend({ profileRoot: d });
99
- await (0, vitest_1.expect)(be.connect()).rejects.toMatchObject({ code: 'CDP_UNAVAILABLE' });
100
- });
101
- (0, vitest_1.it)('malformed DevToolsActivePort throws STALE_PORT_FILE', async () => {
102
- const d = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-badprof-'));
103
- cleanup.push(() => (0, node_fs_1.rmSync)(d, { recursive: true, force: true }));
104
- (0, node_fs_1.writeFileSync)((0, node_path_1.join)(d, 'DevToolsActivePort'), 'garbage\n');
105
- const be = new raw_cdp_js_1.RawCdpBackend({ profileRoot: d });
106
- await (0, vitest_1.expect)(be.connect()).rejects.toMatchObject({ code: 'STALE_PORT_FILE' });
107
- });
108
- (0, vitest_1.it)('a wedged endpoint times out with CDP_TIMEOUT instead of hanging', async () => {
109
- const srv = fakeCdp({ wedgeAfterConnect: true });
110
- cleanup.push(() => srv.wss.close());
111
- const prof = profileRootFor(srv.port());
112
- cleanup.push(() => (0, node_fs_1.rmSync)(prof, { recursive: true, force: true }));
113
- const be = new raw_cdp_js_1.RawCdpBackend({ profileRoot: prof, commandTimeoutMs: 300 });
114
- await be.connect();
115
- await (0, vitest_1.expect)(be.claimAgentTab()).rejects.toMatchObject({ code: 'CDP_TIMEOUT' });
116
- await be.disconnectTransport();
117
- });
118
- (0, vitest_1.it)('an unexpected transport drop fails pending commands and fires onUnexpectedClose once', async () => {
119
- const srv = fakeCdp({ wedgeAfterConnect: true });
120
- cleanup.push(() => srv.wss.close());
121
- const prof = profileRootFor(srv.port());
122
- cleanup.push(() => (0, node_fs_1.rmSync)(prof, { recursive: true, force: true }));
123
- const be = new raw_cdp_js_1.RawCdpBackend({ profileRoot: prof, commandTimeoutMs: 5000 });
124
- const drops = [];
125
- be.onUnexpectedClose = (err) => drops.push(err.message);
126
- await be.connect();
127
- const inflight = be.claimAgentTab();
128
- srv.wss.clients.forEach((c) => c.terminate());
129
- await (0, vitest_1.expect)(inflight).rejects.toMatchObject({ code: 'CDP_UNAVAILABLE' });
130
- (0, vitest_1.expect)(drops).toHaveLength(1);
131
- });
132
- });
133
- //# sourceMappingURL=raw-cdp.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"raw-cdp.test.js","sourceRoot":"","sources":["../../../../src/attach/backends/__tests__/raw-cdp.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=client.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/client.test.ts"],"names":[],"mappings":""}
@@ -1,58 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const node_fs_1 = require("node:fs");
5
- const node_os_1 = require("node:os");
6
- const node_path_1 = require("node:path");
7
- const client_js_1 = require("../client.js");
8
- const harness_js_1 = require("./harness.js");
9
- const cleanups = [];
10
- (0, vitest_1.afterEach)(() => {
11
- for (const f of cleanups.splice(0))
12
- f();
13
- });
14
- (0, vitest_1.describe)('AttachDaemonClient', () => {
15
- (0, vitest_1.it)('drives the full session lifecycle over the queue', async () => {
16
- const { dir, backend, run } = (0, harness_js_1.daemonUnderTest)();
17
- cleanups.push(() => (0, node_fs_1.rmSync)(dir, { recursive: true, force: true }));
18
- const client = new client_js_1.AttachDaemonClient({ ipcDir: (0, node_path_1.join)(dir, 'ipc'), client: 'test', pollMs: 25 });
19
- (0, vitest_1.expect)((await client.ping()).pong).toBe(true);
20
- (0, vitest_1.expect)(client.daemonLooksAlive()).toBe(true);
21
- const claimed = await client.claim();
22
- (0, vitest_1.expect)(String(claimed.identity)).toContain('user@gmail.com');
23
- (0, vitest_1.expect)((await client.goto('https://example.com/', { settle: 0 })).url).toBe('https://example.com/');
24
- (0, vitest_1.expect)(backend.calls).toContain('goto:https://example.com/');
25
- const read = await client.read();
26
- (0, vitest_1.expect)(read.untrusted).toBe(true);
27
- (0, vitest_1.expect)(read.text).toBe('PAGE TEXT');
28
- const extracted = await client.extract({ perks: 'li' });
29
- (0, vitest_1.expect)(extracted.untrusted).toBe(true);
30
- const evaluated = await client.evaluate('1+1');
31
- (0, vitest_1.expect)(evaluated.untrusted).toBe(true);
32
- (0, vitest_1.expect)(evaluated.value).toBe('evaluated');
33
- const controlled = await client.control('pause');
34
- (0, vitest_1.expect)(controlled.paused).toBe(true);
35
- await client.control('resume');
36
- await client.release();
37
- await client.quit();
38
- await run;
39
- (0, vitest_1.expect)(client.daemonLooksAlive()).toBe(false); // stopped state
40
- }, 60000);
41
- (0, vitest_1.it)('structured errors rethrow with their code', async () => {
42
- const { dir, run } = (0, harness_js_1.daemonUnderTest)();
43
- cleanups.push(() => (0, node_fs_1.rmSync)(dir, { recursive: true, force: true }));
44
- const client = new client_js_1.AttachDaemonClient({ ipcDir: (0, node_path_1.join)(dir, 'ipc'), client: 'test', pollMs: 25 });
45
- await (0, vitest_1.expect)(client.goto('https://example.com/')).rejects.toMatchObject({ code: 'NOT_CLAIMANT' });
46
- await client.claim();
47
- await (0, vitest_1.expect)(client.goto('http://insecure.example/')).rejects.toMatchObject({ code: 'POLICY_BLOCKED' });
48
- await client.quit();
49
- await run;
50
- }, 60000);
51
- (0, vitest_1.it)('reports DAEMON_UNAVAILABLE fast when nothing serves the ipc dir', async () => {
52
- const empty = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-nodaemon-'));
53
- cleanups.push(() => (0, node_fs_1.rmSync)(empty, { recursive: true, force: true }));
54
- const client = new client_js_1.AttachDaemonClient({ ipcDir: empty, client: 'test', pollMs: 25, opTimeoutMs: 500 });
55
- await (0, vitest_1.expect)(client.ping()).rejects.toMatchObject({ code: 'DAEMON_UNAVAILABLE' });
56
- });
57
- });
58
- //# sourceMappingURL=client.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=daemon-lock.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-lock.test.d.ts","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/daemon-lock.test.ts"],"names":[],"mappings":""}
@@ -1,72 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const node_fs_1 = require("node:fs");
5
- const node_os_1 = require("node:os");
6
- const node_path_1 = require("node:path");
7
- const daemon_lock_js_1 = require("../daemon-lock.js");
8
- const errors_js_1 = require("../../errors.js");
9
- const dirs = [];
10
- const tdir = () => {
11
- const d = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-lock-'));
12
- dirs.push(d);
13
- return d;
14
- };
15
- (0, vitest_1.afterEach)(() => {
16
- for (const d of dirs.splice(0))
17
- (0, node_fs_1.rmSync)(d, { recursive: true, force: true });
18
- });
19
- // Pids far above any realistic pid ceiling: never live on the CI box.
20
- const DEAD_PID = 4190000;
21
- (0, vitest_1.describe)('acquireDaemonLock', () => {
22
- (0, vitest_1.it)('winner writes {pid, startedAt}; loser gets DAEMON_RUNNING naming the winner pid', () => {
23
- const pidFile = (0, node_path_1.join)(tdir(), 'daemon.pid');
24
- const lock = (0, daemon_lock_js_1.acquireDaemonLock)(pidFile);
25
- const body = JSON.parse((0, node_fs_1.readFileSync)(pidFile, 'utf8'));
26
- (0, vitest_1.expect)(body.pid).toBe(process.pid);
27
- (0, vitest_1.expect)(body.startedAt).toBeGreaterThan(0);
28
- try {
29
- (0, daemon_lock_js_1.acquireDaemonLock)(pidFile);
30
- vitest_1.expect.unreachable('second acquisition must throw');
31
- }
32
- catch (err) {
33
- (0, vitest_1.expect)(err).toBeInstanceOf(errors_js_1.AttachError);
34
- (0, vitest_1.expect)(err.code).toBe('DAEMON_RUNNING');
35
- (0, vitest_1.expect)(err.message).toContain(String(process.pid));
36
- }
37
- lock.release();
38
- });
39
- (0, vitest_1.it)('reclaims a stale lock whose pid is dead, regardless of age', () => {
40
- const pidFile = (0, node_path_1.join)(tdir(), 'daemon.pid');
41
- (0, node_fs_1.writeFileSync)(pidFile, JSON.stringify({ pid: DEAD_PID, startedAt: Date.now() - 60000 }));
42
- const lock = (0, daemon_lock_js_1.acquireDaemonLock)(pidFile);
43
- (0, vitest_1.expect)(JSON.parse((0, node_fs_1.readFileSync)(pidFile, 'utf8')).pid).toBe(process.pid);
44
- lock.release();
45
- });
46
- (0, vitest_1.it)('reclaims a torn/unreadable pidfile body', () => {
47
- const pidFile = (0, node_path_1.join)(tdir(), 'daemon.pid');
48
- (0, node_fs_1.writeFileSync)(pidFile, '{not json');
49
- const lock = (0, daemon_lock_js_1.acquireDaemonLock)(pidFile);
50
- (0, vitest_1.expect)(JSON.parse((0, node_fs_1.readFileSync)(pidFile, 'utf8')).pid).toBe(process.pid);
51
- lock.release();
52
- });
53
- (0, vitest_1.it)('refuses to reclaim a live pid no matter how old the file is', () => {
54
- const pidFile = (0, node_path_1.join)(tdir(), 'daemon.pid');
55
- (0, node_fs_1.writeFileSync)(pidFile, JSON.stringify({ pid: process.pid, startedAt: 0 }));
56
- (0, vitest_1.expect)(() => (0, daemon_lock_js_1.acquireDaemonLock)(pidFile)).toThrowError(/already running/);
57
- });
58
- (0, vitest_1.it)('release removes the pidfile only if it still owns it', () => {
59
- const pidFile = (0, node_path_1.join)(tdir(), 'daemon.pid');
60
- const lock = (0, daemon_lock_js_1.acquireDaemonLock)(pidFile);
61
- (0, node_fs_1.writeFileSync)(pidFile, JSON.stringify({ pid: DEAD_PID + 1, startedAt: Date.now() }));
62
- lock.release(); // must NOT delete a file now owned by someone else
63
- (0, vitest_1.expect)(JSON.parse((0, node_fs_1.readFileSync)(pidFile, 'utf8')).pid).toBe(DEAD_PID + 1);
64
- });
65
- (0, vitest_1.it)('release is idempotent and never throws once the file is gone', () => {
66
- const pidFile = (0, node_path_1.join)(tdir(), 'daemon.pid');
67
- const lock = (0, daemon_lock_js_1.acquireDaemonLock)(pidFile);
68
- lock.release();
69
- (0, vitest_1.expect)(() => lock.release()).not.toThrow();
70
- });
71
- });
72
- //# sourceMappingURL=daemon-lock.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-lock.test.js","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/daemon-lock.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=daemon-loop.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-loop.integration.test.d.ts","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/daemon-loop.integration.test.ts"],"names":[],"mappings":""}
@@ -1,102 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const node_fs_1 = require("node:fs");
5
- const node_path_1 = require("node:path");
6
- const protocol_js_1 = require("../protocol.js");
7
- const AttachController_js_1 = require("../../AttachController.js");
8
- const daemon_js_1 = require("../daemon.js");
9
- const harness_js_1 = require("./harness.js");
10
- const cleanups = [];
11
- (0, vitest_1.afterEach)(() => {
12
- for (const f of cleanups.splice(0))
13
- f();
14
- });
15
- (0, vitest_1.describe)('AttachDaemon loop', () => {
16
- (0, vitest_1.it)('serves the full op set with claim gating, then quits leaving no queue litter', async () => {
17
- const { dir, backend, run } = (0, harness_js_1.daemonUnderTest)();
18
- cleanups.push(() => (0, node_fs_1.rmSync)(dir, { recursive: true, force: true }));
19
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'a', 'ping')).ok).toBe(true);
20
- const denied = await (0, harness_js_1.op)(dir, 'a', 'goto', { url: 'https://example.com/' });
21
- (0, vitest_1.expect)(denied.ok).toBe(false);
22
- if (!denied.ok)
23
- (0, vitest_1.expect)(denied.error.code).toBe('NOT_CLAIMANT');
24
- const claimed = await (0, harness_js_1.op)(dir, 'a', 'claim');
25
- (0, vitest_1.expect)(claimed.ok).toBe(true);
26
- if (claimed.ok)
27
- (0, vitest_1.expect)(claimed.data.identity).toContain('user@gmail.com');
28
- const busy = await (0, harness_js_1.op)(dir, 'b', 'claim');
29
- (0, vitest_1.expect)(busy.ok).toBe(false);
30
- if (!busy.ok)
31
- (0, vitest_1.expect)(busy.error.code).toBe('LEASE_DENIED');
32
- const nav = await (0, harness_js_1.op)(dir, 'a', 'goto', { url: 'https://example.com/', settle: 0 });
33
- (0, vitest_1.expect)(nav.ok).toBe(true);
34
- (0, vitest_1.expect)(backend.calls).toContain('goto:https://example.com/');
35
- const blocked = await (0, harness_js_1.op)(dir, 'a', 'goto', { url: 'http://insecure.example/' });
36
- (0, vitest_1.expect)(blocked.ok).toBe(false);
37
- if (!blocked.ok)
38
- (0, vitest_1.expect)(blocked.error.code).toBe('POLICY_BLOCKED');
39
- const read = await (0, harness_js_1.op)(dir, 'a', 'read', {});
40
- (0, vitest_1.expect)(read.ok).toBe(true);
41
- if (read.ok)
42
- (0, vitest_1.expect)(read.data).toMatchObject({ untrusted: true, text: 'PAGE TEXT' });
43
- const extracted = await (0, harness_js_1.op)(dir, 'a', 'extract', { fields: { perks: 'li' } });
44
- (0, vitest_1.expect)(extracted.ok).toBe(true);
45
- if (extracted.ok)
46
- (0, vitest_1.expect)(extracted.data).toMatchObject({ untrusted: true });
47
- const evaluated = await (0, harness_js_1.op)(dir, 'a', 'eval', { expression: '1+1' });
48
- (0, vitest_1.expect)(evaluated.ok).toBe(true);
49
- if (evaluated.ok)
50
- (0, vitest_1.expect)(evaluated.data).toMatchObject({ untrusted: true, value: 'evaluated' });
51
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'a', 'release')).ok).toBe(true);
52
- (0, vitest_1.expect)(backend.calls).toContain('goto:about:blank');
53
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'b', 'claim')).ok).toBe(true); // freed for the next claimant
54
- const status = (0, protocol_js_1.readJson)((0, protocol_js_1.statusPath)((0, node_path_1.join)(dir, 'ipc')));
55
- (0, vitest_1.expect)(status?.state).toBe('connected');
56
- (0, vitest_1.expect)(status?.pid).toBe(process.pid);
57
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'b', 'quit')).ok).toBe(true);
58
- await run;
59
- (0, vitest_1.expect)(backend.calls).toContain('disconnect');
60
- const litter = (0, node_fs_1.readdirSync)((0, node_path_1.join)(dir, 'ipc')).filter((n) => n.startsWith('cmd-') || n.startsWith('resp-'));
61
- (0, vitest_1.expect)(litter).toEqual([]);
62
- (0, vitest_1.expect)((0, node_fs_1.existsSync)((0, node_path_1.join)(dir, 'daemon.pid'))).toBe(false);
63
- const finalStatus = (0, protocol_js_1.readJson)((0, protocol_js_1.statusPath)((0, node_path_1.join)(dir, 'ipc')));
64
- (0, vitest_1.expect)(finalStatus?.state).toBe('stopped');
65
- }, 60000);
66
- (0, vitest_1.it)('expired claim ttl auto-releases and parks the tab; daemon stays up', async () => {
67
- const { dir, backend, run } = (0, harness_js_1.daemonUnderTest)({ claimTtlMs: 100 });
68
- cleanups.push(() => (0, node_fs_1.rmSync)(dir, { recursive: true, force: true }));
69
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'a', 'claim', { ttlMs: 100 })).ok).toBe(true);
70
- await new Promise((r) => setTimeout(r, 400)); // ttl passes without activity
71
- const denied = await (0, harness_js_1.op)(dir, 'a', 'goto', { url: 'https://example.com/' });
72
- (0, vitest_1.expect)(denied.ok).toBe(false);
73
- if (!denied.ok)
74
- (0, vitest_1.expect)(denied.error.code).toBe('NOT_CLAIMANT');
75
- (0, vitest_1.expect)(backend.calls).toContain('goto:about:blank'); // parked
76
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'a', 'claim')).ok).toBe(true); // reclaim works after expiry
77
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'a', 'quit')).ok).toBe(true);
78
- await run;
79
- }, 60000);
80
- (0, vitest_1.it)('second daemon on the same pidfile refuses with DAEMON_RUNNING', async () => {
81
- const { dir, run } = (0, harness_js_1.daemonUnderTest)();
82
- cleanups.push(() => (0, node_fs_1.rmSync)(dir, { recursive: true, force: true }));
83
- await (0, harness_js_1.op)(dir, 'a', 'ping'); // daemon is up and looping
84
- const backend2 = (0, harness_js_1.fakeBackend)();
85
- const controller2 = new AttachController_js_1.AttachController({
86
- backend: backend2,
87
- leaseFile: (0, node_path_1.join)(dir, 'lease2'),
88
- expectedIdentity: 'user@gmail.com',
89
- });
90
- const dup = new daemon_js_1.AttachDaemon({
91
- controller: controller2,
92
- backend: backend2,
93
- ipcDir: (0, node_path_1.join)(dir, 'ipc'),
94
- pidFile: (0, node_path_1.join)(dir, 'daemon.pid'),
95
- pollMs: 25,
96
- });
97
- await (0, vitest_1.expect)(dup.run()).rejects.toMatchObject({ code: 'DAEMON_RUNNING' });
98
- (0, vitest_1.expect)((await (0, harness_js_1.op)(dir, 'a', 'quit')).ok).toBe(true);
99
- await run;
100
- }, 60000);
101
- });
102
- //# sourceMappingURL=daemon-loop.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"daemon-loop.integration.test.js","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/daemon-loop.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- import { AttachController } from '../../AttachController.js';
2
- import { AttachDaemon } from '../daemon.js';
3
- import { type AttachResp, type AttachOp } from '../protocol.js';
4
- /** Recording fake backend satisfying AttachBackend + evalInTab. */
5
- export declare function fakeBackend(): {
6
- calls: string[];
7
- kind: "cdp";
8
- onUnexpectedClose: ((err: Error) => void) | null;
9
- connect(): Promise<void>;
10
- disconnectTransport(): Promise<void>;
11
- claimAgentTab(): Promise<string>;
12
- probeIdentity(): Promise<string>;
13
- gotoTab(_t: string, url: string): Promise<string>;
14
- readTab(): Promise<string>;
15
- evalInTab(_t: string, expression: string): Promise<"evaluated" | {
16
- extracted: boolean;
17
- }>;
18
- };
19
- /** An in-process daemon over a fresh temp dir; caller owns cleanup + `await run`. */
20
- export declare function daemonUnderTest(opts?: {
21
- claimTtlMs?: number;
22
- }): {
23
- dir: string;
24
- backend: {
25
- calls: string[];
26
- kind: "cdp";
27
- onUnexpectedClose: ((err: Error) => void) | null;
28
- connect(): Promise<void>;
29
- disconnectTransport(): Promise<void>;
30
- claimAgentTab(): Promise<string>;
31
- probeIdentity(): Promise<string>;
32
- gotoTab(_t: string, url: string): Promise<string>;
33
- readTab(): Promise<string>;
34
- evalInTab(_t: string, expression: string): Promise<"evaluated" | {
35
- extracted: boolean;
36
- }>;
37
- };
38
- controller: AttachController;
39
- daemon: AttachDaemon;
40
- run: Promise<void>;
41
- };
42
- /** Raw file-level op driver; deletes the response after reading (client contract). */
43
- export declare function op(dir: string, client: string, opName: AttachOp, args?: Record<string, unknown>): Promise<AttachResp>;
44
- //# sourceMappingURL=harness.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/harness.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA0D,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExH,mEAAmE;AACnE,wBAAgB,WAAW;;;uBAKI,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI;;;;;gBAetC,MAAM,OAAO,MAAM;;kBAQjB,MAAM,cAAc,MAAM;;;EAQjD;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;2BAlCnC,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI;;;;;oBAetC,MAAM,OAAO,MAAM;;sBAQjB,MAAM,cAAc,MAAM;;;;;;;EA6BjD;AAED,sFAAsF;AACtF,wBAAsB,EAAE,CACtB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,UAAU,CAAC,CAiBrB"}
@@ -1,96 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fakeBackend = fakeBackend;
4
- exports.daemonUnderTest = daemonUnderTest;
5
- exports.op = op;
6
- /**
7
- * @fileoverview Shared test harness for daemon-lane suites: a recording fake
8
- * backend, an in-process daemon over real queue files, and a raw file-level op
9
- * driver mirroring the client contract (responses are deleted after reading).
10
- */
11
- const node_fs_1 = require("node:fs");
12
- const node_fs_2 = require("node:fs");
13
- const node_os_1 = require("node:os");
14
- const node_path_1 = require("node:path");
15
- const AttachController_js_1 = require("../../AttachController.js");
16
- const daemon_js_1 = require("../daemon.js");
17
- const protocol_js_1 = require("../protocol.js");
18
- /** Recording fake backend satisfying AttachBackend + evalInTab. */
19
- function fakeBackend() {
20
- const calls = [];
21
- const backend = {
22
- calls,
23
- kind: 'cdp',
24
- onUnexpectedClose: null,
25
- async connect() {
26
- calls.push('connect');
27
- },
28
- async disconnectTransport() {
29
- calls.push('disconnect');
30
- },
31
- async claimAgentTab() {
32
- calls.push('claim');
33
- return 'tab-1';
34
- },
35
- async probeIdentity() {
36
- calls.push('probe');
37
- return 'Inbox - user@gmail.com - Gmail';
38
- },
39
- async gotoTab(_t, url) {
40
- calls.push(`goto:${url}`);
41
- return url;
42
- },
43
- async readTab() {
44
- calls.push('read');
45
- return 'PAGE TEXT';
46
- },
47
- async evalInTab(_t, expression) {
48
- calls.push('eval');
49
- return expression.includes('querySelectorAll') || expression.includes('location.href')
50
- ? { extracted: true }
51
- : 'evaluated';
52
- },
53
- };
54
- return backend;
55
- }
56
- /** An in-process daemon over a fresh temp dir; caller owns cleanup + `await run`. */
57
- function daemonUnderTest(opts = {}) {
58
- const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'attach-daemon-'));
59
- const backend = fakeBackend();
60
- const controller = new AttachController_js_1.AttachController({
61
- backend,
62
- leaseFile: (0, node_path_1.join)(dir, 'lease'),
63
- expectedIdentity: 'user@gmail.com',
64
- });
65
- const daemon = new daemon_js_1.AttachDaemon({
66
- controller,
67
- backend,
68
- ipcDir: (0, node_path_1.join)(dir, 'ipc'),
69
- pidFile: (0, node_path_1.join)(dir, 'daemon.pid'),
70
- pollMs: 25,
71
- claimTtlMs: opts.claimTtlMs ?? 60000,
72
- });
73
- const run = daemon.run();
74
- return { dir, backend, controller, daemon, run };
75
- }
76
- /** Raw file-level op driver; deletes the response after reading (client contract). */
77
- async function op(dir, client, opName, args) {
78
- const ipc = (0, node_path_1.join)(dir, 'ipc');
79
- const id = (0, protocol_js_1.newCmdId)(client);
80
- (0, protocol_js_1.writeAtomicJson)((0, protocol_js_1.cmdPath)(ipc, id), { id, client, op: opName, args });
81
- for (let i = 0; i < 400; i++) {
82
- await new Promise((r) => setTimeout(r, 25));
83
- const resp = (0, protocol_js_1.readJson)((0, protocol_js_1.respPath)(ipc, id));
84
- if (resp) {
85
- try {
86
- (0, node_fs_2.unlinkSync)((0, protocol_js_1.respPath)(ipc, id));
87
- }
88
- catch {
89
- /* raced */
90
- }
91
- return resp;
92
- }
93
- }
94
- throw new Error(`no response to ${opName}`);
95
- }
96
- //# sourceMappingURL=harness.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/harness.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=protocol.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"protocol.test.d.ts","sourceRoot":"","sources":["../../../../src/attach/daemon/__tests__/protocol.test.ts"],"names":[],"mappings":""}