negotium 0.19.0 → 0.19.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-helpers.js +142 -77
- package/dist/agent-helpers.js.map +10 -10
- package/dist/background-bash.js.map +1 -1
- package/dist/browser-runtime.js.map +1 -1
- package/dist/{chunk-y8rtedjb.js → chunk-55dd0xw7.js} +2 -2
- package/dist/{chunk-y8rtedjb.js.map → chunk-55dd0xw7.js.map} +2 -2
- package/dist/{chunk-q2s5f70x.js → chunk-aqqmzmft.js} +1 -1
- package/dist/{chunk-3d1pjgfw.js → chunk-cv7vdsrn.js} +2 -2
- package/dist/{chunk-3d1pjgfw.js.map → chunk-cv7vdsrn.js.map} +2 -2
- package/dist/{chunk-4bzehg8t.js → chunk-exqz8bez.js} +3 -3
- package/dist/{chunk-4bzehg8t.js.map → chunk-exqz8bez.js.map} +2 -2
- package/dist/{chunk-22mtr8np.js → chunk-kkftbxh2.js} +1 -1
- package/dist/hosted-agent.js +4 -4
- package/dist/hosted-agent.js.map +2 -2
- package/dist/main.js +140 -82
- package/dist/main.js.map +11 -11
- package/dist/mcp-factories.js +214 -165
- package/dist/mcp-factories.js.map +9 -9
- package/dist/media.js.map +1 -1
- package/dist/prompts.js +23 -3
- package/dist/prompts.js.map +4 -4
- package/dist/query-runtime.js +56 -6
- package/dist/query-runtime.js.map +7 -5
- package/dist/registry.js +3 -3
- package/dist/rollout.js +2 -2
- package/dist/runtime/src/agents/mcp-tools/spawn-subagent.ts +24 -4
- package/dist/runtime/src/agents/model-catalog.ts +27 -2
- package/dist/runtime/src/agents/self-config-core.ts +10 -1
- package/dist/runtime/src/platform/config.ts +1 -1
- package/dist/runtime/src/query/state.ts +19 -1
- package/dist/runtime/src/storage/token-stats.ts +4 -1
- package/dist/runtime/src/version.ts +1 -1
- package/dist/runtime-helpers.js.map +1 -1
- package/dist/storage.js +5 -2
- package/dist/storage.js.map +3 -3
- package/dist/types/packages/core/src/platform/config.d.ts +1 -1
- package/dist/types/packages/core/src/query/state.d.ts +8 -0
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/dist/vault.js.map +1 -1
- package/package.json +3 -3
- /package/dist/{chunk-q2s5f70x.js.map → chunk-aqqmzmft.js.map} +0 -0
- /package/dist/{chunk-22mtr8np.js.map → chunk-kkftbxh2.js.map} +0 -0
package/dist/agent-helpers.js
CHANGED
|
@@ -480,7 +480,7 @@ function resolveWhisperBackend() {
|
|
|
480
480
|
function codexAuthFilePath() {
|
|
481
481
|
return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
|
|
482
482
|
}
|
|
483
|
-
var HOME, 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_ENV, CLAUDE_EXECUTABLE, DEFAULT_OUTPUT_LANGUAGE = "English", BINARY_EXTENSION, BROWSER_RS_VERSION = "v0.6.0", BROWSER_RS_MIN_SECURE_VERSION = "0.2.1", BROWSER_RS_VERSION_PROBE_TIMEOUT_MS = 15000, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.10", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER_PATH, 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, 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, ABSOLUTE_PATH_PREFIX, FILE_EXTENSIONS_REGEX, FILE_TAG_REGEX, MODEL_SONNET = "claude-sonnet-5", MODEL_OPUS = "claude-opus-5", MODEL_HAIKU = "claude-haiku-4-5-20251001", MODEL_FABLE = "claude-fable-5-1", MODEL_DEEPSEEK_V4_PRO = "deepseek-v4-pro", MODEL_DEEPSEEK_V4_FLASH = "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, _envMaxTellDepth, MAX_TELL_DEPTH;
|
|
483
|
+
var HOME, 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_ENV, CLAUDE_EXECUTABLE, DEFAULT_OUTPUT_LANGUAGE = "English", BINARY_EXTENSION, BROWSER_RS_VERSION = "v0.6.0", BROWSER_RS_MIN_SECURE_VERSION = "0.2.1", BROWSER_RS_VERSION_PROBE_TIMEOUT_MS = 15000, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.10", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER_PATH, 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, 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, ABSOLUTE_PATH_PREFIX, FILE_EXTENSIONS_REGEX, FILE_TAG_REGEX, MODEL_SONNET = "claude-sonnet-5", MODEL_OPUS = "claude-opus-5-5", MODEL_HAIKU = "claude-haiku-4-5-20251001", MODEL_FABLE = "claude-fable-5-1", MODEL_DEEPSEEK_V4_PRO = "deepseek-v4-pro", MODEL_DEEPSEEK_V4_FLASH = "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, _envMaxTellDepth, MAX_TELL_DEPTH;
|
|
484
484
|
var init_config = __esm(() => {
|
|
485
485
|
init_config_helpers();
|
|
486
486
|
init_logger();
|
|
@@ -3099,6 +3099,13 @@ function parseJsonlText(raw) {
|
|
|
3099
3099
|
return raw.trim().split(`
|
|
3100
3100
|
`).filter(Boolean).map((line) => JSON.parse(line));
|
|
3101
3101
|
}
|
|
3102
|
+
function readJsonFile(filePath) {
|
|
3103
|
+
try {
|
|
3104
|
+
return JSON.parse(readFileSync2(filePath, "utf-8"));
|
|
3105
|
+
} catch {
|
|
3106
|
+
return null;
|
|
3107
|
+
}
|
|
3108
|
+
}
|
|
3102
3109
|
function lockStaleMs() {
|
|
3103
3110
|
const raw = Number.parseInt(process.env.NEGOTIUM_JSONL_LOCK_STALE_MS ?? "", 10);
|
|
3104
3111
|
return Number.isFinite(raw) && raw > 0 ? raw : DEFAULT_LOCK_STALE_MS;
|
|
@@ -3962,7 +3969,7 @@ var init_codex = __esm(async () => {
|
|
|
3962
3969
|
});
|
|
3963
3970
|
|
|
3964
3971
|
// ../../packages/core/src/version.ts
|
|
3965
|
-
var NEGOTIUM_VERSION = "0.19.
|
|
3972
|
+
var NEGOTIUM_VERSION = "0.19.2";
|
|
3966
3973
|
|
|
3967
3974
|
// ../../packages/core/src/agents/codex-native-multi-agent.ts
|
|
3968
3975
|
import { spawn as spawn2 } from "child_process";
|
|
@@ -7646,6 +7653,8 @@ var init_model_catalog = __esm(() => {
|
|
|
7646
7653
|
haiku: "claude",
|
|
7647
7654
|
fable: "claude",
|
|
7648
7655
|
"gpt-6-astra": "codex",
|
|
7656
|
+
"gpt-6-sol": "codex",
|
|
7657
|
+
"gpt-6-luna": "codex",
|
|
7649
7658
|
"gpt-5.6-luna": "codex",
|
|
7650
7659
|
"gpt-5.6-terra": "codex",
|
|
7651
7660
|
"gpt-5.6-sol": "codex",
|
|
@@ -7675,6 +7684,26 @@ var init_model_catalog = __esm(() => {
|
|
|
7675
7684
|
marginalTokenCost: "Codex credits (OpenAI API rate): $10/M uncached input, $1/M cached input, $12.50/M cache write, $50/M output",
|
|
7676
7685
|
estimatedUsage: `Released 2026-09-03; became Codex CLI's bundled default in v0.153.4 (2026-09-05). Local message-count/quota-weight ranges not yet published as of the last catalog check \u2014 expect a quota weight above gpt-5.6-sol given the higher per-token cost. ${CODEX_COMMUNITY_WEEKLY}`
|
|
7677
7686
|
},
|
|
7687
|
+
{
|
|
7688
|
+
model: "gpt-6-sol",
|
|
7689
|
+
agent: "codex",
|
|
7690
|
+
description: "GPT-6 generation Sol route (2026-09-22) for demanding coding and agentic work.",
|
|
7691
|
+
intelligenceTier: "opus",
|
|
7692
|
+
routingSummary: "demanding coding work; about half as many mistakes as gpt-5.6-sol at half the price",
|
|
7693
|
+
accessCost: CODEX_PRO_20X_COST,
|
|
7694
|
+
marginalTokenCost: "Codex credits (OpenAI API rate): $2/M uncached input, $0.20/M cached input (assumed), $10/M output",
|
|
7695
|
+
estimatedUsage: `Released 2026-09-22; local message-count/quota-weight ranges not yet published. ${CODEX_COMMUNITY_WEEKLY}`
|
|
7696
|
+
},
|
|
7697
|
+
{
|
|
7698
|
+
model: "gpt-6-luna",
|
|
7699
|
+
agent: "codex",
|
|
7700
|
+
description: "GPT-6 generation Luna route (2026-09-22): fast, high-volume, lowest cost.",
|
|
7701
|
+
intelligenceTier: "sonnet",
|
|
7702
|
+
routingSummary: "fast high-volume work; cheapest Codex route",
|
|
7703
|
+
accessCost: CODEX_PRO_20X_COST,
|
|
7704
|
+
marginalTokenCost: "Codex credits (OpenAI API rate): $0.10/M uncached input, $0.01/M cached input (assumed), $0.50/M output",
|
|
7705
|
+
estimatedUsage: `Released 2026-09-22; local message-count/quota-weight ranges not yet published. ${CODEX_COMMUNITY_WEEKLY}`
|
|
7706
|
+
},
|
|
7678
7707
|
{
|
|
7679
7708
|
model: "gpt-5.6-sol",
|
|
7680
7709
|
agent: "codex",
|
|
@@ -7720,9 +7749,9 @@ var init_model_catalog = __esm(() => {
|
|
|
7720
7749
|
agent: "claude",
|
|
7721
7750
|
description: "High-capability Claude route for complex reasoning and tool-heavy work.",
|
|
7722
7751
|
intelligenceTier: "opus",
|
|
7723
|
-
routingSummary: "complex reasoning and tool-heavy work; about
|
|
7752
|
+
routingSummary: "complex reasoning and tool-heavy work; about 2x Sonnet marginal cost",
|
|
7724
7753
|
accessCost: CLAUDE_MAX_20X_COST,
|
|
7725
|
-
marginalTokenCost: "Claude API/extra usage: $
|
|
7754
|
+
marginalTokenCost: "Claude API/extra usage (Opus 5.5, 2026-09-22): $4/M input, $5/M cache write (assumed), $0.40/M cache read (assumed), $20/M output",
|
|
7726
7755
|
estimatedUsage: `${CLAUDE_COMMUNITY_SESSION}; Opus uses the shared all-model weekly pool more quickly than Sonnet. No stable per-model token cap is published.`
|
|
7727
7756
|
},
|
|
7728
7757
|
{
|
|
@@ -13107,11 +13136,14 @@ var init_token_stats = __esm(async () => {
|
|
|
13107
13136
|
]);
|
|
13108
13137
|
TOKEN_PRICES = {
|
|
13109
13138
|
"codex:gpt-6-astra": { input: 10, cacheWrite: 12.5, cacheRead: 1, output: 50 },
|
|
13139
|
+
"codex:gpt-6-sol": { input: 2, cacheRead: 0.2, output: 10 },
|
|
13140
|
+
"codex:gpt-6-luna": { input: 0.1, cacheRead: 0.01, output: 0.5 },
|
|
13110
13141
|
"codex:gpt-5.6-sol": { input: 5, cacheRead: 0.5, output: 30 },
|
|
13111
13142
|
"codex:gpt-5.6-terra": { input: 2.5, cacheRead: 0.25, output: 15 },
|
|
13112
13143
|
"codex:gpt-5.6-luna": { input: 1, cacheRead: 0.1, output: 6 },
|
|
13113
13144
|
"claude:fable": { input: 10, cacheWrite: 12.5, cacheRead: 0.25, output: 50 },
|
|
13114
|
-
"claude:opus": { input:
|
|
13145
|
+
"claude:opus": { input: 4, cacheWrite: 5, cacheRead: 0.4, output: 20 },
|
|
13146
|
+
"claude:claude-opus-5-5": { input: 4, cacheWrite: 5, cacheRead: 0.4, output: 20 },
|
|
13115
13147
|
"claude:sonnet": { input: 2, cacheWrite: 2.5, cacheRead: 0.2, output: 10 },
|
|
13116
13148
|
"maestro:kimi-k3": { input: 3, cacheRead: 0.3, output: 15 },
|
|
13117
13149
|
"maestro:kimi-k2.7-code": { input: 0.95, cacheRead: 0.19, output: 4 },
|
|
@@ -14952,15 +14984,84 @@ var init_derive = __esm(async () => {
|
|
|
14952
14984
|
};
|
|
14953
14985
|
});
|
|
14954
14986
|
|
|
14987
|
+
// ../../packages/core/src/query/state.ts
|
|
14988
|
+
import { mkdirSync as mkdirSync15, renameSync as renameSync7, unlinkSync as unlinkSync14, writeFileSync as writeFileSync13 } from "fs";
|
|
14989
|
+
import { basename as basename4, join as join24 } from "path";
|
|
14990
|
+
function createQueryStateStore(options) {
|
|
14991
|
+
const sanitize = options.sanitizeTopicId ?? sanitizeId;
|
|
14992
|
+
const queryStateDirPath = (userId) => join24(options.usersLogDir, String(userId), "active-queries");
|
|
14993
|
+
const queryStateFile = (userId, topicId) => join24(queryStateDirPath(userId), `${sanitize(topicId)}.json`);
|
|
14994
|
+
const legacyQueryStateFile = (userId, topicName) => {
|
|
14995
|
+
if (!topicName || topicName === "." || topicName === ".." || basename4(topicName) !== topicName) {
|
|
14996
|
+
return null;
|
|
14997
|
+
}
|
|
14998
|
+
return join24(queryStateDirPath(userId), `${topicName}.json`);
|
|
14999
|
+
};
|
|
15000
|
+
return {
|
|
15001
|
+
write(userId, topicId, topicName, task) {
|
|
15002
|
+
const dir = queryStateDirPath(userId);
|
|
15003
|
+
mkdirSync15(dir, { recursive: true });
|
|
15004
|
+
const state = { topicId, topicName, since: new Date().toISOString() };
|
|
15005
|
+
if (task)
|
|
15006
|
+
state.task = [...task.replace(/\n+/g, " ").trim()].slice(0, 100).join("");
|
|
15007
|
+
const target = queryStateFile(userId, topicId);
|
|
15008
|
+
const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
|
|
15009
|
+
writeFileSync13(tmp, JSON.stringify(state));
|
|
15010
|
+
renameSync7(tmp, target);
|
|
15011
|
+
},
|
|
15012
|
+
clear(userId, topicId, legacyTopicName) {
|
|
15013
|
+
const paths = [
|
|
15014
|
+
queryStateFile(userId, topicId),
|
|
15015
|
+
legacyQueryStateFile(userId, legacyTopicName)
|
|
15016
|
+
].filter((path) => Boolean(path));
|
|
15017
|
+
for (const path of new Set(paths)) {
|
|
15018
|
+
try {
|
|
15019
|
+
unlinkSync14(path);
|
|
15020
|
+
} catch (error) {
|
|
15021
|
+
if (error?.code !== "ENOENT") {
|
|
15022
|
+
options.logger?.warn({ err: error, userId, topicId, path }, "Failed to clear query state file");
|
|
15023
|
+
}
|
|
15024
|
+
}
|
|
15025
|
+
}
|
|
15026
|
+
},
|
|
15027
|
+
hasActive(userId, topicId) {
|
|
15028
|
+
const state = readJsonFile(queryStateFile(userId, topicId));
|
|
15029
|
+
if (!state)
|
|
15030
|
+
return false;
|
|
15031
|
+
const sinceMs = new Date(state.since).getTime();
|
|
15032
|
+
return Date.now() - sinceMs <= ACTIVE_QUERY_STALE_MS;
|
|
15033
|
+
}
|
|
15034
|
+
};
|
|
15035
|
+
}
|
|
15036
|
+
function writeQueryState(userId, topicId, topicName, task) {
|
|
15037
|
+
defaultQueryStateStore.write(userId, topicId, topicName, task);
|
|
15038
|
+
}
|
|
15039
|
+
function clearQueryState(userId, topicId, legacyTopicName) {
|
|
15040
|
+
defaultQueryStateStore.clear(userId, topicId, legacyTopicName);
|
|
15041
|
+
}
|
|
15042
|
+
function hasActiveQuery(userId, topicId) {
|
|
15043
|
+
return defaultQueryStateStore.hasActive(userId, topicId);
|
|
15044
|
+
}
|
|
15045
|
+
var defaultQueryStateStore;
|
|
15046
|
+
var init_state = __esm(() => {
|
|
15047
|
+
init_config();
|
|
15048
|
+
init_jsonl();
|
|
15049
|
+
init_logger();
|
|
15050
|
+
defaultQueryStateStore = createQueryStateStore({
|
|
15051
|
+
usersLogDir: USERS_LOG_DIR,
|
|
15052
|
+
logger
|
|
15053
|
+
});
|
|
15054
|
+
});
|
|
15055
|
+
|
|
14955
15056
|
// ../../packages/core/src/query/session-inbox-path.ts
|
|
14956
|
-
import { join as
|
|
15057
|
+
import { join as join25 } from "path";
|
|
14957
15058
|
function sessionInboxPath(userId, topicId) {
|
|
14958
15059
|
const key = Buffer.from(topicId, "utf8").toString("base64url");
|
|
14959
|
-
return
|
|
15060
|
+
return join25(SESSION_INBOX_DIR, userId, `${TOPIC_ID_FILE_PREFIX}${key}${JSONL_SUFFIX}`);
|
|
14960
15061
|
}
|
|
14961
15062
|
function scheduledSessionInboxPath(userId, topicId) {
|
|
14962
15063
|
const key = Buffer.from(topicId, "utf8").toString("base64url");
|
|
14963
|
-
return
|
|
15064
|
+
return join25(SESSION_INBOX_DIR, userId, `${TOPIC_ID_FILE_PREFIX}${key}${SCHEDULE_SUFFIX}`);
|
|
14964
15065
|
}
|
|
14965
15066
|
var TOPIC_ID_FILE_PREFIX = "topic-id-", JSONL_SUFFIX = ".jsonl", SCHEDULE_SUFFIX = ".schedule";
|
|
14966
15067
|
var init_session_inbox_path = __esm(() => {
|
|
@@ -14968,12 +15069,12 @@ var init_session_inbox_path = __esm(() => {
|
|
|
14968
15069
|
});
|
|
14969
15070
|
|
|
14970
15071
|
// ../../packages/core/src/storage/session-inbox-signal.ts
|
|
14971
|
-
import { join as
|
|
15072
|
+
import { join as join26 } from "path";
|
|
14972
15073
|
var SESSION_INBOX_WAKE_FILE, listeners;
|
|
14973
15074
|
var init_session_inbox_signal = __esm(() => {
|
|
14974
15075
|
init_config();
|
|
14975
15076
|
init_logger();
|
|
14976
|
-
SESSION_INBOX_WAKE_FILE =
|
|
15077
|
+
SESSION_INBOX_WAKE_FILE = join26(SESSION_INBOX_DIR, ".wake");
|
|
14977
15078
|
listeners = new Set;
|
|
14978
15079
|
});
|
|
14979
15080
|
|
|
@@ -15010,14 +15111,14 @@ var init_session_inbox = __esm(async () => {
|
|
|
15010
15111
|
});
|
|
15011
15112
|
|
|
15012
15113
|
// ../../packages/core/src/query/session-inbox-cleanup.ts
|
|
15013
|
-
import { unlinkSync as
|
|
15014
|
-
import { basename as
|
|
15114
|
+
import { unlinkSync as unlinkSync15 } from "fs";
|
|
15115
|
+
import { basename as basename5, join as join27 } from "path";
|
|
15015
15116
|
function cleanupSessionInboxFiles(userId, topicId, legacyTopicTitle) {
|
|
15016
15117
|
const live = sessionInboxPath(userId, topicId);
|
|
15017
15118
|
const scheduled = scheduledSessionInboxPath(userId, topicId);
|
|
15018
15119
|
const candidates = new Set([live, `${live}.processing`, scheduled, `${scheduled}.processing`]);
|
|
15019
|
-
if (legacyTopicTitle && legacyTopicTitle !== "." && legacyTopicTitle !== ".." &&
|
|
15020
|
-
const legacyBase =
|
|
15120
|
+
if (legacyTopicTitle && legacyTopicTitle !== "." && legacyTopicTitle !== ".." && basename5(legacyTopicTitle) === legacyTopicTitle) {
|
|
15121
|
+
const legacyBase = join27(SESSION_INBOX_DIR, userId, legacyTopicTitle);
|
|
15021
15122
|
for (const suffix of [".jsonl", ".jsonl.processing", ".schedule", ".schedule.processing"]) {
|
|
15022
15123
|
candidates.add(`${legacyBase}${suffix}`);
|
|
15023
15124
|
}
|
|
@@ -15025,7 +15126,7 @@ function cleanupSessionInboxFiles(userId, topicId, legacyTopicTitle) {
|
|
|
15025
15126
|
let deleted = deleteSessionInboxForTopic(topicId);
|
|
15026
15127
|
for (const path of candidates) {
|
|
15027
15128
|
try {
|
|
15028
|
-
|
|
15129
|
+
unlinkSync15(path);
|
|
15029
15130
|
deleted++;
|
|
15030
15131
|
} catch (err2) {
|
|
15031
15132
|
if (err2?.code !== "ENOENT") {
|
|
@@ -15042,64 +15143,6 @@ var init_session_inbox_cleanup = __esm(async () => {
|
|
|
15042
15143
|
await init_session_inbox();
|
|
15043
15144
|
});
|
|
15044
15145
|
|
|
15045
|
-
// ../../packages/core/src/query/state.ts
|
|
15046
|
-
import { mkdirSync as mkdirSync15, renameSync as renameSync7, unlinkSync as unlinkSync15, writeFileSync as writeFileSync13 } from "fs";
|
|
15047
|
-
import { basename as basename5, join as join27 } from "path";
|
|
15048
|
-
function createQueryStateStore(options) {
|
|
15049
|
-
const sanitize = options.sanitizeTopicId ?? sanitizeId;
|
|
15050
|
-
const queryStateDirPath = (userId) => join27(options.usersLogDir, String(userId), "active-queries");
|
|
15051
|
-
const queryStateFile = (userId, topicId) => join27(queryStateDirPath(userId), `${sanitize(topicId)}.json`);
|
|
15052
|
-
const legacyQueryStateFile = (userId, topicName) => {
|
|
15053
|
-
if (!topicName || topicName === "." || topicName === ".." || basename5(topicName) !== topicName) {
|
|
15054
|
-
return null;
|
|
15055
|
-
}
|
|
15056
|
-
return join27(queryStateDirPath(userId), `${topicName}.json`);
|
|
15057
|
-
};
|
|
15058
|
-
return {
|
|
15059
|
-
write(userId, topicId, topicName, task) {
|
|
15060
|
-
const dir = queryStateDirPath(userId);
|
|
15061
|
-
mkdirSync15(dir, { recursive: true });
|
|
15062
|
-
const state = { topicId, topicName, since: new Date().toISOString() };
|
|
15063
|
-
if (task)
|
|
15064
|
-
state.task = [...task.replace(/\n+/g, " ").trim()].slice(0, 100).join("");
|
|
15065
|
-
const target = queryStateFile(userId, topicId);
|
|
15066
|
-
const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
|
|
15067
|
-
writeFileSync13(tmp, JSON.stringify(state));
|
|
15068
|
-
renameSync7(tmp, target);
|
|
15069
|
-
},
|
|
15070
|
-
clear(userId, topicId, legacyTopicName) {
|
|
15071
|
-
const paths = [
|
|
15072
|
-
queryStateFile(userId, topicId),
|
|
15073
|
-
legacyQueryStateFile(userId, legacyTopicName)
|
|
15074
|
-
].filter((path) => Boolean(path));
|
|
15075
|
-
for (const path of new Set(paths)) {
|
|
15076
|
-
try {
|
|
15077
|
-
unlinkSync15(path);
|
|
15078
|
-
} catch (error) {
|
|
15079
|
-
if (error?.code !== "ENOENT") {
|
|
15080
|
-
options.logger?.warn({ err: error, userId, topicId, path }, "Failed to clear query state file");
|
|
15081
|
-
}
|
|
15082
|
-
}
|
|
15083
|
-
}
|
|
15084
|
-
}
|
|
15085
|
-
};
|
|
15086
|
-
}
|
|
15087
|
-
function writeQueryState(userId, topicId, topicName, task) {
|
|
15088
|
-
defaultQueryStateStore.write(userId, topicId, topicName, task);
|
|
15089
|
-
}
|
|
15090
|
-
function clearQueryState(userId, topicId, legacyTopicName) {
|
|
15091
|
-
defaultQueryStateStore.clear(userId, topicId, legacyTopicName);
|
|
15092
|
-
}
|
|
15093
|
-
var defaultQueryStateStore;
|
|
15094
|
-
var init_state = __esm(() => {
|
|
15095
|
-
init_config();
|
|
15096
|
-
init_logger();
|
|
15097
|
-
defaultQueryStateStore = createQueryStateStore({
|
|
15098
|
-
usersLogDir: USERS_LOG_DIR,
|
|
15099
|
-
logger
|
|
15100
|
-
});
|
|
15101
|
-
});
|
|
15102
|
-
|
|
15103
15146
|
// ../../packages/core/src/mcp/session-comm/peer-forward.ts
|
|
15104
15147
|
var exports_peer_forward = {};
|
|
15105
15148
|
__export(exports_peer_forward, {
|
|
@@ -19201,6 +19244,12 @@ var init_turn_runner = __esm(async () => {
|
|
|
19201
19244
|
|
|
19202
19245
|
// ../../packages/core/src/agents/mcp-tools/spawn-subagent.ts
|
|
19203
19246
|
import { z as z4 } from "zod";
|
|
19247
|
+
function activeQueryUserId(topic) {
|
|
19248
|
+
return topic?.participants.find((participant) => hasActiveQuery(participant.userId, topic.id))?.userId;
|
|
19249
|
+
}
|
|
19250
|
+
function persistedWatchUserId(topic) {
|
|
19251
|
+
return activeQueryUserId(topic) ?? topic?.participants.find((participant) => participant.role === "owner")?.userId ?? topic?.participants[0]?.userId;
|
|
19252
|
+
}
|
|
19204
19253
|
function createSubagentLifecycle(host) {
|
|
19205
19254
|
const runtimeOwnerId = host.runtime.ownerId;
|
|
19206
19255
|
const limits = Object.freeze({
|
|
@@ -19315,7 +19364,7 @@ function createSubagentLifecycle(host) {
|
|
|
19315
19364
|
}
|
|
19316
19365
|
function watchFromPersistedCard(message, card, queryId) {
|
|
19317
19366
|
const child = host.storage.getTopic(card.subagentTopicId);
|
|
19318
|
-
const userId = child
|
|
19367
|
+
const userId = persistedWatchUserId(child);
|
|
19319
19368
|
if (!userId)
|
|
19320
19369
|
return null;
|
|
19321
19370
|
return {
|
|
@@ -19674,6 +19723,10 @@ ${card.task}${reportInstruction}`;
|
|
|
19674
19723
|
if (watch?.running)
|
|
19675
19724
|
return "running";
|
|
19676
19725
|
const card = host.storage.listSubagentMessages().filter((message) => message.topicId === parentTopicId && message.subagentCard?.subagentTopicId === childTopicId).at(-1)?.subagentCard;
|
|
19726
|
+
if (!card || card.status === "failed") {
|
|
19727
|
+
if (activeQueryUserId(host.storage.getTopic(childTopicId)))
|
|
19728
|
+
return "running";
|
|
19729
|
+
}
|
|
19677
19730
|
return card?.status ?? "unknown";
|
|
19678
19731
|
}
|
|
19679
19732
|
function listMemoryTopicNames(ctx) {
|
|
@@ -19897,6 +19950,7 @@ var MAX_TASK_CHARS = 8000, MAX_NAME_CHARS = 80, MAX_LIVE_CHILDREN_PER_PARENT = 5
|
|
|
19897
19950
|
var init_spawn_subagent = __esm(async () => {
|
|
19898
19951
|
init_common();
|
|
19899
19952
|
init_logger();
|
|
19953
|
+
init_state();
|
|
19900
19954
|
init_wiki_summary_names();
|
|
19901
19955
|
init_types();
|
|
19902
19956
|
await __promiseAll([
|
|
@@ -19993,7 +20047,9 @@ var init_spawn_subagent = __esm(async () => {
|
|
|
19993
20047
|
if (getRuntimeUserTurnRequest(childTopicId))
|
|
19994
20048
|
return true;
|
|
19995
20049
|
const lease = getRuntimeTurnLease(childTopicId);
|
|
19996
|
-
|
|
20050
|
+
if (lease && processOwnerIsAlive(lease.ownerId))
|
|
20051
|
+
return true;
|
|
20052
|
+
return Boolean(activeQueryUserId(getTopic(childTopicId)));
|
|
19997
20053
|
}
|
|
19998
20054
|
},
|
|
19999
20055
|
config: {
|
|
@@ -20455,7 +20511,16 @@ function escapeRegExp2(value) {
|
|
|
20455
20511
|
function agentAliases(agent) {
|
|
20456
20512
|
switch (agent) {
|
|
20457
20513
|
case "codex":
|
|
20458
|
-
return [
|
|
20514
|
+
return [
|
|
20515
|
+
"codex",
|
|
20516
|
+
"\uCF54\uB371\uC2A4",
|
|
20517
|
+
"gpt-6-luna",
|
|
20518
|
+
"gpt-6-sol",
|
|
20519
|
+
"gpt-5.6-luna",
|
|
20520
|
+
"gpt-5.6-terra",
|
|
20521
|
+
"gpt-5.6-sol",
|
|
20522
|
+
"gpt-6-astra"
|
|
20523
|
+
];
|
|
20459
20524
|
case "claude":
|
|
20460
20525
|
return ["claude", "\uD074\uB85C\uB4DC", "sonnet", "opus", "fable"];
|
|
20461
20526
|
case "maestro":
|
|
@@ -21130,4 +21195,4 @@ export {
|
|
|
21130
21195
|
DEFAULT_SELF_CONFIG_PRODUCT
|
|
21131
21196
|
};
|
|
21132
21197
|
|
|
21133
|
-
//# debugId=
|
|
21198
|
+
//# debugId=BFEE1EFD11C7696664756E2164756E21
|