@trusty-squire/mcp 1.1.17 → 1.1.18-rc.2

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 (133) hide show
  1. package/assets/chrome-scope-launcher +11 -0
  2. package/dist/bin.js +11 -6
  3. package/dist/bin.js.map +1 -1
  4. package/dist/bot/broker/daemon.d.ts +3 -6
  5. package/dist/bot/broker/daemon.d.ts.map +1 -1
  6. package/dist/bot/broker/daemon.js +25 -46
  7. package/dist/bot/broker/daemon.js.map +1 -1
  8. package/dist/bot/broker/discovery.d.ts +0 -62
  9. package/dist/bot/broker/discovery.d.ts.map +1 -1
  10. package/dist/bot/broker/discovery.js +73 -342
  11. package/dist/bot/broker/discovery.js.map +1 -1
  12. package/dist/bot/broker/mcp-principal.d.ts +18 -0
  13. package/dist/bot/broker/mcp-principal.d.ts.map +1 -0
  14. package/dist/bot/broker/mcp-principal.js +148 -0
  15. package/dist/bot/broker/mcp-principal.js.map +1 -0
  16. package/dist/bot/broker/mcp-socket-path.d.ts +2 -0
  17. package/dist/bot/broker/mcp-socket-path.d.ts.map +1 -0
  18. package/dist/bot/broker/mcp-socket-path.js +14 -0
  19. package/dist/bot/broker/mcp-socket-path.js.map +1 -0
  20. package/dist/bot/broker/mcp-socket.d.ts +8 -0
  21. package/dist/bot/broker/mcp-socket.d.ts.map +1 -0
  22. package/dist/bot/broker/mcp-socket.js +150 -0
  23. package/dist/bot/broker/mcp-socket.js.map +1 -0
  24. package/dist/bot/broker/operator.d.ts.map +1 -1
  25. package/dist/bot/broker/operator.js +8 -0
  26. package/dist/bot/broker/operator.js.map +1 -1
  27. package/dist/bot/broker/runtime.d.ts +2 -3
  28. package/dist/bot/broker/runtime.d.ts.map +1 -1
  29. package/dist/bot/broker/runtime.js +13 -30
  30. package/dist/bot/broker/runtime.js.map +1 -1
  31. package/dist/bot/broker/status.js +1 -1
  32. package/dist/bot/broker/status.js.map +1 -1
  33. package/dist/bot/broker/transport.d.ts +1 -9
  34. package/dist/bot/broker/transport.d.ts.map +1 -1
  35. package/dist/bot/broker/transport.js +8 -56
  36. package/dist/bot/broker/transport.js.map +1 -1
  37. package/dist/bot/browser-launch-marker.d.ts +4 -0
  38. package/dist/bot/browser-launch-marker.d.ts.map +1 -0
  39. package/dist/bot/browser-launch-marker.js +7 -0
  40. package/dist/bot/browser-launch-marker.js.map +1 -0
  41. package/dist/bot/browser-process-owner.d.ts.map +1 -1
  42. package/dist/bot/browser-process-owner.js +98 -38
  43. package/dist/bot/browser-process-owner.js.map +1 -1
  44. package/dist/bot/browser-process-runtime.d.ts +0 -1
  45. package/dist/bot/browser-process-runtime.d.ts.map +1 -1
  46. package/dist/bot/browser-process-runtime.js +22 -35
  47. package/dist/bot/browser-process-runtime.js.map +1 -1
  48. package/dist/bot/browser-scope.d.ts +15 -0
  49. package/dist/bot/browser-scope.d.ts.map +1 -0
  50. package/dist/bot/browser-scope.js +101 -0
  51. package/dist/bot/browser-scope.js.map +1 -0
  52. package/dist/bot/browser.d.ts +3 -0
  53. package/dist/bot/browser.d.ts.map +1 -1
  54. package/dist/bot/browser.js +11 -3
  55. package/dist/bot/browser.js.map +1 -1
  56. package/dist/bot/capture/verification.d.ts +3 -0
  57. package/dist/bot/capture/verification.d.ts.map +1 -1
  58. package/dist/bot/capture/verification.js +42 -11
  59. package/dist/bot/capture/verification.js.map +1 -1
  60. package/dist/bot/drive-snapshot.d.ts.map +1 -1
  61. package/dist/bot/drive-snapshot.js +3 -0
  62. package/dist/bot/drive-snapshot.js.map +1 -1
  63. package/dist/bot/google-login.js +1 -1
  64. package/dist/bot/google-login.js.map +1 -1
  65. package/dist/bot/operate-drive.d.ts +3 -1
  66. package/dist/bot/operate-drive.d.ts.map +1 -1
  67. package/dist/bot/operate-drive.js +39 -11
  68. package/dist/bot/operate-drive.js.map +1 -1
  69. package/dist/bot/owner-process-reaper.d.ts +14 -92
  70. package/dist/bot/owner-process-reaper.d.ts.map +1 -1
  71. package/dist/bot/owner-process-reaper.js +32 -1067
  72. package/dist/bot/owner-process-reaper.js.map +1 -1
  73. package/dist/bot/profile-path.d.ts +11 -0
  74. package/dist/bot/profile-path.d.ts.map +1 -0
  75. package/dist/bot/profile-path.js +33 -0
  76. package/dist/bot/profile-path.js.map +1 -0
  77. package/dist/bot/profile.d.ts +14 -31
  78. package/dist/bot/profile.d.ts.map +1 -1
  79. package/dist/bot/profile.js +61 -298
  80. package/dist/bot/profile.js.map +1 -1
  81. package/dist/bot/provision-session.d.ts.map +1 -1
  82. package/dist/bot/provision-session.js +11 -10
  83. package/dist/bot/provision-session.js.map +1 -1
  84. package/dist/bot/session/lifecycle.d.ts.map +1 -1
  85. package/dist/bot/session/lifecycle.js +32 -47
  86. package/dist/bot/session/lifecycle.js.map +1 -1
  87. package/dist/bot/session/model.d.ts +1 -2
  88. package/dist/bot/session/model.d.ts.map +1 -1
  89. package/dist/bot/session/model.js.map +1 -1
  90. package/dist/browser-busy.d.ts.map +1 -1
  91. package/dist/browser-busy.js +11 -4
  92. package/dist/browser-busy.js.map +1 -1
  93. package/dist/install/connect-report.d.ts +4 -1
  94. package/dist/install/connect-report.d.ts.map +1 -1
  95. package/dist/install/connect-report.js +6 -19
  96. package/dist/install/connect-report.js.map +1 -1
  97. package/dist/relay.d.ts +3 -0
  98. package/dist/relay.d.ts.map +1 -0
  99. package/dist/relay.js +139 -0
  100. package/dist/relay.js.map +1 -0
  101. package/dist/server-instance-registry.d.ts.map +1 -1
  102. package/dist/server-instance-registry.js +0 -7
  103. package/dist/server-instance-registry.js.map +1 -1
  104. package/dist/server.d.ts +1 -1
  105. package/dist/server.d.ts.map +1 -1
  106. package/dist/server.js +8 -10
  107. package/dist/server.js.map +1 -1
  108. package/dist/session-guard.d.ts +1 -0
  109. package/dist/session-guard.d.ts.map +1 -1
  110. package/dist/session-guard.js +8 -0
  111. package/dist/session-guard.js.map +1 -1
  112. package/dist/tools/credential-mutations.d.ts +20 -20
  113. package/dist/tools/index.d.ts +1 -1
  114. package/dist/tools/index.d.ts.map +1 -1
  115. package/dist/tools/index.js +2 -2
  116. package/dist/tools/index.js.map +1 -1
  117. package/dist/tools/inject-card-schema.d.ts +3 -0
  118. package/dist/tools/inject-card-schema.d.ts.map +1 -0
  119. package/dist/tools/inject-card-schema.js +75 -0
  120. package/dist/tools/inject-card-schema.js.map +1 -0
  121. package/dist/tools/provision-drive-schema.d.ts +20 -0
  122. package/dist/tools/provision-drive-schema.d.ts.map +1 -0
  123. package/dist/tools/provision-drive-schema.js +1114 -0
  124. package/dist/tools/provision-drive-schema.js.map +1 -0
  125. package/package.json +1 -1
  126. package/dist/bot/operator-browser-watchdog.d.ts +0 -127
  127. package/dist/bot/operator-browser-watchdog.d.ts.map +0 -1
  128. package/dist/bot/operator-browser-watchdog.js +0 -438
  129. package/dist/bot/operator-browser-watchdog.js.map +0 -1
  130. package/dist/bot/owner-process-reaper-worker.d.ts +0 -2
  131. package/dist/bot/owner-process-reaper-worker.d.ts.map +0 -1
  132. package/dist/bot/owner-process-reaper-worker.js +0 -17
  133. package/dist/bot/owner-process-reaper-worker.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ #!/bin/sh
2
+ # Playwright's executablePath entrypoint. The broker remains outside the scope.
3
+ if [ "$TRUSTY_SQUIRE_CHROME_CONTAINMENT" = "scope" ]; then
4
+ exec setpriv --pdeathsig INT systemd-run --user --scope --collect \
5
+ --unit "$TRUSTY_SQUIRE_CHROME_SCOPE_UNIT" \
6
+ "$TRUSTY_SQUIRE_CHROME_BINARY" "$@"
7
+ fi
8
+ if [ "$TRUSTY_SQUIRE_CHROME_SET_PRIV" = "1" ]; then
9
+ exec setpriv --pdeathsig INT "$TRUSTY_SQUIRE_CHROME_BINARY" "$@"
10
+ fi
11
+ exec "$TRUSTY_SQUIRE_CHROME_BINARY" "$@"
package/dist/bin.js CHANGED
@@ -13,10 +13,6 @@
13
13
  // "am I main?" guard — duplicated in cli.ts and server.ts, and wrong in
14
14
  // both when launched via a bin symlink — is gone by construction.
15
15
  import process from "node:process";
16
- import { runBrokerDaemon } from "./bot/broker/daemon.js";
17
- import { MissingSessionError } from "./api-client.js";
18
- import { runCli } from "./install/cli.js";
19
- import { runServer } from "./server.js";
20
16
  import { VERSION } from "./version.js";
21
17
  const argv = process.argv.slice(2);
22
18
  // Check for version flags early, before dispatching to subcommands.
@@ -29,21 +25,30 @@ if (isVersionFlag) {
29
25
  }
30
26
  const isServer = argv[0] === "server";
31
27
  const isBroker = argv[0] === "broker";
28
+ const isRelay = argv[0] === "relay";
32
29
  // NB: the `housekeeper` subcommand moved to its own operator-only package
33
30
  // (@trusty-squire/housekeeper, the `ts-housekeeper` bin). `mcp housekeeper`
34
31
  // no longer exists here; the systemd timer invokes ts-housekeeper directly.
35
32
  async function dispatch() {
36
33
  if (isBroker) {
34
+ const { runBrokerDaemon } = await import("./bot/broker/daemon.js");
37
35
  await runBrokerDaemon();
38
36
  return 0;
39
37
  }
40
38
  if (isServer) {
39
+ const { runServer } = await import("./server.js");
41
40
  await runServer();
42
41
  // runServer force-exits when its client disconnects or it receives a
43
42
  // termination signal. A return here is therefore only a normal startup
44
43
  // path with no active stdio loop left to keep alive.
45
44
  return 0;
46
45
  }
46
+ if (isRelay) {
47
+ const { runRelay } = await import("./relay.js");
48
+ await runRelay();
49
+ return 0;
50
+ }
51
+ const { runCli } = await import("./install/cli.js");
47
52
  await runCli(argv);
48
53
  return 0;
49
54
  }
@@ -58,12 +63,12 @@ dispatch()
58
63
  //
59
64
  // The `server` branch exits from runServer's disconnect/signal shutdown
60
65
  // path; `skill` returns its own code via T30 taxonomy.
61
- if (!isServer && !isBroker)
66
+ if (!isServer && !isBroker && !isRelay)
62
67
  process.exit(code);
63
68
  })
64
69
  .catch((err) => {
65
70
  // stderr lands in the host agent's MCP log; keep it useful.
66
- if (err instanceof MissingSessionError) {
71
+ if (err instanceof Error && err.name === "MissingSessionError") {
67
72
  console.error(err.message);
68
73
  }
69
74
  else {
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,sDAAsD;AACtD,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,sEAAsE;AACtE,6CAA6C;AAC7C,+EAA+E;AAC/E,iEAAiE;AACjE,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,wEAAwE;AACxE,kEAAkE;AAClE,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,oEAAoE;AACpE,8DAA8D;AAC9D,oCAAoC;AACpC,MAAM,aAAa,GACjB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAE3F,IAAI,aAAa,EAAE,CAAC;IAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;AACtC,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAE5E,KAAK,UAAU,QAAQ;IACrB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,eAAe,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,EAAE,CAAC;QAClB,qEAAqE;QACrE,uEAAuE;QACvE,qDAAqD;QACrD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,QAAQ,EAAE;KACP,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IACb,iEAAiE;IACjE,sEAAsE;IACtE,mCAAmC;IACnC,8DAA8D;IAC9D,gEAAgE;IAChE,gCAAgC;IAChC,EAAE;IACF,wEAAwE;IACxE,uDAAuD;IACvD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtB,4DAA4D;IAC5D,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;QACvC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,OAAO,CAAC,KAAK,CACX,mBAAmB,OAAO,WAAW,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC3F,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,12 @@
1
- export declare function brokerIdleTimeoutMs(env?: NodeJS.ProcessEnv): number;
2
1
  /**
3
- * Which connections keep the shared Chrome resident. A `status` probe is a
4
- * read: it must never reset the idle countdown, or a consumer following the
5
- * probe-before-act pattern on any cadence under the idle bound would pin the
6
- * browser tree forever.
2
+ * Wire connections that hold a claim on the browser. Status probes are reads
3
+ * and do not count as active clients when explicit shutdown checks drain.
7
4
  */
8
5
  export declare class BrokerClientRegistry {
9
6
  private readonly counting;
10
7
  private readonly probes;
11
8
  admit(clientId: string, probe: boolean): void;
12
- /** Whether this client's traffic should hold off the idle countdown. */
9
+ /** Whether this wire client holds a claim during explicit shutdown. */
13
10
  counts(clientId: string): boolean;
14
11
  touch(clientId: string): void;
15
12
  retire(clientId: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/bot/broker/daemon.ts"],"names":[],"mappings":"AAwBA,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIhF;AAED;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK7C,wEAAwE;IACxE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIjC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B,IAAI,IAAI,OAAO;CAGhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA4HrD"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/bot/broker/daemon.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAK7C,uEAAuE;IACvE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIjC,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK9B,IAAI,IAAI,OAAO;CAGhB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAqHrD"}
@@ -1,31 +1,21 @@
1
1
  import { resolveBrokerSocket } from "./discovery.js";
2
- import { brokerElectionRoot } from "./discovery.js";
3
- import { lstat, mkdir } from "node:fs/promises";
4
- import { dirname } from "node:path";
2
+ import { lstat, rm, unlink } from "node:fs/promises";
3
+ import { dirname, join } from "node:path";
5
4
  import { createHash } from "node:crypto";
6
5
  import { createSessionGuard, setServingAccountId } from "../../session-guard.js";
7
6
  import { setSelfManagedChromeTerminationSignalExitEnabled } from "../browser.js";
8
- import { startOwnerProcessReaper } from "../owner-process-reaper.js";
9
7
  import { acquireProfileOperationGuard, profilePathIdentity, CHROME_PROFILE_DIR, readLockHolder, } from "../profile.js";
10
8
  import { brokerBusyStatus } from "./status.js";
11
9
  import { installBrokerBrowserCustody } from "./custody.js";
12
10
  import { BrokerRuntime } from "./runtime.js";
11
+ import { stopBrowserScope } from "../browser-scope.js";
13
12
  import { OperatorBroker } from "./operator.js";
14
13
  import { BrokerRefusal } from "./refusal.js";
15
14
  import { listenBroker } from "./transport.js";
16
- const MIN_BROKER_IDLE_TIMEOUT_MS = 60_000;
17
- const DEFAULT_BROKER_IDLE_TIMEOUT_MS = 5 * 60_000;
18
- export function brokerIdleTimeoutMs(env = process.env) {
19
- const configured = Number(env.TRUSTY_SQUIRE_BROKER_IDLE_TIMEOUT_MS);
20
- if (!Number.isFinite(configured) || configured <= 0)
21
- return DEFAULT_BROKER_IDLE_TIMEOUT_MS;
22
- return Math.max(MIN_BROKER_IDLE_TIMEOUT_MS, configured);
23
- }
15
+ import { listenSharedMcp } from "./mcp-socket.js";
24
16
  /**
25
- * Which connections keep the shared Chrome resident. A `status` probe is a
26
- * read: it must never reset the idle countdown, or a consumer following the
27
- * probe-before-act pattern on any cadence under the idle bound would pin the
28
- * browser tree forever.
17
+ * Wire connections that hold a claim on the browser. Status probes are reads
18
+ * and do not count as active clients when explicit shutdown checks drain.
29
19
  */
30
20
  export class BrokerClientRegistry {
31
21
  counting = new Set();
@@ -36,7 +26,7 @@ export class BrokerClientRegistry {
36
26
  else
37
27
  this.counting.add(clientId);
38
28
  }
39
- /** Whether this client's traffic should hold off the idle countdown. */
29
+ /** Whether this wire client holds a claim during explicit shutdown. */
40
30
  counts(clientId) {
41
31
  return !this.probes.has(clientId);
42
32
  }
@@ -76,15 +66,17 @@ export async function runBrokerDaemon() {
76
66
  const cellId = createHash("sha256")
77
67
  .update(JSON.stringify([session?.account_id ?? null, profilePathIdentity(CHROME_PROFILE_DIR)]))
78
68
  .digest("hex");
79
- const electionRoot = brokerElectionRoot(CHROME_PROFILE_DIR);
80
- await mkdir(electionRoot, { recursive: true, mode: 0o700 });
69
+ // The fd is the broker's sole profile authority. A crash releases it in the
70
+ // kernel; the remaining inode carries no owner record.
71
+ const profileElection = acquireProfileOperationGuard(CHROME_PROFILE_DIR);
72
+ await stopBrowserScope(CHROME_PROFILE_DIR);
73
+ // One-time upgrade cleanup. Old file leases are not consulted by this broker.
74
+ await rm(join(dirname(profilePathIdentity(CHROME_PROFILE_DIR)), ".trusty-squire-broker-leases"), {
75
+ recursive: true, force: true,
76
+ });
81
77
  const runtime = new BrokerRuntime();
82
78
  installBrokerBrowserCustody(runtime);
83
79
  setSelfManagedChromeTerminationSignalExitEnabled(false);
84
- startOwnerProcessReaper();
85
- // Broker election is anchored beside the canonical profile, independent of
86
- // each client's socket path or TMPDIR.
87
- const profileElection = acquireProfileOperationGuard(CHROME_PROFILE_DIR, electionRoot);
88
80
  runtime.claimProfile();
89
81
  const operator = new OperatorBroker({
90
82
  registryBaseUrl: process.env.ADAPTER_REGISTRY_URL ?? "https://registry.trustysquire.ai",
@@ -92,27 +84,27 @@ export async function runBrokerDaemon() {
92
84
  const clients = new BrokerClientRegistry();
93
85
  let closing = false;
94
86
  let listenerClosed = false;
95
- let idleTimer;
96
- const idleTimeout = brokerIdleTimeoutMs();
97
87
  const drained = () => {
98
88
  const inventory = operator.authority.inventory();
99
89
  return inventory.sessions === 0 && inventory.admitting === 0 && inventory.closing === 0;
100
90
  };
91
+ // Only the elected SQLite lock holder may remove a dead predecessor's socket.
92
+ // The transport itself simply binds and therefore respects live listeners.
93
+ await unlink(path).catch((error) => {
94
+ if (error.code !== "ENOENT")
95
+ throw error;
96
+ });
101
97
  const listener = await listenBroker(path, {
102
98
  connected: async (principal, params) => {
103
99
  const probe = params.probe === true;
104
100
  clients.admit(principal.clientId, probe);
105
101
  if (probe)
106
102
  return;
107
- if (idleTimer !== undefined)
108
- clearTimeout(idleTimer);
109
103
  },
110
104
  call: async (principal, method, params, id) => {
111
105
  const execute = async (registeredSignal) => {
112
106
  if (clients.counts(principal.clientId)) {
113
107
  clients.touch(principal.clientId);
114
- if (idleTimer !== undefined)
115
- clearTimeout(idleTimer);
116
108
  }
117
109
  if (closing)
118
110
  throw new BrokerRefusal("broker_lost", "Broker is shutting down; no operator command was dispatched");
@@ -147,27 +139,13 @@ export async function runBrokerDaemon() {
147
139
  },
148
140
  abort: (principal, requestId) => operator.cancel(principal, requestId),
149
141
  disconnect: async (principal, explicit) => {
150
- const counted = clients.counts(principal.clientId);
151
142
  await operator.disconnect(principal, explicit);
152
143
  clients.retire(principal.clientId);
153
- // A probe never held off the countdown, so its departure must not re-arm one.
154
- if (!counted)
155
- return;
156
- scheduleShutdownIfIdle();
157
144
  },
158
145
  });
159
- function scheduleShutdownIfIdle() {
160
- if (idleTimer !== undefined)
161
- clearTimeout(idleTimer);
162
- idleTimer = undefined;
163
- if (closing || !clients.idle())
164
- return;
165
- idleTimer = setTimeout(() => {
166
- idleTimer = undefined;
167
- void shutdown();
168
- }, idleTimeout);
169
- idleTimer.unref();
170
- }
146
+ // The MCP listener is a separate surface on the elected broker. It does not
147
+ // participate in profile election, Chrome custody, or the broker wire.
148
+ const mcpListener = await listenSharedMcp(operator);
171
149
  const shutdown = async () => {
172
150
  if (closing || !clients.idle() || !drained())
173
151
  return;
@@ -179,6 +157,7 @@ export async function runBrokerDaemon() {
179
157
  }
180
158
  if (!listenerClosed) {
181
159
  listenerClosed = true;
160
+ await mcpListener.close();
182
161
  await listener.close();
183
162
  }
184
163
  profileElection.release();
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/bot/broker/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/bot/broker/daemon.ts"],"names":[],"mappings":"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"}
@@ -1,75 +1,13 @@
1
1
  import { BrokerClient } from "./transport.js";
2
- /** Bounded reclaim windows for a resident broker: SIGTERM first, then
3
- * SIGKILL only if the graceful window does not clear the profile election
4
- * lease and socket. Shared by prior-contract (#823) and same-contract
5
- * stale-credential (#849) reclaim. Internal timing only — never a tool
6
- * parameter or config knob. */
7
- interface ReclaimTimings {
8
- termGraceMs: number;
9
- killGraceMs: number;
10
- pollMs: number;
11
- }
12
- /** Canonical profile discovery is independent of cwd and each client's TMPDIR. */
13
2
  export declare function defaultBrokerSocket(profileDir?: string): string;
14
- /** Where a profile's broker socket lives: the configured override, else the
15
- * derived default. Pure — no directory is created and nothing is asserted, so
16
- * a read-only probe can ask for a path that may not exist. */
17
3
  export declare function brokerSocketPath(profileDir?: string): string;
18
4
  export declare function resolveBrokerSocket(profileDir?: string): string;
19
- export declare function brokerElectionRoot(profileDir?: string): string;
20
- export declare function brokerLaunchRoot(profileDir?: string): string;
21
- /** True when the error means "no live broker socket could be reached at
22
- * all" — no listener (ENOENT), connection refused, or the broker was lost
23
- * mid-handshake. Exported for the ceremony's connect-or-launch decision: a
24
- * genuinely absent broker means "self-launch may serve", while any other
25
- * failure (an identified resident's refusal, a handshake timeout) must
26
- * propagate verbatim instead of being swallowed into a self-launch that
27
- * fail-fasts with the generic profile-busy message. */
28
5
  export declare function isUnavailable(error: unknown): boolean;
29
- /** The refusals that mean another session HAS the browser, as opposed to the
30
- * broker failing at something. `broker_unavailable` is an identified resident
31
- * declining to yield; `profile_busy` is the profile layer itself saying "not
32
- * now". Every other code (a lost connection, a launch timeout, a server-side
33
- * execution failure) is this run breaking, not contention, and a caller told
34
- * to wait for a holder would wait on nothing. */
35
6
  export declare function isBrowserContentionRefusal(error: unknown): boolean;
36
- /** Reclaims a resident prior-contract broker for this profile, if one is
37
- * positively identified: a live daemon that refuses Contract B's `connect`
38
- * but still authenticates the pre-Contract-B `hello` handshake, while
39
- * holding this profile's election lease. A same-contract daemon never
40
- * authenticates `hello` (or is reached only through the ENOENT/unavailable
41
- * path), so it is never a prior-contract reclaim target — stale-credential
42
- * reclaim owns that case separately. Returns whether a reclaim happened;
43
- * throws only when a reclaim was proven possible but could not complete. */
44
- export declare function reclaimPriorContractBrokerIfPresent(path: string, token: string | undefined, connectError: unknown, timings?: ReclaimTimings): Promise<boolean>;
45
- /** Reclaims a resident broker from an older Contract B release, if one is
46
- * positively identified: it refuses the token-less `connect` that this release
47
- * sends (`unauthorized: Authenticate before issuing commands`), it holds this
48
- * profile's election lease with a live, broker-argv-corroborated owner pid on
49
- * this host, and the profile's account binding names the caller's own enrolled
50
- * account. Every release before the token-less handshake gated `connect` on a
51
- * credential, so that refusal is the upgrade signal; the binding is what
52
- * proves the resident is OURS before any signal is sent, and a resident with
53
- * attached clients is never killed.
54
- *
55
- * A broker bound to another account (or carrying no readable binding) is left
56
- * alone and the original refusal propagates. SIGKILL is skipped if a client
57
- * appears after SIGTERM. Returns whether a reclaim happened; throws when the
58
- * resident is identified but must not be (or could not be) reclaimed. */
59
- export declare function reclaimStaleCredentialBrokerIfPresent(path: string, accountId: string | undefined, connectError: unknown, timings?: ReclaimTimings): Promise<boolean>;
60
7
  export declare function brokerEnvironment(env: NodeJS.ProcessEnv, path: string): NodeJS.ProcessEnv;
61
- /**
62
- * What a caller may supply when connecting-or-launching. Nothing here is
63
- * required to reach the broker, and nothing here is an admission credential:
64
- * connecting takes nothing. The enrolled account is carried ONLY so an
65
- * upgrade can positively identify a resident broker from an older release
66
- * before reclaiming it — a pre-Contract-B daemon authenticates the legacy
67
- * `hello` probe with that same agent session token.
68
- */
69
8
  export interface BrokerConnectOptions {
70
9
  accountId?: string | undefined;
71
10
  agentSessionToken?: string | undefined;
72
11
  }
73
12
  export declare function connectOrLaunchBroker(path: string, options?: BrokerConnectOptions): Promise<BrokerClient>;
74
- export {};
75
13
  //# sourceMappingURL=discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/bot/broker/discovery.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,YAAY,EAGb,MAAM,gBAAgB,CAAC;AAOxB;;;;+BAI+B;AAC/B,UAAU,cAAc;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAOD,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAU5E;AAED;;8DAE8D;AAC9D,wBAAgB,gBAAgB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAIzE;AAED,wBAAgB,mBAAmB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAS5E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAE3E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAEzE;AAoBD;;;;;;uDAMuD;AACvD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGrD;AAED;;;;;iDAKiD;AACjD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKlE;AAiJD;;;;;;;4EAO4E;AAC5E,wBAAsB,mCAAmC,CACvD,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,YAAY,EAAE,OAAO,EACrB,OAAO,GAAE,cAAgC,GACxC,OAAO,CAAC,OAAO,CAAC,CAoBlB;AAED;;;;;;;;;;;;;yEAayE;AACzE,wBAAsB,qCAAqC,CACzD,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,YAAY,EAAE,OAAO,EACrB,OAAO,GAAE,cAAgC,GACxC,OAAO,CAAC,OAAO,CAAC,CAoClB;AAuBD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAEzF;AAyBD;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,YAAY,CAAC,CAwEvB"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/bot/broker/discovery.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAA0B,MAAM,gBAAgB,CAAC;AAOtE,wBAAgB,mBAAmB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAG5E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAEzE;AAED,wBAAgB,mBAAmB,CAAC,UAAU,SAAsB,GAAG,MAAM,CAS5E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGrD;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGlE;AAsDD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAEzF;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BnH"}