negotium 0.2.23 → 0.2.24

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/main.js CHANGED
@@ -273,7 +273,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
273
273
  function codexAuthFilePath() {
274
274
  return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(process.env.CODEX_HOME || join(homedir(), ".codex"), "auth.json");
275
275
  }
276
- var HOME, PROJECT_ROOT, STATE_DIR_ENV, 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", BROWSER_RS_VERSION = "v0.1.19", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", BROWSER_RS_VERSION_PROBE_TIMEOUT_MS = 15000, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.5", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, BROWSER_MCP_SSE_PROXY_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, VAULT_MASTER_KEY, NEGOTIUM_PORT, hostname, DATA_DIR, LOG_DIR, UPLOADS_DIR, VAULT_DIR, SESSIONS_DB, DEBUG_FILE, USERS_LOG_DIR, RUN_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, FILE_TAG_REGEX, MODEL_SONNET = "claude-sonnet-5", MODEL_OPUS = "claude-opus-5", MODEL_FABLE = "claude-fable-5", FALLBACK_AGENT, SESSION_AGENT, GATEWAY_AGENT, FALLBACK_MODEL, SESSION_MODEL, GATEWAY_MODEL, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, _envMaxTellDepth, MAX_TELL_DEPTH;
276
+ var HOME, PROJECT_ROOT, STATE_DIR_ENV, 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", BROWSER_RS_VERSION = "v0.1.19", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", BROWSER_RS_VERSION_PROBE_TIMEOUT_MS = 15000, SNIPPETS_API_URL, BROWSER_RS_BIN, BASH_RS_VERSION = "v0.1.5", BASH_RS_BIN, PLAYWRIGHT_MCP_BIN, TSX_BIN, TSX_LOADER, TSCONFIG_PATH, SESSION_COMM_SERVER, TASK_SERVER, BROWSER_MCP_SSE_PROXY_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, 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, FILE_TAG_REGEX, MODEL_SONNET = "claude-sonnet-5", MODEL_OPUS = "claude-opus-5", MODEL_FABLE = "claude-fable-5", FALLBACK_AGENT, SESSION_AGENT, GATEWAY_AGENT, FALLBACK_MODEL, SESSION_MODEL, GATEWAY_MODEL, FFMPEG_BIN, FFPROBE_BIN, PYTHON_BIN, FASTER_WHISPER_WRAPPER, WHISPER_MODEL, TESSERACT_BIN, PDFTOTEXT_BIN, _envMaxTellDepth, MAX_TELL_DEPTH;
277
277
  var init_config = __esm(() => {
278
278
  init_config_helpers();
279
279
  init_logger();
@@ -315,6 +315,7 @@ var init_config = __esm(() => {
315
315
  BG_BASH_MAX_PORT = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
316
316
  RUNTIME_MCP_SECRET = loadOrCreateLocalSecret("RUNTIME_MCP_SECRET", "runtime-mcp-secret");
317
317
  NODE_CONTROL_TOKEN = loadOrCreateLocalSecret("NEGOTIUM_CONTROL_TOKEN", "node-control-token");
318
+ NODE_ID = loadOrCreateLocalSecret("NEGOTIUM_NODE_ID", "node-id");
318
319
  VAULT_MASTER_KEY = loadOrCreateLocalSecret("NEGOTIUM_VAULT_MASTER_KEY", "vault-master-key", { persistEnvValue: true });
319
320
  delete process.env.NEGOTIUM_VAULT_MASTER_KEY;
320
321
  NEGOTIUM_PORT = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
@@ -1867,7 +1868,7 @@ var exports_version = {};
1867
1868
  __export(exports_version, {
1868
1869
  NEGOTIUM_VERSION: () => NEGOTIUM_VERSION
1869
1870
  });
1870
- var NEGOTIUM_VERSION = "0.2.23";
1871
+ var NEGOTIUM_VERSION = "0.2.24";
1871
1872
 
1872
1873
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
1873
1874
  import { spawn } from "child_process";
@@ -22805,6 +22806,7 @@ var init_conversation_migration = __esm(async () => {
22805
22806
  // ../../packages/core/src/node-host.ts
22806
22807
  var exports_node_host = {};
22807
22808
  __export(exports_node_host, {
22809
+ upsertTopic: () => upsertTopic,
22808
22810
  topicService: () => topicService,
22809
22811
  switchTopicModel: () => switchTopicModel,
22810
22812
  switchTopicEffort: () => switchTopicEffort,
@@ -22852,6 +22854,7 @@ __export(exports_node_host, {
22852
22854
  ensurePersonalGeneral: () => ensurePersonalGeneral,
22853
22855
  deleteVaultEntry: () => deleteVaultEntry,
22854
22856
  compactTopicSession: () => compactTopicSession,
22857
+ appendApiMessage: () => appendApiMessage,
22855
22858
  acquireRuntimeProcessLease: () => acquireRuntimeProcessLease,
22856
22859
  abortAllRooms: () => abortAllRooms,
22857
22860
  WsHub: () => WsHub,
@@ -22863,6 +22866,7 @@ __export(exports_node_host, {
22863
22866
  STATE_DIR: () => STATE_DIR,
22864
22867
  RuntimeGatewayIdempotencyConflictError: () => RuntimeGatewayIdempotencyConflictError,
22865
22868
  RUN_DIR: () => RUN_DIR,
22869
+ NODE_ID: () => NODE_ID,
22866
22870
  NODE_CONTROL_TOKEN: () => NODE_CONTROL_TOKEN,
22867
22871
  NEGOTIUM_VERSION: () => NEGOTIUM_VERSION,
22868
22872
  NEGOTIUM_PORT: () => NEGOTIUM_PORT,
@@ -29437,13 +29441,15 @@ function createNodeControlHandler(options) {
29437
29441
  ok: true,
29438
29442
  v: NODE_RUNTIME_CONTRACT_VERSION,
29439
29443
  nodeVersion: NODE_VERSION,
29444
+ nodeId: NODE_ID,
29440
29445
  capabilities: [
29441
29446
  "turn-submit-idempotent",
29442
29447
  "turn-events-sse-resume",
29443
29448
  "canonical-topic-read",
29444
29449
  "canonical-message-read",
29445
29450
  "canonical-topic-list",
29446
- "canonical-topic-create"
29451
+ "canonical-topic-create",
29452
+ "canonical-history-import"
29447
29453
  ],
29448
29454
  cursor: latestRuntimeEventSeq()
29449
29455
  });
@@ -29539,6 +29545,55 @@ function createNodeControlHandler(options) {
29539
29545
  });
29540
29546
  return Response.json({ ok: true, v: NODE_RUNTIME_CONTRACT_VERSION, topic }, { status: 201 });
29541
29547
  }
29548
+ const importMatch = runtimePath.match(/^\/topics\/([^/]+)\/import$/);
29549
+ if (importMatch && req.method === "POST") {
29550
+ const body = await bodyRecord(req);
29551
+ if (body.v !== NODE_RUNTIME_CONTRACT_VERSION)
29552
+ return jsonError(400, "Unsupported v");
29553
+ const topicId = decodeURIComponent(importMatch[1]);
29554
+ const topic = getTopic(topicId);
29555
+ if (!topic)
29556
+ return jsonError(404, "Topic not found");
29557
+ if (!Array.isArray(body.messages)) {
29558
+ return jsonError(400, "messages must be an array");
29559
+ }
29560
+ if (listApiMessages(topicId, { limit: 1 }).page.length > 0) {
29561
+ return jsonError(409, "topic already has messages");
29562
+ }
29563
+ const messages = body.messages;
29564
+ for (const [index, message] of messages.entries()) {
29565
+ if (typeof message?.id !== "string" || typeof message?.authorId !== "string" || typeof message?.text !== "string" || typeof message?.createdAt !== "string") {
29566
+ return jsonError(400, `messages[${index}] needs id, authorId, text and createdAt`);
29567
+ }
29568
+ }
29569
+ let imported = 0;
29570
+ for (const message of messages) {
29571
+ appendApiMessage({
29572
+ id: message.id,
29573
+ topicId,
29574
+ authorId: message.authorId,
29575
+ text: message.text,
29576
+ createdAt: message.createdAt,
29577
+ deleted: false,
29578
+ ...typeof message.agentType === "string" ? { agentType: message.agentType } : {},
29579
+ ...typeof message.model === "string" ? { model: message.model } : {}
29580
+ }, { notify: false, updateTopicLastMessageAt: false });
29581
+ imported += 1;
29582
+ }
29583
+ if (imported > 0) {
29584
+ const stamps = messages.map((message) => message.createdAt).sort();
29585
+ upsertTopic({
29586
+ ...topic,
29587
+ createdAt: stamps[0] < topic.createdAt ? stamps[0] : topic.createdAt,
29588
+ lastMessageAt: stamps[stamps.length - 1]
29589
+ });
29590
+ }
29591
+ return Response.json({
29592
+ ok: true,
29593
+ v: NODE_RUNTIME_CONTRACT_VERSION,
29594
+ imported
29595
+ });
29596
+ }
29542
29597
  const runtimeTopicMatch = runtimePath.match(/^\/topics\/([^/]+)$/);
29543
29598
  if (runtimeTopicMatch && req.method === "GET") {
29544
29599
  const topic = getTopic(decodeURIComponent(runtimeTopicMatch[1]));
@@ -45565,4 +45620,4 @@ switch (command) {
45565
45620
  }
45566
45621
  }
45567
45622
 
45568
- //# debugId=4A37A5D1997871CA64756E2164756E21
45623
+ //# debugId=B66F9D7F6CCE88E564756E2164756E21