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.
- package/README.md +1 -1
- package/dist/agent-helpers.js +72 -78
- package/dist/agent-helpers.js.map +18 -17
- package/dist/background-bash.js +22 -10
- package/dist/background-bash.js.map +3 -3
- package/dist/browser-runtime.js +47 -72
- package/dist/browser-runtime.js.map +10 -9
- package/dist/{chunk-5rpw9d1f.js → chunk-kc5kmr95.js} +28 -11
- package/dist/{chunk-5rpw9d1f.js.map → chunk-kc5kmr95.js.map} +4 -4
- package/dist/hosted-agent.js +48 -22
- package/dist/hosted-agent.js.map +10 -9
- package/dist/main.js +576 -102
- package/dist/main.js.map +23 -20
- package/dist/mcp-factories.js +76 -82
- package/dist/mcp-factories.js.map +19 -18
- package/dist/prompts.js +22 -10
- package/dist/prompts.js.map +3 -3
- package/dist/query-runtime.js +22 -10
- package/dist/query-runtime.js.map +4 -4
- package/dist/registry.js +5 -12
- package/dist/registry.js.map +5 -5
- package/dist/rollout.js +1 -1
- package/dist/runtime/cron/mcp-server.ts +1 -1
- package/dist/runtime/src/agents/maestro-registry.ts +1 -1
- package/dist/runtime/src/agents/rollout/shared.ts +12 -4
- package/dist/runtime/src/mcp/mcp-helpers.ts +1 -1
- package/dist/runtime/src/mcp/wiki-server.ts +1 -1
- package/dist/runtime/src/migration/single-user.ts +621 -0
- package/dist/runtime/src/platform/config.ts +24 -11
- package/dist/runtime/src/platform/mcp-config.ts +4 -4
- package/dist/runtime/src/platform/playwright/manager.ts +10 -28
- package/dist/runtime/src/runtime/attachments.ts +3 -3
- package/dist/runtime/src/storage/browser-profiles.ts +11 -9
- package/dist/runtime/src/storage/conversations.ts +5 -18
- package/dist/runtime/src/storage/storage-host.ts +1 -1
- package/dist/runtime/src/storage/tasks.ts +2 -14
- package/dist/runtime/src/storage/vault-crypto-core.ts +65 -0
- package/dist/runtime/src/storage/vault-crypto.ts +8 -48
- package/dist/runtime/src/storage/vault.ts +3 -2
- package/dist/runtime/src/version.ts +1 -1
- package/dist/runtime-helpers.js +22 -10
- package/dist/runtime-helpers.js.map +5 -5
- package/dist/storage.js +5 -19
- package/dist/storage.js.map +5 -5
- package/dist/types/packages/core/src/mcp/mcp-helpers.d.ts +1 -1
- package/dist/types/packages/core/src/platform/config.d.ts +9 -1
- package/dist/types/packages/core/src/runtime/attachments.d.ts +1 -1
- package/dist/types/packages/core/src/storage/conversations.d.ts +2 -2
- package/dist/types/packages/core/src/storage/vault-crypto-core.d.ts +6 -0
- package/dist/types/packages/core/src/storage/vault-crypto.d.ts +2 -1
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/dist/vault.js +37 -16
- package/dist/vault.js.map +7 -6
- package/install-browser-rs.mjs +1 -1
- package/package.json +2 -2
package/dist/hosted-agent.js
CHANGED
|
@@ -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
|
|
119
|
-
var
|
|
120
|
-
var
|
|
121
|
-
var
|
|
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(
|
|
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(
|
|
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(
|
|
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", "
|
|
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 = [
|
|
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 || "
|
|
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 || "
|
|
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 || "
|
|
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 || "
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1438
|
-
|
|
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
|
|
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=
|
|
3773
|
+
//# debugId=D004E4F61C8499C064756E2164756E21
|