@xrkseek/harness 0.4.6 → 0.4.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/node_modules/@xrkseek/a2a/README.md +3 -3
- package/node_modules/@xrkseek/a2a/dist/inbound-frame.d.ts +13 -0
- package/node_modules/@xrkseek/a2a/dist/inbound-frame.d.ts.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/inbound-frame.js +32 -0
- package/node_modules/@xrkseek/a2a/dist/inbound-frame.js.map +1 -0
- package/node_modules/@xrkseek/a2a/dist/inbound.d.ts +2 -2
- package/node_modules/@xrkseek/a2a/dist/index.d.ts +1 -0
- package/node_modules/@xrkseek/a2a/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/a2a/dist/index.js +1 -0
- package/node_modules/@xrkseek/a2a/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/http.d.ts +4 -4
- package/node_modules/@xrkseek/exec-memory/dist/http.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/http.js +9 -10
- package/node_modules/@xrkseek/exec-memory/dist/http.js.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/resolve.d.ts +2 -10
- package/node_modules/@xrkseek/exec-memory/dist/resolve.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-memory/dist/resolve.js +2 -7
- package/node_modules/@xrkseek/exec-memory/dist/resolve.js.map +1 -1
- package/node_modules/@xrkseek/exec-ssh/README.md +3 -0
- package/node_modules/@xrkseek/exec-ssh/dist/index.d.ts +2 -1
- package/node_modules/@xrkseek/exec-ssh/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-ssh/dist/index.js +2 -1
- package/node_modules/@xrkseek/exec-ssh/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/exec-ssh/dist/probe.d.ts +26 -0
- package/node_modules/@xrkseek/exec-ssh/dist/probe.d.ts.map +1 -0
- package/node_modules/@xrkseek/exec-ssh/dist/probe.js +50 -0
- package/node_modules/@xrkseek/exec-ssh/dist/probe.js.map +1 -0
- package/node_modules/@xrkseek/exec-ssh/dist/providers.d.ts +8 -0
- package/node_modules/@xrkseek/exec-ssh/dist/providers.d.ts.map +1 -1
- package/node_modules/@xrkseek/exec-ssh/dist/providers.js +25 -0
- package/node_modules/@xrkseek/exec-ssh/dist/providers.js.map +1 -1
- package/node_modules/@xrkseek/im-gateway-contract/dist/index.d.ts +7 -0
- package/node_modules/@xrkseek/im-gateway-contract/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/im-gateway-contract/dist/index.js +29 -0
- package/node_modules/@xrkseek/im-gateway-contract/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/preset-harness/dist/preset.js +2 -2
- 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-server/dist/tsconfig.tsbuildinfo +1 -1
- package/node_modules/@xrkseek/server-face/dist/cost-meter-store.d.ts +2 -0
- package/node_modules/@xrkseek/server-face/dist/cost-meter-store.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/cost-meter-store.js +4 -0
- package/node_modules/@xrkseek/server-face/dist/cost-meter-store.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.d.ts +2 -2
- package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/index.js +2 -2
- package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/process-channels.d.ts +10 -2
- package/node_modules/@xrkseek/server-face/dist/process-channels.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/process-channels.js +14 -9
- package/node_modules/@xrkseek/server-face/dist/process-channels.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-export.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-export.js +12 -0
- package/node_modules/@xrkseek/server-face/dist/session-export.js.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts +30 -2
- package/node_modules/@xrkseek/server-face/dist/session-status.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-face/dist/session-status.js +82 -24
- package/node_modules/@xrkseek/server-face/dist/session-status.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 +20 -0
- package/node_modules/@xrkseek/server-face/dist/settings-schemas.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.d.ts +38 -1
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.js +121 -9
- package/node_modules/@xrkseek/server-host/dist/a2a-inbound-public.js.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.d.ts +5 -2
- package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-host/dist/index.js +44 -5
- package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.d.ts +21 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.js +44 -0
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/auto-review-classifier.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-gateway-sidecar.d.ts +2 -3
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-gateway-sidecar.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-gateway-sidecar.js +2 -28
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/im-gateway-sidecar.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts +2 -2
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js +1 -1
- package/node_modules/@xrkseek/server-http/dist/dsh-compat/index.js.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.d.ts.map +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js +1 -1
- package/node_modules/@xrkseek/server-http/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,22 +1,134 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readSessionEvents } from "@xrkseek/core-session";
|
|
2
|
+
import { createA2aInboundHandler, wrapA2aInboundText, } from "@xrkseek/a2a";
|
|
3
|
+
import { dispatchFaceMethod, lastAssistantBodyText, } from "@xrkseek/server-face";
|
|
2
4
|
function envOn(raw) {
|
|
3
5
|
const v = raw?.trim().toLowerCase();
|
|
4
6
|
return v === "1" || v === "true" || v === "yes" || v === "on";
|
|
5
7
|
}
|
|
8
|
+
/**
|
|
9
|
+
* Resolve whether A2A inbound routes are live.
|
|
10
|
+
* Non-empty `XRK_A2A_INBOUND` wins (CI bypass); else product `enabled`.
|
|
11
|
+
*/
|
|
12
|
+
export function resolveA2aInboundEnabled(env = process.env, product) {
|
|
13
|
+
const raw = String(env.XRK_A2A_INBOUND ?? "").trim();
|
|
14
|
+
if (raw !== "")
|
|
15
|
+
return envOn(raw);
|
|
16
|
+
return product?.enabled === true;
|
|
17
|
+
}
|
|
18
|
+
function inboundTimeoutMs(env, product) {
|
|
19
|
+
const fromProduct = product?.timeoutMs;
|
|
20
|
+
if (typeof fromProduct === "number" &&
|
|
21
|
+
Number.isFinite(fromProduct) &&
|
|
22
|
+
fromProduct >= 1_000) {
|
|
23
|
+
return Math.min(fromProduct, 600_000);
|
|
24
|
+
}
|
|
25
|
+
const n = Number(env.XRK_A2A_INBOUND_TIMEOUT_MS ?? "");
|
|
26
|
+
if (Number.isFinite(n) && n >= 1_000)
|
|
27
|
+
return Math.min(n, 600_000);
|
|
28
|
+
return 120_000;
|
|
29
|
+
}
|
|
30
|
+
/** Stable Face session id for an A2A context (Hermes `a2a-{slug}` style). */
|
|
31
|
+
export function a2aInboundSessionId(contextId, env = process.env, product) {
|
|
32
|
+
const pinned = env.XRK_A2A_INBOUND_SESSION?.trim() || product?.sessionId?.trim();
|
|
33
|
+
if (pinned)
|
|
34
|
+
return pinned;
|
|
35
|
+
const slug = contextId
|
|
36
|
+
.trim()
|
|
37
|
+
.replace(/[^a-zA-Z0-9._-]+/g, "-")
|
|
38
|
+
.replace(/^-+|-+$/g, "")
|
|
39
|
+
.slice(0, 64) || "default";
|
|
40
|
+
return `a2a-${slug}`;
|
|
41
|
+
}
|
|
42
|
+
function sleep(ms) {
|
|
43
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
44
|
+
}
|
|
45
|
+
async function ensureA2aSession(face, sessionId, peer) {
|
|
46
|
+
const created = await dispatchFaceMethod(face, "session.create", `a2a-c-${Date.now().toString(36)}`, {
|
|
47
|
+
sessionId,
|
|
48
|
+
label: `a2a:${peer}`,
|
|
49
|
+
});
|
|
50
|
+
if (created.result.ok)
|
|
51
|
+
return;
|
|
52
|
+
if (face.store.has(sessionId))
|
|
53
|
+
return;
|
|
54
|
+
throw new Error(created.result.ok === false
|
|
55
|
+
? created.result.error.message
|
|
56
|
+
: `session.create failed for ${sessionId}`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Admit framed A2A text into Face and return the next assistant body
|
|
60
|
+
* (or a timeout / empty-turn note).
|
|
61
|
+
*/
|
|
62
|
+
export async function admitA2aInboundToFace(face, input) {
|
|
63
|
+
const env = input.env ?? process.env;
|
|
64
|
+
const product = input.product;
|
|
65
|
+
const sessionId = a2aInboundSessionId(input.contextId, env, product);
|
|
66
|
+
const framed = wrapA2aInboundText(input.peer, input.text);
|
|
67
|
+
await ensureA2aSession(face, sessionId, input.peer);
|
|
68
|
+
const beforeLen = readSessionEvents(face.store, sessionId).length;
|
|
69
|
+
const prompted = await dispatchFaceMethod(face, "session.prompt", `a2a-p-${input.taskId}`, {
|
|
70
|
+
sessionId,
|
|
71
|
+
mode: "queue",
|
|
72
|
+
content: [{ type: "text", text: framed }],
|
|
73
|
+
});
|
|
74
|
+
if (!prompted.result.ok) {
|
|
75
|
+
throw new Error(prompted.result.ok === false
|
|
76
|
+
? prompted.result.error.message
|
|
77
|
+
: `session.prompt failed for ${sessionId}`);
|
|
78
|
+
}
|
|
79
|
+
const timeoutMs = inboundTimeoutMs(env, product);
|
|
80
|
+
const deadline = Date.now() + timeoutMs;
|
|
81
|
+
while (Date.now() < deadline) {
|
|
82
|
+
const reply = lastAssistantBodyText(readSessionEvents(face.store, sessionId).slice(beforeLen));
|
|
83
|
+
if (reply)
|
|
84
|
+
return reply;
|
|
85
|
+
await sleep(150);
|
|
86
|
+
}
|
|
87
|
+
const late = lastAssistantBodyText(readSessionEvents(face.store, sessionId).slice(beforeLen));
|
|
88
|
+
if (late)
|
|
89
|
+
return late;
|
|
90
|
+
return (`[A2A] Face session ${sessionId} had no assistant reply within ` +
|
|
91
|
+
`${timeoutMs}ms (task ${input.taskId}; peer ${input.peer})`);
|
|
92
|
+
}
|
|
6
93
|
export function createA2aInboundPublicHandler(options) {
|
|
7
94
|
const env = options?.env ?? process.env;
|
|
8
|
-
if (!envOn(env.XRK_A2A_INBOUND)) {
|
|
9
|
-
return async () => false;
|
|
10
|
-
}
|
|
11
95
|
const host = (options?.host ?? env.XRK_A2A_PUBLIC_HOST ?? "127.0.0.1").trim();
|
|
12
96
|
const port = options?.port ??
|
|
13
97
|
(Number(env.XRK_A2A_PUBLIC_PORT) || Number(env.PORT) || 0);
|
|
14
98
|
const base = env.XRK_A2A_PUBLIC_URL?.trim() ||
|
|
15
99
|
(port > 0 ? `http://${host}:${port}/a2a` : `http://${host}/a2a`);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
100
|
+
const face = options?.face;
|
|
101
|
+
let inner;
|
|
102
|
+
const ensureInner = () => {
|
|
103
|
+
if (inner)
|
|
104
|
+
return inner;
|
|
105
|
+
inner = createA2aInboundHandler({
|
|
106
|
+
url: base,
|
|
107
|
+
env,
|
|
108
|
+
name: env.XRK_A2A_AGENT_NAME?.trim() || "XRK Harness",
|
|
109
|
+
description: face
|
|
110
|
+
? "XRK Host A2A inbound — message/send admits into a Face session."
|
|
111
|
+
: "XRK Host A2A inbound (Agent Card + message/send). Face session injection optional.",
|
|
112
|
+
...(face
|
|
113
|
+
? {
|
|
114
|
+
onMessage: (msg) => {
|
|
115
|
+
const product = options?.resolveProduct?.();
|
|
116
|
+
return admitA2aInboundToFace(face, {
|
|
117
|
+
...msg,
|
|
118
|
+
env,
|
|
119
|
+
...(product ? { product } : {}),
|
|
120
|
+
});
|
|
121
|
+
},
|
|
122
|
+
}
|
|
123
|
+
: {}),
|
|
124
|
+
});
|
|
125
|
+
return inner;
|
|
126
|
+
};
|
|
127
|
+
return async (req, res) => {
|
|
128
|
+
const product = options?.resolveProduct?.();
|
|
129
|
+
if (!resolveA2aInboundEnabled(env, product))
|
|
130
|
+
return false;
|
|
131
|
+
return ensureInner()(req, res);
|
|
132
|
+
};
|
|
21
133
|
}
|
|
22
134
|
//# sourceMappingURL=a2a-inbound-public.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"a2a-inbound-public.js","sourceRoot":"","sources":["../src/a2a-inbound-public.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"a2a-inbound-public.js","sourceRoot":"","sources":["../src/a2a-inbound-public.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AgentHandle } from "@xrkseek/core-agent";
|
|
2
2
|
import type { LlmAdapter } from "@xrkseek/llm";
|
|
3
3
|
import { type SessionStore } from "@xrkseek/core-session";
|
|
4
|
+
import { type MemoryProvider } from "@xrkseek/exec-memory";
|
|
4
5
|
import { type HostConfig } from "@xrkseek/server-config";
|
|
5
6
|
import { type HarnessHttpServer } from "@xrkseek/server-http";
|
|
6
7
|
import { type PluginLoader, type RegisteredPlugin } from "@xrkseek/server-loader";
|
|
@@ -12,6 +13,7 @@ export type { InvalidateAllOpts } from "./agent-cache.js";
|
|
|
12
13
|
export { createStandingToolRegistry } from "./standing-tools.js";
|
|
13
14
|
export type { AgentResolveOpts, HostAgentCache } from "./agent-cache.js";
|
|
14
15
|
export type { HostLogger, HostSpawnOptions } from "./log.js";
|
|
16
|
+
export { a2aInboundSessionId, createA2aInboundPublicHandler, resolveA2aInboundEnabled, type A2aInboundProductSettings, } from "./a2a-inbound-public.js";
|
|
15
17
|
export { loadMcpToolPlugins, mcpDraftsToSpecs, mcpFingerprint, parseMcpServersEnv, readMcpAllowFromHostSettings, readMcpServersFromHostSettings, reconcileMcpToolPlugins, resetLastGoodHostMcpWireCaches, type McpRegisteredPlugin, type McpServerDraft, type McpServerSpec, type ReconcileMcpResult, } from "./mcp-wire.js";
|
|
16
18
|
/**
|
|
17
19
|
* `prepareArgv` for the Host-wide shared shell. Resolves the sandbox stack
|
|
@@ -176,10 +178,11 @@ export type AgentFactory = (input: {
|
|
|
176
178
|
/** Env overlay for video-gen (Credentials `XRK_VIDEO_GEN_OPENAI_KEY`). */
|
|
177
179
|
videoGenEnv?: NodeJS.ProcessEnv;
|
|
178
180
|
/**
|
|
179
|
-
* Face `curated-memory` product: pass `false` to skip MEMORY.md / USER.md
|
|
181
|
+
* Face `curated-memory` product: pass `false` to skip MEMORY.md / USER.md;
|
|
182
|
+
* pass a provider to share Host Phase1 consolidation store with Agent tools.
|
|
180
183
|
* `XRK_CURATED_MEMORY=0` env still force-disables for CI.
|
|
181
184
|
*/
|
|
182
|
-
curatedMemory?: false;
|
|
185
|
+
curatedMemory?: false | MemoryProvider;
|
|
183
186
|
/**
|
|
184
187
|
* Face `locale` product (Settings SoT) — drives the harness `language` prompt
|
|
185
188
|
* section so reasoning follows the UI language.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { createProviderRegistry } from "@xrkseek/llm-registry";
|
|
|
4
4
|
import { loadPolicyRulesetFile } from "@xrkseek/policy";
|
|
5
5
|
import { flattenText, isHumanUserMessageSource } from "@xrkseek/protocol";
|
|
6
6
|
import { effectiveSandboxMode, shouldConfineSandbox, } from "@xrkseek/protocol";
|
|
7
|
-
import { consolidateCuratedMemoryPhase1, consolidateCuratedMemoryPhase2,
|
|
7
|
+
import { consolidateCuratedMemoryPhase1, consolidateCuratedMemoryPhase2, resolveMemoryProvider, } from "@xrkseek/exec-memory";
|
|
8
|
+
import { runSkillCurator } from "@xrkseek/workspace";
|
|
8
9
|
import { resolveSecretStore } from "@xrkseek/secrets";
|
|
9
10
|
import { hostSettingsPath, defaultSpillDir, resolveXrkHome } from "@xrkseek/server-config";
|
|
10
11
|
import { installOutboundHttpProxy } from "./http-proxy.js";
|
|
@@ -41,11 +42,12 @@ import { createSandboxStack, parseSandboxProduct, } from "@xrkseek/exec-sandbox"
|
|
|
41
42
|
import { createBrowserRuntimeRegistry, setOutboundAllowlistAuditObserver } from "@xrkseek/exec-web";
|
|
42
43
|
import { createLocalSubprocess } from "@xrkseek/exec-subprocess";
|
|
43
44
|
import { resolveExecEnvironment, } from "@xrkseek/exec-environment";
|
|
44
|
-
import {
|
|
45
|
+
import { createSshExecutionWorldReady, resolveSshConfig, } from "@xrkseek/exec-ssh";
|
|
45
46
|
/** True while an unattended cron agent turn is running — skip cron tools to avoid recursion. */
|
|
46
47
|
const cronAgentDepth = new AsyncLocalStorage();
|
|
47
48
|
export { createHostAgentCache, HOST_PLUGINS_KEY } from "./agent-cache.js";
|
|
48
49
|
export { createStandingToolRegistry } from "./standing-tools.js";
|
|
50
|
+
export { a2aInboundSessionId, createA2aInboundPublicHandler, resolveA2aInboundEnabled, } from "./a2a-inbound-public.js";
|
|
49
51
|
export { loadMcpToolPlugins, mcpDraftsToSpecs, mcpFingerprint, parseMcpServersEnv, readMcpAllowFromHostSettings, readMcpServersFromHostSettings, reconcileMcpToolPlugins, resetLastGoodHostMcpWireCaches, } from "./mcp-wire.js";
|
|
50
52
|
/**
|
|
51
53
|
* AbortError with a readable reason. Used by the session drain snapshot race
|
|
@@ -357,7 +359,7 @@ export function createHostManager() {
|
|
|
357
359
|
if (sshConfig) {
|
|
358
360
|
execWorldKind = "ssh";
|
|
359
361
|
localHostRoot = config.runtime.workspaceRoot;
|
|
360
|
-
sshWorld =
|
|
362
|
+
sshWorld = await createSshExecutionWorldReady({ config: sshConfig });
|
|
361
363
|
// Tool coordinates are the remote workspace; Face session cwd follows.
|
|
362
364
|
config.runtime.workspaceRoot =
|
|
363
365
|
sshWorld.workspaceRoot;
|
|
@@ -425,6 +427,13 @@ export function createHostManager() {
|
|
|
425
427
|
const ensureSession = (sid) => newSession(store, sid).id;
|
|
426
428
|
const faceBox = {};
|
|
427
429
|
/** Session-end Phase1 (+ optional Phase2 LLM): fold leftover notes into MEMORY.md. */
|
|
430
|
+
let curatedMemProvider;
|
|
431
|
+
const getCuratedMemProvider = () => {
|
|
432
|
+
if (!curatedMemProvider) {
|
|
433
|
+
curatedMemProvider = resolveMemoryProvider();
|
|
434
|
+
}
|
|
435
|
+
return curatedMemProvider;
|
|
436
|
+
};
|
|
428
437
|
const consolidateCuratedMemoryForSession = (sessionId) => {
|
|
429
438
|
try {
|
|
430
439
|
const rt = faceBox.runtime;
|
|
@@ -462,7 +471,7 @@ export function createHostManager() {
|
|
|
462
471
|
}
|
|
463
472
|
if (userTexts.length === 0)
|
|
464
473
|
return;
|
|
465
|
-
const memStore =
|
|
474
|
+
const memStore = getCuratedMemProvider();
|
|
466
475
|
void (async () => {
|
|
467
476
|
await consolidateCuratedMemoryPhase1(memStore, { userTexts });
|
|
468
477
|
if (!phase2Llm)
|
|
@@ -486,6 +495,16 @@ export function createHostManager() {
|
|
|
486
495
|
/* best-effort — Host stop / archive must continue */
|
|
487
496
|
}
|
|
488
497
|
};
|
|
498
|
+
const runWorkspaceSkillCurator = () => {
|
|
499
|
+
try {
|
|
500
|
+
void runSkillCurator({
|
|
501
|
+
workspaceRoot: config.runtime.workspaceRoot,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
catch {
|
|
505
|
+
/* best-effort — Host stop must continue */
|
|
506
|
+
}
|
|
507
|
+
};
|
|
489
508
|
const llmResolverBox = {};
|
|
490
509
|
const pluginSettingsBox = {};
|
|
491
510
|
const sessionCwdBox = {};
|
|
@@ -651,7 +670,7 @@ export function createHostManager() {
|
|
|
651
670
|
: {}),
|
|
652
671
|
...(pluginSettings.curatedMemory === false
|
|
653
672
|
? { curatedMemory: false }
|
|
654
|
-
: {}),
|
|
673
|
+
: { curatedMemory: getCuratedMemProvider() }),
|
|
655
674
|
});
|
|
656
675
|
if (faceBox.approvals) {
|
|
657
676
|
agent.setApprovalHandler(faceBox.approvals.handlerFor(sessionId));
|
|
@@ -1606,6 +1625,25 @@ export function createHostManager() {
|
|
|
1606
1625
|
tryHandlePublic: chainPublicHandlers(createA2aInboundPublicHandler({
|
|
1607
1626
|
host: config.runtime.host,
|
|
1608
1627
|
port: config.runtime.port,
|
|
1628
|
+
face: faceRuntime,
|
|
1629
|
+
resolveProduct: () => {
|
|
1630
|
+
try {
|
|
1631
|
+
const ns = faceRuntime.settingsNamespaces.view("a2a-inbound")
|
|
1632
|
+
.value;
|
|
1633
|
+
return {
|
|
1634
|
+
enabled: ns.enabled === true,
|
|
1635
|
+
...(typeof ns.sessionId === "string"
|
|
1636
|
+
? { sessionId: ns.sessionId }
|
|
1637
|
+
: {}),
|
|
1638
|
+
...(typeof ns.timeoutMs === "number"
|
|
1639
|
+
? { timeoutMs: ns.timeoutMs }
|
|
1640
|
+
: {}),
|
|
1641
|
+
};
|
|
1642
|
+
}
|
|
1643
|
+
catch {
|
|
1644
|
+
return undefined;
|
|
1645
|
+
}
|
|
1646
|
+
},
|
|
1609
1647
|
}), createMobileAccessGateHandler({ xrkHome: resolveXrkHome() }), createSidebarPublicHandler({
|
|
1610
1648
|
xrkHome: resolveXrkHome(),
|
|
1611
1649
|
defaultCwd: faceRuntime.workspaceRoot,
|
|
@@ -1724,6 +1762,7 @@ export function createHostManager() {
|
|
|
1724
1762
|
for (const sessionId of store.list()) {
|
|
1725
1763
|
consolidateCuratedMemoryForSession(sessionId);
|
|
1726
1764
|
}
|
|
1765
|
+
runWorkspaceSkillCurator();
|
|
1727
1766
|
await http.close();
|
|
1728
1767
|
await agentCache.dispose();
|
|
1729
1768
|
if (sharedShell) {
|