negotium 0.22.6 → 0.22.8

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 (73) hide show
  1. package/dist/agent-helpers.js +1369 -413
  2. package/dist/agent-helpers.js.map +8 -8
  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-2mx7fq49.js +6 -0
  10. package/dist/{chunk-bnyvxss3.js.map → chunk-2mx7fq49.js.map} +1 -1
  11. package/dist/{chunk-e59kzyvy.js → chunk-5czvhd0g.js} +5 -4
  12. package/dist/{chunk-e59kzyvy.js.map → chunk-5czvhd0g.js.map} +2 -2
  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 +5191 -3270
  26. package/dist/main.js.map +12 -12
  27. package/dist/mcp-catalog.js +4 -4
  28. package/dist/mcp-catalog.js.map +1 -1
  29. package/dist/mcp-factories.js +1583 -635
  30. package/dist/mcp-factories.js.map +8 -8
  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/mcp-runtime-host.ts +1 -0
  48. package/dist/runtime/src/platform/playwright/manager.ts +77 -15
  49. package/dist/runtime/src/runtime/visuals.ts +47 -11
  50. package/dist/runtime/src/storage/api-topics.ts +6 -0
  51. package/dist/runtime/src/storage/browser-profiles.ts +18 -0
  52. package/dist/runtime/src/topics/lifecycle.ts +2 -5
  53. package/dist/runtime/src/topics/update.ts +17 -0
  54. package/dist/runtime/src/types/api.ts +6 -0
  55. package/dist/runtime/src/version.ts +1 -1
  56. package/dist/runtime-gateway.js +12 -12
  57. package/dist/runtime-gateway.js.map +2 -2
  58. package/dist/runtime-helpers.js +54 -52
  59. package/dist/runtime-helpers.js.map +2 -2
  60. package/dist/sqlite.js +5 -3
  61. package/dist/sqlite.js.map +2 -2
  62. package/dist/storage.js +640 -664
  63. package/dist/storage.js.map +3 -3
  64. package/dist/types/packages/core/src/platform/playwright/manager.d.ts +8 -0
  65. package/dist/types/packages/core/src/runtime/visuals.d.ts +9 -2
  66. package/dist/types/packages/core/src/storage/api-topics.d.ts +1 -0
  67. package/dist/types/packages/core/src/storage/browser-profiles.d.ts +4 -0
  68. package/dist/types/packages/core/src/types/api.d.ts +6 -0
  69. package/dist/types/packages/core/src/version.d.ts +1 -1
  70. package/dist/vault.js +22 -20
  71. package/dist/vault.js.map +2 -2
  72. package/package.json +1 -1
  73. package/dist/chunk-bnyvxss3.js +0 -77
@@ -1,13 +1,14 @@
1
1
  // @bun
2
2
  import {
3
- registerCanonicalMcpBridgeEnvProvider2,
4
- canonicalMcpBridgeEnv2,
5
- revokeCanonicalMcpBridgeTurn2
6
- } from "./chunk-ww8a4ej4.js";
3
+ canonicalMcpBridgeEnv,
4
+ registerCanonicalMcpBridgeEnvProvider,
5
+ revokeCanonicalMcpBridgeTurn
6
+ } from "./chunk-f7p0h1gs.js";
7
+ import"./chunk-2mx7fq49.js";
7
8
  export {
8
- canonicalMcpBridgeEnv2 as canonicalMcpBridgeEnv,
9
- registerCanonicalMcpBridgeEnvProvider2 as registerCanonicalMcpBridgeEnvProvider,
10
- revokeCanonicalMcpBridgeTurn2 as revokeCanonicalMcpBridgeTurn
9
+ revokeCanonicalMcpBridgeTurn,
10
+ registerCanonicalMcpBridgeEnvProvider,
11
+ canonicalMcpBridgeEnv
11
12
  };
12
13
 
13
- //# debugId=4C5D56F71A5B26D364756E2164756E21
14
+ //# debugId=C5FA8F0580D154DB64756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "4C5D56F71A5B26D364756E2164756E21",
7
+ "debugId": "C5FA8F0580D154DB64756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -0,0 +1,6 @@
1
+ // @bun
2
+ var __require = import.meta.require;
3
+
4
+ export { __require };
5
+
6
+ //# debugId=F2113E8A5115C63264756E2164756E21
@@ -4,6 +4,6 @@
4
4
  "sourcesContent": [
5
5
  ],
6
6
  "mappings": "",
7
- "debugId": "4EDEF96DD792A34E64756E2164756E21",
7
+ "debugId": "F2113E8A5115C63264756E2164756E21",
8
8
  "names": []
9
9
  }
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  hostedCodexHomePath,
4
4
  latestCodexRolloutPath
5
- } from "./chunk-9a50csg6.js";
5
+ } from "./chunk-pr8p6pap.js";
6
6
 
7
7
  // ../../packages/core/src/agents/codex-app-server.ts
8
8
  import { spawn } from "child_process";
@@ -23,7 +23,7 @@ import { createRequire } from "module";
23
23
  import { dirname, join } from "path";
24
24
 
25
25
  // ../../packages/core/src/version.ts
26
- var NEGOTIUM_VERSION = "0.22.6";
26
+ var NEGOTIUM_VERSION = "0.22.8";
27
27
 
28
28
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
29
29
  var moduleRequire = createRequire(import.meta.url);
@@ -154,7 +154,8 @@ async function forkCodexSession(parentThreadId) {
154
154
  return await forkCodexThread(parentThreadId);
155
155
  }
156
156
  export {
157
- forkCodexSession
157
+ forkCodexSession,
158
+ createCodexAppServerForker
158
159
  };
159
160
 
160
- //# debugId=9787F321F6CA001E64756E2164756E21
161
+ //# debugId=0105374BA186EC7764756E2164756E21
@@ -4,9 +4,9 @@
4
4
  "sourcesContent": [
5
5
  "import { type ChildProcessWithoutNullStreams, spawn } from \"node:child_process\";\nimport { codexCliScriptPath } from \"#agents/codex-native-multi-agent\";\nimport { hostedCodexHomePath } from \"#agents/execution-host\";\nimport { latestCodexRolloutPath } from \"#agents/rollout/codex\";\nimport { NEGOTIUM_VERSION } from \"#version\";\n\ninterface CodexAppServerForkResult {\n forkId: string;\n rolloutPath: string;\n}\n\ninterface CodexAppServerForkHost {\n spawnServer(): ChildProcessWithoutNullStreams;\n findRolloutPath(threadId: string): string | undefined;\n timeoutMs: number;\n}\n\ntype JsonRpcResponse = {\n id?: number;\n result?: { thread?: { id?: unknown } };\n error?: { message?: unknown };\n};\n\nexport function createCodexAppServerForker(host: CodexAppServerForkHost) {\n return async (parentThreadId: string): Promise<CodexAppServerForkResult> => {\n const child = host.spawnServer();\n\n return await new Promise<CodexAppServerForkResult>((resolve, reject) => {\n let settled = false;\n let stdoutBuffer = \"\";\n let stderr = \"\";\n const timer = setTimeout(\n () => finish(new Error(\"Codex thread fork timed out\")),\n host.timeoutMs,\n );\n\n const finish = (error?: Error, result?: CodexAppServerForkResult) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n child.stdin.end();\n child.kill();\n } catch {\n // The app server may already have exited after stdin closed.\n }\n if (error) reject(error);\n else if (result) resolve(result);\n else reject(new Error(\"Codex thread fork returned no result\"));\n };\n\n const send = (message: Record<string, unknown>) => {\n child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n child.stderr.on(\"data\", (chunk) => {\n if (stderr.length < 8_192) stderr += String(chunk);\n });\n child.on(\"error\", (error) => finish(error));\n child.on(\"exit\", (code, signal) => {\n if (settled) return;\n const detail = signal ? `signal ${signal}` : `code ${code ?? 1}`;\n finish(\n new Error(\n `Codex app server exited with ${detail}${stderr.trim() ? `: ${stderr.trim()}` : \"\"}`,\n ),\n );\n });\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuffer += String(chunk);\n for (;;) {\n const newline = stdoutBuffer.indexOf(\"\\n\");\n if (newline < 0) break;\n const line = stdoutBuffer.slice(0, newline);\n stdoutBuffer = stdoutBuffer.slice(newline + 1);\n let message: JsonRpcResponse;\n try {\n message = JSON.parse(line) as JsonRpcResponse;\n } catch {\n continue;\n }\n\n if (message.id === 1) {\n if (message.error) {\n finish(new Error(String(message.error.message || \"Codex initialization failed\")));\n return;\n }\n send({ method: \"initialized\" });\n send({ id: 2, method: \"thread/fork\", params: { threadId: parentThreadId } });\n continue;\n }\n if (message.id !== 2) continue;\n if (message.error) {\n finish(new Error(String(message.error.message || \"Codex thread fork failed\")));\n return;\n }\n const forkId = message.result?.thread?.id;\n if (typeof forkId !== \"string\" || !forkId) {\n finish(new Error(\"Codex thread fork returned no thread id\"));\n return;\n }\n const rolloutPath = host.findRolloutPath(forkId);\n if (!rolloutPath) {\n finish(new Error(`Codex thread fork rollout was not found for ${forkId}`));\n return;\n }\n finish(undefined, { forkId, rolloutPath });\n return;\n }\n });\n\n send({\n id: 1,\n method: \"initialize\",\n params: {\n clientInfo: { name: \"negotium\", version: NEGOTIUM_VERSION },\n },\n });\n });\n };\n}\n\nconst forkCodexThread = createCodexAppServerForker({\n spawnServer() {\n return spawn(process.execPath, [codexCliScriptPath(), \"app-server\", \"--stdio\"], {\n env: { ...process.env, CODEX_HOME: hostedCodexHomePath() },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n // Background stdio server — no console window on Windows. Ignored on POSIX.\n windowsHide: true,\n });\n },\n findRolloutPath: latestCodexRolloutPath,\n timeoutMs: 15_000,\n});\n\nexport async function forkCodexSession(parentThreadId: string): Promise<CodexAppServerForkResult> {\n return await forkCodexThread(parentThreadId);\n}\n",
6
6
  "import { type ChildProcess, spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport {\n chmodSync,\n copyFileSync,\n existsSync,\n mkdtempSync,\n readFileSync,\n renameSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { NEGOTIUM_VERSION } from \"#version\";\n\ntype CodexModel = Record<string, unknown>;\ntype CodexModelCache = {\n client_version?: unknown;\n models?: unknown;\n};\n\nconst moduleRequire = createRequire(import.meta.url);\nconst codexSdkPackagePath = moduleRequire.resolve(\"@openai/codex-sdk/package.json\");\nconst codexSdkRequire = createRequire(codexSdkPackagePath);\nconst bundledCodexPackagePath = codexSdkRequire.resolve(\"@openai/codex/package.json\");\n\nfunction readPackageVersion(packageJsonPath: string): string {\n const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as { version?: unknown };\n if (typeof parsed.version !== \"string\" || !parsed.version.trim()) {\n throw new Error(`Codex package has no valid version: ${packageJsonPath}`);\n }\n return parsed.version;\n}\n\nexport const BUNDLED_CODEX_VERSION = readPackageVersion(bundledCodexPackagePath);\nconst SAFE_BUNDLED_CODEX_VERSION = BUNDLED_CODEX_VERSION.replace(/[^a-zA-Z0-9._-]/g, \"_\");\nconst NEGOTIUM_MODEL_CACHE = `negotium-models-cache-${SAFE_BUNDLED_CODEX_VERSION}.json`;\nconst NEGOTIUM_MODEL_CATALOG = `negotium-model-catalog-${SAFE_BUNDLED_CODEX_VERSION}.json`;\n\nexport function codexCliScriptPath(): string {\n return join(dirname(bundledCodexPackagePath), \"bin\", \"codex.js\");\n}\n\nfunction parseCodexModelCache(contents: string, sourcePath: string): CodexModelCache {\n let parsed: CodexModelCache;\n try {\n parsed = JSON.parse(contents) as CodexModelCache;\n } catch (error) {\n throw new Error(`Codex model cache is invalid JSON: ${sourcePath}`, { cause: error });\n }\n if (!Array.isArray(parsed.models) || parsed.models.length === 0) {\n throw new Error(`Codex model cache has no models: ${sourcePath}`);\n }\n return parsed;\n}\n\nfunction readCodexModelCache(cachePath: string): {\n contents: string;\n parsed: CodexModelCache;\n} {\n const contents = readFileSync(cachePath, \"utf8\");\n return { contents, parsed: parseCodexModelCache(contents, cachePath) };\n}\n\nfunction readCompatibleCodexModelCache(cachePath: string): {\n contents: string;\n parsed: CodexModelCache;\n} {\n const cache = readCodexModelCache(cachePath);\n if (cache.parsed.client_version !== BUNDLED_CODEX_VERSION) {\n const found =\n typeof cache.parsed.client_version === \"string\"\n ? cache.parsed.client_version\n : \"missing or invalid\";\n throw new Error(\n `Codex model cache version ${found} does not match Negotium's bundled Codex ${BUNDLED_CODEX_VERSION}: ${cachePath}`,\n );\n }\n return cache;\n}\n\nfunction writePrivateFileAtomic(path: string, contents: string): void {\n if (existsSync(path) && readFileSync(path, \"utf8\") === contents) return;\n\n const tempPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n try {\n writeFileSync(tempPath, contents, { encoding: \"utf8\", mode: 0o600 });\n renameSync(tempPath, path);\n chmodSync(path, 0o600);\n } finally {\n try {\n unlinkSync(tempPath);\n } catch {\n // renameSync normally consumed the temporary file.\n }\n }\n}\n\nexport function bundledCodexModelCachePath(authFilePath: string): string {\n return join(dirname(authFilePath), NEGOTIUM_MODEL_CACHE);\n}\n\nasync function bootstrapCodexModelCache(codexHome: string, cachePath: string): Promise<void> {\n const child = spawn(process.execPath, [codexCliScriptPath(), \"app-server\", \"--stdio\"], {\n env: { ...process.env, CODEX_HOME: codexHome },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n // Background stdio server — no console window on Windows. Ignored on POSIX.\n windowsHide: true,\n });\n\n const refreshed = new Promise<void>((resolve, reject) => {\n let settled = false;\n let stdoutBuffer = \"\";\n let stderr = \"\";\n const timer = setTimeout(\n () => finish(new Error(\"timed out while refreshing the Codex model catalog\")),\n 15_000,\n );\n\n const finish = (error?: Error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n child.stdin.end();\n child.kill();\n } catch {\n // The app server may already have exited after stdin closed.\n }\n if (error) reject(error);\n else if (!existsSync(cachePath)) reject(new Error(\"Codex did not create its model cache\"));\n else resolve();\n };\n\n const send = (message: Record<string, unknown>) => {\n child.stdin.write(`${JSON.stringify(message)}\\n`);\n };\n\n child.stderr.on(\"data\", (chunk) => {\n if (stderr.length < 4_096) stderr += String(chunk);\n });\n child.on(\"error\", (error) => finish(error));\n child.on(\"exit\", (code, signal) => {\n if (!settled) {\n finish(\n new Error(\n `Codex model catalog refresh exited with ${signal ? `signal ${signal}` : `code ${code ?? 1}`}${stderr.trim() ? `: ${stderr.trim()}` : \"\"}`,\n ),\n );\n }\n });\n child.stdout.on(\"data\", (chunk) => {\n stdoutBuffer += String(chunk);\n for (;;) {\n const newline = stdoutBuffer.indexOf(\"\\n\");\n if (newline < 0) break;\n const line = stdoutBuffer.slice(0, newline);\n stdoutBuffer = stdoutBuffer.slice(newline + 1);\n let message: { id?: number; error?: { message?: string } };\n try {\n message = JSON.parse(line) as typeof message;\n } catch {\n continue;\n }\n if (message.id === 1) {\n if (message.error) {\n finish(new Error(message.error.message || \"Codex initialization failed\"));\n return;\n }\n send({ method: \"initialized\" });\n send({ id: 2, method: \"model/list\", params: { includeHidden: true } });\n } else if (message.id === 2) {\n if (message.error) {\n finish(new Error(message.error.message || \"Codex model listing failed\"));\n } else {\n finish();\n }\n return;\n }\n }\n });\n\n send({\n id: 1,\n method: \"initialize\",\n params: {\n clientInfo: { name: \"negotium\", version: NEGOTIUM_VERSION },\n capabilities: { experimentalApi: true },\n },\n });\n });\n\n try {\n await refreshed;\n } finally {\n // `child.kill()` only signals. The caller deletes CODEX_HOME right after we\n // return, and Windows cannot delete a directory the child still holds open\n // (EBUSY), so wait for the process to actually exit first.\n await waitForChildExit(child, CODEX_BOOTSTRAP_EXIT_WAIT_MS);\n }\n}\n\nconst CODEX_BOOTSTRAP_EXIT_WAIT_MS = 3_000;\n\nfunction waitForChildExit(child: ChildProcess, timeoutMs: number): Promise<void> {\n if (child.exitCode !== null || child.signalCode !== null) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, timeoutMs);\n timer.unref?.();\n child.once(\"exit\", () => {\n clearTimeout(timer);\n resolve();\n });\n });\n}\n\n/**\n * Remove the temporary CODEX_HOME. On Windows a just-exited child (or an\n * antivirus scan of the files it wrote) can keep the directory busy for a\n * moment, so retry, and never let cleanup of a throwaway directory fail a turn\n * whose result was already read. POSIX keeps the original behaviour: unlinking\n * open files works there, and a genuine failure still surfaces.\n */\nfunction removeIsolatedCodexHome(dir: string): void {\n if (process.platform !== \"win32\") {\n rmSync(dir, { recursive: true, force: true });\n return;\n }\n try {\n rmSync(dir, { recursive: true, force: true, maxRetries: 10, retryDelay: 100 });\n } catch {\n // Best effort: the OS temp cleaner will reclaim it.\n }\n}\n\nasync function bootstrapIsolatedCodexModelCache(\n authFilePath: string,\n bootstrap: (codexHome: string, cachePath: string) => Promise<void>,\n): Promise<string> {\n const sourceHome = dirname(authFilePath);\n const isolatedHome = mkdtempSync(join(tmpdir(), \"negotium-codex-models-\"));\n const isolatedCachePath = join(isolatedHome, \"models_cache.json\");\n\n try {\n const isolatedAuthPath = join(isolatedHome, \"auth.json\");\n copyFileSync(authFilePath, isolatedAuthPath);\n chmodSync(isolatedAuthPath, 0o600);\n\n // Preserve custom provider configuration while keeping the bundled CLI's\n // cache write completely outside the user's shared CODEX_HOME.\n const sourceConfigPath = join(sourceHome, \"config.toml\");\n if (existsSync(sourceConfigPath)) {\n const isolatedConfigPath = join(isolatedHome, \"config.toml\");\n copyFileSync(sourceConfigPath, isolatedConfigPath);\n chmodSync(isolatedConfigPath, 0o600);\n }\n\n await bootstrap(isolatedHome, isolatedCachePath);\n return readCompatibleCodexModelCache(isolatedCachePath).contents;\n } finally {\n removeIsolatedCodexHome(isolatedHome);\n }\n}\n\nexport async function ensureCodexModelCache(\n authFilePath: string,\n bootstrap: (codexHome: string, cachePath: string) => Promise<void> = bootstrapCodexModelCache,\n): Promise<string> {\n const codexHome = dirname(authFilePath);\n const configuredCachePath = process.env.NEGOTIUM_CODEX_MODELS_CACHE_FILE;\n if (configuredCachePath) {\n if (!existsSync(configuredCachePath)) {\n throw new Error(`Configured Codex model cache does not exist: ${configuredCachePath}`);\n }\n readCompatibleCodexModelCache(configuredCachePath);\n return configuredCachePath;\n }\n\n // The global Codex CLI owns models_cache.json and may update it to a schema\n // newer than the SDK bundled by Negotium. Snapshot a cache generated for our\n // exact bundled version so later global CLI updates cannot break turns.\n const bundledCachePath = bundledCodexModelCachePath(authFilePath);\n const sharedCachePath = join(codexHome, \"models_cache.json\");\n if (existsSync(sharedCachePath)) {\n try {\n const shared = readCompatibleCodexModelCache(sharedCachePath);\n // Keep model metadata fresh while the global CLI remains compatible.\n writePrivateFileAtomic(bundledCachePath, shared.contents);\n return bundledCachePath;\n } catch {\n // A compatible private snapshot is safer than failing because another\n // process briefly exposed an incomplete shared-cache write.\n }\n }\n\n if (existsSync(bundledCachePath)) {\n try {\n readCompatibleCodexModelCache(bundledCachePath);\n return bundledCachePath;\n } catch {\n // Re-bootstrap below instead of passing a corrupt or version-mismatched\n // private snapshot into this SDK version.\n }\n }\n\n const refreshedContents = await bootstrapIsolatedCodexModelCache(authFilePath, bootstrap);\n writePrivateFileAtomic(bundledCachePath, refreshedContents);\n return bundledCachePath;\n}\n\n/**\n * Codex can resolve model metadata before `features.multi_agent=false`, so a\n * model-advertised v1/v2 value may still register native collaboration tools.\n * Feed Codex an authoritative copy of its own catalog with only that field\n * disabled. Runtime MCP delegation remains available independently.\n */\nexport function writeCodexCatalogWithNativeMultiAgentDisabled(\n authFilePath: string,\n sourcePath: string,\n): string {\n const codexHome = dirname(authFilePath);\n const outputPath = join(codexHome, NEGOTIUM_MODEL_CATALOG);\n\n const parsed = readCodexModelCache(sourcePath).parsed;\n\n const models = (parsed.models as unknown[]).map((model, index): CodexModel => {\n if (!model || typeof model !== \"object\" || Array.isArray(model)) {\n throw new Error(`Codex model cache entry ${index} is invalid: ${sourcePath}`);\n }\n return { ...(model as CodexModel), multi_agent_version: \"disabled\" };\n });\n const contents = `${JSON.stringify({ models }, null, 2)}\\n`;\n writePrivateFileAtomic(outputPath, contents);\n return outputPath;\n}\n",
7
- "export const NEGOTIUM_VERSION = \"0.22.6\";\n"
7
+ "export const NEGOTIUM_VERSION = \"0.22.8\";\n"
8
8
  ],
9
9
  "mappings": "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",
10
- "debugId": "9787F321F6CA001E64756E2164756E21",
10
+ "debugId": "0105374BA186EC7764756E2164756E21",
11
11
  "names": []
12
12
  }
@@ -69,12 +69,12 @@ function createStdioLogger(options = {}) {
69
69
  var logger = createStdioLogger();
70
70
 
71
71
  // ../../packages/core/src/platform/config.ts
72
- function envText2(envKey) {
72
+ function envText(envKey) {
73
73
  return readEnvText(process.env, envKey);
74
74
  }
75
75
  var HOME = homedir();
76
76
  function resolveStateDir() {
77
- const configured = envText2("NEGOTIUM_STATE_DIR");
77
+ const configured = envText("NEGOTIUM_STATE_DIR");
78
78
  if (false) {}
79
79
  return configured ? resolve(configured) : resolve(HOME, ".negotium");
80
80
  }
@@ -85,14 +85,14 @@ function resolveProjectRoot() {
85
85
  return packagedRuntime;
86
86
  return resolve(moduleDir, "../..");
87
87
  }
88
- var PROJECT_ROOT2 = resolveProjectRoot();
88
+ var PROJECT_ROOT = resolveProjectRoot();
89
89
  function dependencyBinNames(name) {
90
90
  if (process.platform !== "win32")
91
91
  return [name];
92
92
  return [name, `${name}.exe`, `${name}.cmd`, `${name}.bat`, `${name}.bunx`];
93
93
  }
94
94
  function resolveDependencyBin(name) {
95
- let dir = PROJECT_ROOT2;
95
+ let dir = PROJECT_ROOT;
96
96
  while (true) {
97
97
  const binDir = resolve(dir, "node_modules", ".bin");
98
98
  for (const candidate of dependencyBinNames(name)) {
@@ -108,7 +108,7 @@ function resolveDependencyBin(name) {
108
108
  }
109
109
  var STATE_DIR = resolveStateDir();
110
110
  function resolveLocalStateDir(envKey, stateName) {
111
- const envValue = envText2(envKey);
111
+ const envValue = envText(envKey);
112
112
  if (envValue)
113
113
  return resolve(envValue);
114
114
  return resolve(STATE_DIR, stateName);
@@ -116,18 +116,23 @@ function resolveLocalStateDir(envKey, stateName) {
116
116
  function parsePortEnv(envValue, fallback) {
117
117
  return parseRuntimePort(envValue, fallback);
118
118
  }
119
- var WORKSPACE_DIR2 = resolveLocalStateDir("NEGOTIUM_WORKSPACE_DIR", "workspace");
120
- var TOPIC_WORKSPACE_DIR2 = resolve(WORKSPACE_DIR2, "topics");
121
- var SHARED_WIKI_DIR = resolve(WORKSPACE_DIR2, "wiki");
122
- var CRON_WORKSPACE_DIR = resolve(WORKSPACE_DIR2, "cron");
119
+ var WORKSPACE_DIR = resolveLocalStateDir("NEGOTIUM_WORKSPACE_DIR", "workspace");
120
+ var TOPIC_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "topics");
121
+ var SHARED_WIKI_DIR = resolve(WORKSPACE_DIR, "wiki");
122
+ var CRON_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "cron");
123
123
  var BROWSER_DIR = resolveLocalStateDir("NEGOTIUM_BROWSER_DIR", "browser");
124
124
  var BROWSER_PROFILES_DIR = resolve(BROWSER_DIR, "profiles");
125
- var BINARIES_DIR2 = resolve(STATE_DIR, "binaries");
125
+ var BINARIES_DIR = resolve(STATE_DIR, "binaries");
126
126
  var SECRETS_DIR = resolve(STATE_DIR, "secrets");
127
- var DM_WORKSPACE_DIR2 = resolve(STATE_DIR, "data", "dm");
128
- var SESSION_WORKSPACE_DIR2 = resolve(STATE_DIR, "data", "sessions");
129
- var CLAUDE_EXECUTABLE_ENV = envText2("NEGOTIUM_CLAUDE_EXECUTABLE");
130
- var CLAUDE_EXECUTABLE2 = CLAUDE_EXECUTABLE_ENV ? resolve(CLAUDE_EXECUTABLE_ENV) : undefined;
127
+ var DM_WORKSPACE_DIR = resolve(STATE_DIR, "data", "dm");
128
+ var SESSION_WORKSPACE_DIR = resolve(STATE_DIR, "data", "sessions");
129
+ var CLAUDE_EXECUTABLE_ENV = envText("NEGOTIUM_CLAUDE_EXECUTABLE");
130
+ var CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve(CLAUDE_EXECUTABLE_ENV) : undefined;
131
+ var DEFAULT_OUTPUT_LANGUAGE = "English";
132
+ function resolveOutputLanguage() {
133
+ const raw = envText("NEGOTIUM_LANG")?.trim();
134
+ return raw && raw.length > 0 ? raw : DEFAULT_OUTPUT_LANGUAGE;
135
+ }
131
136
  var BINARY_EXTENSION = process.platform === "win32" ? ".exe" : "";
132
137
  var BROWSER_RS_VERSION = "v0.7.7";
133
138
  var BROWSER_RS_MIN_SECURE_VERSION = "0.2.1";
@@ -166,7 +171,7 @@ function resolveBrowserRsBin(envValue) {
166
171
  if (!override && !versionAtLeast(BROWSER_RS_VERSION.replace(/^v/, ""), BROWSER_RS_MIN_SECURE_VERSION)) {
167
172
  return;
168
173
  }
169
- const candidate = override ? resolve(override) : resolve(BINARIES_DIR2, "browser-rs", BROWSER_RS_VERSION, `browser-rs${BINARY_EXTENSION}`);
174
+ const candidate = override ? resolve(override) : resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, `browser-rs${BINARY_EXTENSION}`);
170
175
  try {
171
176
  accessSync(candidate, constants.X_OK);
172
177
  return browserRsMeetsMinimumVersion(candidate) ? candidate : undefined;
@@ -174,12 +179,12 @@ function resolveBrowserRsBin(envValue) {
174
179
  return;
175
180
  }
176
181
  }
177
- var SNIPPETS_API_URL = (envText2("NEGOTIUM_SNIPPETS_API_URL") ?? envText2("SNIPPETS_API_URL") ?? "").replace(/\/+$/, "");
178
- var BROWSER_RS_BIN = resolveBrowserRsBin(envText2("NEGOTIUM_BROWSER_RS_BIN"));
179
- var BASH_RS_VERSION2 = "v0.1.10";
182
+ var SNIPPETS_API_URL = (envText("NEGOTIUM_SNIPPETS_API_URL") ?? envText("SNIPPETS_API_URL") ?? "").replace(/\/+$/, "");
183
+ var BROWSER_RS_BIN = resolveBrowserRsBin(envText("NEGOTIUM_BROWSER_RS_BIN"));
184
+ var BASH_RS_VERSION = "v0.1.10";
180
185
  function resolveBashRsBin(envValue) {
181
186
  const override = envValue?.trim();
182
- const candidate = override ? resolve(override) : resolve(BINARIES_DIR2, "bash-rs", BASH_RS_VERSION2, `bash-rs${BINARY_EXTENSION}`);
187
+ const candidate = override ? resolve(override) : resolve(BINARIES_DIR, "bash-rs", BASH_RS_VERSION, `bash-rs${BINARY_EXTENSION}`);
183
188
  try {
184
189
  accessSync(candidate, constants.X_OK);
185
190
  return candidate;
@@ -187,38 +192,63 @@ function resolveBashRsBin(envValue) {
187
192
  return;
188
193
  }
189
194
  }
190
- var BASH_RS_BIN2 = resolveBashRsBin(envText2("NEGOTIUM_BASH_RS_BIN"));
195
+ var BASH_RS_BIN = resolveBashRsBin(envText("NEGOTIUM_BASH_RS_BIN"));
191
196
  function resolveBrowserMcpBin(envValue) {
192
197
  const override = envValue?.trim();
193
198
  if (override)
194
199
  return resolve(override);
195
- return BROWSER_RS_BIN ?? resolve(BINARIES_DIR2, "browser-rs", BROWSER_RS_VERSION, `browser-rs${BINARY_EXTENSION}`);
200
+ return BROWSER_RS_BIN ?? resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, `browser-rs${BINARY_EXTENSION}`);
201
+ }
202
+ var PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText("NEGOTIUM_BROWSER_MCP_BIN"));
203
+ function resolveBrowserProxy() {
204
+ const raw = envText("BROWSER_PROXY_URL");
205
+ if (!raw)
206
+ return null;
207
+ let url;
208
+ try {
209
+ url = new URL(raw);
210
+ } catch {
211
+ logger.warn({ raw }, "Ignoring malformed BROWSER_PROXY_URL");
212
+ return null;
213
+ }
214
+ const server = `${url.protocol}//${url.host}`;
215
+ const proxy = { server };
216
+ if (url.username)
217
+ proxy.username = decodeURIComponent(url.username);
218
+ if (url.password)
219
+ proxy.password = decodeURIComponent(url.password);
220
+ const bypass = envText("BROWSER_PROXY_BYPASS");
221
+ if (bypass)
222
+ proxy.bypass = bypass;
223
+ return proxy;
196
224
  }
197
- var PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText2("NEGOTIUM_BROWSER_MCP_BIN"));
198
225
  var TSX_BIN = resolveDependencyBin("tsx");
199
226
  var TSX_LOADER_PATH = createRequire(import.meta.url).resolve("tsx");
200
- var TSX_LOADER2 = process.platform === "win32" ? pathToFileURL(TSX_LOADER_PATH).href : TSX_LOADER_PATH;
201
- var TSCONFIG_PATH2 = resolve(PROJECT_ROOT2, "tsconfig.json");
202
- var SESSION_COMM_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/session-comm/server.ts");
203
- var TASK_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/task-server.ts");
204
- var DECISION_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/decision-server.ts");
205
- var CANONICAL_MCP_PROXY_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/canonical-proxy-server.ts");
206
- var WIKI_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/wiki-server.ts");
207
- var TOKEN_STATS_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/token-stats-server.ts");
208
- var COMPACTION_LOG_SERVER = resolve(PROJECT_ROOT2, "src/mcp/compaction-log-server.ts");
209
- var SYSTEM_HEALTH_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/system-health-server.ts");
210
- var AGENT_HEALTH_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/agent-health-server.ts");
211
- var VAULT_SERVER2 = resolve(PROJECT_ROOT2, "src/mcp/vault-server.ts");
212
- var BG_BASH_BASE_PORT2 = parsePortEnv(process.env.BG_BASH_BASE_PORT, 9700);
213
- var BG_BASH_MAX_PORT2 = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
227
+ var TSX_LOADER = process.platform === "win32" ? pathToFileURL(TSX_LOADER_PATH).href : TSX_LOADER_PATH;
228
+ var TSCONFIG_PATH = resolve(PROJECT_ROOT, "tsconfig.json");
229
+ var SESSION_COMM_SERVER = resolve(PROJECT_ROOT, "src/mcp/session-comm/server.ts");
230
+ var TASK_SERVER = resolve(PROJECT_ROOT, "src/mcp/task-server.ts");
231
+ var DECISION_SERVER = resolve(PROJECT_ROOT, "src/mcp/decision-server.ts");
232
+ var CANONICAL_MCP_PROXY_SERVER = resolve(PROJECT_ROOT, "src/mcp/canonical-proxy-server.ts");
233
+ var WIKI_SERVER = resolve(PROJECT_ROOT, "src/mcp/wiki-server.ts");
234
+ var TOKEN_STATS_SERVER = resolve(PROJECT_ROOT, "src/mcp/token-stats-server.ts");
235
+ var COMPACTION_LOG_SERVER = resolve(PROJECT_ROOT, "src/mcp/compaction-log-server.ts");
236
+ var SYSTEM_HEALTH_SERVER = resolve(PROJECT_ROOT, "src/mcp/system-health-server.ts");
237
+ var AGENT_HEALTH_SERVER = resolve(PROJECT_ROOT, "src/mcp/agent-health-server.ts");
238
+ var VAULT_SERVER = resolve(PROJECT_ROOT, "src/mcp/vault-server.ts");
239
+ var BG_BASH_BASE_PORT = parsePortEnv(process.env.BG_BASH_BASE_PORT, 9700);
240
+ var BG_BASH_MAX_PORT = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
214
241
  function safeWorkspaceSegment(value, fallback) {
215
242
  return safeRuntimePathSegment(value, fallback);
216
243
  }
217
- function resolveTopicWorkspaceDir2(topicId) {
218
- return join(TOPIC_WORKSPACE_DIR2, safeWorkspaceSegment(topicId, "topic"));
244
+ function resolveTopicWorkspaceDir(topicId) {
245
+ return join(TOPIC_WORKSPACE_DIR, safeWorkspaceSegment(topicId, "topic"));
246
+ }
247
+ function isProductionEnv() {
248
+ return false;
219
249
  }
220
250
  function loadOrCreateLocalSecret(envKey, filename, options = {}) {
221
- const envValue = envText2(envKey);
251
+ const envValue = envText(envKey);
222
252
  const secretFile = resolve(SECRETS_DIR, filename);
223
253
  mkdirSync(dirname(secretFile), { recursive: true });
224
254
  if (envValue) {
@@ -251,12 +281,12 @@ function loadOrCreateLocalSecret(envKey, filename, options = {}) {
251
281
  return stored;
252
282
  }
253
283
  }
254
- var RUNTIME_MCP_SECRET2 = loadOrCreateLocalSecret("RUNTIME_MCP_SECRET", "runtime-mcp-secret");
284
+ var RUNTIME_MCP_SECRET = loadOrCreateLocalSecret("RUNTIME_MCP_SECRET", "runtime-mcp-secret");
255
285
  var NODE_CONTROL_TOKEN = loadOrCreateLocalSecret("NEGOTIUM_CONTROL_TOKEN", "node-control-token");
256
286
  var NODE_ID = loadOrCreateLocalSecret("NEGOTIUM_NODE_ID", "node-id");
257
- var VAULT_MASTER_KEY2 = loadOrCreateLocalSecret("NEGOTIUM_VAULT_MASTER_KEY", "vault-master-key", { persistEnvValue: true });
287
+ var VAULT_MASTER_KEY = loadOrCreateLocalSecret("NEGOTIUM_VAULT_MASTER_KEY", "vault-master-key", { persistEnvValue: true });
258
288
  delete process.env.NEGOTIUM_VAULT_MASTER_KEY;
259
- var NEGOTIUM_PORT2 = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
289
+ var NEGOTIUM_PORT = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
260
290
  var hostname = process.env.HOSTNAME || "127.0.0.1";
261
291
  var DATA_DIR = resolveLocalStateDir("NEGOTIUM_DATA_DIR", "data");
262
292
  var LOG_DIR = resolveLocalStateDir("NEGOTIUM_LOG_DIR", "logs");
@@ -265,16 +295,17 @@ var VAULT_DIR = resolve(DATA_DIR, "vault");
265
295
  var SESSIONS_DB = process.env.SESSIONS_DB_PATH ? resolve(process.env.SESSIONS_DB_PATH) : resolve(DATA_DIR, "sessions.db");
266
296
  var DEBUG_FILE = resolve(DATA_DIR, "debug-users.json");
267
297
  var USERS_LOG_DIR = resolve(DATA_DIR, "users");
268
- var RUN_DIR2 = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "runtime");
269
- var PROGRESS_DIR = resolve(RUN_DIR2, "progress");
270
- var DM_CMD_DIR = resolve(RUN_DIR2, "dm-commands");
271
- var DM_RESP_DIR = resolve(RUN_DIR2, "dm-responses");
272
- var SESSION_INBOX_DIR = resolve(RUN_DIR2, "session-inbox");
273
- var SESSION_ASKS_DIR = resolve(RUN_DIR2, "session-asks");
274
- var BASHRS_SPILL_ROOT2 = resolve(RUN_DIR2, "bashrs");
298
+ var RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "runtime");
299
+ var RUNTIME_DIR = RUN_DIR;
300
+ var PROGRESS_DIR = resolve(RUN_DIR, "progress");
301
+ var DM_CMD_DIR = resolve(RUN_DIR, "dm-commands");
302
+ var DM_RESP_DIR = resolve(RUN_DIR, "dm-responses");
303
+ var SESSION_INBOX_DIR = resolve(RUN_DIR, "session-inbox");
304
+ var SESSION_ASKS_DIR = resolve(RUN_DIR, "session-asks");
305
+ var BASHRS_SPILL_ROOT = resolve(RUN_DIR, "bashrs");
275
306
  var PLAYWRIGHT_BASE_PORT = parsePortEnv(process.env.PLAYWRIGHT_BASE_PORT, 9100);
276
307
  var PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
277
- var PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR2, "playwright-ports");
308
+ var PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR, "playwright-ports");
278
309
  mkdirSync(STATE_DIR, { recursive: true });
279
310
  mkdirSync(DATA_DIR, { recursive: true });
280
311
  mkdirSync(UPLOADS_DIR, { recursive: true });
@@ -286,50 +317,58 @@ mkdirSync(DM_RESP_DIR, { recursive: true });
286
317
  mkdirSync(SESSION_INBOX_DIR, { recursive: true });
287
318
  mkdirSync(SESSION_ASKS_DIR, { recursive: true });
288
319
  mkdirSync(PLAYWRIGHT_PORTS_DIR, { recursive: true });
289
- mkdirSync(WORKSPACE_DIR2, { recursive: true });
290
- mkdirSync(TOPIC_WORKSPACE_DIR2, { recursive: true });
320
+ mkdirSync(WORKSPACE_DIR, { recursive: true });
321
+ mkdirSync(TOPIC_WORKSPACE_DIR, { recursive: true });
291
322
  mkdirSync(SHARED_WIKI_DIR, { recursive: true });
292
323
  mkdirSync(CRON_WORKSPACE_DIR, { recursive: true });
293
- mkdirSync(DM_WORKSPACE_DIR2, { recursive: true });
294
- mkdirSync(SESSION_WORKSPACE_DIR2, { recursive: true });
324
+ mkdirSync(DM_WORKSPACE_DIR, { recursive: true });
325
+ mkdirSync(SESSION_WORKSPACE_DIR, { recursive: true });
295
326
  mkdirSync(BROWSER_DIR, { recursive: true });
296
327
  mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
297
- mkdirSync(BINARIES_DIR2, { recursive: true });
328
+ mkdirSync(BINARIES_DIR, { recursive: true });
298
329
  mkdirSync(SECRETS_DIR, { recursive: true, mode: 448 });
299
330
  var ACTIVE_QUERY_STALE_MS = 10 * 60 * 1000;
300
- var AGENTS_PROMPTS_DIR = resolve(PROJECT_ROOT2, "src/prompts/agents");
301
- var RESOURCES_DIR = resolve(PROJECT_ROOT2, "src/resources");
331
+ var AGENTS_PROMPTS_DIR = resolve(PROJECT_ROOT, "src/prompts/agents");
332
+ var RESOURCES_DIR = resolve(PROJECT_ROOT, "src/resources");
333
+ function getCleanEnv() {
334
+ const env = { ...process.env };
335
+ delete env.CLAUDECODE;
336
+ return env;
337
+ }
302
338
  var ABSOLUTE_PATH_PREFIX = String.raw`(?:[A-Za-z]:[\\/]|\\\\|\/)`;
303
339
  var FILE_EXTENSIONS_REGEX = new RegExp(`(?:${ABSOLUTE_PATH_PREFIX}[^\\s"'<>|*?[\\]]+\\.(?:png|jpg|jpeg|gif|webp|svg|pdf|csv|xlsx|xls|json|txt|md|html|zip|py|js|ts|tsx|jsx|css|xml|yaml|yml|docx|pptx))`, "gi");
304
- var FILE_TAG_REGEX2 = new RegExp(`\\[FILE:(${ABSOLUTE_PATH_PREFIX}[^\\]]+)\\]`, "gi");
305
- var MODEL_SONNET2 = "claude-sonnet-5";
306
- var MODEL_OPUS2 = "claude-opus-5-5";
307
- var MODEL_FABLE2 = "claude-fable-5-1";
308
- var FALLBACK_AGENT2 = resolveFallbackAgent(process.env);
309
- var FALLBACK_MODEL = envText2("FALLBACK_MODEL") ?? envText2("DEFAULT_MODEL");
340
+ var FILE_TAG_REGEX = new RegExp(`\\[FILE:(${ABSOLUTE_PATH_PREFIX}[^\\]]+)\\]`, "gi");
341
+ var MODEL_SONNET = "claude-sonnet-5";
342
+ var MODEL_OPUS = "claude-opus-5-5";
343
+ var MODEL_HAIKU = "claude-haiku-4-5-20251001";
344
+ var MODEL_FABLE = "claude-fable-5-1";
345
+ var MODEL_DEEPSEEK_V4_PRO = "deepseek-v4-pro";
346
+ var MODEL_DEEPSEEK_V4_FLASH = "deepseek-v4-flash";
347
+ var FALLBACK_AGENT = resolveFallbackAgent(process.env);
348
+ var FALLBACK_MODEL = envText("FALLBACK_MODEL") ?? envText("DEFAULT_MODEL");
310
349
  var DEFAULT_TOPIC_EFFORT = (() => {
311
- const raw = envText2("NEGOTIUM_DEFAULT_EFFORT")?.toLowerCase();
350
+ const raw = envText("NEGOTIUM_DEFAULT_EFFORT")?.toLowerCase();
312
351
  return raw && EFFORT_VALUES.includes(raw) ? raw : "medium";
313
352
  })();
314
- var FFMPEG_BIN = envText2("FFMPEG_BIN");
315
- var FFPROBE_BIN = envText2("FFPROBE_BIN");
316
- var PYTHON_BIN = envText2("PYTHON_BIN") ?? "python3";
317
- var FASTER_WHISPER_WRAPPER = envText2("FASTER_WHISPER_WRAPPER") ?? resolve(PROJECT_ROOT2, "scripts/faster-whisper-wrapper.py");
318
- var WHISPER_MODEL = envText2("WHISPER_MODEL_FILE") ?? "turbo";
319
- var TESSERACT_BIN = envText2("TESSERACT_BIN") ?? "tesseract";
320
- var PDFTOTEXT_BIN = envText2("PDFTOTEXT_BIN") ?? "pdftotext";
353
+ var FFMPEG_BIN = envText("FFMPEG_BIN");
354
+ var FFPROBE_BIN = envText("FFPROBE_BIN");
355
+ var PYTHON_BIN = envText("PYTHON_BIN") ?? "python3";
356
+ var FASTER_WHISPER_WRAPPER = envText("FASTER_WHISPER_WRAPPER") ?? resolve(PROJECT_ROOT, "scripts/faster-whisper-wrapper.py");
357
+ var WHISPER_MODEL = envText("WHISPER_MODEL_FILE") ?? "turbo";
358
+ var TESSERACT_BIN = envText("TESSERACT_BIN") ?? "tesseract";
359
+ var PDFTOTEXT_BIN = envText("PDFTOTEXT_BIN") ?? "pdftotext";
321
360
  function resolveWhisperBackend() {
322
- return envText2("WHISPER_BACKEND") === "mlx-whisper" ? "mlx-whisper" : "faster-whisper";
361
+ return envText("WHISPER_BACKEND") === "mlx-whisper" ? "mlx-whisper" : "faster-whisper";
323
362
  }
324
363
  var WHISPER_BACKEND = resolveWhisperBackend();
325
- var MLX_WHISPER_BIN = envText2("MLX_WHISPER_BIN");
326
- var WHISPER_MODEL_MLX = envText2("WHISPER_MODEL_MLX") ?? "mlx-community/whisper-large-v3-turbo";
364
+ var MLX_WHISPER_BIN = envText("MLX_WHISPER_BIN");
365
+ var WHISPER_MODEL_MLX = envText("WHISPER_MODEL_MLX") ?? "mlx-community/whisper-large-v3-turbo";
327
366
  var _envMaxTellDepth = Number.parseInt(process.env.MAX_TELL_DEPTH ?? "", 10);
328
367
  var MAX_TELL_DEPTH = Number.isInteger(_envMaxTellDepth) && _envMaxTellDepth > 0 ? _envMaxTellDepth : 20;
329
- function codexAuthFilePath2() {
368
+ function codexAuthFilePath() {
330
369
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
331
370
  }
332
371
 
333
- export { SUPPORTED_AGENTS, CLAUDE_EFFORT_VALUES, resolveFallbackAgent, logger, envText2, PROJECT_ROOT2, WORKSPACE_DIR2, TOPIC_WORKSPACE_DIR2, BINARIES_DIR2, DM_WORKSPACE_DIR2, SESSION_WORKSPACE_DIR2, CLAUDE_EXECUTABLE2, BASH_RS_VERSION2, BASH_RS_BIN2, TSX_LOADER2, TSCONFIG_PATH2, SESSION_COMM_SERVER2, TASK_SERVER2, DECISION_SERVER2, CANONICAL_MCP_PROXY_SERVER2, WIKI_SERVER2, TOKEN_STATS_SERVER2, SYSTEM_HEALTH_SERVER2, AGENT_HEALTH_SERVER2, VAULT_SERVER2, BG_BASH_BASE_PORT2, BG_BASH_MAX_PORT2, resolveTopicWorkspaceDir2, RUNTIME_MCP_SECRET2, VAULT_MASTER_KEY2, NEGOTIUM_PORT2, RUN_DIR2, BASHRS_SPILL_ROOT2, FILE_TAG_REGEX2, MODEL_SONNET2, MODEL_OPUS2, MODEL_FABLE2, FALLBACK_AGENT2, codexAuthFilePath2 };
372
+ export { SUPPORTED_AGENTS, CLAUDE_EFFORT_VALUES, resolveFallbackAgent, logger, envText, PROJECT_ROOT, STATE_DIR, WORKSPACE_DIR, TOPIC_WORKSPACE_DIR, SHARED_WIKI_DIR, CRON_WORKSPACE_DIR, BROWSER_DIR, BROWSER_PROFILES_DIR, BINARIES_DIR, SECRETS_DIR, DM_WORKSPACE_DIR, SESSION_WORKSPACE_DIR, CLAUDE_EXECUTABLE, DEFAULT_OUTPUT_LANGUAGE, resolveOutputLanguage, BINARY_EXTENSION, BROWSER_RS_VERSION, BROWSER_RS_MIN_SECURE_VERSION, resolveBrowserRsBin, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION, resolveBashRsBin, BASH_RS_BIN, resolveBrowserMcpBin, PLAYWRIGHT_MCP_BIN, resolveBrowserProxy, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, DECISION_SERVER, CANONICAL_MCP_PROXY_SERVER, WIKI_SERVER, TOKEN_STATS_SERVER, COMPACTION_LOG_SERVER, SYSTEM_HEALTH_SERVER, AGENT_HEALTH_SERVER, VAULT_SERVER, BG_BASH_BASE_PORT, BG_BASH_MAX_PORT, resolveTopicWorkspaceDir, isProductionEnv, RUNTIME_MCP_SECRET, NODE_CONTROL_TOKEN, NODE_ID, VAULT_MASTER_KEY, NEGOTIUM_PORT, hostname, DATA_DIR, LOG_DIR, UPLOADS_DIR, VAULT_DIR, SESSIONS_DB, DEBUG_FILE, USERS_LOG_DIR, RUN_DIR, RUNTIME_DIR, PROGRESS_DIR, DM_CMD_DIR, DM_RESP_DIR, SESSION_INBOX_DIR, SESSION_ASKS_DIR, BASHRS_SPILL_ROOT, PLAYWRIGHT_BASE_PORT, PLAYWRIGHT_MAX_PORT, PLAYWRIGHT_PORTS_DIR, ACTIVE_QUERY_STALE_MS, AGENTS_PROMPTS_DIR, RESOURCES_DIR, getCleanEnv, FILE_EXTENSIONS_REGEX, FILE_TAG_REGEX, MODEL_SONNET, MODEL_OPUS, MODEL_HAIKU, MODEL_FABLE, MODEL_DEEPSEEK_V4_PRO, MODEL_DEEPSEEK_V4_FLASH, FALLBACK_AGENT, FALLBACK_MODEL, DEFAULT_TOPIC_EFFORT, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, WHISPER_BACKEND, MLX_WHISPER_BIN, WHISPER_MODEL_MLX, MAX_TELL_DEPTH, codexAuthFilePath };
334
373
 
335
- //# debugId=D4AB46255446428B64756E2164756E21
374
+ //# debugId=A33183283680C1D564756E2164756E21
@@ -7,7 +7,7 @@
7
7
  "import { resolve } from \"node:path\";\nimport { type AgentKind, isAgentKind } from \"#types\";\n\nexport type RuntimeEnvironment = Readonly<Record<string, string | undefined>>;\n\nexport function readEnvText(env: RuntimeEnvironment, key: string): string | undefined {\n const value = env[key]?.trim();\n return value || undefined;\n}\n\n/**\n * Node-wide default agent (FALLBACK_AGENT env, legacy DEFAULT_AGENT, else\n * \"claude\"). Lives in this side-effect-free leaf module — not #platform/config\n * — so storage layers that only need this one value (e.g. the forum/api-topics\n * repositories, re-exported through the public storage facade) don't drag in\n * config.ts's eager `mkdirSync` of every node data directory just by\n * importing it.\n */\nexport function resolveFallbackAgent(env: RuntimeEnvironment = process.env): AgentKind {\n const value = readEnvText(env, \"FALLBACK_AGENT\") ?? readEnvText(env, \"DEFAULT_AGENT\");\n return isAgentKind(value) ? value : \"claude\";\n}\n\nexport function parseRuntimePort(value: string | undefined, fallback: number): number {\n if (!value) return fallback;\n const port = Number.parseInt(value, 10);\n return Number.isInteger(port) && port > 0 && port <= 65_535 ? port : fallback;\n}\n\nexport function resolveRuntimeStateDir(options: {\n env: RuntimeEnvironment;\n envKey: string;\n fallbackRoot: string;\n fallbackName: string;\n}): string {\n const configured = readEnvText(options.env, options.envKey);\n return configured ? resolve(configured) : resolve(options.fallbackRoot, options.fallbackName);\n}\n\nexport function safeRuntimePathSegment(value: string, fallback: string, maxLength = 160): string {\n const cleaned = value\n .trim()\n .replace(/[^A-Za-z0-9._-]/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .slice(0, maxLength);\n return cleaned || fallback;\n}\n",
8
8
  "import pino from \"pino\";\n\nexport interface StdioLoggerOptions {\n level?: string;\n development?: boolean;\n}\n\n/**\n * Always write logs to stderr (fd 2), never stdout.\n *\n * MCP servers under `src/mcp/**` run as stdio subprocesses where stdout is the\n * JSON-RPC transport channel. A single log line on stdout corrupts the next\n * message and the MCP client closes the transport (\"Transport closed\"). The\n * main bot process is also fine with stderr — pm2 captures both streams.\n *\n * In dev mode pino spawns a `pino-pretty` worker that owns its own sink, so we\n * pass `destination: 2` through transport.options. In prod (no transport) the\n * second arg to `pino()` sets the destination directly.\n */\nexport function createStdioLogger(options: StdioLoggerOptions = {}) {\n const development = options.development ?? process.env.NODE_ENV === \"development\";\n return pino(\n {\n level: options.level ?? process.env.LOG_LEVEL ?? \"info\",\n transport: development\n ? {\n target: \"pino-pretty\",\n options: {\n colorize: true,\n translateTime: \"SYS:yyyy-mm-dd HH:MM:ss\",\n destination: 2,\n },\n }\n : undefined,\n },\n pino.destination(2),\n );\n}\n\nexport type StdioLogger = ReturnType<typeof createStdioLogger>;\n\nexport const logger = createStdioLogger();\n"
9
9
  ],
10
- "mappings": ";;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA;AACA;AACA;AACA;;;ACKO,IAAM,mBAAyC,CAAC,WAAW,UAAU,OAAO;AAE5E,SAAS,WAAW,CAAC,OAAoC;AAAA,EAC9D,OAAO,OAAO,UAAU,YAAa,iBAAuC,SAAS,KAAK;AAAA;AAiBrF,IAAM,uBAAuB,CAAC,OAAO,UAAU,QAAQ,SAAS,KAAK;AAerE,IAAM,gBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACvDO,SAAS,WAAW,CAAC,KAAyB,KAAiC;AAAA,EACpF,MAAM,QAAQ,IAAI,MAAM,KAAK;AAAA,EAC7B,OAAO,SAAS;AAAA;AAWX,SAAS,oBAAoB,CAAC,MAA0B,QAAQ,KAAgB;AAAA,EACrF,MAAM,QAAQ,YAAY,KAAK,gBAAgB,KAAK,YAAY,KAAK,eAAe;AAAA,EACpF,OAAO,YAAY,KAAK,IAAI,QAAQ;AAAA;AAG/B,SAAS,gBAAgB,CAAC,OAA2B,UAA0B;AAAA,EACpF,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,MAAM,OAAO,OAAO,SAAS,OAAO,EAAE;AAAA,EACtC,OAAO,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,QAAQ,QAAS,OAAO;AAAA;AAahE,SAAS,sBAAsB,CAAC,OAAe,UAAkB,YAAY,KAAa;AAAA,EAC/F,MAAM,UAAU,MACb,KAAK,EACL,QAAQ,oBAAoB,GAAG,EAC/B,QAAQ,YAAY,EAAE,EACtB,MAAM,GAAG,SAAS;AAAA,EACrB,OAAO,WAAW;AAAA;;;AC7CpB;AAmBO,SAAS,iBAAiB,CAAC,UAA8B,CAAC,GAAG;AAAA,EAClE,MAAM,cAAc,QAAQ,eAAe;AAAA,EAC3C,OAAO,KACL;AAAA,IACE,OAAO,QAAQ,SAAS,QAAQ,IAAI,aAAa;AAAA,IACjD,WAAW,cACP;AAAA,MACE,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,UAAU;AAAA,QACV,eAAe;AAAA,QACf,aAAa;AAAA,MACf;AAAA,IACF,IACA;AAAA,EACN,GACA,KAAK,YAAY,CAAC,CACpB;AAAA;AAKK,IAAM,SAAS,kBAAkB;;;AHjBjC,SAAS,QAAO,CAAC,QAAoC;AAAA,EAC1D,OAAO,YAAY,QAAQ,KAAK,MAAM;AAAA;AAGxC,IAAM,OAAO,QAAQ;AAErB,SAAS,eAAe,GAAW;AAAA,EACjC,MAAM,aAAa,SAAQ,oBAAoB;AAAA,EAC/C,IAAI,OAAgD,CAIpD;AAAA,EACA,OAAO,aAAa,QAAQ,UAAU,IAAI,QAAQ,MAAM,WAAW;AAAA;AAKrE,SAAS,kBAAkB,GAAW;AAAA,EACpC,MAAM,YAAY,QAAQ,cAAc,YAAY,GAAG,CAAC;AAAA,EACxD,MAAM,kBAAkB,QAAQ,WAAW,SAAS;AAAA,EACpD,IAAI,WAAW,QAAQ,iBAAiB,KAAK,CAAC;AAAA,IAAG,OAAO;AAAA,EACxD,OAAO,QAAQ,WAAW,OAAO;AAAA;AAG5B,IAAM,gBAAe,mBAAmB;AAY/C,SAAS,kBAAkB,CAAC,MAAwB;AAAA,EAClD,IAAI,QAAQ,aAAa;AAAA,IAAS,OAAO,CAAC,IAAI;AAAA,EAC9C,OAAO,CAAC,MAAM,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW;AAAA;AAG3E,SAAS,oBAAoB,CAAC,MAAsB;AAAA,EAClD,IAAI,MAAM;AAAA,EACV,OAAO,MAAM;AAAA,IACX,MAAM,SAAS,QAAQ,KAAK,gBAAgB,MAAM;AAAA,IAClD,WAAW,aAAa,mBAAmB,IAAI,GAAG;AAAA,MAChD,MAAM,OAAO,QAAQ,QAAQ,SAAS;AAAA,MACtC,IAAI,WAAW,IAAI;AAAA,QAAG,OAAO;AAAA,IAC/B;AAAA,IACA,MAAM,SAAS,QAAQ,GAAG;AAAA,IAG1B,IAAI,WAAW;AAAA,MAAK,OAAO,QAAQ,QAAQ,IAAI;AAAA,IAC/C,MAAM;AAAA,EACR;AAAA;AAKK,IAAM,YAAY,gBAAgB;AAEzC,SAAS,oBAAoB,CAAC,QAAgB,WAA2B;AAAA,EACvE,MAAM,WAAW,SAAQ,MAAM;AAAA,EAC/B,IAAI;AAAA,IAAU,OAAO,QAAQ,QAAQ;AAAA,EACrC,OAAO,QAAQ,WAAW,SAAS;AAAA;AAGrC,SAAS,YAAY,CAAC,UAA8B,UAA0B;AAAA,EAC5E,OAAO,iBAAiB,UAAU,QAAQ;AAAA;AAGrC,IAAM,iBAAgB,qBAAqB,0BAA0B,WAAW;AAChF,IAAM,uBAAsB,QAAQ,gBAAe,QAAQ;AAC3D,IAAM,kBAAkB,QAAQ,gBAAe,MAAM;AACrD,IAAM,qBAAqB,QAAQ,gBAAe,MAAM;AACxD,IAAM,cAAc,qBAAqB,wBAAwB,SAAS;AAC1E,IAAM,uBAAuB,QAAQ,aAAa,UAAU;AAC5D,IAAM,gBAAe,QAAQ,WAAW,UAAU;AAClD,IAAM,cAAc,QAAQ,WAAW,SAAS;AAEhD,IAAM,oBAAmB,QAAQ,WAAW,QAAQ,IAAI;AACxD,IAAM,yBAAwB,QAAQ,WAAW,QAAQ,UAAU;AAK1E,IAAM,wBAAwB,SAAQ,4BAA4B;AAC3D,IAAM,qBAAoB,wBAAwB,QAAQ,qBAAqB,IAAI;AAwBnF,IAAM,mBAAmB,QAAQ,aAAa,UAAU,SAAS;AAGjE,IAAM,qBAAqB;AAE3B,IAAM,gCAAgC;AAE7C,SAAS,cAAc,CAAC,eAAuB,gBAAiC;AAAA,EAC9E,MAAM,SAAS,cAAc,MAAM,GAAG,EAAE,IAAI,MAAM;AAAA,EAClD,MAAM,UAAU,eAAe,MAAM,GAAG,EAAE,IAAI,MAAM;AAAA,EACpD,IAAI,OAAO,KAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,OAAO,KAAK;AAAA,IAAG,OAAO;AAAA,EACpE,SAAS,QAAQ,EAAG,QAAQ,QAAQ,QAAQ,SAAS,GAAG;AAAA,IACtD,KAAK,OAAO,UAAU,MAAM,QAAQ,UAAU;AAAA,MAAI,OAAO;AAAA,IACzD,KAAK,OAAO,UAAU,MAAM,QAAQ,UAAU;AAAA,MAAI,OAAO;AAAA,EAC3D;AAAA,EACA,OAAO;AAAA;AAaT,IAAM,sCAAsC;AAE5C,SAAS,4BAA4B,CAAC,WAA4B;AAAA,EAChE,IAAI;AAAA,IACF,MAAM,SAAS,aAAa,WAAW,CAAC,WAAW,GAAG;AAAA,MACpD,UAAU;AAAA,MACV,SAAS;AAAA,MACT,OAAO,CAAC,UAAU,QAAQ,QAAQ;AAAA,MAIlC,aAAa;AAAA,IACf,CAAC,EAAE,KAAK;AAAA,IACR,MAAM,QAAQ,OAAO,MAAM,kCAAkC;AAAA,IAC7D,IAAI,CAAC;AAAA,MAAO,OAAO;AAAA,IACnB,OAAO,eAAe,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,GAAG,6BAA6B;AAAA,IAC7E,MAAM;AAAA,IACN,OAAO;AAAA;AAAA;AASJ,SAAS,mBAAmB,CAAC,UAAuC;AAAA,EACzE,MAAM,WAAW,UAAU,KAAK;AAAA,EAChC,IACE,CAAC,YACD,CAAC,eAAe,mBAAmB,QAAQ,MAAM,EAAE,GAAG,6BAA6B,GACnF;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAM,YAAY,WACd,QAAQ,QAAQ,IAChB,QAAQ,eAAc,cAAc,oBAAoB,aAAa,kBAAkB;AAAA,EAC3F,IAAI;AAAA,IACF,WAAW,WAAW,UAAU,IAAI;AAAA,IACpC,OAAO,6BAA6B,SAAS,IAAI,YAAY;AAAA,IAC7D,MAAM;AAAA,IACN;AAAA;AAAA;AAUG,IAAM,oBACX,SAAQ,2BAA2B,KACnC,SAAQ,kBAAkB,KAC1B,IACA,QAAQ,QAAQ,EAAE;AAEb,IAAM,iBAAiB,oBAAoB,SAAQ,yBAAyB,CAAC;AAG7E,IAAM,mBAAkB;AAWxB,SAAS,gBAAgB,CAAC,UAAuC;AAAA,EACtE,MAAM,WAAW,UAAU,KAAK;AAAA,EAChC,MAAM,YAAY,WACd,QAAQ,QAAQ,IAChB,QAAQ,eAAc,WAAW,kBAAiB,UAAU,kBAAkB;AAAA,EAClF,IAAI;AAAA,IACF,WAAW,WAAW,UAAU,IAAI;AAAA,IACpC,OAAO;AAAA,IACP,MAAM;AAAA,IACN;AAAA;AAAA;AAIG,IAAM,eAAc,iBAAiB,SAAQ,sBAAsB,CAAC;AAGpE,SAAS,oBAAoB,CAAC,UAA2B;AAAA,EAC9D,MAAM,WAAW,UAAU,KAAK;AAAA,EAChC,IAAI;AAAA,IAAU,OAAO,QAAQ,QAAQ;AAAA,EACrC,OACE,kBACA,QAAQ,eAAc,cAAc,oBAAoB,aAAa,kBAAkB;AAAA;AAIpF,IAAM,qBAAqB,qBAAqB,SAAQ,0BAA0B,CAAC;AAwDnF,IAAM,UAAU,qBAAqB,KAAK;AAYjD,IAAM,kBAAkB,cAAc,YAAY,GAAG,EAAE,QAAQ,KAAK;AAC7D,IAAM,cACX,QAAQ,aAAa,UAAU,cAAc,eAAe,EAAE,OAAO;AAChE,IAAM,iBAAgB,QAAQ,eAAc,eAAe;AAE3D,IAAM,uBAAsB,QAAQ,eAAc,gCAAgC;AAElF,IAAM,eAAc,QAAQ,eAAc,wBAAwB;AAClE,IAAM,mBAAkB,QAAQ,eAAc,4BAA4B;AAC1E,IAAM,8BAA6B,QACxC,eACA,mCACF;AAEO,IAAM,eAAc,QAAQ,eAAc,wBAAwB;AAElE,IAAM,sBAAqB,QAAQ,eAAc,+BAA+B;AAEhF,IAAM,wBAAwB,QAAQ,eAAc,kCAAkC;AAEtF,IAAM,wBAAuB,QAAQ,eAAc,iCAAiC;AAEpF,IAAM,uBAAsB,QAAQ,eAAc,gCAAgC;AAElF,IAAM,gBAAe,QAAQ,eAAc,yBAAyB;AAEpE,IAAM,qBAAoB,aAAa,QAAQ,IAAI,mBAAmB,IAAI;AAC1E,IAAM,oBAAmB,aAAa,QAAQ,IAAI,kBAAkB,IAAI;AAE/E,SAAS,oBAAoB,CAAC,OAAe,UAA0B;AAAA,EACrE,OAAO,uBAAuB,OAAO,QAAQ;AAAA;AAIxC,SAAS,yBAAwB,CAAC,SAAyB;AAAA,EAChE,OAAO,KAAK,sBAAqB,qBAAqB,SAAS,OAAO,CAAC;AAAA;AAOzE,SAAS,uBAAuB,CAC9B,QACA,UACA,UAAyC,CAAC,GAClC;AAAA,EACR,MAAM,WAAW,SAAQ,MAAM;AAAA,EAC/B,MAAM,aAAa,QAAQ,aAAa,QAAQ;AAAA,EAChD,UAAU,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAAA,EAClD,IAAI,UAAU;AAAA,IACZ,IAAI,QAAQ,iBAAiB;AAAA,MAC3B,cAAc,YAAY,GAAG;AAAA,GAAc,EAAE,MAAM,IAAM,CAAC;AAAA,MAC1D,UAAU,YAAY,GAAK;AAAA,IAC7B;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,WAAW,UAAU,GAAG;AAAA,IAC1B,MAAM,SAAS,aAAa,YAAY,OAAO,EAAE,KAAK;AAAA,IACtD,IAAI,QAAQ;AAAA,MACV,UAAU,YAAY,GAAK;AAAA,MAC3B,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,YAAY,EAAE,EAAE,SAAS,WAAW;AAAA,EACnD,IAAI;AAAA,IACF,cAAc,YAAY,GAAG;AAAA,GAAY,EAAE,MAAM,KAAO,MAAM,KAAK,CAAC;AAAA,IACpE,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,IAAK,MAAgC,SAAS;AAAA,MAAU,MAAM;AAAA,IAC9D,MAAM,SAAS,aAAa,YAAY,OAAO,EAAE,KAAK;AAAA,IACtD,IAAI,CAAC;AAAA,MAAQ,MAAM,IAAI,MAAM,oCAAoC,YAAY;AAAA,IAC7E,UAAU,YAAY,GAAK;AAAA,IAC3B,OAAO;AAAA;AAAA;AAIJ,IAAM,sBAAqB,wBAChC,sBACA,oBACF;AAEO,IAAM,qBAAqB,wBAChC,0BACA,oBACF;AAYO,IAAM,UAAU,wBAAwB,oBAAoB,SAAS;AACrE,IAAM,oBAAmB,wBAC9B,6BACA,oBACA,EAAE,iBAAiB,KAAK,CAC1B;AAGA,OAAO,QAAQ,IAAI;AAGZ,IAAM,iBAAgB,SAAS,QAAQ,IAAI,iBAAiB,QAAQ,EAAE;AACtE,IAAM,WAAW,QAAQ,IAAI,YAAY;AAGzC,IAAM,WAAW,qBAAqB,qBAAqB,MAAM;AACjE,IAAM,UAAU,qBAAqB,oBAAoB,MAAM;AAC/D,IAAM,cAAc,QAAQ,UAAU,SAAS;AAC/C,IAAM,YAAY,QAAQ,UAAU,OAAO;AAE3C,IAAM,cAAc,QAAQ,IAAI,mBACnC,QAAQ,QAAQ,IAAI,gBAAgB,IACpC,QAAQ,UAAU,aAAa;AAC5B,IAAM,aAAa,QAAQ,UAAU,kBAAkB;AACvD,IAAM,gBAAgB,QAAQ,UAAU,OAAO;AAI/C,IAAM,WAAU,qBAAqB,oBAAoB,SAAS;AAElE,IAAM,eAAe,QAAQ,UAAS,UAAU;AAChD,IAAM,aAAa,QAAQ,UAAS,aAAa;AACjD,IAAM,cAAc,QAAQ,UAAS,cAAc;AACnD,IAAM,oBAAoB,QAAQ,UAAS,eAAe;AAC1D,IAAM,mBAAmB,QAAQ,UAAS,cAAc;AAQxD,IAAM,qBAAoB,QAAQ,UAAS,QAAQ;AACnD,IAAM,uBAAuB,aAAa,QAAQ,IAAI,sBAAsB,IAAI;AAChF,IAAM,sBAAsB,aAAa,QAAQ,IAAI,qBAAqB,IAAI;AAC9E,IAAM,uBAAuB,QAAQ,UAAS,kBAAkB;AACvE,UAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AACxC,UAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AACvC,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAC1C,UAAU,WAAW,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AACrD,UAAU,SAAS,EAAE,WAAW,KAAK,CAAC;AACtC,UAAU,cAAc,EAAE,WAAW,KAAK,CAAC;AAC3C,UAAU,YAAY,EAAE,WAAW,KAAK,CAAC;AACzC,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAC1C,UAAU,mBAAmB,EAAE,WAAW,KAAK,CAAC;AAChD,UAAU,kBAAkB,EAAE,WAAW,KAAK,CAAC;AAC/C,UAAU,sBAAsB,EAAE,WAAW,KAAK,CAAC;AACnD,UAAU,gBAAe,EAAE,WAAW,KAAK,CAAC;AAC5C,UAAU,sBAAqB,EAAE,WAAW,KAAK,CAAC;AAClD,UAAU,iBAAiB,EAAE,WAAW,KAAK,CAAC;AAC9C,UAAU,oBAAoB,EAAE,WAAW,KAAK,CAAC;AACjD,UAAU,mBAAkB,EAAE,WAAW,KAAK,CAAC;AAC/C,UAAU,wBAAuB,EAAE,WAAW,KAAK,CAAC;AACpD,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAC1C,UAAU,sBAAsB,EAAE,WAAW,KAAK,CAAC;AACnD,UAAU,eAAc,EAAE,WAAW,KAAK,CAAC;AAC3C,UAAU,aAAa,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AAGhD,IAAM,wBAAwB,KAAK,KAAK;AAExC,IAAM,qBAAqB,QAAQ,eAAc,oBAAoB;AACrE,IAAM,gBAAgB,QAAQ,eAAc,eAAe;AAiBlE,IAAM,uBAAuB,OAAO;AAE7B,IAAM,wBAAwB,IAAI,OACvC,MAAM,6JACN,IACF;AAEO,IAAM,kBAAiB,IAAI,OAAO,YAAY,mCAAmC,IAAI;AAGrF,IAAM,gBAAe;AACrB,IAAM,cAAa;AAEnB,IAAM,eAAc;AAUpB,IAAM,kBAA4B,qBAAqB,QAAQ,GAAG;AAClE,IAAM,iBAAiB,SAAQ,gBAAgB,KAAK,SAAQ,eAAe;AAQ3E,IAAM,wBAAqC,MAAmB;AAAA,EACnE,MAAM,MAAM,SAAQ,yBAAyB,GAAG,YAAY;AAAA,EAC5D,OAAO,OAAQ,cAAoC,SAAS,GAAG,IAC1D,MACD;AAAA,GACH;AAMI,IAAM,aAAa,SAAQ,YAAY;AACvC,IAAM,cAAc,SAAQ,aAAa;AACzC,IAAM,aAAa,SAAQ,YAAY,KAAK;AAC5C,IAAM,yBACX,SAAQ,wBAAwB,KAAK,QAAQ,eAAc,mCAAmC;AACzF,IAAM,gBAAgB,SAAQ,oBAAoB,KAAK;AACvD,IAAM,gBAAgB,SAAQ,eAAe,KAAK;AAClD,IAAM,gBAAgB,SAAQ,eAAe,KAAK;AAWzD,SAAS,qBAAqB,GAAmB;AAAA,EAC/C,OAAO,SAAQ,iBAAiB,MAAM,gBAAgB,gBAAgB;AAAA;AAEjE,IAAM,kBAAkB,sBAAsB;AAE9C,IAAM,kBAAkB,SAAQ,iBAAiB;AAUjD,IAAM,oBACX,SAAQ,mBAAmB,KAAK;AAKlC,IAAM,mBAAmB,OAAO,SAAS,QAAQ,IAAI,kBAAkB,IAAI,EAAE;AACtE,IAAM,iBACX,OAAO,UAAU,gBAAgB,KAAK,mBAAmB,IAAI,mBAAmB;AAI3E,SAAS,kBAAiB,GAAW;AAAA,EAC1C,OACE,QAAQ,IAAI,4BACZ,KAAK,QAAQ,IAAI,cAAc,KAAK,QAAQ,GAAG,QAAQ,GAAG,WAAW;AAAA;",
11
- "debugId": "D4AB46255446428B64756E2164756E21",
10
+ "mappings": "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",
11
+ "debugId": "A33183283680C1D564756E2164756E21",
12
12
  "names": []
13
13
  }
@@ -12,7 +12,7 @@ function turnKey(scope) {
12
12
  scope.peerBridge.hostQueryId
13
13
  ]);
14
14
  }
15
- function registerCanonicalMcpBridgeEnvProvider2(provider) {
15
+ function registerCanonicalMcpBridgeEnvProvider(provider) {
16
16
  const registration = { id: Symbol("canonical-mcp-bridge"), provider };
17
17
  registrations.push(registration);
18
18
  let disposed = false;
@@ -25,7 +25,7 @@ function registerCanonicalMcpBridgeEnvProvider2(provider) {
25
25
  registrations.splice(index, 1);
26
26
  };
27
27
  }
28
- function canonicalMcpBridgeEnv2(scope) {
28
+ function canonicalMcpBridgeEnv(scope) {
29
29
  const lease = registrations.at(-1)?.provider(scope);
30
30
  if (!lease)
31
31
  return;
@@ -35,7 +35,7 @@ function canonicalMcpBridgeEnv2(scope) {
35
35
  turnLeases.set(key, leases);
36
36
  return lease.env;
37
37
  }
38
- function revokeCanonicalMcpBridgeTurn2(scope) {
38
+ function revokeCanonicalMcpBridgeTurn(scope) {
39
39
  const key = turnKey(scope);
40
40
  const leases = turnLeases.get(key);
41
41
  if (!leases)
@@ -49,6 +49,6 @@ function revokeCanonicalMcpBridgeTurn2(scope) {
49
49
  return leases.size;
50
50
  }
51
51
 
52
- export { registerCanonicalMcpBridgeEnvProvider2, canonicalMcpBridgeEnv2, revokeCanonicalMcpBridgeTurn2 };
52
+ export { registerCanonicalMcpBridgeEnvProvider, canonicalMcpBridgeEnv, revokeCanonicalMcpBridgeTurn };
53
53
 
54
- //# debugId=BDCA31F0236B34B264756E2164756E21
54
+ //# debugId=7358D06F0893D4D064756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type { PeerRuntimeBridgeContext } from \"#types\";\n\nexport type CanonicalMcpSurface = \"task\" | \"decision\" | \"wiki\";\n\nexport interface CanonicalMcpBridgeScope {\n surface: CanonicalMcpSurface;\n userId: string;\n topicId: string;\n queryId: string;\n peerBridge: PeerRuntimeBridgeContext;\n}\n\nexport interface CanonicalMcpBridgeEnvLease {\n env: Record<string, string>;\n /** Revoke the capability immediately. Must be safe to call more than once. */\n revoke(): void;\n}\n\nexport type CanonicalMcpBridgeEnvProvider = (\n scope: CanonicalMcpBridgeScope,\n) => CanonicalMcpBridgeEnvLease | undefined;\n\nconst registrations: Array<{ id: symbol; provider: CanonicalMcpBridgeEnvProvider }> = [];\nconst turnLeases = new Map<string, Set<() => void>>();\n\nfunction turnKey(\n scope: Pick<CanonicalMcpBridgeScope, \"userId\" | \"topicId\" | \"queryId\" | \"peerBridge\">,\n): string {\n return JSON.stringify([\n scope.userId,\n scope.topicId,\n scope.queryId,\n scope.peerBridge.hubCellId,\n scope.peerBridge.hostTopicId,\n scope.peerBridge.hostQueryId,\n ]);\n}\n\n/** Placement adapters install a scoped capability issuer without exposing\n * their hub discovery or authentication model to generic core. */\nexport function registerCanonicalMcpBridgeEnvProvider(\n provider: CanonicalMcpBridgeEnvProvider,\n): () => void {\n const registration = { id: Symbol(\"canonical-mcp-bridge\"), provider };\n registrations.push(registration);\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n const index = registrations.findIndex((entry) => entry.id === registration.id);\n if (index >= 0) registrations.splice(index, 1);\n };\n}\n\nexport function canonicalMcpBridgeEnv(\n scope: CanonicalMcpBridgeScope,\n): Record<string, string> | undefined {\n const lease = registrations.at(-1)?.provider(scope);\n if (!lease) return undefined;\n const key = turnKey(scope);\n const leases = turnLeases.get(key) ?? new Set<() => void>();\n leases.add(lease.revoke);\n turnLeases.set(key, leases);\n return lease.env;\n}\n\n/** Revoke every canonical MCP capability issued while building one placed turn. */\nexport function revokeCanonicalMcpBridgeTurn(\n scope: Pick<CanonicalMcpBridgeScope, \"userId\" | \"topicId\" | \"queryId\" | \"peerBridge\">,\n): number {\n const key = turnKey(scope);\n const leases = turnLeases.get(key);\n if (!leases) return 0;\n turnLeases.delete(key);\n for (const revoke of leases) {\n try {\n revoke();\n } catch {\n // Revocation is best-effort across independently owned bridge adapters;\n // continue so one broken disposer cannot preserve sibling capabilities.\n }\n }\n return leases.size;\n}\n"
6
6
  ],
7
- "mappings": ";;AAsBA,IAAM,gBAAgF,CAAC;AACvF,IAAM,aAAa,IAAI;AAEvB,SAAS,OAAO,CACd,OACQ;AAAA,EACR,OAAO,KAAK,UAAU;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,EACnB,CAAC;AAAA;AAKI,SAAS,sCAAqC,CACnD,UACY;AAAA,EACZ,MAAM,eAAe,EAAE,IAAI,OAAO,sBAAsB,GAAG,SAAS;AAAA,EACpE,cAAc,KAAK,YAAY;AAAA,EAC/B,IAAI,WAAW;AAAA,EACf,OAAO,MAAM;AAAA,IACX,IAAI;AAAA,MAAU;AAAA,IACd,WAAW;AAAA,IACX,MAAM,QAAQ,cAAc,UAAU,CAAC,UAAU,MAAM,OAAO,aAAa,EAAE;AAAA,IAC7E,IAAI,SAAS;AAAA,MAAG,cAAc,OAAO,OAAO,CAAC;AAAA;AAAA;AAI1C,SAAS,sBAAqB,CACnC,OACoC;AAAA,EACpC,MAAM,QAAQ,cAAc,GAAG,EAAE,GAAG,SAAS,KAAK;AAAA,EAClD,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,MAAM,QAAQ,KAAK;AAAA,EACzB,MAAM,SAAS,WAAW,IAAI,GAAG,KAAK,IAAI;AAAA,EAC1C,OAAO,IAAI,MAAM,MAAM;AAAA,EACvB,WAAW,IAAI,KAAK,MAAM;AAAA,EAC1B,OAAO,MAAM;AAAA;AAIR,SAAS,6BAA4B,CAC1C,OACQ;AAAA,EACR,MAAM,MAAM,QAAQ,KAAK;AAAA,EACzB,MAAM,SAAS,WAAW,IAAI,GAAG;AAAA,EACjC,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,WAAW,OAAO,GAAG;AAAA,EACrB,WAAW,UAAU,QAAQ;AAAA,IAC3B,IAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM;AAAA,EAIV;AAAA,EACA,OAAO,OAAO;AAAA;",
8
- "debugId": "BDCA31F0236B34B264756E2164756E21",
7
+ "mappings": ";;AAsBA,IAAM,gBAAgF,CAAC;AACvF,IAAM,aAAa,IAAI;AAEvB,SAAS,OAAO,CACd,OACQ;AAAA,EACR,OAAO,KAAK,UAAU;AAAA,IACpB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,IACjB,MAAM,WAAW;AAAA,EACnB,CAAC;AAAA;AAKI,SAAS,qCAAqC,CACnD,UACY;AAAA,EACZ,MAAM,eAAe,EAAE,IAAI,OAAO,sBAAsB,GAAG,SAAS;AAAA,EACpE,cAAc,KAAK,YAAY;AAAA,EAC/B,IAAI,WAAW;AAAA,EACf,OAAO,MAAM;AAAA,IACX,IAAI;AAAA,MAAU;AAAA,IACd,WAAW;AAAA,IACX,MAAM,QAAQ,cAAc,UAAU,CAAC,UAAU,MAAM,OAAO,aAAa,EAAE;AAAA,IAC7E,IAAI,SAAS;AAAA,MAAG,cAAc,OAAO,OAAO,CAAC;AAAA;AAAA;AAI1C,SAAS,qBAAqB,CACnC,OACoC;AAAA,EACpC,MAAM,QAAQ,cAAc,GAAG,EAAE,GAAG,SAAS,KAAK;AAAA,EAClD,IAAI,CAAC;AAAA,IAAO;AAAA,EACZ,MAAM,MAAM,QAAQ,KAAK;AAAA,EACzB,MAAM,SAAS,WAAW,IAAI,GAAG,KAAK,IAAI;AAAA,EAC1C,OAAO,IAAI,MAAM,MAAM;AAAA,EACvB,WAAW,IAAI,KAAK,MAAM;AAAA,EAC1B,OAAO,MAAM;AAAA;AAIR,SAAS,4BAA4B,CAC1C,OACQ;AAAA,EACR,MAAM,MAAM,QAAQ,KAAK;AAAA,EACzB,MAAM,SAAS,WAAW,IAAI,GAAG;AAAA,EACjC,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,WAAW,OAAO,GAAG;AAAA,EACrB,WAAW,UAAU,QAAQ;AAAA,IAC3B,IAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM;AAAA,EAIV;AAAA,EACA,OAAO,OAAO;AAAA;",
8
+ "debugId": "7358D06F0893D4D064756E2164756E21",
9
9
  "names": []
10
10
  }