negotium 0.22.6 → 0.22.7

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 (70) hide show
  1. package/dist/agent-helpers.js +1349 -410
  2. package/dist/agent-helpers.js.map +7 -7
  3. package/dist/background-bash.js +12 -12
  4. package/dist/background-bash.js.map +2 -2
  5. package/dist/browser-runtime.js +81 -52
  6. package/dist/browser-runtime.js.map +4 -4
  7. package/dist/canonical-mcp-bridge.js +9 -8
  8. package/dist/canonical-mcp-bridge.js.map +1 -1
  9. package/dist/{chunk-e59kzyvy.js → chunk-1gznvrth.js} +5 -4
  10. package/dist/{chunk-e59kzyvy.js.map → chunk-1gznvrth.js.map} +2 -2
  11. package/dist/chunk-2mx7fq49.js +6 -0
  12. package/dist/{chunk-bnyvxss3.js.map → chunk-2mx7fq49.js.map} +1 -1
  13. package/dist/{chunk-1mba9m1j.js → chunk-9zn0bkc9.js} +116 -77
  14. package/dist/{chunk-1mba9m1j.js.map → chunk-9zn0bkc9.js.map} +2 -2
  15. package/dist/{chunk-ww8a4ej4.js → chunk-f7p0h1gs.js} +5 -5
  16. package/dist/{chunk-ww8a4ej4.js.map → chunk-f7p0h1gs.js.map} +2 -2
  17. package/dist/{chunk-9a50csg6.js → chunk-pr8p6pap.js} +125 -116
  18. package/dist/{chunk-9a50csg6.js.map → chunk-pr8p6pap.js.map} +7 -7
  19. package/dist/chunk-q5djsg78.js +200 -0
  20. package/dist/chunk-q5djsg78.js.map +9 -0
  21. package/dist/{chunk-1e0nxy7p.js → chunk-z4r7tt2p.js} +12 -12
  22. package/dist/{chunk-1e0nxy7p.js.map → chunk-z4r7tt2p.js.map} +2 -2
  23. package/dist/hosted-agent.js +128 -120
  24. package/dist/hosted-agent.js.map +4 -4
  25. package/dist/main.js +5174 -3278
  26. package/dist/main.js.map +9 -9
  27. package/dist/mcp-catalog.js +4 -4
  28. package/dist/mcp-catalog.js.map +1 -1
  29. package/dist/mcp-factories.js +1563 -632
  30. package/dist/mcp-factories.js.map +7 -7
  31. package/dist/mcp-servers.js +5 -5
  32. package/dist/mcp-servers.js.map +1 -1
  33. package/dist/media.js +3 -3
  34. package/dist/media.js.map +1 -1
  35. package/dist/outbox.js +15 -15
  36. package/dist/outbox.js.map +2 -2
  37. package/dist/platform-runtime.js +7 -7
  38. package/dist/platform-runtime.js.map +1 -1
  39. package/dist/prompts.js +6 -6
  40. package/dist/prompts.js.map +2 -2
  41. package/dist/query-runtime.js +18 -16
  42. package/dist/query-runtime.js.map +2 -2
  43. package/dist/registry.js +20 -19
  44. package/dist/registry.js.map +2 -2
  45. package/dist/rollout.js +41 -41
  46. package/dist/rollout.js.map +2 -2
  47. package/dist/runtime/src/platform/playwright/manager.ts +77 -15
  48. package/dist/runtime/src/storage/api-topics.ts +6 -0
  49. package/dist/runtime/src/storage/browser-profiles.ts +18 -0
  50. package/dist/runtime/src/topics/lifecycle.ts +2 -5
  51. package/dist/runtime/src/topics/update.ts +17 -0
  52. package/dist/runtime/src/types/api.ts +6 -0
  53. package/dist/runtime/src/version.ts +1 -1
  54. package/dist/runtime-gateway.js +12 -12
  55. package/dist/runtime-gateway.js.map +2 -2
  56. package/dist/runtime-helpers.js +54 -52
  57. package/dist/runtime-helpers.js.map +2 -2
  58. package/dist/sqlite.js +5 -3
  59. package/dist/sqlite.js.map +2 -2
  60. package/dist/storage.js +640 -664
  61. package/dist/storage.js.map +3 -3
  62. package/dist/types/packages/core/src/platform/playwright/manager.d.ts +8 -0
  63. package/dist/types/packages/core/src/storage/api-topics.d.ts +1 -0
  64. package/dist/types/packages/core/src/storage/browser-profiles.d.ts +4 -0
  65. package/dist/types/packages/core/src/types/api.d.ts +6 -0
  66. package/dist/types/packages/core/src/version.d.ts +1 -1
  67. package/dist/vault.js +22 -20
  68. package/dist/vault.js.map +2 -2
  69. package/package.json +1 -1
  70. package/dist/chunk-bnyvxss3.js +0 -77
package/dist/registry.js CHANGED
@@ -1,22 +1,23 @@
1
1
  // @bun
2
+ import {
3
+ encodeClaudeCwd,
4
+ writeClaudeRollout
5
+ } from "./chunk-z4r7tt2p.js";
2
6
  import {
3
7
  CLAUDE_EFFORT_VALUES,
4
8
  CODEX_EFFORT_VALUES,
5
9
  MAESTRO_EFFORT_VALUES,
6
- logger,
7
- MODEL_SONNET,
8
- MODEL_OPUS,
9
10
  MODEL_FABLE,
11
+ MODEL_OPUS,
12
+ MODEL_SONNET,
13
+ __require,
10
14
  assertUuidLike,
11
15
  ensureCwdExists,
12
- extractChatPairs2,
16
+ extractChatPairs,
13
17
  hostedCodexHomePath,
14
- writeCodexRollout2
15
- } from "./chunk-9a50csg6.js";
16
- import {
17
- encodeClaudeCwd2,
18
- writeClaudeRollout2
19
- } from "./chunk-1e0nxy7p.js";
18
+ logger,
19
+ writeCodexRollout
20
+ } from "./chunk-pr8p6pap.js";
20
21
 
21
22
  // ../../packages/core/src/agents/claude-registry.ts
22
23
  import { existsSync, mkdirSync, readdirSync, renameSync, unlinkSync } from "fs";
@@ -49,7 +50,7 @@ var claudeRegistry = {
49
50
  };
50
51
  var claudeRegistryOperations = {
51
52
  writeRollout(opts) {
52
- const { sessionId, rolloutPath } = writeClaudeRollout2({
53
+ const { sessionId, rolloutPath } = writeClaudeRollout({
53
54
  cwd: opts.cwd,
54
55
  entries: opts.entries,
55
56
  model: claudeRegistry.expandModelAlias(opts.model ?? claudeRegistry.defaultModel),
@@ -63,7 +64,7 @@ var claudeRegistryOperations = {
63
64
  ...title ? { title } : {}
64
65
  });
65
66
  const projectsRoot = join(homedir(), ".claude", "projects");
66
- const destDir = join(projectsRoot, encodeClaudeCwd2(cwd));
67
+ const destDir = join(projectsRoot, encodeClaudeCwd(cwd));
67
68
  const destPath = join(destDir, `${result.sessionId}.jsonl`);
68
69
  if (!existsSync(destPath)) {
69
70
  const sourcePath = readdirSync(projectsRoot).map((d) => join(projectsRoot, d, `${result.sessionId}.jsonl`)).find((p) => existsSync(p));
@@ -79,7 +80,7 @@ var claudeRegistryOperations = {
79
80
  };
80
81
  },
81
82
  async cleanupRollouts({ cwd, sessionIds }) {
82
- const projectsDir = join(homedir(), ".claude", "projects", encodeClaudeCwd2(cwd));
83
+ const projectsDir = join(homedir(), ".claude", "projects", encodeClaudeCwd(cwd));
83
84
  const failures = [];
84
85
  for (const sid of sessionIds) {
85
86
  const path = join(projectsDir, `${sid}.jsonl`);
@@ -121,7 +122,7 @@ var codexRegistry = {
121
122
  };
122
123
  var codexRegistryOperations = {
123
124
  writeRollout(opts) {
124
- const { threadId, rolloutPath } = writeCodexRollout2({
125
+ const { threadId, rolloutPath } = writeCodexRollout({
125
126
  cwd: opts.cwd,
126
127
  entries: opts.entries,
127
128
  model: opts.model ?? codexRegistry.defaultModel,
@@ -131,7 +132,7 @@ var codexRegistryOperations = {
131
132
  return { sessionId: threadId, rolloutPath };
132
133
  },
133
134
  async forkSession({ parentSessionId }) {
134
- const { forkCodexSession } = await import("./chunk-e59kzyvy.js");
135
+ const { forkCodexSession } = await import("./chunk-1gznvrth.js");
135
136
  return await forkCodexSession(parentSessionId);
136
137
  },
137
138
  async cleanupRollouts({ sessionIds }) {
@@ -232,7 +233,7 @@ function writeRollout(options) {
232
233
  ensureCwdExists(options.cwd);
233
234
  const path = maestroSessionPath(sessionId);
234
235
  mkdirSync2(maestroSessionsDir(), { recursive: true });
235
- const messages = extractChatPairs2(options.entries).flatMap((pair) => [
236
+ const messages = extractChatPairs(options.entries).flatMap((pair) => [
236
237
  { role: "user", content: nonEmptyTurnText(pair.userText) },
237
238
  { role: "assistant", content: nonEmptyTurnText(pair.assistantText) }
238
239
  ]);
@@ -328,8 +329,8 @@ function getRegistryOperations(agent) {
328
329
  var getRegistry2 = (agent) => getRegistry(agent);
329
330
  var getRegistryOperations2 = (agent) => getRegistryOperations(agent);
330
331
  export {
331
- getRegistry2 as getRegistry,
332
- getRegistryOperations2 as getRegistryOperations
332
+ getRegistryOperations2 as getRegistryOperations,
333
+ getRegistry2 as getRegistry
333
334
  };
334
335
 
335
- //# debugId=25A9BDC88E6483FA64756E2164756E21
336
+ //# debugId=FF2E0073AF14F8B464756E2164756E21
@@ -8,7 +8,7 @@
8
8
  "import { claudeRegistry, claudeRegistryOperations } from \"#agents/claude-registry\";\nimport { codexRegistry, codexRegistryOperations } from \"#agents/codex-registry\";\nimport type { AgentRegistry, AgentRegistryOperations } from \"#agents/contracts\";\nimport { maestroRegistry, maestroRegistryOperations } from \"#agents/maestro-registry\";\nimport type { AgentKind } from \"#types\";\n\nexport type {\n AgentRegistry,\n AgentRegistryOperations,\n CleanupRolloutsOptions,\n ForkRegistryOptions,\n ForkRegistryResult,\n WriteRolloutOptions,\n WriteRolloutResult,\n} from \"#agents/contracts\";\n\nconst REGISTRIES: Record<AgentKind, AgentRegistry> = {\n claude: claudeRegistry,\n codex: codexRegistry,\n maestro: maestroRegistry,\n};\n\nexport function getRegistry(agent: AgentKind): AgentRegistry {\n return REGISTRIES[agent];\n}\n\nconst OPERATIONS: Record<AgentKind, AgentRegistryOperations> = {\n claude: claudeRegistryOperations,\n codex: codexRegistryOperations,\n maestro: maestroRegistryOperations,\n};\n\nexport function getRegistryOperations(agent: AgentKind): AgentRegistryOperations {\n return OPERATIONS[agent];\n}\n",
9
9
  "import {\n type AgentRegistry,\n type AgentRegistryOperations,\n type CleanupRolloutsOptions,\n type ForkRegistryOptions,\n type ForkRegistryResult,\n getRegistry as resolveCoreRegistry,\n getRegistryOperations as resolveCoreRegistryOperations,\n type WriteRolloutOptions,\n type WriteRolloutResult,\n} from \"@negotium/core/registry\";\n\nexport type {\n AgentRegistry,\n AgentRegistryOperations,\n CleanupRolloutsOptions,\n ForkRegistryOptions,\n ForkRegistryResult,\n WriteRolloutOptions,\n WriteRolloutResult,\n};\n\nexport const getRegistry: typeof resolveCoreRegistry = (agent) => resolveCoreRegistry(agent);\n\nexport const getRegistryOperations: typeof resolveCoreRegistryOperations = (agent) =>\n resolveCoreRegistryOperations(agent);\n"
10
10
  ],
11
- "mappings": "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",
12
- "debugId": "25A9BDC88E6483FA64756E2164756E21",
11
+ "mappings": "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",
12
+ "debugId": "FF2E0073AF14F8B464756E2164756E21",
13
13
  "names": []
14
14
  }
package/dist/rollout.js CHANGED
@@ -1,46 +1,12 @@
1
1
  // @bun
2
2
  import {
3
- configureRolloutHost2,
4
- extractChatPairs2,
5
- extractLatestCodexPatchPreview2,
6
- extractCodexPatchCallIds2,
7
- readCodexPatchCallIds2,
8
- readLatestCodexPatchPreview2,
9
- extractLatestCodexContextUsage2,
10
- readLatestCodexContextUsage2,
11
- migrateCodexRolloutNativeMultiAgentMetadata2,
12
- writeCodexRollout2,
13
- decodeUuidV7Timestamp2
14
- } from "./chunk-9a50csg6.js";
3
+ encodeClaudeCwd,
4
+ repairPoisonedRollout,
5
+ writeClaudeRollout
6
+ } from "./chunk-z4r7tt2p.js";
15
7
  import {
16
- encodeClaudeCwd2,
17
- writeClaudeRollout2,
18
- repairPoisonedRollout2
19
- } from "./chunk-1e0nxy7p.js";
20
-
21
- // src/rollout.ts
22
- import { fileURLToPath } from "url";
23
- configureRolloutHost2({
24
- fixturesDir: fileURLToPath(new URL("./runtime/src/agents/fixtures", import.meta.url))
25
- });
26
- var configureRolloutHost = configureRolloutHost2;
27
- var decodeUuidV7Timestamp = decodeUuidV7Timestamp2;
28
- var encodeClaudeCwd = encodeClaudeCwd2;
29
- var extractCodexPatchCallIds = extractCodexPatchCallIds2;
30
- var extractChatPairs = extractChatPairs2;
31
- var extractLatestCodexContextUsage = extractLatestCodexContextUsage2;
32
- var extractLatestCodexPatchPreview = extractLatestCodexPatchPreview2;
33
- var migrateCodexRolloutNativeMultiAgentMetadata = migrateCodexRolloutNativeMultiAgentMetadata2;
34
- var readCodexPatchCallIds = readCodexPatchCallIds2;
35
- var readLatestCodexContextUsage = readLatestCodexContextUsage2;
36
- var readLatestCodexPatchPreview = readLatestCodexPatchPreview2;
37
- var repairPoisonedRollout = repairPoisonedRollout2;
38
- var writeClaudeRollout = writeClaudeRollout2;
39
- var writeCodexRollout = writeCodexRollout2;
40
- export {
41
8
  configureRolloutHost,
42
9
  decodeUuidV7Timestamp,
43
- encodeClaudeCwd,
44
10
  extractChatPairs,
45
11
  extractCodexPatchCallIds,
46
12
  extractLatestCodexContextUsage,
@@ -49,9 +15,43 @@ export {
49
15
  readCodexPatchCallIds,
50
16
  readLatestCodexContextUsage,
51
17
  readLatestCodexPatchPreview,
52
- repairPoisonedRollout,
53
- writeClaudeRollout,
54
18
  writeCodexRollout
19
+ } from "./chunk-pr8p6pap.js";
20
+
21
+ // src/rollout.ts
22
+ import { fileURLToPath } from "url";
23
+ configureRolloutHost({
24
+ fixturesDir: fileURLToPath(new URL("./runtime/src/agents/fixtures", import.meta.url))
25
+ });
26
+ var configureRolloutHost2 = configureRolloutHost;
27
+ var decodeUuidV7Timestamp2 = decodeUuidV7Timestamp;
28
+ var encodeClaudeCwd2 = encodeClaudeCwd;
29
+ var extractCodexPatchCallIds2 = extractCodexPatchCallIds;
30
+ var extractChatPairs2 = extractChatPairs;
31
+ var extractLatestCodexContextUsage2 = extractLatestCodexContextUsage;
32
+ var extractLatestCodexPatchPreview2 = extractLatestCodexPatchPreview;
33
+ var migrateCodexRolloutNativeMultiAgentMetadata2 = migrateCodexRolloutNativeMultiAgentMetadata;
34
+ var readCodexPatchCallIds2 = readCodexPatchCallIds;
35
+ var readLatestCodexContextUsage2 = readLatestCodexContextUsage;
36
+ var readLatestCodexPatchPreview2 = readLatestCodexPatchPreview;
37
+ var repairPoisonedRollout2 = repairPoisonedRollout;
38
+ var writeClaudeRollout2 = writeClaudeRollout;
39
+ var writeCodexRollout2 = writeCodexRollout;
40
+ export {
41
+ writeCodexRollout2 as writeCodexRollout,
42
+ writeClaudeRollout2 as writeClaudeRollout,
43
+ repairPoisonedRollout2 as repairPoisonedRollout,
44
+ readLatestCodexPatchPreview2 as readLatestCodexPatchPreview,
45
+ readLatestCodexContextUsage2 as readLatestCodexContextUsage,
46
+ readCodexPatchCallIds2 as readCodexPatchCallIds,
47
+ migrateCodexRolloutNativeMultiAgentMetadata2 as migrateCodexRolloutNativeMultiAgentMetadata,
48
+ extractLatestCodexPatchPreview2 as extractLatestCodexPatchPreview,
49
+ extractLatestCodexContextUsage2 as extractLatestCodexContextUsage,
50
+ extractCodexPatchCallIds2 as extractCodexPatchCallIds,
51
+ extractChatPairs2 as extractChatPairs,
52
+ encodeClaudeCwd2 as encodeClaudeCwd,
53
+ decodeUuidV7Timestamp2 as decodeUuidV7Timestamp,
54
+ configureRolloutHost2 as configureRolloutHost
55
55
  };
56
56
 
57
- //# debugId=78F80A25C662426764756E2164756E21
57
+ //# debugId=4271882C097E879764756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import { fileURLToPath } from \"node:url\";\nimport * as coreRollout from \"@negotium/core/rollout\";\n\ncoreRollout.configureRolloutHost({\n fixturesDir: fileURLToPath(new URL(\"./runtime/src/agents/fixtures\", import.meta.url)),\n});\n\nexport type {\n ChatPair,\n ClaudeRolloutOptions,\n ClaudeRolloutResult,\n CodexContextUsage,\n CodexPatchChangePreview,\n CodexPatchPreview,\n CodexRolloutOptions,\n CodexRolloutResult,\n RolloutHostOptions,\n} from \"@negotium/core/rollout\";\n\nexport const configureRolloutHost = coreRollout.configureRolloutHost;\nexport const decodeUuidV7Timestamp = coreRollout.decodeUuidV7Timestamp;\nexport const encodeClaudeCwd = coreRollout.encodeClaudeCwd;\nexport const extractCodexPatchCallIds = coreRollout.extractCodexPatchCallIds;\nexport const extractChatPairs = coreRollout.extractChatPairs;\nexport const extractLatestCodexContextUsage = coreRollout.extractLatestCodexContextUsage;\nexport const extractLatestCodexPatchPreview = coreRollout.extractLatestCodexPatchPreview;\nexport const migrateCodexRolloutNativeMultiAgentMetadata =\n coreRollout.migrateCodexRolloutNativeMultiAgentMetadata;\nexport const readCodexPatchCallIds = coreRollout.readCodexPatchCallIds;\nexport const readLatestCodexContextUsage = coreRollout.readLatestCodexContextUsage;\nexport const readLatestCodexPatchPreview = coreRollout.readLatestCodexPatchPreview;\nexport const repairPoisonedRollout = coreRollout.repairPoisonedRollout;\nexport const writeClaudeRollout = coreRollout.writeClaudeRollout;\nexport const writeCodexRollout = coreRollout.writeCodexRollout;\n"
6
6
  ],
7
- "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAGY,sBAAqB;AAAA,EAC/B,aAAa,cAAc,IAAI,IAAI,iCAAiC,YAAY,GAAG,CAAC;AACtF,CAAC;AAcM,IAAM,uBAAmC;AACzC,IAAM,wBAAoC;AAC1C,IAAM,kBAA8B;AACpC,IAAM,2BAAuC;AAC7C,IAAM,mBAA+B;AACrC,IAAM,iCAA6C;AACnD,IAAM,iCAA6C;AACnD,IAAM,8CACC;AACP,IAAM,wBAAoC;AAC1C,IAAM,8BAA0C;AAChD,IAAM,8BAA0C;AAChD,IAAM,wBAAoC;AAC1C,IAAM,qBAAiC;AACvC,IAAM,oBAAgC;",
8
- "debugId": "78F80A25C662426764756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAGY,qBAAqB;AAAA,EAC/B,aAAa,cAAc,IAAI,IAAI,iCAAiC,YAAY,GAAG,CAAC;AACtF,CAAC;AAcM,IAAM,wBAAmC;AACzC,IAAM,yBAAoC;AAC1C,IAAM,mBAA8B;AACpC,IAAM,4BAAuC;AAC7C,IAAM,oBAA+B;AACrC,IAAM,kCAA6C;AACnD,IAAM,kCAA6C;AACnD,IAAM,+CACC;AACP,IAAM,yBAAoC;AAC1C,IAAM,+BAA0C;AAChD,IAAM,+BAA0C;AAChD,IAAM,yBAAoC;AAC1C,IAAM,sBAAiC;AACvC,IAAM,qBAAgC;",
8
+ "debugId": "4271882C097E879764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -43,9 +43,11 @@ import { sanitizeTopicName } from "#security/sanitize";
43
43
  import {
44
44
  assignTopicBrowserProfile,
45
45
  getBrowserProfileOwner,
46
+ getTopicBrowserConnectPort,
46
47
  getTopicBrowserProfile,
47
48
  hasBrowserProfileTopic,
48
49
  normalizeBrowserProfileName,
50
+ setTopicBrowserConnectPort,
49
51
  } from "#storage/browser-profiles";
50
52
  import {
51
53
  browserCdpIsLost,
@@ -136,6 +138,8 @@ export function resolvePlaywrightTopicBinding(
136
138
 
137
139
  function defaultTopicBinding(userId: string, topic: string | undefined): PlaywrightProfileBinding {
138
140
  if (!topic) return managerHost.resolveNamedBinding(userId, "default");
141
+ const connectPort = getTopicBrowserConnectPort(topic);
142
+ if (connectPort !== undefined) return connectBinding(connectPort);
139
143
  const ownerId = getBrowserProfileOwner(topic, userId);
140
144
  const profile = getTopicBrowserProfile(topic);
141
145
  return managerHost.resolveNamedBinding(ownerId, profile);
@@ -167,6 +171,43 @@ function validateProfileBinding(binding: PlaywrightProfileBinding): PlaywrightPr
167
171
  return Object.freeze({ ...binding });
168
172
  }
169
173
 
174
+ /**
175
+ * Every room pointing at one host-run Chrome shares one Browser.rs attached to
176
+ * it, whoever owns the room: the Chrome, not a node profile, is the identity.
177
+ */
178
+ function connectBinding(port: number): PlaywrightProfileBinding {
179
+ return { instanceKey: `connect:${port}`, ownerId: "local", profile: `connect-${port}` };
180
+ }
181
+
182
+ function parseConnectInstanceKey(instanceKey: string): number | undefined {
183
+ const match = /^connect:(\d+)$/.exec(instanceKey);
184
+ return match ? Number(match[1]) : undefined;
185
+ }
186
+
187
+ /**
188
+ * Browser.rs argv for one instance. A `connect:` instance attaches to the
189
+ * host's Chrome through `--connect`, which overrides any inherited
190
+ * `AB_CONNECT`; Browser.rs still requires a `--user-data-dir` it then ignores.
191
+ */
192
+ export function browserRsArgs(instanceKey: string, port: number, userDataDir: string): string[] {
193
+ const connectPort = parseConnectInstanceKey(instanceKey);
194
+ return [
195
+ "--port",
196
+ String(port),
197
+ // Pin to IPv4 so every MCP client reaches the same address family and a
198
+ // future launcher default cannot resolve localhost to an IPv6-only bind.
199
+ "--host",
200
+ "127.0.0.1",
201
+ // Keep the browser visible. Do not rely on the launcher's implicit
202
+ // default: an explicit flag prevents wrapper/upstream default changes
203
+ // from silently switching topic browsers back to headless mode.
204
+ "--headed",
205
+ "--user-data-dir",
206
+ userDataDir,
207
+ ...(connectPort === undefined ? [] : ["--connect", String(connectPort)]),
208
+ ];
209
+ }
210
+
170
211
  function defaultNamedBinding(_ownerId: string, rawProfile: string): PlaywrightProfileBinding {
171
212
  const profile = normalizeBrowserProfileName(rawProfile);
172
213
  const instanceKey = `profile:${profile}`;
@@ -317,6 +358,10 @@ interface InstanceKeyParts {
317
358
  }
318
359
 
319
360
  function parseInstanceKey(instanceKey: string): InstanceKeyParts {
361
+ const connectPort = parseConnectInstanceKey(instanceKey);
362
+ // The leading underscore is outside the profile-name grammar, so no named
363
+ // profile can share (or delete) the placeholder dir of a connect instance.
364
+ if (connectPort !== undefined) return { ownerId: "local", profile: `_connect-${connectPort}` };
320
365
  const shared = /^profile:(.+)$/.exec(instanceKey);
321
366
  if (shared && !shared[1]!.includes(":")) {
322
367
  return { ownerId: "local", profile: normalizeBrowserProfileName(shared[1]!) };
@@ -776,20 +821,7 @@ async function spawnPlaywright(
776
821
  const port = reservedPort ?? (await allocatePort());
777
822
  mkdirSync(userDataDir, { recursive: true });
778
823
 
779
- const mcpArgs = [
780
- "--port",
781
- String(port),
782
- // Pin to IPv4 so every MCP client reaches the same address family and a
783
- // future launcher default cannot resolve localhost to an IPv6-only bind.
784
- "--host",
785
- "127.0.0.1",
786
- // Keep the browser visible. Do not rely on the launcher's implicit
787
- // default: an explicit flag prevents wrapper/upstream default changes
788
- // from silently switching topic browsers back to headless mode.
789
- "--headed",
790
- "--user-data-dir",
791
- userDataDir,
792
- ];
824
+ const mcpArgs = browserRsArgs(instanceKey, port, userDataDir);
793
825
  // Pass the egress proxy to the child through the environment rather than
794
826
  // argv so the credentials never surface in `ps`/`/proc` command lines. The
795
827
  // Browser.rs currently rejects this configuration rather than bypassing it.
@@ -1108,7 +1140,26 @@ export async function closeBrowserOwnerTabs(
1108
1140
  rawProfile: string,
1109
1141
  owner: string,
1110
1142
  ): Promise<number> {
1111
- const binding = resolvePlaywrightProfileBinding(ownerId, rawProfile);
1143
+ return closeBindingOwnerTabs(resolvePlaywrightProfileBinding(ownerId, rawProfile), owner);
1144
+ }
1145
+
1146
+ /** Close a deleted topic's tabs on the browser its turns used. */
1147
+ export function closeTopicBrowserTabs(userId: string, topicId: string): Promise<number> {
1148
+ const connectPort = getTopicBrowserConnectPort(topicId);
1149
+ const binding =
1150
+ connectPort === undefined
1151
+ ? resolvePlaywrightProfileBinding(
1152
+ getBrowserProfileOwner(topicId, userId),
1153
+ getTopicBrowserProfile(topicId),
1154
+ )
1155
+ : connectBinding(connectPort);
1156
+ return closeBindingOwnerTabs(binding, `topic:${topicId}`);
1157
+ }
1158
+
1159
+ async function closeBindingOwnerTabs(
1160
+ binding: PlaywrightProfileBinding,
1161
+ owner: string,
1162
+ ): Promise<number> {
1112
1163
  const instanceKey = binding.instanceKey;
1113
1164
  const inProgress = spawning.get(instanceKey);
1114
1165
  if (inProgress) await inProgress;
@@ -1259,6 +1310,9 @@ export async function cloneProfileForChild(opts: {
1259
1310
  if (srcOwner === dstOwner && hasBrowserProfileTopic(opts.dstTopic)) {
1260
1311
  const profile = getTopicBrowserProfile(opts.srcTopic);
1261
1312
  assignTopicBrowserProfile({ topicId: opts.dstTopic, actorUserId: dstOwner, profile });
1313
+ // A child of a room on the host's Chrome keeps working in that Chrome;
1314
+ // falling back to a managed profile would drop the login it was made for.
1315
+ setTopicBrowserConnectPort(opts.dstTopic, getTopicBrowserConnectPort(opts.srcTopic) ?? null);
1262
1316
  const binding = resolvePlaywrightProfileBinding(srcOwner, profile);
1263
1317
  const sharedDir = resolveUserDataDir(binding.instanceKey);
1264
1318
  return {
@@ -1277,6 +1331,14 @@ export async function cloneProfileForChild(opts: {
1277
1331
  if (srcDir === dstDir) {
1278
1332
  return { copied: false, srcDir, dstDir, reason: "same-dir" };
1279
1333
  }
1334
+ // A connect instance's dir is an unused placeholder; the real profile lives
1335
+ // in the host's Chrome, which is never copied, quiesced or overwritten.
1336
+ if (
1337
+ parseConnectInstanceKey(srcKey) !== undefined ||
1338
+ parseConnectInstanceKey(dstKey) !== undefined
1339
+ ) {
1340
+ return { copied: false, srcDir, dstDir, reason: "connect-binding" };
1341
+ }
1280
1342
 
1281
1343
  return withPlaywrightInstanceMaintenance([srcKey, dstKey], async () => {
1282
1344
  // Quiesce parent if running so Chrome flushes SQLite (Cookies, Login Data)
@@ -319,6 +319,7 @@ function initializeApiTopicsSchema(): void {
319
319
  surface_scope TEXT,
320
320
  browser_profile TEXT NOT NULL DEFAULT 'default',
321
321
  browser_profile_owner TEXT,
322
+ browser_connect_port INTEGER,
322
323
  session_id TEXT,
323
324
  CHECK (
324
325
  (kind = 'channel' AND response_policy = 'off' AND agent IS NULL) OR
@@ -493,6 +494,9 @@ function initializeApiTopicsSchema(): void {
493
494
  if (!tableColumns("api_topics").has("browser_profile_owner")) {
494
495
  db.exec("ALTER TABLE api_topics ADD COLUMN browser_profile_owner TEXT");
495
496
  }
497
+ if (!tableColumns("api_topics").has("browser_connect_port")) {
498
+ db.exec("ALTER TABLE api_topics ADD COLUMN browser_connect_port INTEGER");
499
+ }
496
500
  if (!tableColumns("api_topics").has("subagent_report_mode")) {
497
501
  db.exec("ALTER TABLE api_topics ADD COLUMN subagent_report_mode TEXT NOT NULL DEFAULT 'auto'");
498
502
  }
@@ -907,6 +911,7 @@ export interface TopicRow {
907
911
  surface: string | null;
908
912
  surface_scope: string | null;
909
913
  browser_profile_owner: string | null;
914
+ browser_connect_port: number | null;
910
915
  session_id: string | null;
911
916
  }
912
917
 
@@ -1007,6 +1012,7 @@ function rowToDto(
1007
1012
  visibility: normalizeTopicVisibility(r.visibility),
1008
1013
  surface: normalizeTopicSurface(r.surface),
1009
1014
  surfaceScope: normalizeSurfaceScope(r.surface_scope),
1015
+ ...(r.browser_connect_port != null ? { browserConnectPort: r.browser_connect_port } : {}),
1010
1016
  };
1011
1017
  }
1012
1018
 
@@ -57,6 +57,24 @@ export function getTopicBrowserProfile(topicId: string): string {
57
57
  return value || DEFAULT_BROWSER_PROFILE;
58
58
  }
59
59
 
60
+ /** Unprivileged TCP ports only: a CDP endpoint never needs a system port. */
61
+ export function isBrowserConnectPort(value: unknown): value is number {
62
+ return Number.isInteger(value) && (value as number) >= 1024 && (value as number) <= 65535;
63
+ }
64
+
65
+ export function getTopicBrowserConnectPort(topicId: string): number | undefined {
66
+ const value = db
67
+ .query<{ browser_connect_port: number | null }, string>(
68
+ "SELECT browser_connect_port FROM api_topics WHERE id = ?",
69
+ )
70
+ .get(topicId)?.browser_connect_port;
71
+ return isBrowserConnectPort(value) ? value : undefined;
72
+ }
73
+
74
+ export function setTopicBrowserConnectPort(topicId: string, port: number | null): void {
75
+ db.query("UPDATE api_topics SET browser_connect_port = ? WHERE id = ?").run(port, topicId);
76
+ }
77
+
60
78
  export function hasBrowserProfileTopic(topicId: string): boolean {
61
79
  return Boolean(
62
80
  db.query<{ id: string }, string>("SELECT id FROM api_topics WHERE id = ?").get(topicId),
@@ -21,7 +21,7 @@ import { NODE_ID, resolveTopicWorkspaceDir } from "#platform/config";
21
21
  import { GENERAL_TOPIC_ID } from "#platform/constants";
22
22
  import { delay } from "#platform/delay";
23
23
  import { logger } from "#platform/logger";
24
- import { closeBrowserOwnerTabs, deleteTopicProfileDir } from "#platform/playwright/manager";
24
+ import { closeTopicBrowserTabs, deleteTopicProfileDir } from "#platform/playwright/manager";
25
25
  import { abortRoom, getRoomQuery, interSessionQueue } from "#query/active-rooms";
26
26
  import { cleanupSessionInboxFiles } from "#query/session-inbox-cleanup";
27
27
  import { clearQueryState } from "#query/state";
@@ -39,7 +39,6 @@ import {
39
39
  listTopics,
40
40
  reparentTopicChildren,
41
41
  } from "#storage/api-topics";
42
- import { getBrowserProfileOwner, getTopicBrowserProfile } from "#storage/browser-profiles";
43
42
  import { db } from "#storage/forum-db";
44
43
  import { getRuntimeTurnLease } from "#storage/runtime-leases";
45
44
  import {
@@ -355,10 +354,8 @@ async function deleteTopicCascadeImpl(
355
354
  // Background shells remain topic-owned. Browser profiles are shared, so
356
355
  // deletion closes this topic's tabs without deleting login state.
357
356
  killBgBash(userId, topicId);
358
- const browserProfileOwner = getBrowserProfileOwner(topicId, userId);
359
- const browserProfile = getTopicBrowserProfile(topicId);
360
357
  try {
361
- await closeBrowserOwnerTabs(browserProfileOwner, browserProfile, `topic:${topicId}`);
358
+ await closeTopicBrowserTabs(userId, topicId);
362
359
  } catch (err) {
363
360
  logger.warn({ err, topicId }, "deleteTopicCascade: browser owner cleanup failed");
364
361
  }
@@ -25,6 +25,7 @@ import {
25
25
  setApiTopicAgent,
26
26
  upsertTopic,
27
27
  } from "#storage/api-topics";
28
+ import { isBrowserConnectPort, setTopicBrowserConnectPort } from "#storage/browser-profiles";
28
29
  import { db } from "#storage/forum-db";
29
30
  import { TopicValidationError } from "#topics/create";
30
31
  import { type AgentKind, type EffortLevel, isAgentKind } from "#types";
@@ -48,6 +49,11 @@ export interface UpdateTopicSettingsOptions {
48
49
  * "Topic-Specific Instructions". An empty string clears them.
49
50
  */
50
51
  description?: string;
52
+ /**
53
+ * CDP port (1024-65535) of a Chrome the host already runs for this room;
54
+ * its browser tools attach there. `null` returns the room to its profile.
55
+ */
56
+ browserConnectPort?: number | null;
51
57
  }
52
58
 
53
59
  /** Room for a full work procedure (Otium tax rooms keep one per room), still small next to a turn's prompt. */
@@ -169,6 +175,14 @@ export function updateTopicSettings(opts: UpdateTopicSettingsOptions): TopicDto
169
175
  description = trimmed || undefined;
170
176
  }
171
177
 
178
+ if (
179
+ opts.browserConnectPort !== undefined &&
180
+ opts.browserConnectPort !== null &&
181
+ !isBrowserConnectPort(opts.browserConnectPort)
182
+ ) {
183
+ throw new TopicValidationError("browserConnectPort must be an integer from 1024 to 65535");
184
+ }
185
+
172
186
  if (opts.agent !== undefined && opts.agent !== null && !isAgentKind(opts.agent)) {
173
187
  throw new TopicValidationError(`Unknown agent '${opts.agent}'`);
174
188
  }
@@ -250,6 +264,9 @@ export function updateTopicSettings(opts: UpdateTopicSettingsOptions): TopicDto
250
264
  defaultEffort,
251
265
  };
252
266
  upsertTopic(next);
267
+ if (opts.browserConnectPort !== undefined) {
268
+ setTopicBrowserConnectPort(next.id, opts.browserConnectPort);
269
+ }
253
270
 
254
271
  // `resolveTopicTurnExecution` reads `config.model ?? topic.defaultModel`, so a
255
272
  // stale per-topic override (set earlier by `/model` in the terminal) would
@@ -71,6 +71,12 @@ export interface TopicDto {
71
71
  title: string;
72
72
  kind?: TopicKind;
73
73
  description?: string;
74
+ /**
75
+ * CDP port of a Chrome the host already runs for this room. Its browser
76
+ * tools attach to that Chrome instead of a managed profile; the node never
77
+ * launches, kills or deletes it.
78
+ */
79
+ browserConnectPort?: number;
74
80
  /** AI agent invited to this topic. */
75
81
  agent?: AgentKind;
76
82
  /** Canonical base model alias used by newer clients. */
@@ -1 +1 @@
1
- export const NEGOTIUM_VERSION = "0.22.6";
1
+ export const NEGOTIUM_VERSION = "0.22.7";
@@ -152,15 +152,15 @@ async function* parseRuntimeGatewaySse(body) {
152
152
  const line = buffer.slice(0, newline);
153
153
  buffer = buffer.slice(newline + 1);
154
154
  if (line === "") {
155
- const parsed = flush();
156
- if (parsed)
157
- yield parsed;
155
+ const parsed2 = flush();
156
+ if (parsed2)
157
+ yield parsed2;
158
158
  } else if (line.startsWith("event:")) {
159
159
  event = line.slice(6).trim() || "message";
160
160
  } else if (line.startsWith("id:")) {
161
- const parsed = Number.parseInt(line.slice(3).trim(), 10);
162
- if (Number.isFinite(parsed))
163
- id = parsed;
161
+ const parsed2 = Number.parseInt(line.slice(3).trim(), 10);
162
+ if (Number.isFinite(parsed2))
163
+ id = parsed2;
164
164
  } else if (line.startsWith("data:")) {
165
165
  data.push(line.slice(5).trimStart());
166
166
  }
@@ -442,12 +442,12 @@ class RuntimeGatewayClient {
442
442
  }
443
443
  }
444
444
  export {
445
- RUNTIME_GATEWAY_CONTROL_PATH,
446
- RUNTIME_GATEWAY_VERSION,
447
- RuntimeGatewayClient,
448
- RuntimeGatewayError,
445
+ parseRuntimeGatewaySse,
449
446
  parseHostMcpServers,
450
- parseRuntimeGatewaySse
447
+ RuntimeGatewayError,
448
+ RuntimeGatewayClient,
449
+ RUNTIME_GATEWAY_VERSION,
450
+ RUNTIME_GATEWAY_CONTROL_PATH
451
451
  };
452
452
 
453
- //# debugId=CE27A0854B2EC79764756E2164756E21
453
+ //# debugId=A92FEBD510CE277D64756E2164756E21