negotium 0.1.49 → 0.2.1

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 (55) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-helpers.js +72 -78
  3. package/dist/agent-helpers.js.map +18 -17
  4. package/dist/background-bash.js +22 -10
  5. package/dist/background-bash.js.map +3 -3
  6. package/dist/browser-runtime.js +47 -72
  7. package/dist/browser-runtime.js.map +10 -9
  8. package/dist/{chunk-5rpw9d1f.js → chunk-kc5kmr95.js} +28 -11
  9. package/dist/{chunk-5rpw9d1f.js.map → chunk-kc5kmr95.js.map} +4 -4
  10. package/dist/hosted-agent.js +48 -22
  11. package/dist/hosted-agent.js.map +10 -9
  12. package/dist/main.js +576 -102
  13. package/dist/main.js.map +23 -20
  14. package/dist/mcp-factories.js +76 -82
  15. package/dist/mcp-factories.js.map +19 -18
  16. package/dist/prompts.js +22 -10
  17. package/dist/prompts.js.map +3 -3
  18. package/dist/query-runtime.js +22 -10
  19. package/dist/query-runtime.js.map +4 -4
  20. package/dist/registry.js +5 -12
  21. package/dist/registry.js.map +5 -5
  22. package/dist/rollout.js +1 -1
  23. package/dist/runtime/cron/mcp-server.ts +1 -1
  24. package/dist/runtime/src/agents/maestro-registry.ts +1 -1
  25. package/dist/runtime/src/agents/rollout/shared.ts +12 -4
  26. package/dist/runtime/src/mcp/mcp-helpers.ts +1 -1
  27. package/dist/runtime/src/mcp/wiki-server.ts +1 -1
  28. package/dist/runtime/src/migration/single-user.ts +621 -0
  29. package/dist/runtime/src/platform/config.ts +24 -11
  30. package/dist/runtime/src/platform/mcp-config.ts +4 -4
  31. package/dist/runtime/src/platform/playwright/manager.ts +10 -28
  32. package/dist/runtime/src/runtime/attachments.ts +3 -3
  33. package/dist/runtime/src/storage/browser-profiles.ts +11 -9
  34. package/dist/runtime/src/storage/conversations.ts +5 -18
  35. package/dist/runtime/src/storage/storage-host.ts +1 -1
  36. package/dist/runtime/src/storage/tasks.ts +2 -14
  37. package/dist/runtime/src/storage/vault-crypto-core.ts +65 -0
  38. package/dist/runtime/src/storage/vault-crypto.ts +8 -48
  39. package/dist/runtime/src/storage/vault.ts +3 -2
  40. package/dist/runtime/src/version.ts +1 -1
  41. package/dist/runtime-helpers.js +22 -10
  42. package/dist/runtime-helpers.js.map +5 -5
  43. package/dist/storage.js +5 -19
  44. package/dist/storage.js.map +5 -5
  45. package/dist/types/packages/core/src/mcp/mcp-helpers.d.ts +1 -1
  46. package/dist/types/packages/core/src/platform/config.d.ts +9 -1
  47. package/dist/types/packages/core/src/runtime/attachments.d.ts +1 -1
  48. package/dist/types/packages/core/src/storage/conversations.d.ts +2 -2
  49. package/dist/types/packages/core/src/storage/vault-crypto-core.d.ts +6 -0
  50. package/dist/types/packages/core/src/storage/vault-crypto.d.ts +2 -1
  51. package/dist/types/packages/core/src/version.d.ts +1 -1
  52. package/dist/vault.js +37 -16
  53. package/dist/vault.js.map +7 -6
  54. package/install-browser-rs.mjs +1 -1
  55. package/package.json +2 -2
@@ -115,10 +115,14 @@ function parsePortEnv(envValue, fallback) {
115
115
  var WORKSPACE_DIR = resolveLocalStateDir("NEGOTIUM_WORKSPACE_DIR", "workspace");
116
116
  var TOPIC_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "topics");
117
117
  var SHARED_WIKI_DIR = resolve(WORKSPACE_DIR, "wiki");
118
- var CONTEXTS_DIR = resolve(WORKSPACE_DIR, "contexts");
119
- var BROWSER_PROFILES_DIR = resolve(WORKSPACE_DIR, "browser-profiles");
120
- var DM_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "dm");
121
- var SESSION_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "sessions");
118
+ var CRON_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "cron");
119
+ var BROWSER_DIR = resolveLocalStateDir("NEGOTIUM_BROWSER_DIR", "browser");
120
+ var BROWSER_PROFILES_DIR = resolve(BROWSER_DIR, "profiles");
121
+ var BINARIES_DIR = resolve(STATE_DIR, "binaries");
122
+ var SECRETS_DIR = resolve(STATE_DIR, "secrets");
123
+ var CONTEXTS_DIR = resolve(STATE_DIR, "data", "contexts");
124
+ var DM_WORKSPACE_DIR = resolve(STATE_DIR, "data", "dm");
125
+ var SESSION_WORKSPACE_DIR = resolve(STATE_DIR, "data", "sessions");
122
126
  var CLAUDE_EXECUTABLE_ENV = envText("NEGOTIUM_CLAUDE_EXECUTABLE");
123
127
  var CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve(CLAUDE_EXECUTABLE_ENV) : undefined;
124
128
  var BROWSER_RS_VERSION = "v0.1.16";
@@ -156,7 +160,7 @@ function resolveBrowserRsBin(envValue) {
156
160
  if (!override && !versionAtLeast(BROWSER_RS_VERSION.replace(/^v/, ""), BROWSER_RS_MIN_SECURE_VERSION)) {
157
161
  return;
158
162
  }
159
- const candidate = override ? resolve(override) : resolve(STATE_DIR, "bin", "browser-rs", BROWSER_RS_VERSION, "browser-rs");
163
+ const candidate = override ? resolve(override) : resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, "browser-rs");
160
164
  try {
161
165
  accessSync(candidate, constants.X_OK);
162
166
  return browserRsMeetsMinimumVersion(candidate) ? candidate : undefined;
@@ -169,7 +173,7 @@ function resolveBrowserMcpBin(envValue) {
169
173
  const override = envValue?.trim();
170
174
  if (override)
171
175
  return resolve(override);
172
- return BROWSER_RS_BIN ?? resolve(STATE_DIR, "bin", "browser-rs", BROWSER_RS_VERSION, "browser-rs");
176
+ return BROWSER_RS_BIN ?? resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, "browser-rs");
173
177
  }
174
178
  var PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText("NEGOTIUM_BROWSER_MCP_BIN"));
175
179
  var TSX_BIN = resolveDependencyBin("tsx");
@@ -196,7 +200,7 @@ function resolveTopicWorkspaceDir(topicId) {
196
200
  }
197
201
  function loadOrCreateLocalSecret(envKey, filename, options = {}) {
198
202
  const envValue = envText(envKey);
199
- const secretFile = resolve(STATE_DIR, filename);
203
+ const secretFile = resolve(SECRETS_DIR, filename);
200
204
  mkdirSync(dirname(secretFile), { recursive: true });
201
205
  if (envValue) {
202
206
  if (options.persistEnvValue) {
@@ -236,10 +240,12 @@ var NEGOTIUM_PORT = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
236
240
  var hostname = process.env.HOSTNAME || "127.0.0.1";
237
241
  var DATA_DIR = resolveLocalStateDir("NEGOTIUM_DATA_DIR", "data");
238
242
  var LOG_DIR = resolveLocalStateDir("NEGOTIUM_LOG_DIR", "logs");
243
+ var UPLOADS_DIR = resolve(DATA_DIR, "uploads");
244
+ var VAULT_DIR = resolve(DATA_DIR, "vault");
239
245
  var SESSIONS_DB = process.env.SESSIONS_DB_PATH ? resolve(process.env.SESSIONS_DB_PATH) : resolve(DATA_DIR, "sessions.db");
240
246
  var DEBUG_FILE = resolve(DATA_DIR, "debug-users.json");
241
247
  var USERS_LOG_DIR = resolve(DATA_DIR, "users");
242
- var RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "run");
248
+ var RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "runtime");
243
249
  var PROGRESS_DIR = resolve(RUN_DIR, "progress");
244
250
  var DM_CMD_DIR = resolve(RUN_DIR, "dm-commands");
245
251
  var DM_RESP_DIR = resolve(RUN_DIR, "dm-responses");
@@ -250,6 +256,8 @@ var PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
250
256
  var PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR, "playwright-ports");
251
257
  mkdirSync(STATE_DIR, { recursive: true });
252
258
  mkdirSync(DATA_DIR, { recursive: true });
259
+ mkdirSync(UPLOADS_DIR, { recursive: true });
260
+ mkdirSync(VAULT_DIR, { recursive: true, mode: 448 });
253
261
  mkdirSync(LOG_DIR, { recursive: true });
254
262
  mkdirSync(PROGRESS_DIR, { recursive: true });
255
263
  mkdirSync(DM_CMD_DIR, { recursive: true });
@@ -260,10 +268,14 @@ mkdirSync(PLAYWRIGHT_PORTS_DIR, { recursive: true });
260
268
  mkdirSync(WORKSPACE_DIR, { recursive: true });
261
269
  mkdirSync(TOPIC_WORKSPACE_DIR, { recursive: true });
262
270
  mkdirSync(SHARED_WIKI_DIR, { recursive: true });
271
+ mkdirSync(CRON_WORKSPACE_DIR, { recursive: true });
263
272
  mkdirSync(CONTEXTS_DIR, { recursive: true });
264
- mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
265
273
  mkdirSync(DM_WORKSPACE_DIR, { recursive: true });
266
274
  mkdirSync(SESSION_WORKSPACE_DIR, { recursive: true });
275
+ mkdirSync(BROWSER_DIR, { recursive: true });
276
+ mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
277
+ mkdirSync(BINARIES_DIR, { recursive: true });
278
+ mkdirSync(SECRETS_DIR, { recursive: true, mode: 448 });
267
279
  var ACTIVE_QUERY_STALE_MS = 10 * 60 * 1000;
268
280
  var AGENTS_PROMPTS_DIR = resolve(PROJECT_ROOT, "src/prompts/agents");
269
281
  var RESOURCES_DIR = resolve(PROJECT_ROOT, "src/resources");
@@ -295,7 +307,12 @@ function codexAuthFilePath() {
295
307
 
296
308
  // ../../packages/core/src/agents/rollout/shared.ts
297
309
  var __dirname2 = dirname2(fileURLToPath2(import.meta.url));
298
- var trustedWorkspaceRoots = [WORKSPACE_DIR, DM_WORKSPACE_DIR, TOPIC_WORKSPACE_DIR].map((root) => resolve2(root));
310
+ var trustedWorkspaceRoots = [
311
+ WORKSPACE_DIR,
312
+ DM_WORKSPACE_DIR,
313
+ SESSION_WORKSPACE_DIR,
314
+ TOPIC_WORKSPACE_DIR
315
+ ].map((root) => resolve2(root));
299
316
  var FIXTURES_DIR = join2(__dirname2, "..", "fixtures");
300
317
 
301
318
  // ../../packages/core/src/platform/jsonl.ts
@@ -1232,7 +1249,7 @@ function getMcpServersForQuery(opts) {
1232
1249
  if (!opts.topicId)
1233
1250
  throw new Error("getMcpServersForQuery: cron sessionType requires topicId");
1234
1251
  return getCronMcpServers({
1235
- userId: opts.userId || "default",
1252
+ userId: opts.userId || "local",
1236
1253
  session: opts.session || "cron",
1237
1254
  topicId: opts.topicId,
1238
1255
  queryId: opts.queryId,
@@ -1249,7 +1266,7 @@ function getMcpServersForQuery(opts) {
1249
1266
  }
1250
1267
  if (opts.sessionType === "dm" || opts.sessionType === "ephemeral") {
1251
1268
  return getDmMcpServers({
1252
- userId: opts.userId || "default",
1269
+ userId: opts.userId || "local",
1253
1270
  agent: opts.agent,
1254
1271
  playwrightPort: opts.playwrightPort,
1255
1272
  playwrightCapability: opts.playwrightCapability
@@ -1257,7 +1274,7 @@ function getMcpServersForQuery(opts) {
1257
1274
  }
1258
1275
  if (opts.sessionType === "manager") {
1259
1276
  return getManagerMcpServers({
1260
- userId: opts.userId || "default",
1277
+ userId: opts.userId || "local",
1261
1278
  session: opts.session,
1262
1279
  topicId: opts.topicId,
1263
1280
  queryId: opts.queryId,
@@ -1274,7 +1291,7 @@ function getMcpServersForQuery(opts) {
1274
1291
  });
1275
1292
  }
1276
1293
  return getForumMcpServers({
1277
- userId: opts.userId || "default",
1294
+ userId: opts.userId || "local",
1278
1295
  session: opts.session || "default",
1279
1296
  topicId: opts.topicId,
1280
1297
  subagentParentTopicId: opts.subagentParentTopicId,
@@ -1353,12 +1370,12 @@ if (isBun) {
1353
1370
  Database = NodeDatabase;
1354
1371
  }
1355
1372
 
1356
- // ../../packages/core/src/storage/vault-crypto.ts
1373
+ // ../../packages/core/src/storage/vault-crypto-core.ts
1357
1374
  import { createCipheriv, createDecipheriv, createHash, randomBytes as randomBytes3 } from "crypto";
1358
1375
  var ENVELOPE_PREFIX = "otium-vault:v1:";
1359
1376
  var IV_BYTES = 12;
1360
1377
  var KEY_BYTES = 32;
1361
- function encryptionKey(masterKey = VAULT_MASTER_KEY) {
1378
+ function encryptionKey(masterKey) {
1362
1379
  return createHash("sha256").update("otium-vault-value-v1\x00", "utf8").update(masterKey, "utf8").digest().subarray(0, KEY_BYTES);
1363
1380
  }
1364
1381
  function aad(userId, key) {
@@ -1367,7 +1384,7 @@ function aad(userId, key) {
1367
1384
  function isEncryptedVaultValue(value) {
1368
1385
  return value.startsWith(ENVELOPE_PREFIX);
1369
1386
  }
1370
- function encryptVaultValue(userId, key, value, masterKey = VAULT_MASTER_KEY) {
1387
+ function encryptVaultValueWithKey(userId, key, value, masterKey) {
1371
1388
  const iv = randomBytes3(IV_BYTES);
1372
1389
  const cipher = createCipheriv("aes-256-gcm", encryptionKey(masterKey), iv);
1373
1390
  cipher.setAAD(aad(userId, key));
@@ -1375,7 +1392,7 @@ function encryptVaultValue(userId, key, value, masterKey = VAULT_MASTER_KEY) {
1375
1392
  const tag = cipher.getAuthTag();
1376
1393
  return `${ENVELOPE_PREFIX}${iv.toString("base64url")}.${ciphertext.toString("base64url")}.${tag.toString("base64url")}`;
1377
1394
  }
1378
- function decryptVaultValue(userId, key, storedValue, masterKey = VAULT_MASTER_KEY) {
1395
+ function decryptVaultValueWithKey(userId, key, storedValue, masterKey) {
1379
1396
  if (!isEncryptedVaultValue(storedValue)) {
1380
1397
  return { value: storedValue, legacyPlaintext: true };
1381
1398
  }
@@ -1397,6 +1414,14 @@ function decryptVaultValue(userId, key, storedValue, masterKey = VAULT_MASTER_KE
1397
1414
  return { value: plaintext.toString("utf8"), legacyPlaintext: false };
1398
1415
  }
1399
1416
 
1417
+ // ../../packages/core/src/storage/vault-crypto.ts
1418
+ function encryptVaultValue(userId, key, value, masterKey = VAULT_MASTER_KEY) {
1419
+ return encryptVaultValueWithKey(userId, key, value, masterKey);
1420
+ }
1421
+ function decryptVaultValue(userId, key, storedValue, masterKey = VAULT_MASTER_KEY) {
1422
+ return decryptVaultValueWithKey(userId, key, storedValue, masterKey);
1423
+ }
1424
+
1400
1425
  // ../../packages/core/src/storage/vault.ts
1401
1426
  var vaultDb;
1402
1427
  var vaultMasterKey = VAULT_MASTER_KEY;
@@ -1434,8 +1459,9 @@ function initializeVaultDatabase(database) {
1434
1459
  }
1435
1460
  }
1436
1461
  function openVaultDatabase(dataDir) {
1437
- const path = join3(dataDir, "vault.db");
1438
- mkdirSync3(dataDir, { recursive: true });
1462
+ const vaultDir = join3(dataDir, "vault");
1463
+ const path = join3(vaultDir, "vault.db");
1464
+ mkdirSync3(vaultDir, { recursive: true, mode: 448 });
1439
1465
  const database = new Database(path, { create: true });
1440
1466
  chmodSync2(path, 384);
1441
1467
  initializeVaultDatabase(database);
@@ -2116,7 +2142,7 @@ import { tmpdir } from "os";
2116
2142
  import { dirname as dirname4, join as join4 } from "path";
2117
2143
 
2118
2144
  // ../../packages/core/src/version.ts
2119
- var NEGOTIUM_VERSION = "0.1.49";
2145
+ var NEGOTIUM_VERSION = "0.2.1";
2120
2146
 
2121
2147
  // ../../packages/core/src/agents/codex-native-multi-agent.ts
2122
2148
  var moduleRequire = createRequire2(import.meta.url);
@@ -3744,4 +3770,4 @@ export {
3744
3770
  buildClaudeDisallowedTools
3745
3771
  };
3746
3772
 
3747
- //# debugId=91493C665ED6215F64756E2164756E21
3773
+ //# debugId=D004E4F61C8499C064756E2164756E21