negotium 0.22.4 → 0.22.6
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.
- package/dist/agent-helpers.js +408 -1301
- package/dist/agent-helpers.js.map +6 -6
- package/dist/background-bash.js +12 -12
- package/dist/background-bash.js.map +2 -2
- package/dist/browser-runtime.js +42 -44
- package/dist/browser-runtime.js.map +2 -2
- package/dist/canonical-mcp-bridge.js +8 -9
- package/dist/canonical-mcp-bridge.js.map +1 -1
- package/dist/{chunk-y4tyc603.js → chunk-1e0nxy7p.js} +13 -13
- package/dist/chunk-1e0nxy7p.js.map +10 -0
- package/dist/{chunk-9zn0bkc9.js → chunk-1mba9m1j.js} +77 -116
- package/dist/{chunk-9zn0bkc9.js.map → chunk-1mba9m1j.js.map} +2 -2
- package/dist/{chunk-rwj7x5pg.js → chunk-9a50csg6.js} +123 -121
- package/dist/{chunk-rwj7x5pg.js.map → chunk-9a50csg6.js.map} +7 -7
- package/dist/chunk-bnyvxss3.js +77 -0
- package/dist/{chunk-q5djsg78.js.map → chunk-bnyvxss3.js.map} +1 -1
- package/dist/{chunk-0jtan6fd.js → chunk-e59kzyvy.js} +4 -5
- package/dist/{chunk-0jtan6fd.js.map → chunk-e59kzyvy.js.map} +2 -2
- package/dist/{chunk-f7p0h1gs.js → chunk-ww8a4ej4.js} +5 -5
- package/dist/{chunk-f7p0h1gs.js.map → chunk-ww8a4ej4.js.map} +2 -2
- package/dist/hosted-agent.js +127 -124
- package/dist/hosted-agent.js.map +4 -4
- package/dist/main.js +3327 -5138
- package/dist/main.js.map +10 -10
- package/dist/mcp-catalog.js +4 -4
- package/dist/mcp-catalog.js.map +1 -1
- package/dist/mcp-factories.js +630 -1515
- package/dist/mcp-factories.js.map +6 -6
- package/dist/mcp-servers.js +5 -5
- package/dist/mcp-servers.js.map +1 -1
- package/dist/media.js +3 -3
- package/dist/media.js.map +1 -1
- package/dist/outbox.js +15 -15
- package/dist/outbox.js.map +2 -2
- package/dist/platform-runtime.js +7 -7
- package/dist/platform-runtime.js.map +1 -1
- package/dist/prompts.js +6 -6
- package/dist/prompts.js.map +2 -2
- package/dist/query-runtime.js +16 -18
- package/dist/query-runtime.js.map +2 -2
- package/dist/registry.js +19 -20
- package/dist/registry.js.map +2 -2
- package/dist/rollout.js +41 -41
- package/dist/rollout.js.map +2 -2
- package/dist/runtime/src/agents/rollout/claude.ts +6 -1
- package/dist/runtime/src/application/submit-runtime-gateway-turn.ts +6 -4
- package/dist/runtime/src/node-host.ts +1 -0
- package/dist/runtime/src/platform/mcp-config.ts +60 -28
- package/dist/runtime/src/runtime/turn-runner.ts +9 -4
- package/dist/runtime/src/topics/update.ts +20 -0
- package/dist/runtime/src/version.ts +1 -1
- package/dist/runtime-gateway.js +12 -12
- package/dist/runtime-gateway.js.map +2 -2
- package/dist/runtime-helpers.js +52 -54
- package/dist/runtime-helpers.js.map +2 -2
- package/dist/sqlite.js +3 -5
- package/dist/sqlite.js.map +2 -2
- package/dist/storage.js +4831 -4802
- package/dist/storage.js.map +2 -2
- package/dist/types/packages/core/src/agents/rollout/claude.d.ts +5 -0
- package/dist/types/packages/core/src/platform/mcp-config.d.ts +8 -0
- package/dist/types/packages/core/src/runtime/turn-runner.d.ts +6 -2
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/dist/vault.js +20 -22
- package/dist/vault.js.map +2 -2
- package/package.json +1 -1
- package/dist/chunk-2mx7fq49.js +0 -6
- package/dist/chunk-2mx7fq49.js.map +0 -9
- package/dist/chunk-q5djsg78.js +0 -200
- package/dist/chunk-y4tyc603.js.map +0 -10
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../packages/core/src/agents/rollout/claude.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Claude rollout encoder.\n *\n * Materializes a synthetic JSONL at `~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl`\n * so a subsequent `claude.query({ resume: sessionId })` continues the\n * cross-agent conversation as if it had always been native. Verified by\n * sandbox PoCs (test-7c/test-7d): the SDK accepts these without checksum\n * gating, requiring only `user`/`assistant` messages and a small per-turn\n * attachment chain captured into `agents/fixtures/claude-attachments.jsonl`.\n *\n * Tool history is folded into assistant text as `[Tool: ...]` annotations\n * (see shared.ts:extractChatPairs) — synthetic tool_use IDs across SDKs are\n * too fragile to reconstruct structurally.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport {\n assertUuidLike,\n type ChatPair,\n clone,\n ensureCwdExists,\n extractChatPairs,\n FIXTURES_DIR,\n} from \"#agents/rollout/shared\";\nimport { parseJsonlText, writeJsonlFile } from \"#platform/jsonl\";\nimport { logger } from \"#platform/logger\";\nimport type { ConversationEntry } from \"#storage/conversations\";\n\ninterface ClaudeAttachments {\n deferredToolsDelta: Record<string, unknown>;\n skillListing: Record<string, unknown>;\n}\n\nlet _attachmentsCache: ClaudeAttachments | null = null;\nfunction loadClaudeAttachments(): ClaudeAttachments {\n if (_attachmentsCache) return _attachmentsCache;\n const raw = readFileSync(join(FIXTURES_DIR, \"claude-attachments.jsonl\"), \"utf8\");\n const lines = parseJsonlText<Record<string, unknown>>(raw);\n if (lines.length < 2) {\n throw new Error(\n `loadClaudeAttachments: expected >=2 entries in claude-attachments.jsonl, got ${lines.length}`,\n );\n }\n _attachmentsCache = {\n deferredToolsDelta: lines[0],\n skillListing: lines[1],\n };\n return _attachmentsCache;\n}\n\n/**\n * Version strings stamped onto synthetic rollouts so they look indistinguishable\n * from a live SDK session. These do not affect resume behavior — the SDKs do\n * not gate on them — but keeping them current avoids confusion in observability\n * tooling that scans rollout files.\n */\nconst CLAUDE_SDK_VERSION = \"2.1.126\";\nconst CLAUDE_DEFAULT_MODEL = \"claude-sonnet-5\";\nconst CLAUDE_DEFAULT_GIT_BRANCH = \"HEAD\";\n\n/**\n * Encode a directory path the way Claude SDK expects in\n * `~/.claude/projects/<encoded-cwd>/`. macOS resolves `/tmp` to\n * `/private/tmp`, mirroring what the SDK records.\n *\n * The SDK normalizes ANY non-alphanumeric character to `-` (verified\n * empirically on disk: `/Users/maestrobot/.../user_6407801418` →\n * `-Users-...-user-6407801418`, i.e. both `/` AND `_` collapse to `-`).\n * A previous implementation only replaced `/` and left `_` intact, so\n * synthetic rollouts landed at `…-user_6407801418/` while the SDK looked\n * at `…-user-6407801418/` — every `set_agent` switch surfaced as \"No\n * conversation found with session ID\" on the next message.\n *\n * Nothing is prepended: a POSIX path starts with `/`, which already becomes\n * the leading `-`. A Windows path does not, and the SDK writes\n * `C:\\Users\\x` as `C--Users-x`; forcing a `-` in front sent Windows rollouts\n * to `-C--Users-x/`, where the SDK never looks.\n */\nexport function encodeClaudeCwd(cwd: string): string {\n const realCwd = cwd.startsWith(\"/tmp/\") ? cwd.replace(/^\\/tmp\\//, \"/private/tmp/\") : cwd;\n return realCwd.replaceAll(/[^a-zA-Z0-9]/g, \"-\");\n}\n\nexport interface ClaudeRolloutOptions {\n /** Working directory the resumed Claude session will report. */\n cwd: string;\n /** Optional override; default = freshly generated UUIDv4. */\n sessionId?: string;\n /**\n * Pairs to encode. If omitted, derived from `entries` via extractChatPairs.\n * Pass explicit pairs when the caller has already shaped the dialogue.\n */\n pairs?: ChatPair[];\n /** When `pairs` is omitted, the source UnifiedEvent log to digest. */\n entries?: ConversationEntry[];\n /** Full provider model id stamped on synthesized assistant history. */\n model?: string;\n}\n\nexport interface ClaudeRolloutResult {\n sessionId: string;\n rolloutPath: string;\n}\n\n/**\n * Materialize a Claude rollout JSONL with the provided dialogue and place it\n * at `~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl` so a subsequent\n * `claude.query({ resume: sessionId })` will continue the conversation.\n */\nexport function writeClaudeRollout(opts: ClaudeRolloutOptions): ClaudeRolloutResult {\n const sessionId = opts.sessionId ?? randomUUID();\n assertUuidLike(\"sessionId\", sessionId);\n ensureCwdExists(opts.cwd);\n const pairs = opts.pairs ?? extractChatPairs(opts.entries ?? []);\n const cwdReal = opts.cwd.startsWith(\"/tmp/\")\n ? opts.cwd.replace(/^\\/tmp\\//, \"/private/tmp/\")\n : opts.cwd;\n\n const lines: unknown[] = [];\n const ts = () => new Date().toISOString();\n let lastUuid: string | null = null;\n\n // Queue-operation noise that the live SDK records around each turn. Not\n // strictly required for resume but mirrors what the SDK itself writes,\n // keeping the synthetic file indistinguishable.\n lines.push({ type: \"queue-operation\", operation: \"enqueue\", timestamp: ts(), sessionId });\n lines.push({ type: \"queue-operation\", operation: \"dequeue\", timestamp: ts(), sessionId });\n\n // Per-turn attachment chain captured from a real Claude rollout. claude SDK\n // emits `deferred_tools_delta` followed by `skill_listing` immediately after\n // every user message, building a parentUuid chain user → att1 → att2 →\n // assistant. PoC-7d preserved this shape; replaying it keeps the resumed\n // session indistinguishable from a native one.\n const attachments = loadClaudeAttachments();\n\n for (const pair of pairs) {\n const userUuid = randomUUID();\n lines.push({\n parentUuid: lastUuid,\n isSidechain: false,\n promptId: randomUUID(),\n type: \"user\",\n message: { role: \"user\", content: [{ type: \"text\", text: pair.userText }] },\n uuid: userUuid,\n timestamp: ts(),\n permissionMode: \"bypassPermissions\",\n userType: \"external\",\n entrypoint: \"sdk-ts\",\n cwd: cwdReal,\n sessionId,\n version: CLAUDE_SDK_VERSION,\n gitBranch: CLAUDE_DEFAULT_GIT_BRANCH,\n });\n\n // Attachment 1: deferred_tools_delta — chain from user.\n const att1Uuid = randomUUID();\n const att1 = clone(attachments.deferredToolsDelta);\n (att1 as Record<string, unknown>).parentUuid = userUuid;\n (att1 as Record<string, unknown>).uuid = att1Uuid;\n (att1 as Record<string, unknown>).timestamp = ts();\n (att1 as Record<string, unknown>).sessionId = sessionId;\n (att1 as Record<string, unknown>).cwd = cwdReal;\n lines.push(att1);\n\n // Attachment 2: skill_listing — chain from att1.\n const att2Uuid = randomUUID();\n const att2 = clone(attachments.skillListing);\n (att2 as Record<string, unknown>).parentUuid = att1Uuid;\n (att2 as Record<string, unknown>).uuid = att2Uuid;\n (att2 as Record<string, unknown>).timestamp = ts();\n (att2 as Record<string, unknown>).sessionId = sessionId;\n (att2 as Record<string, unknown>).cwd = cwdReal;\n lines.push(att2);\n\n const assistantUuid = randomUUID();\n lines.push({\n parentUuid: att2Uuid,\n isSidechain: false,\n message: {\n model: opts.model ?? CLAUDE_DEFAULT_MODEL,\n id: `msg_${randomUUID().replace(/-/g, \"\").slice(0, 24)}`,\n type: \"message\",\n role: \"assistant\",\n content: [{ type: \"text\", text: pair.assistantText }],\n stop_reason: \"end_turn\",\n stop_sequence: null,\n stop_details: null,\n usage: {\n input_tokens: 0,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n output_tokens: 0,\n server_tool_use: { web_search_requests: 0, web_fetch_requests: 0 },\n service_tier: \"standard\",\n cache_creation: { ephemeral_1h_input_tokens: 0, ephemeral_5m_input_tokens: 0 },\n inference_geo: \"\",\n iterations: [],\n speed: \"standard\",\n },\n diagnostics: null,\n },\n requestId: `req_${randomUUID().replace(/-/g, \"\").slice(0, 22)}`,\n type: \"assistant\",\n uuid: assistantUuid,\n timestamp: ts(),\n userType: \"external\",\n entrypoint: \"sdk-ts\",\n cwd: cwdReal,\n sessionId,\n version: CLAUDE_SDK_VERSION,\n gitBranch: CLAUDE_DEFAULT_GIT_BRANCH,\n });\n lastUuid = assistantUuid;\n }\n\n const projectsDir = join(homedir(), \".claude\", \"projects\", encodeClaudeCwd(opts.cwd));\n const path = join(projectsDir, `${sessionId}.jsonl`);\n writeJsonlFile(path, lines);\n logger.info(\n { sessionId, path, pairs: pairs.length },\n \"writeClaudeRollout: synthetic rollout placed\",\n );\n return { sessionId, rolloutPath: path };\n}\n\n/**\n * Remove the latest poisoned thinking turn and everything after it from the\n * session JSONL.\n *\n * When a turn ends with stop_reason=\"max_tokens\" while extended thinking is\n * active, the Claude CLI writes the truncated thinking block verbatim to the\n * rollout file. The Anthropic API rejects any subsequent resume that replays\n * this incomplete block with 400 \"thinking/redacted_thinking blocks cannot be\n * modified\". Dropping the entire poisoned turn (user entry + attachments +\n * truncated assistant) leaves the JSONL in a clean state so the next\n * claude.query({ resume }) can proceed without a 400.\n *\n * Returns true when the JSONL was found and repaired, false otherwise\n * (file missing, no poisoned assistant turn found, I/O error). Error-path\n * callers fall back to clearing the session ID when false is returned.\n */\nexport function repairPoisonedRollout(sessionId: string, cwd: string): boolean {\n try {\n const path = join(homedir(), \".claude\", \"projects\", encodeClaudeCwd(cwd), `${sessionId}.jsonl`);\n if (!existsSync(path)) return false;\n\n const lines = readFileSync(path, \"utf8\")\n .split(\"\\n\")\n .filter((l) => l.trim());\n\n // Walk backwards to find the latest assistant turn that actually contains\n // the poisoned shape: max_tokens plus a thinking/redacted_thinking block.\n // A resume failure can append a fresh user entry after the poisoned turn;\n // trimming the last user would remove only the retry and leave the bad\n // assistant in place.\n let poisonedAssistantIdx = -1;\n for (let i = lines.length - 1; i >= 0; i--) {\n const entry = parseClaudeRolloutLine(lines[i]);\n if (entry && isPoisonedAssistantEntry(entry)) {\n poisonedAssistantIdx = i;\n break;\n }\n }\n\n if (poisonedAssistantIdx < 0) {\n logger.warn({ sessionId, path }, \"repairPoisonedRollout: no poisoned assistant entry found\");\n return false;\n }\n\n let turnStartIdx = -1;\n for (let i = poisonedAssistantIdx - 1; i >= 0; i--) {\n const entry = parseClaudeRolloutLine(lines[i]);\n if (entry?.type === \"user\") {\n turnStartIdx = i;\n break;\n }\n }\n\n if (turnStartIdx < 0) {\n logger.warn(\n { sessionId, path, poisonedAssistantIdx },\n \"repairPoisonedRollout: poisoned assistant has no preceding user entry\",\n );\n return false;\n }\n\n const kept = lines.slice(0, turnStartIdx);\n writeFileSync(path, kept.length ? `${kept.join(\"\\n\")}\\n` : \"\");\n logger.warn(\n {\n sessionId,\n path,\n poisonedAssistantIdx,\n turnStartIdx,\n droppedEntries: lines.length - turnStartIdx,\n keptEntries: kept.length,\n },\n \"repairPoisonedRollout: truncated turn removed from rollout JSONL\",\n );\n return true;\n } catch (err) {\n logger.warn({ err, sessionId, cwd }, \"repairPoisonedRollout: I/O error\");\n return false;\n }\n}\n\ntype ClaudeRolloutEntry = {\n type?: string;\n message?: {\n stop_reason?: string | null;\n content?: unknown;\n };\n};\n\nfunction parseClaudeRolloutLine(line: string): ClaudeRolloutEntry | null {\n try {\n return JSON.parse(line) as ClaudeRolloutEntry;\n } catch {\n return null;\n }\n}\n\nfunction isPoisonedAssistantEntry(entry: ClaudeRolloutEntry): boolean {\n if (entry.type !== \"assistant\") return false;\n if (entry.message?.stop_reason !== \"max_tokens\") return false;\n const content = entry.message.content;\n if (!Array.isArray(content)) return false;\n return content.some((block) => {\n if (!block || typeof block !== \"object\") return false;\n const type = (block as { type?: unknown }).type;\n return type === \"thinking\" || type === \"redacted_thinking\";\n });\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "5ADF29935DF359FE64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -69,12 +69,12 @@ function createStdioLogger(options = {}) {
|
|
|
69
69
|
var logger = createStdioLogger();
|
|
70
70
|
|
|
71
71
|
// ../../packages/core/src/platform/config.ts
|
|
72
|
-
function
|
|
72
|
+
function envText2(envKey) {
|
|
73
73
|
return readEnvText(process.env, envKey);
|
|
74
74
|
}
|
|
75
75
|
var HOME = homedir();
|
|
76
76
|
function resolveStateDir() {
|
|
77
|
-
const configured =
|
|
77
|
+
const configured = envText2("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
|
|
88
|
+
var PROJECT_ROOT2 = 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 =
|
|
95
|
+
let dir = PROJECT_ROOT2;
|
|
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 =
|
|
111
|
+
const envValue = envText2(envKey);
|
|
112
112
|
if (envValue)
|
|
113
113
|
return resolve(envValue);
|
|
114
114
|
return resolve(STATE_DIR, stateName);
|
|
@@ -116,23 +116,18 @@ function resolveLocalStateDir(envKey, stateName) {
|
|
|
116
116
|
function parsePortEnv(envValue, fallback) {
|
|
117
117
|
return parseRuntimePort(envValue, fallback);
|
|
118
118
|
}
|
|
119
|
-
var
|
|
120
|
-
var
|
|
121
|
-
var SHARED_WIKI_DIR = resolve(
|
|
122
|
-
var CRON_WORKSPACE_DIR = resolve(
|
|
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");
|
|
123
123
|
var BROWSER_DIR = resolveLocalStateDir("NEGOTIUM_BROWSER_DIR", "browser");
|
|
124
124
|
var BROWSER_PROFILES_DIR = resolve(BROWSER_DIR, "profiles");
|
|
125
|
-
var
|
|
125
|
+
var BINARIES_DIR2 = resolve(STATE_DIR, "binaries");
|
|
126
126
|
var SECRETS_DIR = resolve(STATE_DIR, "secrets");
|
|
127
|
-
var
|
|
128
|
-
var
|
|
129
|
-
var CLAUDE_EXECUTABLE_ENV =
|
|
130
|
-
var
|
|
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
|
-
}
|
|
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;
|
|
136
131
|
var BINARY_EXTENSION = process.platform === "win32" ? ".exe" : "";
|
|
137
132
|
var BROWSER_RS_VERSION = "v0.7.7";
|
|
138
133
|
var BROWSER_RS_MIN_SECURE_VERSION = "0.2.1";
|
|
@@ -171,7 +166,7 @@ function resolveBrowserRsBin(envValue) {
|
|
|
171
166
|
if (!override && !versionAtLeast(BROWSER_RS_VERSION.replace(/^v/, ""), BROWSER_RS_MIN_SECURE_VERSION)) {
|
|
172
167
|
return;
|
|
173
168
|
}
|
|
174
|
-
const candidate = override ? resolve(override) : resolve(
|
|
169
|
+
const candidate = override ? resolve(override) : resolve(BINARIES_DIR2, "browser-rs", BROWSER_RS_VERSION, `browser-rs${BINARY_EXTENSION}`);
|
|
175
170
|
try {
|
|
176
171
|
accessSync(candidate, constants.X_OK);
|
|
177
172
|
return browserRsMeetsMinimumVersion(candidate) ? candidate : undefined;
|
|
@@ -179,12 +174,12 @@ function resolveBrowserRsBin(envValue) {
|
|
|
179
174
|
return;
|
|
180
175
|
}
|
|
181
176
|
}
|
|
182
|
-
var SNIPPETS_API_URL = (
|
|
183
|
-
var BROWSER_RS_BIN = resolveBrowserRsBin(
|
|
184
|
-
var
|
|
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";
|
|
185
180
|
function resolveBashRsBin(envValue) {
|
|
186
181
|
const override = envValue?.trim();
|
|
187
|
-
const candidate = override ? resolve(override) : resolve(
|
|
182
|
+
const candidate = override ? resolve(override) : resolve(BINARIES_DIR2, "bash-rs", BASH_RS_VERSION2, `bash-rs${BINARY_EXTENSION}`);
|
|
188
183
|
try {
|
|
189
184
|
accessSync(candidate, constants.X_OK);
|
|
190
185
|
return candidate;
|
|
@@ -192,63 +187,38 @@ function resolveBashRsBin(envValue) {
|
|
|
192
187
|
return;
|
|
193
188
|
}
|
|
194
189
|
}
|
|
195
|
-
var
|
|
190
|
+
var BASH_RS_BIN2 = resolveBashRsBin(envText2("NEGOTIUM_BASH_RS_BIN"));
|
|
196
191
|
function resolveBrowserMcpBin(envValue) {
|
|
197
192
|
const override = envValue?.trim();
|
|
198
193
|
if (override)
|
|
199
194
|
return resolve(override);
|
|
200
|
-
return BROWSER_RS_BIN ?? resolve(
|
|
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;
|
|
195
|
+
return BROWSER_RS_BIN ?? resolve(BINARIES_DIR2, "browser-rs", BROWSER_RS_VERSION, `browser-rs${BINARY_EXTENSION}`);
|
|
224
196
|
}
|
|
197
|
+
var PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText2("NEGOTIUM_BROWSER_MCP_BIN"));
|
|
225
198
|
var TSX_BIN = resolveDependencyBin("tsx");
|
|
226
199
|
var TSX_LOADER_PATH = createRequire(import.meta.url).resolve("tsx");
|
|
227
|
-
var
|
|
228
|
-
var
|
|
229
|
-
var
|
|
230
|
-
var
|
|
231
|
-
var
|
|
232
|
-
var
|
|
233
|
-
var
|
|
234
|
-
var
|
|
235
|
-
var COMPACTION_LOG_SERVER = resolve(
|
|
236
|
-
var
|
|
237
|
-
var
|
|
238
|
-
var
|
|
239
|
-
var
|
|
240
|
-
var
|
|
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);
|
|
241
214
|
function safeWorkspaceSegment(value, fallback) {
|
|
242
215
|
return safeRuntimePathSegment(value, fallback);
|
|
243
216
|
}
|
|
244
|
-
function
|
|
245
|
-
return join(
|
|
246
|
-
}
|
|
247
|
-
function isProductionEnv() {
|
|
248
|
-
return false;
|
|
217
|
+
function resolveTopicWorkspaceDir2(topicId) {
|
|
218
|
+
return join(TOPIC_WORKSPACE_DIR2, safeWorkspaceSegment(topicId, "topic"));
|
|
249
219
|
}
|
|
250
220
|
function loadOrCreateLocalSecret(envKey, filename, options = {}) {
|
|
251
|
-
const envValue =
|
|
221
|
+
const envValue = envText2(envKey);
|
|
252
222
|
const secretFile = resolve(SECRETS_DIR, filename);
|
|
253
223
|
mkdirSync(dirname(secretFile), { recursive: true });
|
|
254
224
|
if (envValue) {
|
|
@@ -281,12 +251,12 @@ function loadOrCreateLocalSecret(envKey, filename, options = {}) {
|
|
|
281
251
|
return stored;
|
|
282
252
|
}
|
|
283
253
|
}
|
|
284
|
-
var
|
|
254
|
+
var RUNTIME_MCP_SECRET2 = loadOrCreateLocalSecret("RUNTIME_MCP_SECRET", "runtime-mcp-secret");
|
|
285
255
|
var NODE_CONTROL_TOKEN = loadOrCreateLocalSecret("NEGOTIUM_CONTROL_TOKEN", "node-control-token");
|
|
286
256
|
var NODE_ID = loadOrCreateLocalSecret("NEGOTIUM_NODE_ID", "node-id");
|
|
287
|
-
var
|
|
257
|
+
var VAULT_MASTER_KEY2 = loadOrCreateLocalSecret("NEGOTIUM_VAULT_MASTER_KEY", "vault-master-key", { persistEnvValue: true });
|
|
288
258
|
delete process.env.NEGOTIUM_VAULT_MASTER_KEY;
|
|
289
|
-
var
|
|
259
|
+
var NEGOTIUM_PORT2 = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
|
|
290
260
|
var hostname = process.env.HOSTNAME || "127.0.0.1";
|
|
291
261
|
var DATA_DIR = resolveLocalStateDir("NEGOTIUM_DATA_DIR", "data");
|
|
292
262
|
var LOG_DIR = resolveLocalStateDir("NEGOTIUM_LOG_DIR", "logs");
|
|
@@ -295,17 +265,16 @@ var VAULT_DIR = resolve(DATA_DIR, "vault");
|
|
|
295
265
|
var SESSIONS_DB = process.env.SESSIONS_DB_PATH ? resolve(process.env.SESSIONS_DB_PATH) : resolve(DATA_DIR, "sessions.db");
|
|
296
266
|
var DEBUG_FILE = resolve(DATA_DIR, "debug-users.json");
|
|
297
267
|
var USERS_LOG_DIR = resolve(DATA_DIR, "users");
|
|
298
|
-
var
|
|
299
|
-
var
|
|
300
|
-
var
|
|
301
|
-
var
|
|
302
|
-
var
|
|
303
|
-
var
|
|
304
|
-
var
|
|
305
|
-
var BASHRS_SPILL_ROOT = resolve(RUN_DIR, "bashrs");
|
|
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");
|
|
306
275
|
var PLAYWRIGHT_BASE_PORT = parsePortEnv(process.env.PLAYWRIGHT_BASE_PORT, 9100);
|
|
307
276
|
var PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
|
|
308
|
-
var PLAYWRIGHT_PORTS_DIR = resolve(
|
|
277
|
+
var PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR2, "playwright-ports");
|
|
309
278
|
mkdirSync(STATE_DIR, { recursive: true });
|
|
310
279
|
mkdirSync(DATA_DIR, { recursive: true });
|
|
311
280
|
mkdirSync(UPLOADS_DIR, { recursive: true });
|
|
@@ -317,58 +286,50 @@ mkdirSync(DM_RESP_DIR, { recursive: true });
|
|
|
317
286
|
mkdirSync(SESSION_INBOX_DIR, { recursive: true });
|
|
318
287
|
mkdirSync(SESSION_ASKS_DIR, { recursive: true });
|
|
319
288
|
mkdirSync(PLAYWRIGHT_PORTS_DIR, { recursive: true });
|
|
320
|
-
mkdirSync(
|
|
321
|
-
mkdirSync(
|
|
289
|
+
mkdirSync(WORKSPACE_DIR2, { recursive: true });
|
|
290
|
+
mkdirSync(TOPIC_WORKSPACE_DIR2, { recursive: true });
|
|
322
291
|
mkdirSync(SHARED_WIKI_DIR, { recursive: true });
|
|
323
292
|
mkdirSync(CRON_WORKSPACE_DIR, { recursive: true });
|
|
324
|
-
mkdirSync(
|
|
325
|
-
mkdirSync(
|
|
293
|
+
mkdirSync(DM_WORKSPACE_DIR2, { recursive: true });
|
|
294
|
+
mkdirSync(SESSION_WORKSPACE_DIR2, { recursive: true });
|
|
326
295
|
mkdirSync(BROWSER_DIR, { recursive: true });
|
|
327
296
|
mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
|
|
328
|
-
mkdirSync(
|
|
297
|
+
mkdirSync(BINARIES_DIR2, { recursive: true });
|
|
329
298
|
mkdirSync(SECRETS_DIR, { recursive: true, mode: 448 });
|
|
330
299
|
var ACTIVE_QUERY_STALE_MS = 10 * 60 * 1000;
|
|
331
|
-
var AGENTS_PROMPTS_DIR = resolve(
|
|
332
|
-
var RESOURCES_DIR = resolve(
|
|
333
|
-
function getCleanEnv() {
|
|
334
|
-
const env = { ...process.env };
|
|
335
|
-
delete env.CLAUDECODE;
|
|
336
|
-
return env;
|
|
337
|
-
}
|
|
300
|
+
var AGENTS_PROMPTS_DIR = resolve(PROJECT_ROOT2, "src/prompts/agents");
|
|
301
|
+
var RESOURCES_DIR = resolve(PROJECT_ROOT2, "src/resources");
|
|
338
302
|
var ABSOLUTE_PATH_PREFIX = String.raw`(?:[A-Za-z]:[\\/]|\\\\|\/)`;
|
|
339
303
|
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");
|
|
340
|
-
var
|
|
341
|
-
var
|
|
342
|
-
var
|
|
343
|
-
var
|
|
344
|
-
var
|
|
345
|
-
var
|
|
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");
|
|
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");
|
|
349
310
|
var DEFAULT_TOPIC_EFFORT = (() => {
|
|
350
|
-
const raw =
|
|
311
|
+
const raw = envText2("NEGOTIUM_DEFAULT_EFFORT")?.toLowerCase();
|
|
351
312
|
return raw && EFFORT_VALUES.includes(raw) ? raw : "medium";
|
|
352
313
|
})();
|
|
353
|
-
var FFMPEG_BIN =
|
|
354
|
-
var FFPROBE_BIN =
|
|
355
|
-
var PYTHON_BIN =
|
|
356
|
-
var FASTER_WHISPER_WRAPPER =
|
|
357
|
-
var WHISPER_MODEL =
|
|
358
|
-
var TESSERACT_BIN =
|
|
359
|
-
var PDFTOTEXT_BIN =
|
|
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";
|
|
360
321
|
function resolveWhisperBackend() {
|
|
361
|
-
return
|
|
322
|
+
return envText2("WHISPER_BACKEND") === "mlx-whisper" ? "mlx-whisper" : "faster-whisper";
|
|
362
323
|
}
|
|
363
324
|
var WHISPER_BACKEND = resolveWhisperBackend();
|
|
364
|
-
var MLX_WHISPER_BIN =
|
|
365
|
-
var WHISPER_MODEL_MLX =
|
|
325
|
+
var MLX_WHISPER_BIN = envText2("MLX_WHISPER_BIN");
|
|
326
|
+
var WHISPER_MODEL_MLX = envText2("WHISPER_MODEL_MLX") ?? "mlx-community/whisper-large-v3-turbo";
|
|
366
327
|
var _envMaxTellDepth = Number.parseInt(process.env.MAX_TELL_DEPTH ?? "", 10);
|
|
367
328
|
var MAX_TELL_DEPTH = Number.isInteger(_envMaxTellDepth) && _envMaxTellDepth > 0 ? _envMaxTellDepth : 20;
|
|
368
|
-
function
|
|
329
|
+
function codexAuthFilePath2() {
|
|
369
330
|
return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
|
|
370
331
|
}
|
|
371
332
|
|
|
372
|
-
export { SUPPORTED_AGENTS, CLAUDE_EFFORT_VALUES, resolveFallbackAgent, logger,
|
|
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 };
|
|
373
334
|
|
|
374
|
-
//# debugId=
|
|
335
|
+
//# debugId=D4AB46255446428B64756E2164756E21
|
|
@@ -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,
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "D4AB46255446428B64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|