negotium 0.1.48 → 0.2.0
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 +58 -74
- package/dist/agent-helpers.js.map +15 -15
- package/dist/background-bash.js +22 -10
- package/dist/background-bash.js.map +3 -3
- package/dist/browser-runtime.js +35 -68
- package/dist/browser-runtime.js.map +7 -7
- package/dist/{chunk-d9jyt6xe.js → chunk-kc5kmr95.js} +162 -12
- package/dist/{chunk-d9jyt6xe.js.map → chunk-kc5kmr95.js.map} +4 -4
- package/dist/hosted-agent.js +36 -18
- package/dist/hosted-agent.js.map +7 -7
- package/dist/main.js +562 -98
- package/dist/main.js.map +21 -19
- package/dist/mcp-factories.js +602 -223
- package/dist/mcp-factories.js.map +16 -16
- 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 +286 -10
- package/dist/registry.js.map +9 -7
- package/dist/rollout.js +14 -2
- package/dist/rollout.js.map +3 -3
- 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.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/version.d.ts +1 -1
- package/dist/vault.js +25 -12
- package/dist/vault.js.map +4 -4
- package/install-browser-rs.mjs +1 -1
- package/package.json +2 -2
|
@@ -105,10 +105,14 @@ function parsePortEnv(envValue, fallback) {
|
|
|
105
105
|
var WORKSPACE_DIR = resolveLocalStateDir("NEGOTIUM_WORKSPACE_DIR", "workspace");
|
|
106
106
|
var TOPIC_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "topics");
|
|
107
107
|
var SHARED_WIKI_DIR = resolve(WORKSPACE_DIR, "wiki");
|
|
108
|
-
var
|
|
109
|
-
var
|
|
110
|
-
var
|
|
111
|
-
var
|
|
108
|
+
var CRON_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "cron");
|
|
109
|
+
var BROWSER_DIR = resolveLocalStateDir("NEGOTIUM_BROWSER_DIR", "browser");
|
|
110
|
+
var BROWSER_PROFILES_DIR = resolve(BROWSER_DIR, "profiles");
|
|
111
|
+
var BINARIES_DIR = resolve(STATE_DIR, "binaries");
|
|
112
|
+
var SECRETS_DIR = resolve(STATE_DIR, "secrets");
|
|
113
|
+
var CONTEXTS_DIR = resolve(STATE_DIR, "data", "contexts");
|
|
114
|
+
var DM_WORKSPACE_DIR = resolve(STATE_DIR, "data", "dm");
|
|
115
|
+
var SESSION_WORKSPACE_DIR = resolve(STATE_DIR, "data", "sessions");
|
|
112
116
|
var CLAUDE_EXECUTABLE_ENV = envText("NEGOTIUM_CLAUDE_EXECUTABLE");
|
|
113
117
|
var CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve(CLAUDE_EXECUTABLE_ENV) : undefined;
|
|
114
118
|
var BROWSER_RS_VERSION = "v0.1.16";
|
|
@@ -146,7 +150,7 @@ function resolveBrowserRsBin(envValue) {
|
|
|
146
150
|
if (!override && !versionAtLeast(BROWSER_RS_VERSION.replace(/^v/, ""), BROWSER_RS_MIN_SECURE_VERSION)) {
|
|
147
151
|
return;
|
|
148
152
|
}
|
|
149
|
-
const candidate = override ? resolve(override) : resolve(
|
|
153
|
+
const candidate = override ? resolve(override) : resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, "browser-rs");
|
|
150
154
|
try {
|
|
151
155
|
accessSync(candidate, constants.X_OK);
|
|
152
156
|
return browserRsMeetsMinimumVersion(candidate) ? candidate : undefined;
|
|
@@ -159,7 +163,7 @@ function resolveBrowserMcpBin(envValue) {
|
|
|
159
163
|
const override = envValue?.trim();
|
|
160
164
|
if (override)
|
|
161
165
|
return resolve(override);
|
|
162
|
-
return BROWSER_RS_BIN ?? resolve(
|
|
166
|
+
return BROWSER_RS_BIN ?? resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, "browser-rs");
|
|
163
167
|
}
|
|
164
168
|
var PLAYWRIGHT_MCP_BIN = resolveBrowserMcpBin(envText("NEGOTIUM_BROWSER_MCP_BIN"));
|
|
165
169
|
var TSX_BIN = resolveDependencyBin("tsx");
|
|
@@ -180,7 +184,7 @@ var BG_BASH_BASE_PORT = parsePortEnv(process.env.BG_BASH_BASE_PORT, 9700);
|
|
|
180
184
|
var BG_BASH_MAX_PORT = parsePortEnv(process.env.BG_BASH_MAX_PORT, 9799);
|
|
181
185
|
function loadOrCreateLocalSecret(envKey, filename, options = {}) {
|
|
182
186
|
const envValue = envText(envKey);
|
|
183
|
-
const secretFile = resolve(
|
|
187
|
+
const secretFile = resolve(SECRETS_DIR, filename);
|
|
184
188
|
mkdirSync(dirname(secretFile), { recursive: true });
|
|
185
189
|
if (envValue) {
|
|
186
190
|
if (options.persistEnvValue) {
|
|
@@ -220,10 +224,12 @@ var NEGOTIUM_PORT = parseInt(process.env.NEGOTIUM_PORT || "7777", 10);
|
|
|
220
224
|
var hostname = process.env.HOSTNAME || "127.0.0.1";
|
|
221
225
|
var DATA_DIR = resolveLocalStateDir("NEGOTIUM_DATA_DIR", "data");
|
|
222
226
|
var LOG_DIR = resolveLocalStateDir("NEGOTIUM_LOG_DIR", "logs");
|
|
227
|
+
var UPLOADS_DIR = resolve(DATA_DIR, "uploads");
|
|
228
|
+
var VAULT_DIR = resolve(DATA_DIR, "vault");
|
|
223
229
|
var SESSIONS_DB = process.env.SESSIONS_DB_PATH ? resolve(process.env.SESSIONS_DB_PATH) : resolve(DATA_DIR, "sessions.db");
|
|
224
230
|
var DEBUG_FILE = resolve(DATA_DIR, "debug-users.json");
|
|
225
231
|
var USERS_LOG_DIR = resolve(DATA_DIR, "users");
|
|
226
|
-
var RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "
|
|
232
|
+
var RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "runtime");
|
|
227
233
|
var PROGRESS_DIR = resolve(RUN_DIR, "progress");
|
|
228
234
|
var DM_CMD_DIR = resolve(RUN_DIR, "dm-commands");
|
|
229
235
|
var DM_RESP_DIR = resolve(RUN_DIR, "dm-responses");
|
|
@@ -234,6 +240,8 @@ var PLAYWRIGHT_MAX_PORT = parsePortEnv(process.env.PLAYWRIGHT_MAX_PORT, 9499);
|
|
|
234
240
|
var PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR, "playwright-ports");
|
|
235
241
|
mkdirSync(STATE_DIR, { recursive: true });
|
|
236
242
|
mkdirSync(DATA_DIR, { recursive: true });
|
|
243
|
+
mkdirSync(UPLOADS_DIR, { recursive: true });
|
|
244
|
+
mkdirSync(VAULT_DIR, { recursive: true, mode: 448 });
|
|
237
245
|
mkdirSync(LOG_DIR, { recursive: true });
|
|
238
246
|
mkdirSync(PROGRESS_DIR, { recursive: true });
|
|
239
247
|
mkdirSync(DM_CMD_DIR, { recursive: true });
|
|
@@ -244,10 +252,14 @@ mkdirSync(PLAYWRIGHT_PORTS_DIR, { recursive: true });
|
|
|
244
252
|
mkdirSync(WORKSPACE_DIR, { recursive: true });
|
|
245
253
|
mkdirSync(TOPIC_WORKSPACE_DIR, { recursive: true });
|
|
246
254
|
mkdirSync(SHARED_WIKI_DIR, { recursive: true });
|
|
255
|
+
mkdirSync(CRON_WORKSPACE_DIR, { recursive: true });
|
|
247
256
|
mkdirSync(CONTEXTS_DIR, { recursive: true });
|
|
248
|
-
mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
|
|
249
257
|
mkdirSync(DM_WORKSPACE_DIR, { recursive: true });
|
|
250
258
|
mkdirSync(SESSION_WORKSPACE_DIR, { recursive: true });
|
|
259
|
+
mkdirSync(BROWSER_DIR, { recursive: true });
|
|
260
|
+
mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
|
|
261
|
+
mkdirSync(BINARIES_DIR, { recursive: true });
|
|
262
|
+
mkdirSync(SECRETS_DIR, { recursive: true, mode: 448 });
|
|
251
263
|
var ACTIVE_QUERY_STALE_MS = 10 * 60 * 1000;
|
|
252
264
|
var AGENTS_PROMPTS_DIR = resolve(PROJECT_ROOT, "src/prompts/agents");
|
|
253
265
|
var RESOURCES_DIR = resolve(PROJECT_ROOT, "src/resources");
|
|
@@ -287,7 +299,12 @@ function renderUserPromptBatch(prompts) {
|
|
|
287
299
|
|
|
288
300
|
// ../../packages/core/src/agents/rollout/shared.ts
|
|
289
301
|
var __dirname2 = dirname2(fileURLToPath2(import.meta.url));
|
|
290
|
-
var trustedWorkspaceRoots = [
|
|
302
|
+
var trustedWorkspaceRoots = [
|
|
303
|
+
WORKSPACE_DIR,
|
|
304
|
+
DM_WORKSPACE_DIR,
|
|
305
|
+
SESSION_WORKSPACE_DIR,
|
|
306
|
+
TOPIC_WORKSPACE_DIR
|
|
307
|
+
].map((root) => resolve2(root));
|
|
291
308
|
function configureRolloutHost(options) {
|
|
292
309
|
if (!options.workspaceRoots && !options.fixturesDir) {
|
|
293
310
|
throw new Error("configureRolloutHost requires workspaceRoots or fixturesDir");
|
|
@@ -789,6 +806,139 @@ function patchEnvContext(envContext, cwd, currentDate, timezone) {
|
|
|
789
806
|
}
|
|
790
807
|
}
|
|
791
808
|
}
|
|
809
|
+
function canonicalFilePath(path) {
|
|
810
|
+
const absolute = resolve3(path);
|
|
811
|
+
try {
|
|
812
|
+
return realpathSync(absolute);
|
|
813
|
+
} catch {
|
|
814
|
+
try {
|
|
815
|
+
return join4(realpathSync(dirname4(absolute)), basename(absolute));
|
|
816
|
+
} catch {
|
|
817
|
+
return absolute;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
function changedPatchLines(value) {
|
|
822
|
+
const removed = [];
|
|
823
|
+
const added = [];
|
|
824
|
+
const diffPreview = [];
|
|
825
|
+
let oldLine = 0;
|
|
826
|
+
let newLine = 0;
|
|
827
|
+
let sawHunk = false;
|
|
828
|
+
for (const line of value.split(`
|
|
829
|
+
`)) {
|
|
830
|
+
const hunk = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(line);
|
|
831
|
+
if (hunk) {
|
|
832
|
+
if (sawHunk)
|
|
833
|
+
diffPreview.push("\u2026");
|
|
834
|
+
sawHunk = true;
|
|
835
|
+
oldLine = Number.parseInt(hunk[1] ?? "0", 10);
|
|
836
|
+
newLine = Number.parseInt(hunk[2] ?? "0", 10);
|
|
837
|
+
continue;
|
|
838
|
+
}
|
|
839
|
+
if (!sawHunk && (line.startsWith("--- ") || line.startsWith("+++ ")))
|
|
840
|
+
continue;
|
|
841
|
+
if (line.startsWith("\\ No newline"))
|
|
842
|
+
continue;
|
|
843
|
+
if (line.startsWith("-")) {
|
|
844
|
+
removed.push(line.slice(1));
|
|
845
|
+
diffPreview.push(`${oldLine} -${line.slice(1)}`);
|
|
846
|
+
oldLine += 1;
|
|
847
|
+
continue;
|
|
848
|
+
}
|
|
849
|
+
if (line.startsWith("+")) {
|
|
850
|
+
added.push(line.slice(1));
|
|
851
|
+
diffPreview.push(`${newLine} +${line.slice(1)}`);
|
|
852
|
+
newLine += 1;
|
|
853
|
+
continue;
|
|
854
|
+
}
|
|
855
|
+
if (line.startsWith(" ")) {
|
|
856
|
+
diffPreview.push(`${newLine} ${line.slice(1)}`);
|
|
857
|
+
oldLine += 1;
|
|
858
|
+
newLine += 1;
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
return {
|
|
862
|
+
...removed.length > 0 ? { before: removed.join(`
|
|
863
|
+
`) } : {},
|
|
864
|
+
...added.length > 0 ? { after: added.join(`
|
|
865
|
+
`) } : {},
|
|
866
|
+
...diffPreview.length > 0 ? { diffPreview: diffPreview.join(`
|
|
867
|
+
`) } : {}
|
|
868
|
+
};
|
|
869
|
+
}
|
|
870
|
+
function extractLatestCodexPatchPreview(jsonl, expectedPaths, consumedCallIds = new Set, expectedCallId) {
|
|
871
|
+
const expected = expectedPaths.map(canonicalFilePath);
|
|
872
|
+
const lines = jsonl.trimEnd().split(`
|
|
873
|
+
`);
|
|
874
|
+
for (let index = lines.length - 1;index >= 0; index -= 1) {
|
|
875
|
+
try {
|
|
876
|
+
const entry = JSON.parse(lines[index] ?? "");
|
|
877
|
+
if (entry.type !== "event_msg" || entry.payload?.type !== "patch_apply_end")
|
|
878
|
+
continue;
|
|
879
|
+
const callId = entry.payload.call_id;
|
|
880
|
+
const rawChanges = entry.payload.changes;
|
|
881
|
+
if (!callId || consumedCallIds.has(callId) || expectedCallId !== undefined && callId !== expectedCallId || !rawChanges) {
|
|
882
|
+
continue;
|
|
883
|
+
}
|
|
884
|
+
const entries = Object.entries(rawChanges);
|
|
885
|
+
const matched = expected.map((path) => entries.find(([candidate]) => canonicalFilePath(candidate) === path));
|
|
886
|
+
const complete = matched.filter((change) => change !== undefined);
|
|
887
|
+
if (complete.length !== expected.length)
|
|
888
|
+
continue;
|
|
889
|
+
return {
|
|
890
|
+
callId,
|
|
891
|
+
changes: complete.map(([path, change]) => {
|
|
892
|
+
if (typeof change.unified_diff === "string") {
|
|
893
|
+
return { path, ...changedPatchLines(change.unified_diff) };
|
|
894
|
+
}
|
|
895
|
+
const content = typeof change.content === "string" ? change.content.replace(/\n$/, "") : undefined;
|
|
896
|
+
return {
|
|
897
|
+
path,
|
|
898
|
+
...change.type === "delete" && content !== undefined ? { before: content } : {},
|
|
899
|
+
...change.type === "add" && content !== undefined ? { after: content } : {}
|
|
900
|
+
};
|
|
901
|
+
})
|
|
902
|
+
};
|
|
903
|
+
} catch {}
|
|
904
|
+
}
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
907
|
+
function extractCodexPatchCallIds(jsonl) {
|
|
908
|
+
const callIds = [];
|
|
909
|
+
for (const line of jsonl.trimEnd().split(`
|
|
910
|
+
`)) {
|
|
911
|
+
try {
|
|
912
|
+
const entry = JSON.parse(line);
|
|
913
|
+
if (entry.type === "event_msg" && entry.payload?.type === "patch_apply_end" && typeof entry.payload.call_id === "string") {
|
|
914
|
+
callIds.push(entry.payload.call_id);
|
|
915
|
+
}
|
|
916
|
+
} catch {}
|
|
917
|
+
}
|
|
918
|
+
return callIds;
|
|
919
|
+
}
|
|
920
|
+
function readCodexPatchCallIds(threadId) {
|
|
921
|
+
const path = latestCodexRolloutPath(threadId);
|
|
922
|
+
if (!path)
|
|
923
|
+
return [];
|
|
924
|
+
try {
|
|
925
|
+
return extractCodexPatchCallIds(readFileSync4(path, "utf8"));
|
|
926
|
+
} catch (error) {
|
|
927
|
+
logger.debug({ error, threadId }, "codex patch ids: rollout read failed");
|
|
928
|
+
return [];
|
|
929
|
+
}
|
|
930
|
+
}
|
|
931
|
+
function readLatestCodexPatchPreview(threadId, expectedPaths, consumedCallIds = new Set, expectedCallId) {
|
|
932
|
+
const path = latestCodexRolloutPath(threadId);
|
|
933
|
+
if (!path)
|
|
934
|
+
return;
|
|
935
|
+
try {
|
|
936
|
+
return extractLatestCodexPatchPreview(readFileSync4(path, "utf8"), expectedPaths, consumedCallIds, expectedCallId);
|
|
937
|
+
} catch (error) {
|
|
938
|
+
logger.debug({ error, threadId }, "codex patch preview: rollout read failed");
|
|
939
|
+
return;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
792
942
|
function extractLatestCodexContextUsage(jsonl) {
|
|
793
943
|
const lines = jsonl.trimEnd().split(`
|
|
794
944
|
`);
|
|
@@ -1070,6 +1220,6 @@ function formatDateBucket(d) {
|
|
|
1070
1220
|
return `${yyyy}/${mm}/${dd}`;
|
|
1071
1221
|
}
|
|
1072
1222
|
|
|
1073
|
-
export { __require, CLAUDE_EFFORT_VALUES, CODEX_EFFORT_VALUES, MAESTRO_EFFORT_VALUES, MODEL_SONNET, MODEL_OPUS, MODEL_FABLE, configureRolloutHost, extractChatPairs, encodeClaudeCwd, writeClaudeRollout, repairPoisonedRollout, extractLatestCodexContextUsage, readLatestCodexContextUsage, migrateCodexRolloutNativeMultiAgentMetadata, writeCodexRollout, decodeUuidV7Timestamp };
|
|
1223
|
+
export { __require, logger, CLAUDE_EFFORT_VALUES, CODEX_EFFORT_VALUES, MAESTRO_EFFORT_VALUES, MODEL_SONNET, MODEL_OPUS, MODEL_FABLE, configureRolloutHost, assertUuidLike, ensureCwdExists, extractChatPairs, encodeClaudeCwd, writeClaudeRollout, repairPoisonedRollout, extractLatestCodexPatchPreview, extractCodexPatchCallIds, readCodexPatchCallIds, readLatestCodexPatchPreview, extractLatestCodexContextUsage, readLatestCodexContextUsage, migrateCodexRolloutNativeMultiAgentMetadata, writeCodexRollout, decodeUuidV7Timestamp };
|
|
1074
1224
|
|
|
1075
|
-
//# debugId=
|
|
1225
|
+
//# debugId=9D224F8B58C2166C64756E2164756E21
|