@xrkseek/harness 0.6.3 → 0.6.4
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/node_modules/@xrkseek/core-agent/dist/index.d.ts +2 -2
- package/node_modules/@xrkseek/core-agent/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/compaction.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/compaction.js +9 -0
- package/node_modules/@xrkseek/core-agent-loop/dist/compaction.js.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +5 -5
- package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js +53 -7
- package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts +30 -0
- package/node_modules/@xrkseek/core-session/dist/compaction.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/compaction.js +15 -0
- package/node_modules/@xrkseek/core-session/dist/compaction.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.js +1 -1
- package/node_modules/@xrkseek/core-session/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/search-text.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/search-text.js +6 -0
- package/node_modules/@xrkseek/core-session/dist/search-text.js.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.d.ts +5 -2
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.js +155 -29
- package/node_modules/@xrkseek/core-session/dist/sqlite-store.js.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/tool-exposure.d.ts +6 -2
- package/node_modules/@xrkseek/core-tools/dist/tool-exposure.d.ts.map +1 -1
- package/node_modules/@xrkseek/core-tools/dist/tool-exposure.js +10 -3
- package/node_modules/@xrkseek/core-tools/dist/tool-exposure.js.map +1 -1
- package/node_modules/@xrkseek/llm/dist/retry-policy.js +1 -1
- package/node_modules/@xrkseek/llm/dist/retry-policy.js.map +1 -1
- package/node_modules/@xrkseek/llm-registry/dist/discover.d.ts +11 -0
- package/node_modules/@xrkseek/llm-registry/dist/discover.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-registry/dist/discover.js +61 -0
- package/node_modules/@xrkseek/llm-registry/dist/discover.js.map +1 -1
- package/node_modules/@xrkseek/llm-registry/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/llm-registry/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/llm-registry/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.d.ts.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +27 -13
- package/node_modules/@xrkseek/preset-harness/dist/preset.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/protocol/dist/session-events.d.ts +3 -3
- package/node_modules/@xrkseek/server-face/dist/adapt/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-face/dist/adapt/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/adapt/index.js +1 -1
- package/node_modules/@xrkseek/server-face/dist/adapt/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/adapt/subagent-notice.d.ts +15 -1
- package/node_modules/@xrkseek/server-face/dist/adapt/subagent-notice.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/adapt/subagent-notice.js +108 -8
- package/node_modules/@xrkseek/server-face/dist/adapt/subagent-notice.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/context.d.ts +5 -0
- package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js +69 -19
- package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/subagent.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/subagent.js +7 -1
- package/node_modules/@xrkseek/server-face/dist/handlers/subagent.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts +2 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js +2 -1
- package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js +2 -1
- package/node_modules/@xrkseek/server-face/dist/model-catalog.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/peer-session-wait.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/peer-session-wait.js +16 -9
- package/node_modules/@xrkseek/server-face/dist/peer-session-wait.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/ralph-tool.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/ralph-tool.js +19 -20
- package/node_modules/@xrkseek/server-face/dist/ralph-tool.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/runtime.js +54 -10
- package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/select-session-model.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/select-session-model.js +33 -1
- package/node_modules/@xrkseek/server-face/dist/select-session-model.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-thread-message.d.ts +5 -0
- package/node_modules/@xrkseek/server-face/dist/session-thread-message.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-thread-message.js +8 -0
- package/node_modules/@xrkseek/server-face/dist/session-thread-message.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-thread-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-thread-tools.js +4 -1
- package/node_modules/@xrkseek/server-face/dist/session-thread-tools.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js +32 -5
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-registry.d.ts +7 -0
- package/node_modules/@xrkseek/server-face/dist/subagent-registry.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-registry.js +21 -5
- package/node_modules/@xrkseek/server-face/dist/subagent-registry.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +79 -149
- package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.d.ts +32 -0
- package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.d.ts.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.js +138 -0
- package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.js.map +1 -0
- package/node_modules/@xrkseek/server-face/dist/workspace-orchestrate-tools.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-orchestrate-tools.js +2 -1
- package/node_modules/@xrkseek/server-face/dist/workspace-orchestrate-tools.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/agent-cache.d.ts +26 -4
- package/node_modules/@xrkseek/server-host/dist/agent-cache.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/agent-cache.js +63 -16
- package/node_modules/@xrkseek/server-host/dist/agent-cache.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +96 -23
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/workflow-engine-mount.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/workflow-engine-mount.js +16 -21
- package/node_modules/@xrkseek/server-host/dist/workflow-engine-mount.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-llm-host-sync.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-llm-host-sync.js +49 -11
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/community-llm-host-sync.js.map +1 -1
- package/node_modules/@xrkseek/session-projection/dist/index.d.ts +7 -0
- package/node_modules/@xrkseek/session-projection/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/session-projection/dist/index.js +16 -0
- package/node_modules/@xrkseek/session-projection/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@ import { createPluginLoader, composeHostPolicyEngine, wireCompositionChannels, w
|
|
|
21
21
|
import { existsSync } from "node:fs";
|
|
22
22
|
import { access } from "node:fs/promises";
|
|
23
23
|
import path from "node:path";
|
|
24
|
-
import { createHostAgentCache } from "./agent-cache.js";
|
|
24
|
+
import { createHostAgentCache, deferBusyAgentInvalidate } from "./agent-cache.js";
|
|
25
25
|
import { createHostCron } from "@xrkseek/server-cron";
|
|
26
26
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
27
27
|
import { wireDrainStatus, publishDrainIdle } from "./drain-status.js";
|
|
@@ -48,7 +48,7 @@ import { resolveExecEnvironment, } from "@xrkseek/exec-environment";
|
|
|
48
48
|
import { createSshExecutionWorldReady, resolveSshConfig, } from "@xrkseek/exec-ssh";
|
|
49
49
|
/** True while an unattended cron agent turn is running — skip cron tools to avoid recursion. */
|
|
50
50
|
const cronAgentDepth = new AsyncLocalStorage();
|
|
51
|
-
export { createHostAgentCache, HOST_PLUGINS_KEY } from "./agent-cache.js";
|
|
51
|
+
export { createHostAgentCache, deferBusyAgentInvalidate, HOST_PLUGINS_KEY } from "./agent-cache.js";
|
|
52
52
|
export { createStandingToolRegistry } from "./standing-tools.js";
|
|
53
53
|
export { a2aInboundSessionId, createA2aInboundPublicHandler, resolveA2aInboundEnabled, } from "./a2a-inbound-public.js";
|
|
54
54
|
import { createImFaceAdmitHook } from "./im-face-admit.js";
|
|
@@ -467,6 +467,11 @@ export function createHostManager() {
|
|
|
467
467
|
pendingAgentInvalidate.add(sessionId);
|
|
468
468
|
return true;
|
|
469
469
|
},
|
|
470
|
+
// Idle parent of a busy nested worker: hold until the child drains,
|
|
471
|
+
// else parent.dispose cascades and paints the worker 「已停止」.
|
|
472
|
+
onHold: (sessionId) => {
|
|
473
|
+
pendingAgentInvalidate.add(sessionId);
|
|
474
|
+
},
|
|
470
475
|
});
|
|
471
476
|
await mcpDeferred.flush();
|
|
472
477
|
};
|
|
@@ -801,15 +806,29 @@ export function createHostManager() {
|
|
|
801
806
|
}
|
|
802
807
|
return pathAccessModeFromSandbox(effectiveSandboxMode(readSessionEvents(store, sessionId)));
|
|
803
808
|
},
|
|
804
|
-
readSessionPathAllowlist: () =>
|
|
809
|
+
readSessionPathAllowlist: () => {
|
|
810
|
+
const rt = faceBox.runtime;
|
|
811
|
+
if (!rt)
|
|
812
|
+
return [];
|
|
813
|
+
// Resident eviction forgets the in-memory map; cron/IM/drain
|
|
814
|
+
// turns may never call session.history — refill from the log.
|
|
815
|
+
rt.pathAllowlist.hydrate(rt.store, sessionId);
|
|
816
|
+
return rt.pathAllowlist.list(sessionId);
|
|
817
|
+
},
|
|
805
818
|
clearSessionPathOnce: () => {
|
|
806
819
|
faceBox.runtime?.pathAllowlist.clearOnce(sessionId);
|
|
807
820
|
},
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
821
|
+
// Always register tool_search — even while Face is still booting.
|
|
822
|
+
// Omitting toolSearchState used to dump every deferred MCP schema
|
|
823
|
+
// onto the wire (~100k+ tokens). Live getters attach to Face
|
|
824
|
+
// disclosure once runtime is assigned.
|
|
825
|
+
toolSearchState: {
|
|
826
|
+
listExpanded: () => faceBox.runtime?.toolDisclosure.listExpanded(sessionId) ??
|
|
827
|
+
new Set(),
|
|
828
|
+
expand: (names) => {
|
|
829
|
+
faceBox.runtime?.toolDisclosure.expand(sessionId, names);
|
|
830
|
+
},
|
|
831
|
+
},
|
|
813
832
|
routeAllowsImage: () => faceForModality.current
|
|
814
833
|
? liveRouteAllowsImageInput(faceForModality.current, sessionId)
|
|
815
834
|
: false,
|
|
@@ -1252,15 +1271,16 @@ export function createHostManager() {
|
|
|
1252
1271
|
if (!running &&
|
|
1253
1272
|
"flush" in store &&
|
|
1254
1273
|
typeof store.flush === "function") {
|
|
1255
|
-
store.flush();
|
|
1256
|
-
}
|
|
1257
|
-
if (!running && pendingAgentInvalidate.has(sid)) {
|
|
1258
|
-
pendingAgentInvalidate.delete(sid);
|
|
1259
|
-
void agentCache.invalidate(sid).then(() => mcpDeferred.flush());
|
|
1274
|
+
store.flush(sid);
|
|
1260
1275
|
}
|
|
1261
|
-
|
|
1262
|
-
//
|
|
1263
|
-
//
|
|
1276
|
+
if (!running) {
|
|
1277
|
+
// Invalidate this session if it was deferred mid-turn, then flush
|
|
1278
|
+
// other pending ids that are idle (incl. parents held only to
|
|
1279
|
+
// protect a nested busy child — see agent-cache onHold).
|
|
1280
|
+
if (pendingAgentInvalidate.has(sid)) {
|
|
1281
|
+
pendingAgentInvalidate.delete(sid);
|
|
1282
|
+
void agentCache.invalidate(sid).then(() => mcpDeferred.flush());
|
|
1283
|
+
}
|
|
1264
1284
|
for (const pending of [...pendingAgentInvalidate]) {
|
|
1265
1285
|
if (pending === sid)
|
|
1266
1286
|
continue;
|
|
@@ -1268,10 +1288,19 @@ export function createHostManager() {
|
|
|
1268
1288
|
agentCache.isBusy(pending)) {
|
|
1269
1289
|
continue;
|
|
1270
1290
|
}
|
|
1291
|
+
// Idle parent held only for a nested worker: wait until that
|
|
1292
|
+
// child is no longer protected, else parent.dispose cascades.
|
|
1293
|
+
if (agentCache.hasProtectedNestedChild(pending, (id) => pendingAgentInvalidate.has(id) ||
|
|
1294
|
+
drainActiveBox.isActive(id) ||
|
|
1295
|
+
agentCache.isBusy(id))) {
|
|
1296
|
+
continue;
|
|
1297
|
+
}
|
|
1271
1298
|
pendingAgentInvalidate.delete(pending);
|
|
1272
1299
|
void agentCache.invalidate(pending);
|
|
1273
1300
|
}
|
|
1274
|
-
|
|
1301
|
+
if (!pendingAgentInvalidate.has(sid)) {
|
|
1302
|
+
void mcpDeferred.flush();
|
|
1303
|
+
}
|
|
1275
1304
|
}
|
|
1276
1305
|
hostStatusBox.publish?.(sid, running);
|
|
1277
1306
|
});
|
|
@@ -1594,7 +1623,15 @@ export function createHostManager() {
|
|
|
1594
1623
|
...(config.runtime.policyFile
|
|
1595
1624
|
? { settingsDocumentPath: path.resolve(config.runtime.policyFile) }
|
|
1596
1625
|
: {}),
|
|
1597
|
-
invalidateAgent: (sessionId) =>
|
|
1626
|
+
invalidateAgent: (sessionId) => deferBusyAgentInvalidate({
|
|
1627
|
+
sessionId,
|
|
1628
|
+
drainActive: drainActiveBox.isActive(sessionId),
|
|
1629
|
+
busy: agentCache.isBusy(sessionId),
|
|
1630
|
+
defer: (id) => {
|
|
1631
|
+
pendingAgentInvalidate.add(id);
|
|
1632
|
+
},
|
|
1633
|
+
invalidate: (id) => agentCache.invalidate(id),
|
|
1634
|
+
}),
|
|
1598
1635
|
onSessionFinalize: (sessionId) => {
|
|
1599
1636
|
consolidateCuratedMemoryForSession(sessionId);
|
|
1600
1637
|
sharedBrowser?.drop(sessionId);
|
|
@@ -1720,6 +1757,22 @@ export function createHostManager() {
|
|
|
1720
1757
|
compactionStrategyRaw === "off"
|
|
1721
1758
|
? compactionStrategyRaw
|
|
1722
1759
|
: undefined;
|
|
1760
|
+
const softBudgetTriggerPercent = typeof loop.softBudgetTriggerPercent === "number" &&
|
|
1761
|
+
Number.isFinite(loop.softBudgetTriggerPercent) &&
|
|
1762
|
+
loop.softBudgetTriggerPercent >= 50 &&
|
|
1763
|
+
loop.softBudgetTriggerPercent <= 100
|
|
1764
|
+
? Math.floor(loop.softBudgetTriggerPercent)
|
|
1765
|
+
: undefined;
|
|
1766
|
+
const compactRecentMaxTokens = typeof loop.compactRecentMaxTokens === "number" &&
|
|
1767
|
+
Number.isFinite(loop.compactRecentMaxTokens) &&
|
|
1768
|
+
loop.compactRecentMaxTokens >= 2_000
|
|
1769
|
+
? Math.floor(loop.compactRecentMaxTokens)
|
|
1770
|
+
: undefined;
|
|
1771
|
+
const softBudgetPeelAttempts = typeof loop.softBudgetPeelAttempts === "number" &&
|
|
1772
|
+
Number.isFinite(loop.softBudgetPeelAttempts) &&
|
|
1773
|
+
loop.softBudgetPeelAttempts >= 0
|
|
1774
|
+
? Math.floor(loop.softBudgetPeelAttempts)
|
|
1775
|
+
: undefined;
|
|
1723
1776
|
const toolResultMaxInlineBytes = typeof loop.toolResultMaxInlineBytes === "number" &&
|
|
1724
1777
|
Number.isFinite(loop.toolResultMaxInlineBytes) &&
|
|
1725
1778
|
loop.toolResultMaxInlineBytes >= 0
|
|
@@ -2035,8 +2088,28 @@ export function createHostManager() {
|
|
|
2035
2088
|
...(toolOrder !== undefined ? { toolOrder } : {}),
|
|
2036
2089
|
...(toolSettle !== undefined ? { toolSettle } : {}),
|
|
2037
2090
|
...(llmRetryMaxRetries !== undefined ? { llmRetryMaxRetries } : {}),
|
|
2038
|
-
...(compactionStrategy !== undefined
|
|
2039
|
-
|
|
2091
|
+
...(compactionStrategy !== undefined ||
|
|
2092
|
+
softBudgetTriggerPercent !== undefined ||
|
|
2093
|
+
compactRecentMaxTokens !== undefined ||
|
|
2094
|
+
softBudgetPeelAttempts !== undefined
|
|
2095
|
+
? {
|
|
2096
|
+
compaction: {
|
|
2097
|
+
...(compactionStrategy !== undefined
|
|
2098
|
+
? { strategy: compactionStrategy }
|
|
2099
|
+
: {}),
|
|
2100
|
+
...(softBudgetTriggerPercent !== undefined
|
|
2101
|
+
? {
|
|
2102
|
+
softBudgetTriggerRatio: softBudgetTriggerPercent / 100,
|
|
2103
|
+
}
|
|
2104
|
+
: {}),
|
|
2105
|
+
...(compactRecentMaxTokens !== undefined
|
|
2106
|
+
? { compactRecentMaxTokens }
|
|
2107
|
+
: {}),
|
|
2108
|
+
...(softBudgetPeelAttempts !== undefined
|
|
2109
|
+
? { softBudgetPeelAttempts }
|
|
2110
|
+
: {}),
|
|
2111
|
+
},
|
|
2112
|
+
}
|
|
2040
2113
|
: {}),
|
|
2041
2114
|
...(toolResultMaxInlineBytes !== undefined
|
|
2042
2115
|
? { toolResultMaxInlineBytes }
|
|
@@ -2123,9 +2196,9 @@ export function createHostManager() {
|
|
|
2123
2196
|
}
|
|
2124
2197
|
}
|
|
2125
2198
|
});
|
|
2126
|
-
//
|
|
2127
|
-
//
|
|
2128
|
-
//
|
|
2199
|
+
// Summoning session id is for identity / workspace inject only.
|
|
2200
|
+
// Agent scopes stay siblings under the host root so one session's
|
|
2201
|
+
// dispose cannot abort another.
|
|
2129
2202
|
lineage.parentOf = (sessionId) => {
|
|
2130
2203
|
const link = faceRuntime.subagents.getByChild(sessionId);
|
|
2131
2204
|
if (!link || link.mode === "fork")
|