negotium 0.22.5 → 0.22.7
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/agent-helpers.js +56 -18
- package/dist/agent-helpers.js.map +7 -7
- package/dist/browser-runtime.js +38 -11
- package/dist/browser-runtime.js.map +4 -4
- package/dist/{chunk-7rpbcn1j.js → chunk-1gznvrth.js} +3 -3
- package/dist/{chunk-7rpbcn1j.js.map → chunk-1gznvrth.js.map} +2 -2
- package/dist/{chunk-vh8px000.js → chunk-pr8p6pap.js} +7 -2
- package/dist/{chunk-vh8px000.js.map → chunk-pr8p6pap.js.map} +3 -3
- package/dist/{chunk-a3me2mje.js → chunk-z4r7tt2p.js} +1 -1
- package/dist/hosted-agent.js +8 -3
- package/dist/hosted-agent.js.map +4 -4
- package/dist/main.js +86 -19
- package/dist/main.js.map +9 -9
- package/dist/mcp-factories.js +56 -18
- package/dist/mcp-factories.js.map +7 -7
- package/dist/registry.js +3 -3
- package/dist/rollout.js +2 -2
- package/dist/runtime/src/platform/playwright/manager.ts +77 -15
- package/dist/runtime/src/storage/api-topics.ts +6 -0
- package/dist/runtime/src/storage/browser-profiles.ts +18 -0
- package/dist/runtime/src/topics/lifecycle.ts +2 -5
- package/dist/runtime/src/topics/update.ts +37 -0
- package/dist/runtime/src/types/api.ts +6 -0
- package/dist/runtime/src/version.ts +1 -1
- package/dist/storage.js +7 -2
- package/dist/storage.js.map +3 -3
- package/dist/types/packages/core/src/platform/playwright/manager.d.ts +8 -0
- package/dist/types/packages/core/src/storage/api-topics.d.ts +1 -0
- package/dist/types/packages/core/src/storage/browser-profiles.d.ts +4 -0
- package/dist/types/packages/core/src/types/api.d.ts +6 -0
- package/dist/types/packages/core/src/version.d.ts +1 -1
- package/package.json +1 -1
- /package/dist/{chunk-a3me2mje.js.map → chunk-z4r7tt2p.js.map} +0 -0
package/dist/agent-helpers.js
CHANGED
|
@@ -2483,6 +2483,7 @@ function initializeApiTopicsSchema() {
|
|
|
2483
2483
|
surface_scope TEXT,
|
|
2484
2484
|
browser_profile TEXT NOT NULL DEFAULT 'default',
|
|
2485
2485
|
browser_profile_owner TEXT,
|
|
2486
|
+
browser_connect_port INTEGER,
|
|
2486
2487
|
session_id TEXT,
|
|
2487
2488
|
CHECK (
|
|
2488
2489
|
(kind = 'channel' AND response_policy = 'off' AND agent IS NULL) OR
|
|
@@ -2600,6 +2601,9 @@ function initializeApiTopicsSchema() {
|
|
|
2600
2601
|
if (!tableColumns("api_topics").has("browser_profile_owner")) {
|
|
2601
2602
|
db.exec("ALTER TABLE api_topics ADD COLUMN browser_profile_owner TEXT");
|
|
2602
2603
|
}
|
|
2604
|
+
if (!tableColumns("api_topics").has("browser_connect_port")) {
|
|
2605
|
+
db.exec("ALTER TABLE api_topics ADD COLUMN browser_connect_port INTEGER");
|
|
2606
|
+
}
|
|
2603
2607
|
if (!tableColumns("api_topics").has("subagent_report_mode")) {
|
|
2604
2608
|
db.exec("ALTER TABLE api_topics ADD COLUMN subagent_report_mode TEXT NOT NULL DEFAULT 'auto'");
|
|
2605
2609
|
}
|
|
@@ -2837,7 +2841,8 @@ function rowToDto2(r, participants = getTopicParticipants(r.id), tellTargets) {
|
|
|
2837
2841
|
} : {},
|
|
2838
2842
|
visibility: normalizeTopicVisibility(r.visibility),
|
|
2839
2843
|
surface: normalizeTopicSurface(r.surface),
|
|
2840
|
-
surfaceScope: normalizeSurfaceScope(r.surface_scope)
|
|
2844
|
+
surfaceScope: normalizeSurfaceScope(r.surface_scope),
|
|
2845
|
+
...r.browser_connect_port != null ? { browserConnectPort: r.browser_connect_port } : {}
|
|
2841
2846
|
};
|
|
2842
2847
|
}
|
|
2843
2848
|
function normalizeTopicVisibility(value) {
|
|
@@ -5236,7 +5241,7 @@ var init_codex = __esm(async () => {
|
|
|
5236
5241
|
});
|
|
5237
5242
|
|
|
5238
5243
|
// ../../packages/core/src/version.ts
|
|
5239
|
-
var NEGOTIUM_VERSION = "0.22.
|
|
5244
|
+
var NEGOTIUM_VERSION = "0.22.7";
|
|
5240
5245
|
|
|
5241
5246
|
// ../../packages/core/src/agents/codex-native-multi-agent.ts
|
|
5242
5247
|
import { spawn as spawn2 } from "child_process";
|
|
@@ -13007,6 +13012,16 @@ function getTopicBrowserProfile(topicId) {
|
|
|
13007
13012
|
const value = db.query("SELECT browser_profile FROM api_topics WHERE id = ?").get(topicId)?.browser_profile;
|
|
13008
13013
|
return value || DEFAULT_BROWSER_PROFILE;
|
|
13009
13014
|
}
|
|
13015
|
+
function isBrowserConnectPort(value) {
|
|
13016
|
+
return Number.isInteger(value) && value >= 1024 && value <= 65535;
|
|
13017
|
+
}
|
|
13018
|
+
function getTopicBrowserConnectPort(topicId) {
|
|
13019
|
+
const value = db.query("SELECT browser_connect_port FROM api_topics WHERE id = ?").get(topicId)?.browser_connect_port;
|
|
13020
|
+
return isBrowserConnectPort(value) ? value : undefined;
|
|
13021
|
+
}
|
|
13022
|
+
function setTopicBrowserConnectPort(topicId, port) {
|
|
13023
|
+
db.query("UPDATE api_topics SET browser_connect_port = ? WHERE id = ?").run(port, topicId);
|
|
13024
|
+
}
|
|
13010
13025
|
function hasBrowserProfileTopic(topicId) {
|
|
13011
13026
|
return Boolean(db.query("SELECT id FROM api_topics WHERE id = ?").get(topicId));
|
|
13012
13027
|
}
|
|
@@ -13083,6 +13098,9 @@ function resolvePlaywrightTopicBinding(userId, topic) {
|
|
|
13083
13098
|
function defaultTopicBinding(userId, topic) {
|
|
13084
13099
|
if (!topic)
|
|
13085
13100
|
return managerHost.resolveNamedBinding(userId, "default");
|
|
13101
|
+
const connectPort = getTopicBrowserConnectPort(topic);
|
|
13102
|
+
if (connectPort !== undefined)
|
|
13103
|
+
return connectBinding(connectPort);
|
|
13086
13104
|
const ownerId = getBrowserProfileOwner(topic, userId);
|
|
13087
13105
|
const profile = getTopicBrowserProfile(topic);
|
|
13088
13106
|
return managerHost.resolveNamedBinding(ownerId, profile);
|
|
@@ -13096,6 +13114,26 @@ function validateProfileBinding(binding) {
|
|
|
13096
13114
|
}
|
|
13097
13115
|
return Object.freeze({ ...binding });
|
|
13098
13116
|
}
|
|
13117
|
+
function connectBinding(port) {
|
|
13118
|
+
return { instanceKey: `connect:${port}`, ownerId: "local", profile: `connect-${port}` };
|
|
13119
|
+
}
|
|
13120
|
+
function parseConnectInstanceKey(instanceKey) {
|
|
13121
|
+
const match = /^connect:(\d+)$/.exec(instanceKey);
|
|
13122
|
+
return match ? Number(match[1]) : undefined;
|
|
13123
|
+
}
|
|
13124
|
+
function browserRsArgs(instanceKey, port, userDataDir) {
|
|
13125
|
+
const connectPort = parseConnectInstanceKey(instanceKey);
|
|
13126
|
+
return [
|
|
13127
|
+
"--port",
|
|
13128
|
+
String(port),
|
|
13129
|
+
"--host",
|
|
13130
|
+
"127.0.0.1",
|
|
13131
|
+
"--headed",
|
|
13132
|
+
"--user-data-dir",
|
|
13133
|
+
userDataDir,
|
|
13134
|
+
...connectPort === undefined ? [] : ["--connect", String(connectPort)]
|
|
13135
|
+
];
|
|
13136
|
+
}
|
|
13099
13137
|
function defaultNamedBinding(_ownerId, rawProfile) {
|
|
13100
13138
|
const profile = normalizeBrowserProfileName(rawProfile);
|
|
13101
13139
|
const instanceKey = `profile:${profile}`;
|
|
@@ -13115,6 +13153,9 @@ function defaultChildEnvironment(context) {
|
|
|
13115
13153
|
return childEnvironment;
|
|
13116
13154
|
}
|
|
13117
13155
|
function parseInstanceKey(instanceKey) {
|
|
13156
|
+
const connectPort = parseConnectInstanceKey(instanceKey);
|
|
13157
|
+
if (connectPort !== undefined)
|
|
13158
|
+
return { ownerId: "local", profile: `_connect-${connectPort}` };
|
|
13118
13159
|
const shared = /^profile:(.+)$/.exec(instanceKey);
|
|
13119
13160
|
if (shared && !shared[1].includes(":")) {
|
|
13120
13161
|
return { ownerId: "local", profile: normalizeBrowserProfileName(shared[1]) };
|
|
@@ -13342,15 +13383,7 @@ async function spawnPlaywright(instanceKey, ownerId, reservedPort, browserBin =
|
|
|
13342
13383
|
const userDataDir = resolveUserDataDir(instanceKey);
|
|
13343
13384
|
const port = reservedPort ?? await allocatePort();
|
|
13344
13385
|
mkdirSync11(userDataDir, { recursive: true });
|
|
13345
|
-
const mcpArgs =
|
|
13346
|
-
"--port",
|
|
13347
|
-
String(port),
|
|
13348
|
-
"--host",
|
|
13349
|
-
"127.0.0.1",
|
|
13350
|
-
"--headed",
|
|
13351
|
-
"--user-data-dir",
|
|
13352
|
-
userDataDir
|
|
13353
|
-
];
|
|
13386
|
+
const mcpArgs = browserRsArgs(instanceKey, port, userDataDir);
|
|
13354
13387
|
const proxy = managerHost.resolveProxy();
|
|
13355
13388
|
if (proxy) {
|
|
13356
13389
|
releasePort(port);
|
|
@@ -13538,8 +13571,12 @@ async function waitForPortRelease(port, timeoutMs = 3000) {
|
|
|
13538
13571
|
await delay(200);
|
|
13539
13572
|
}
|
|
13540
13573
|
}
|
|
13541
|
-
|
|
13542
|
-
const
|
|
13574
|
+
function closeTopicBrowserTabs(userId, topicId) {
|
|
13575
|
+
const connectPort = getTopicBrowserConnectPort(topicId);
|
|
13576
|
+
const binding = connectPort === undefined ? resolvePlaywrightProfileBinding(getBrowserProfileOwner(topicId, userId), getTopicBrowserProfile(topicId)) : connectBinding(connectPort);
|
|
13577
|
+
return closeBindingOwnerTabs(binding, `topic:${topicId}`);
|
|
13578
|
+
}
|
|
13579
|
+
async function closeBindingOwnerTabs(binding, owner) {
|
|
13543
13580
|
const instanceKey = binding.instanceKey;
|
|
13544
13581
|
const inProgress = spawning.get(instanceKey);
|
|
13545
13582
|
if (inProgress)
|
|
@@ -13613,6 +13650,7 @@ async function cloneProfileForChild(opts) {
|
|
|
13613
13650
|
if (srcOwner === dstOwner && hasBrowserProfileTopic(opts.dstTopic)) {
|
|
13614
13651
|
const profile = getTopicBrowserProfile(opts.srcTopic);
|
|
13615
13652
|
assignTopicBrowserProfile({ topicId: opts.dstTopic, actorUserId: dstOwner, profile });
|
|
13653
|
+
setTopicBrowserConnectPort(opts.dstTopic, getTopicBrowserConnectPort(opts.srcTopic) ?? null);
|
|
13616
13654
|
const binding = resolvePlaywrightProfileBinding(srcOwner, profile);
|
|
13617
13655
|
const sharedDir = resolveUserDataDir(binding.instanceKey);
|
|
13618
13656
|
return {
|
|
@@ -13629,6 +13667,9 @@ async function cloneProfileForChild(opts) {
|
|
|
13629
13667
|
if (srcDir === dstDir) {
|
|
13630
13668
|
return { copied: false, srcDir, dstDir, reason: "same-dir" };
|
|
13631
13669
|
}
|
|
13670
|
+
if (parseConnectInstanceKey(srcKey) !== undefined || parseConnectInstanceKey(dstKey) !== undefined) {
|
|
13671
|
+
return { copied: false, srcDir, dstDir, reason: "connect-binding" };
|
|
13672
|
+
}
|
|
13632
13673
|
return withPlaywrightInstanceMaintenance([srcKey, dstKey], async () => {
|
|
13633
13674
|
const parentWasLive = instances.has(srcKey);
|
|
13634
13675
|
if (parentWasLive) {
|
|
@@ -17843,10 +17884,8 @@ async function deleteTopicCascadeImpl(topic, userId, options, deletingAncestorId
|
|
|
17843
17884
|
await deleteTopicCascadeImpl(child, userId, childOptions, deletingTopicIds);
|
|
17844
17885
|
}
|
|
17845
17886
|
killBgBash(userId, topicId);
|
|
17846
|
-
const browserProfileOwner = getBrowserProfileOwner(topicId, userId);
|
|
17847
|
-
const browserProfile = getTopicBrowserProfile(topicId);
|
|
17848
17887
|
try {
|
|
17849
|
-
await
|
|
17888
|
+
await closeTopicBrowserTabs(userId, topicId);
|
|
17850
17889
|
} catch (err2) {
|
|
17851
17890
|
logger.warn({ err: err2, topicId }, "deleteTopicCascade: browser owner cleanup failed");
|
|
17852
17891
|
}
|
|
@@ -17928,7 +17967,6 @@ var init_lifecycle = __esm(async () => {
|
|
|
17928
17967
|
init_api_topic_brief(),
|
|
17929
17968
|
init_api_topic_config(),
|
|
17930
17969
|
init_api_topics(),
|
|
17931
|
-
init_browser_profiles(),
|
|
17932
17970
|
init_forum_db(),
|
|
17933
17971
|
init_runtime_leases(),
|
|
17934
17972
|
init_runtime_topic_state(),
|
|
@@ -23422,4 +23460,4 @@ export {
|
|
|
23422
23460
|
DEFAULT_SELF_CONFIG_PRODUCT
|
|
23423
23461
|
};
|
|
23424
23462
|
|
|
23425
|
-
//# debugId=
|
|
23463
|
+
//# debugId=E43DD0B32649A10364756E2164756E21
|