negotium 0.1.49 → 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-5rpw9d1f.js → chunk-kc5kmr95.js} +28 -11
- package/dist/{chunk-5rpw9d1f.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 +62 -78
- 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 +5 -12
- package/dist/registry.js.map +5 -5
- package/dist/rollout.js +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.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
package/README.md
CHANGED
|
@@ -296,7 +296,7 @@ const restoreStorageHost = configureStorageHost({
|
|
|
296
296
|
database,
|
|
297
297
|
dataDir: "/srv/otium/state/data",
|
|
298
298
|
logDir: "/srv/otium/logs",
|
|
299
|
-
sessionAsksDir: "/srv/otium/state/
|
|
299
|
+
sessionAsksDir: "/srv/otium/state/runtime/session-asks",
|
|
300
300
|
workspaceDir: "/srv/otium/state/workspace",
|
|
301
301
|
sharedWikiDir: "/srv/otium/state/workspace/wiki",
|
|
302
302
|
usersLogDir: "/srv/otium/state/data/users",
|
package/dist/agent-helpers.js
CHANGED
|
@@ -162,7 +162,7 @@ function resolveBrowserRsBin(envValue) {
|
|
|
162
162
|
if (!override && !versionAtLeast(BROWSER_RS_VERSION.replace(/^v/, ""), BROWSER_RS_MIN_SECURE_VERSION)) {
|
|
163
163
|
return;
|
|
164
164
|
}
|
|
165
|
-
const candidate = override ? resolve(override) : resolve(
|
|
165
|
+
const candidate = override ? resolve(override) : resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, "browser-rs");
|
|
166
166
|
try {
|
|
167
167
|
accessSync(candidate, constants.X_OK);
|
|
168
168
|
return browserRsMeetsMinimumVersion(candidate) ? candidate : undefined;
|
|
@@ -174,7 +174,7 @@ function resolveBrowserMcpBin(envValue) {
|
|
|
174
174
|
const override = envValue?.trim();
|
|
175
175
|
if (override)
|
|
176
176
|
return resolve(override);
|
|
177
|
-
return BROWSER_RS_BIN ?? resolve(
|
|
177
|
+
return BROWSER_RS_BIN ?? resolve(BINARIES_DIR, "browser-rs", BROWSER_RS_VERSION, "browser-rs");
|
|
178
178
|
}
|
|
179
179
|
function resolveBrowserProxy() {
|
|
180
180
|
const raw = envText("BROWSER_PROXY_URL");
|
|
@@ -206,7 +206,7 @@ function resolveTopicWorkspaceDir(topicId) {
|
|
|
206
206
|
}
|
|
207
207
|
function loadOrCreateLocalSecret(envKey, filename, options = {}) {
|
|
208
208
|
const envValue = envText(envKey);
|
|
209
|
-
const secretFile = resolve(
|
|
209
|
+
const secretFile = resolve(SECRETS_DIR, filename);
|
|
210
210
|
mkdirSync(dirname(secretFile), { recursive: true });
|
|
211
211
|
if (envValue) {
|
|
212
212
|
if (options.persistEnvValue) {
|
|
@@ -247,7 +247,7 @@ function resolveDefaultModel(agent, registryDefaultModel) {
|
|
|
247
247
|
function codexAuthFilePath() {
|
|
248
248
|
return process.env.NEGOTIUM_CODEX_AUTH_FILE || join(homedir(), ".codex", "auth.json");
|
|
249
249
|
}
|
|
250
|
-
var HOME, PROJECT_ROOT, STATE_DIR_ENV, STATE_DIR, WORKSPACE_DIR, TOPIC_WORKSPACE_DIR, SHARED_WIKI_DIR,
|
|
250
|
+
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, CONTEXTS_DIR, DM_WORKSPACE_DIR, SESSION_WORKSPACE_DIR, CLAUDE_EXECUTABLE_ENV, CLAUDE_EXECUTABLE, DEFAULT_OUTPUT_LANGUAGE = "English", BROWSER_RS_VERSION = "v0.1.16", BROWSER_RS_MIN_SECURE_VERSION = "0.1.15", BROWSER_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, BACKGROUND_BASH_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, 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;
|
|
251
251
|
var init_config = __esm(() => {
|
|
252
252
|
init_config_helpers();
|
|
253
253
|
init_logger();
|
|
@@ -259,10 +259,14 @@ var init_config = __esm(() => {
|
|
|
259
259
|
WORKSPACE_DIR = resolveLocalStateDir("NEGOTIUM_WORKSPACE_DIR", "workspace");
|
|
260
260
|
TOPIC_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "topics");
|
|
261
261
|
SHARED_WIKI_DIR = resolve(WORKSPACE_DIR, "wiki");
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
262
|
+
CRON_WORKSPACE_DIR = resolve(WORKSPACE_DIR, "cron");
|
|
263
|
+
BROWSER_DIR = resolveLocalStateDir("NEGOTIUM_BROWSER_DIR", "browser");
|
|
264
|
+
BROWSER_PROFILES_DIR = resolve(BROWSER_DIR, "profiles");
|
|
265
|
+
BINARIES_DIR = resolve(STATE_DIR, "binaries");
|
|
266
|
+
SECRETS_DIR = resolve(STATE_DIR, "secrets");
|
|
267
|
+
CONTEXTS_DIR = resolve(STATE_DIR, "data", "contexts");
|
|
268
|
+
DM_WORKSPACE_DIR = resolve(STATE_DIR, "data", "dm");
|
|
269
|
+
SESSION_WORKSPACE_DIR = resolve(STATE_DIR, "data", "sessions");
|
|
266
270
|
CLAUDE_EXECUTABLE_ENV = envText("NEGOTIUM_CLAUDE_EXECUTABLE");
|
|
267
271
|
CLAUDE_EXECUTABLE = CLAUDE_EXECUTABLE_ENV ? resolve(CLAUDE_EXECUTABLE_ENV) : undefined;
|
|
268
272
|
BROWSER_RS_BIN = resolveBrowserRsBin(envText("NEGOTIUM_BROWSER_RS_BIN"));
|
|
@@ -291,10 +295,12 @@ var init_config = __esm(() => {
|
|
|
291
295
|
hostname = process.env.HOSTNAME || "127.0.0.1";
|
|
292
296
|
DATA_DIR = resolveLocalStateDir("NEGOTIUM_DATA_DIR", "data");
|
|
293
297
|
LOG_DIR = resolveLocalStateDir("NEGOTIUM_LOG_DIR", "logs");
|
|
298
|
+
UPLOADS_DIR = resolve(DATA_DIR, "uploads");
|
|
299
|
+
VAULT_DIR = resolve(DATA_DIR, "vault");
|
|
294
300
|
SESSIONS_DB = process.env.SESSIONS_DB_PATH ? resolve(process.env.SESSIONS_DB_PATH) : resolve(DATA_DIR, "sessions.db");
|
|
295
301
|
DEBUG_FILE = resolve(DATA_DIR, "debug-users.json");
|
|
296
302
|
USERS_LOG_DIR = resolve(DATA_DIR, "users");
|
|
297
|
-
RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "
|
|
303
|
+
RUN_DIR = resolveLocalStateDir("NEGOTIUM_RUN_DIR", "runtime");
|
|
298
304
|
PROGRESS_DIR = resolve(RUN_DIR, "progress");
|
|
299
305
|
DM_CMD_DIR = resolve(RUN_DIR, "dm-commands");
|
|
300
306
|
DM_RESP_DIR = resolve(RUN_DIR, "dm-responses");
|
|
@@ -305,6 +311,8 @@ var init_config = __esm(() => {
|
|
|
305
311
|
PLAYWRIGHT_PORTS_DIR = resolve(RUN_DIR, "playwright-ports");
|
|
306
312
|
mkdirSync(STATE_DIR, { recursive: true });
|
|
307
313
|
mkdirSync(DATA_DIR, { recursive: true });
|
|
314
|
+
mkdirSync(UPLOADS_DIR, { recursive: true });
|
|
315
|
+
mkdirSync(VAULT_DIR, { recursive: true, mode: 448 });
|
|
308
316
|
mkdirSync(LOG_DIR, { recursive: true });
|
|
309
317
|
mkdirSync(PROGRESS_DIR, { recursive: true });
|
|
310
318
|
mkdirSync(DM_CMD_DIR, { recursive: true });
|
|
@@ -315,10 +323,14 @@ var init_config = __esm(() => {
|
|
|
315
323
|
mkdirSync(WORKSPACE_DIR, { recursive: true });
|
|
316
324
|
mkdirSync(TOPIC_WORKSPACE_DIR, { recursive: true });
|
|
317
325
|
mkdirSync(SHARED_WIKI_DIR, { recursive: true });
|
|
326
|
+
mkdirSync(CRON_WORKSPACE_DIR, { recursive: true });
|
|
318
327
|
mkdirSync(CONTEXTS_DIR, { recursive: true });
|
|
319
|
-
mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
|
|
320
328
|
mkdirSync(DM_WORKSPACE_DIR, { recursive: true });
|
|
321
329
|
mkdirSync(SESSION_WORKSPACE_DIR, { recursive: true });
|
|
330
|
+
mkdirSync(BROWSER_DIR, { recursive: true });
|
|
331
|
+
mkdirSync(BROWSER_PROFILES_DIR, { recursive: true });
|
|
332
|
+
mkdirSync(BINARIES_DIR, { recursive: true });
|
|
333
|
+
mkdirSync(SECRETS_DIR, { recursive: true, mode: 448 });
|
|
322
334
|
ACTIVE_QUERY_STALE_MS = 10 * 60 * 1000;
|
|
323
335
|
AGENTS_PROMPTS_DIR = resolve(PROJECT_ROOT, "src/prompts/agents");
|
|
324
336
|
RESOURCES_DIR = resolve(PROJECT_ROOT, "src/resources");
|
|
@@ -498,7 +510,12 @@ var init_shared = __esm(() => {
|
|
|
498
510
|
init_config();
|
|
499
511
|
init_logger();
|
|
500
512
|
__dirname2 = dirname2(fileURLToPath2(import.meta.url));
|
|
501
|
-
trustedWorkspaceRoots = [
|
|
513
|
+
trustedWorkspaceRoots = [
|
|
514
|
+
WORKSPACE_DIR,
|
|
515
|
+
DM_WORKSPACE_DIR,
|
|
516
|
+
SESSION_WORKSPACE_DIR,
|
|
517
|
+
TOPIC_WORKSPACE_DIR
|
|
518
|
+
].map((root) => resolve2(root));
|
|
502
519
|
FIXTURES_DIR = join2(__dirname2, "..", "fixtures");
|
|
503
520
|
UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
504
521
|
});
|
|
@@ -1450,7 +1467,7 @@ function defaultWorkspaceDir() {
|
|
|
1450
1467
|
return envPath("NEGOTIUM_WORKSPACE_DIR", join6(defaultStateDir(), "workspace"));
|
|
1451
1468
|
}
|
|
1452
1469
|
function defaultSessionAsksDir() {
|
|
1453
|
-
const runDir = envPath("NEGOTIUM_RUN_DIR", join6(defaultStateDir(), "
|
|
1470
|
+
const runDir = envPath("NEGOTIUM_RUN_DIR", join6(defaultStateDir(), "runtime"));
|
|
1454
1471
|
return join6(runDir, "session-asks");
|
|
1455
1472
|
}
|
|
1456
1473
|
function defaultSessionsDatabasePath() {
|
|
@@ -1556,15 +1573,8 @@ import {
|
|
|
1556
1573
|
writeFileSync as writeFileSync4
|
|
1557
1574
|
} from "fs";
|
|
1558
1575
|
import { dirname as dirname6, join as join7 } from "path";
|
|
1559
|
-
function
|
|
1560
|
-
|
|
1561
|
-
if (!str || /[/\\]|\.\./.test(str)) {
|
|
1562
|
-
throw new Error(`conversations: refusing unsafe userId path component: ${str}`);
|
|
1563
|
-
}
|
|
1564
|
-
return str;
|
|
1565
|
-
}
|
|
1566
|
-
function conversationDir(userId) {
|
|
1567
|
-
return join7(resolveStorageDataDir(), "conversations", safeUserIdComponent(userId));
|
|
1576
|
+
function conversationDir(_userId) {
|
|
1577
|
+
return join7(resolveStorageDataDir(), "conversations");
|
|
1568
1578
|
}
|
|
1569
1579
|
function topicFilename(topicName) {
|
|
1570
1580
|
const t = sanitizeTopicName(topicName, true);
|
|
@@ -1813,7 +1823,7 @@ function writeRollout(options) {
|
|
|
1813
1823
|
version: 1,
|
|
1814
1824
|
cwd: options.cwd,
|
|
1815
1825
|
createdAt: existingCreatedAt(path) ?? new Date().toISOString(),
|
|
1816
|
-
sdkVersion: "0.1.
|
|
1826
|
+
sdkVersion: "0.1.54"
|
|
1817
1827
|
}
|
|
1818
1828
|
},
|
|
1819
1829
|
...messages
|
|
@@ -1929,13 +1939,6 @@ var init_registry = __esm(async () => {
|
|
|
1929
1939
|
// ../../packages/core/src/storage/tasks.ts
|
|
1930
1940
|
import { existsSync as existsSync8, mkdirSync as mkdirSync8, readFileSync as readFileSync7, renameSync as renameSync4, statSync as statSync3, writeFileSync as writeFileSync6 } from "fs";
|
|
1931
1941
|
import { dirname as dirname7, join as join10 } from "path";
|
|
1932
|
-
function safeUserIdComponent2(userId) {
|
|
1933
|
-
const str = String(userId);
|
|
1934
|
-
if (!str || /[/\\]|\.\./.test(str)) {
|
|
1935
|
-
throw new Error(`tasks: refusing unsafe userId path component: ${str}`);
|
|
1936
|
-
}
|
|
1937
|
-
return str;
|
|
1938
|
-
}
|
|
1939
1942
|
function safeTaskScopeKey(scopeKey) {
|
|
1940
1943
|
const safe = sanitizeFileName(scopeKey);
|
|
1941
1944
|
if (!safe || safe === "." || safe === "..") {
|
|
@@ -1947,7 +1950,7 @@ function taskScopeKey(opts) {
|
|
|
1947
1950
|
return opts.topicId?.trim() || opts.session || "default";
|
|
1948
1951
|
}
|
|
1949
1952
|
function getTaskFilePath(userId, scopeKey) {
|
|
1950
|
-
return join10(resolveStorageDataDir(), "tasks",
|
|
1953
|
+
return join10(resolveStorageDataDir(), "tasks", `${safeTaskScopeKey(scopeKey)}.json`);
|
|
1951
1954
|
}
|
|
1952
1955
|
function readTasks(userId, scopeKey) {
|
|
1953
1956
|
const path = getTaskFilePath(userId, scopeKey);
|
|
@@ -2709,7 +2712,7 @@ function getMcpServersForQuery(opts) {
|
|
|
2709
2712
|
if (!opts.topicId)
|
|
2710
2713
|
throw new Error("getMcpServersForQuery: cron sessionType requires topicId");
|
|
2711
2714
|
return getCronMcpServers({
|
|
2712
|
-
userId: opts.userId || "
|
|
2715
|
+
userId: opts.userId || "local",
|
|
2713
2716
|
session: opts.session || "cron",
|
|
2714
2717
|
topicId: opts.topicId,
|
|
2715
2718
|
queryId: opts.queryId,
|
|
@@ -2726,7 +2729,7 @@ function getMcpServersForQuery(opts) {
|
|
|
2726
2729
|
}
|
|
2727
2730
|
if (opts.sessionType === "dm" || opts.sessionType === "ephemeral") {
|
|
2728
2731
|
return getDmMcpServers({
|
|
2729
|
-
userId: opts.userId || "
|
|
2732
|
+
userId: opts.userId || "local",
|
|
2730
2733
|
agent: opts.agent,
|
|
2731
2734
|
playwrightPort: opts.playwrightPort,
|
|
2732
2735
|
playwrightCapability: opts.playwrightCapability
|
|
@@ -2734,7 +2737,7 @@ function getMcpServersForQuery(opts) {
|
|
|
2734
2737
|
}
|
|
2735
2738
|
if (opts.sessionType === "manager") {
|
|
2736
2739
|
return getManagerMcpServers({
|
|
2737
|
-
userId: opts.userId || "
|
|
2740
|
+
userId: opts.userId || "local",
|
|
2738
2741
|
session: opts.session,
|
|
2739
2742
|
topicId: opts.topicId,
|
|
2740
2743
|
queryId: opts.queryId,
|
|
@@ -2751,7 +2754,7 @@ function getMcpServersForQuery(opts) {
|
|
|
2751
2754
|
});
|
|
2752
2755
|
}
|
|
2753
2756
|
return getForumMcpServers({
|
|
2754
|
-
userId: opts.userId || "
|
|
2757
|
+
userId: opts.userId || "local",
|
|
2755
2758
|
session: opts.session || "default",
|
|
2756
2759
|
topicId: opts.topicId,
|
|
2757
2760
|
subagentParentTopicId: opts.subagentParentTopicId,
|
|
@@ -3051,8 +3054,9 @@ function initializeVaultDatabase(database) {
|
|
|
3051
3054
|
}
|
|
3052
3055
|
}
|
|
3053
3056
|
function openVaultDatabase(dataDir) {
|
|
3054
|
-
const
|
|
3055
|
-
|
|
3057
|
+
const vaultDir = join11(dataDir, "vault");
|
|
3058
|
+
const path = join11(vaultDir, "vault.db");
|
|
3059
|
+
mkdirSync9(vaultDir, { recursive: true, mode: 448 });
|
|
3056
3060
|
const database = new Database(path, { create: true });
|
|
3057
3061
|
chmodSync2(path, 384);
|
|
3058
3062
|
initializeVaultDatabase(database);
|
|
@@ -3771,7 +3775,7 @@ var init_claude_provider = __esm(async () => {
|
|
|
3771
3775
|
});
|
|
3772
3776
|
|
|
3773
3777
|
// ../../packages/core/src/version.ts
|
|
3774
|
-
var NEGOTIUM_VERSION = "0.
|
|
3778
|
+
var NEGOTIUM_VERSION = "0.2.0";
|
|
3775
3779
|
|
|
3776
3780
|
// ../../packages/core/src/agents/codex-native-multi-agent.ts
|
|
3777
3781
|
import { spawn as spawn3 } from "child_process";
|
|
@@ -10522,7 +10526,7 @@ function createBrowserProfile(ownerId, rawName) {
|
|
|
10522
10526
|
const name = normalizeBrowserProfileName(rawName);
|
|
10523
10527
|
if (name === DEFAULT_BROWSER_PROFILE)
|
|
10524
10528
|
return name;
|
|
10525
|
-
db.query("INSERT OR IGNORE INTO browser_profiles (owner_id, name, created_at) VALUES (?, ?, ?)").run(
|
|
10529
|
+
db.query("INSERT OR IGNORE INTO browser_profiles (owner_id, name, created_at) VALUES (?, ?, ?)").run("local", name, new Date().toISOString());
|
|
10526
10530
|
return name;
|
|
10527
10531
|
}
|
|
10528
10532
|
function assignTopicBrowserProfile(opts) {
|
|
@@ -10562,7 +10566,6 @@ import {
|
|
|
10562
10566
|
existsSync as existsSync16,
|
|
10563
10567
|
mkdirSync as mkdirSync11,
|
|
10564
10568
|
readFileSync as readFileSync14,
|
|
10565
|
-
renameSync as renameSync6,
|
|
10566
10569
|
rmSync as rmSync3,
|
|
10567
10570
|
unlinkSync as unlinkSync11,
|
|
10568
10571
|
writeFileSync as writeFileSync9
|
|
@@ -10578,7 +10581,7 @@ function defaultTopicBinding(userId, topic) {
|
|
|
10578
10581
|
if (!topic)
|
|
10579
10582
|
return managerHost.resolveNamedBinding(userId, "default");
|
|
10580
10583
|
const ownerId = getBrowserProfileOwner(topic, userId);
|
|
10581
|
-
const profile =
|
|
10584
|
+
const profile = getTopicBrowserProfile(topic);
|
|
10582
10585
|
return managerHost.resolveNamedBinding(ownerId, profile);
|
|
10583
10586
|
}
|
|
10584
10587
|
function resolvePlaywrightProfileBinding(ownerId, rawProfile) {
|
|
@@ -10590,34 +10593,15 @@ function validateProfileBinding(binding) {
|
|
|
10590
10593
|
}
|
|
10591
10594
|
return Object.freeze({ ...binding });
|
|
10592
10595
|
}
|
|
10593
|
-
function defaultNamedBinding(
|
|
10596
|
+
function defaultNamedBinding(_ownerId, rawProfile) {
|
|
10594
10597
|
const profile = normalizeBrowserProfileName(rawProfile);
|
|
10595
|
-
const instanceKey = `profile:${
|
|
10598
|
+
const instanceKey = `profile:${profile}`;
|
|
10596
10599
|
return {
|
|
10597
10600
|
instanceKey,
|
|
10598
|
-
ownerId,
|
|
10601
|
+
ownerId: "local",
|
|
10599
10602
|
profile
|
|
10600
10603
|
};
|
|
10601
10604
|
}
|
|
10602
|
-
function legacyBrowserProfileName(topic) {
|
|
10603
|
-
return `legacy_${createHash3("sha256").update(topic).digest("hex").slice(0, 12)}`;
|
|
10604
|
-
}
|
|
10605
|
-
function migrateLegacyTopicProfile(ownerId, topic) {
|
|
10606
|
-
const current2 = getTopicBrowserProfile(topic);
|
|
10607
|
-
if (current2 !== "default" || !hasBrowserProfileTopic(topic))
|
|
10608
|
-
return current2;
|
|
10609
|
-
const legacyDir = resolve13(BROWSER_PROFILES_DIR, sanitizeTopicName(topic));
|
|
10610
|
-
if (!existsSync16(legacyDir))
|
|
10611
|
-
return current2;
|
|
10612
|
-
const profile = legacyBrowserProfileName(topic);
|
|
10613
|
-
const profileDir = defaultProfileDir(ownerId, profile);
|
|
10614
|
-
mkdirSync11(dirname11(profileDir), { recursive: true });
|
|
10615
|
-
if (!existsSync16(profileDir))
|
|
10616
|
-
renameSync6(legacyDir, profileDir);
|
|
10617
|
-
assignTopicBrowserProfile({ topicId: topic, actorUserId: ownerId, profile });
|
|
10618
|
-
logger.info({ ownerId, topic, profile }, "Adopted legacy topic browser profile");
|
|
10619
|
-
return profile;
|
|
10620
|
-
}
|
|
10621
10605
|
function defaultChildEnvironment(context) {
|
|
10622
10606
|
const childEnvironment = {};
|
|
10623
10607
|
for (const key of [
|
|
@@ -10648,6 +10632,10 @@ function defaultChildEnvironment(context) {
|
|
|
10648
10632
|
return childEnvironment;
|
|
10649
10633
|
}
|
|
10650
10634
|
function parseInstanceKey(instanceKey) {
|
|
10635
|
+
const shared = /^profile:(.+)$/.exec(instanceKey);
|
|
10636
|
+
if (shared && !shared[1].includes(":")) {
|
|
10637
|
+
return { ownerId: "local", profile: normalizeBrowserProfileName(shared[1]) };
|
|
10638
|
+
}
|
|
10651
10639
|
const match = /^profile:([^:]+):(.+)$/.exec(instanceKey);
|
|
10652
10640
|
if (!match)
|
|
10653
10641
|
return { ownerId: "legacy", profile: sanitizeTopicName(instanceKey) };
|
|
@@ -10790,12 +10778,8 @@ async function allocatePort() {
|
|
|
10790
10778
|
function releasePort(port) {
|
|
10791
10779
|
usedPorts.delete(port);
|
|
10792
10780
|
}
|
|
10793
|
-
function
|
|
10794
|
-
|
|
10795
|
-
return `${sanitizeTopicName(ownerId).slice(0, 24)}_${digest}`;
|
|
10796
|
-
}
|
|
10797
|
-
function defaultProfileDir(ownerId, profile) {
|
|
10798
|
-
return resolve13(BROWSER_PROFILES_DIR, "profiles", ownerDirectory(ownerId), profile);
|
|
10781
|
+
function defaultProfileDir(_ownerId, profile) {
|
|
10782
|
+
return resolve13(BROWSER_PROFILES_DIR, profile);
|
|
10799
10783
|
}
|
|
10800
10784
|
function resolveUserDataDir(instanceKey) {
|
|
10801
10785
|
return managerHost.resolveInstanceDataDir(instanceKey);
|
|
@@ -11309,7 +11293,7 @@ RULES:
|
|
|
11309
11293
|
- Keep the entire summary under 1500 words.`, CHARS_PER_TEXT_TOKEN = 3.5, CHARS_PER_CJK_TOKEN = 0.9;
|
|
11310
11294
|
|
|
11311
11295
|
// ../../packages/core/src/agents/topic-cleanup.ts
|
|
11312
|
-
import { mkdirSync as mkdirSync12, renameSync as
|
|
11296
|
+
import { mkdirSync as mkdirSync12, renameSync as renameSync6, unlinkSync as unlinkSync12, writeFileSync as writeFileSync10 } from "fs";
|
|
11313
11297
|
import { dirname as dirname12 } from "path";
|
|
11314
11298
|
function collectSessionIdsByAgent(entries, extraSessions = []) {
|
|
11315
11299
|
const out = new Map;
|
|
@@ -11380,7 +11364,7 @@ function createTopicLogMaintenance(host) {
|
|
|
11380
11364
|
writeFileSync10(tempPath, retained.length > 0 ? `${retained.map((entry) => JSON.stringify(entry)).join(`
|
|
11381
11365
|
`)}
|
|
11382
11366
|
` : "", { flag: "wx" });
|
|
11383
|
-
|
|
11367
|
+
renameSync6(tempPath, path);
|
|
11384
11368
|
} catch (e) {
|
|
11385
11369
|
try {
|
|
11386
11370
|
unlinkSync12(tempPath);
|
|
@@ -12609,7 +12593,7 @@ var init_session_inbox_cleanup = __esm(() => {
|
|
|
12609
12593
|
});
|
|
12610
12594
|
|
|
12611
12595
|
// ../../packages/core/src/query/state.ts
|
|
12612
|
-
import { mkdirSync as mkdirSync14, renameSync as
|
|
12596
|
+
import { mkdirSync as mkdirSync14, renameSync as renameSync7, unlinkSync as unlinkSync15, writeFileSync as writeFileSync12 } from "fs";
|
|
12613
12597
|
import { basename as basename4, join as join24 } from "path";
|
|
12614
12598
|
function createQueryStateStore(options) {
|
|
12615
12599
|
const sanitize = options.sanitizeTopicId ?? sanitizeId;
|
|
@@ -12631,7 +12615,7 @@ function createQueryStateStore(options) {
|
|
|
12631
12615
|
const target = queryStateFile(userId, topicId);
|
|
12632
12616
|
const tmp = `${target}.${process.pid}.${Date.now()}.tmp`;
|
|
12633
12617
|
writeFileSync12(tmp, JSON.stringify(state));
|
|
12634
|
-
|
|
12618
|
+
renameSync7(tmp, target);
|
|
12635
12619
|
},
|
|
12636
12620
|
clear(userId, topicId, legacyTopicName) {
|
|
12637
12621
|
const paths = [
|
|
@@ -13776,7 +13760,7 @@ function promptWithAttachments(prompt, attachments) {
|
|
|
13776
13760
|
return composeAttachmentPrompt(prompt, attachments.map(({ filename, path }) => attachmentPromptLine(filename, path)));
|
|
13777
13761
|
}
|
|
13778
13762
|
function ingestAttachment(args) {
|
|
13779
|
-
const destDir = join26(
|
|
13763
|
+
const destDir = join26(UPLOADS_DIR, args.topicId);
|
|
13780
13764
|
mkdirSync16(destDir, { recursive: true });
|
|
13781
13765
|
const safeName = safeAttachmentFilename(args.filename, "upload");
|
|
13782
13766
|
const destPath = join26(destDir, `${Date.now()}-${randomUUID14().slice(0, 8)}-${safeName}`);
|
|
@@ -17983,4 +17967,4 @@ export {
|
|
|
17983
17967
|
DEFAULT_SELF_CONFIG_PRODUCT
|
|
17984
17968
|
};
|
|
17985
17969
|
|
|
17986
|
-
//# debugId=
|
|
17970
|
+
//# debugId=9DA6142284CCA39464756E2164756E21
|