@zhushanwen/zcode-subagent-cli 0.3.0 → 0.3.2
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/{chunk-DMHXNYG2.js → chunk-YVCSSNF6.js} +46 -13
- package/dist/index.cjs +46 -13
- package/dist/index.d.cts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +1 -1
- package/dist/main.cjs +46 -13
- package/dist/main.js +1 -1
- package/package.json +4 -4
|
@@ -12,8 +12,8 @@ var ZCODE_APPSERVER_STDERR_TAIL_CHARS = 400;
|
|
|
12
12
|
var ZCODE_APPSERVER_STDERR_TAIL_BUFFER_CHARS = 2048;
|
|
13
13
|
var ZCODE_APPSERVER_TURN_READ_TIMEOUT_MS = 5e3;
|
|
14
14
|
var ZCODE_APPSERVER_TURN_CLOSE_TIMEOUT_MS = 1500;
|
|
15
|
-
var ZCODE_TURN_IDLE_TIMEOUT_ENV = "
|
|
16
|
-
var ZCODE_TURN_MAX_TIMEOUT_ENV = "
|
|
15
|
+
var ZCODE_TURN_IDLE_TIMEOUT_ENV = "TAIJI_ZCODE_TURN_IDLE_TIMEOUT_MS";
|
|
16
|
+
var ZCODE_TURN_MAX_TIMEOUT_ENV = "TAIJI_ZCODE_TURN_MAX_TIMEOUT_MS";
|
|
17
17
|
var ZCODE_TURN_IDLE_TIMEOUT_MS = 18e5;
|
|
18
18
|
var ZCODE_TURN_MAX_TIMEOUT_MS = 36e5;
|
|
19
19
|
function parseZcodeTurnTimeoutEnv(raw) {
|
|
@@ -24,6 +24,14 @@ function parseZcodeTurnTimeoutEnv(raw) {
|
|
|
24
24
|
}
|
|
25
25
|
var ZCODE_APPSERVER_STOP_TIMEOUT_MS = 3e3;
|
|
26
26
|
var ZCODE_APPSERVER_ABORT_GRACE_MS = 3e3;
|
|
27
|
+
var ZCODE_APPSERVER_STOP_TIMEOUT_ENV = "TAIJI_ZCODE_TEST_STOP_TIMEOUT_MS";
|
|
28
|
+
var ZCODE_APPSERVER_ABORT_GRACE_ENV = "TAIJI_ZCODE_TEST_ABORT_GRACE_MS";
|
|
29
|
+
function parseZcodePositiveMsEnv(raw) {
|
|
30
|
+
if (raw === void 0 || raw === "") return { state: "unset" };
|
|
31
|
+
const parsed = Number(raw);
|
|
32
|
+
if (!Number.isFinite(parsed) || parsed <= 0) return { state: "invalid" };
|
|
33
|
+
return { state: "valid", ms: parsed };
|
|
34
|
+
}
|
|
27
35
|
var ZCODE_APPSERVER_ERR_MODEL_CONFIG_MISSING = -32603;
|
|
28
36
|
var ZCODE_APPSERVER_ERR_BUSY_SESSION = -32010;
|
|
29
37
|
var ZCODE_APPSERVER_HARVEST_GRACE_MS = 1e3;
|
|
@@ -846,10 +854,10 @@ var AppServerConnection = class {
|
|
|
846
854
|
command: this.nodeBin,
|
|
847
855
|
args: [script, "app-server", "--cwd", this.cwd],
|
|
848
856
|
env: buildEngineChildEnv(this.env, {
|
|
849
|
-
// L0
|
|
857
|
+
// L0 TAIJI_AGENT_DATA_DIR 缺省链:显式传参 > 宿主注入 env > tmpdir 占位
|
|
850
858
|
//(app-server 不消费该键,占位仅满足 L0 必注入契约;生产调用方
|
|
851
859
|
// zcode-engine.ensureAppServerRuntime 恒传 engineDataDir)。
|
|
852
|
-
dataDir: this.dataDir ?? process.env["
|
|
860
|
+
dataDir: this.dataDir ?? process.env["TAIJI_AGENT_DATA_DIR"] ?? tmpdir(),
|
|
853
861
|
envPrefixes: ["ZCODE_"]
|
|
854
862
|
}),
|
|
855
863
|
stdout: "pipe",
|
|
@@ -2095,8 +2103,9 @@ var ZcodeEngine = class {
|
|
|
2095
2103
|
onThinkingDelta: (delta) => ctx.onEvent?.({ type: "thinking_delta", delta }),
|
|
2096
2104
|
// [PR3] 工具执行期活性:非终态非增量的 session/event 帧(tool.updated progress
|
|
2097
2105
|
// 等,真机探针实证每 ~1s 一帧)→ activity 事件(零载荷纯活性信号——宿主无进展
|
|
2098
|
-
// 守护对任何事件类型刷新;reducer no-op、不落 journal)。zcode
|
|
2099
|
-
// conversation:"
|
|
2106
|
+
// 守护对任何事件类型刷新;reducer no-op、不落 journal)。zcode 引擎声明
|
|
2107
|
+
// conversation:"cold"(续聊 = session-store 冷恢复重建 + 新 run + resume 锚点,
|
|
2108
|
+
// 无热 steering/chat 域接线),run 域是唯一发射面。
|
|
2100
2109
|
onActivity: () => ctx.onEvent?.({ type: "activity" }),
|
|
2101
2110
|
onSessionCreated: (sessionId) => {
|
|
2102
2111
|
currentSessionId = sessionId;
|
|
@@ -2163,8 +2172,7 @@ var ZcodeEngine = class {
|
|
|
2163
2172
|
});
|
|
2164
2173
|
}
|
|
2165
2174
|
/**
|
|
2166
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
2167
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
2175
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
2168
2176
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
2169
2177
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
2170
2178
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -2189,7 +2197,7 @@ var ZcodeEngine = class {
|
|
|
2189
2197
|
() => true,
|
|
2190
2198
|
() => true
|
|
2191
2199
|
),
|
|
2192
|
-
delayResolved(
|
|
2200
|
+
delayResolved(abortGraceMs(), false)
|
|
2193
2201
|
]);
|
|
2194
2202
|
if (settled) return "settled-in-grace";
|
|
2195
2203
|
logger4.warn(
|
|
@@ -2201,7 +2209,7 @@ var ZcodeEngine = class {
|
|
|
2201
2209
|
};
|
|
2202
2210
|
let sessionId = getSessionId();
|
|
2203
2211
|
if (sessionId === void 0) {
|
|
2204
|
-
await Promise.race([sessionCreated, delayResolved(
|
|
2212
|
+
await Promise.race([sessionCreated, delayResolved(stopTimeoutMs(), void 0)]);
|
|
2205
2213
|
sessionId = getSessionId();
|
|
2206
2214
|
if (sessionId === void 0) {
|
|
2207
2215
|
if (entry.escalateOn === "stop-outcome") return "no-session";
|
|
@@ -2213,7 +2221,7 @@ var ZcodeEngine = class {
|
|
|
2213
2221
|
return graceRaceThenKill();
|
|
2214
2222
|
}
|
|
2215
2223
|
try {
|
|
2216
|
-
await rt.conn.request("session/stop", { sessionId }, { timeoutMs:
|
|
2224
|
+
await rt.conn.request("session/stop", { sessionId }, { timeoutMs: stopTimeoutMs() });
|
|
2217
2225
|
} catch (err) {
|
|
2218
2226
|
if (entry.escalateOn === "stop-outcome") {
|
|
2219
2227
|
if (isAppServerRpcError(err)) {
|
|
@@ -2595,6 +2603,31 @@ function isPlainObject(v) {
|
|
|
2595
2603
|
function errMessage3(err) {
|
|
2596
2604
|
return toErrorMessage(err);
|
|
2597
2605
|
}
|
|
2606
|
+
function resolveAppserverTimingMs(envName, fallbackMs, label) {
|
|
2607
|
+
const raw = process.env[envName];
|
|
2608
|
+
const parsed = parseZcodePositiveMsEnv(raw);
|
|
2609
|
+
if (parsed.state === "valid") return parsed.ms;
|
|
2610
|
+
if (parsed.state === "invalid") {
|
|
2611
|
+
logger4.warn(
|
|
2612
|
+
`[zcode-engine] ${envName}="${raw}" \u975E\u6CD5\uFF08\u5E94\u4E3A\u6B63\u6BEB\u79D2\u6570\u5B57\uFF09\u2014\u2014\u56DE\u843D\u9ED8\u8BA4 ${fallbackMs}ms\uFF08${label}\uFF09`
|
|
2613
|
+
);
|
|
2614
|
+
}
|
|
2615
|
+
return fallbackMs;
|
|
2616
|
+
}
|
|
2617
|
+
function stopTimeoutMs() {
|
|
2618
|
+
return resolveAppserverTimingMs(
|
|
2619
|
+
ZCODE_APPSERVER_STOP_TIMEOUT_ENV,
|
|
2620
|
+
ZCODE_APPSERVER_STOP_TIMEOUT_MS,
|
|
2621
|
+
"stop \u63A7\u5236\u9762\u8D85\u65F6"
|
|
2622
|
+
);
|
|
2623
|
+
}
|
|
2624
|
+
function abortGraceMs() {
|
|
2625
|
+
return resolveAppserverTimingMs(
|
|
2626
|
+
ZCODE_APPSERVER_ABORT_GRACE_ENV,
|
|
2627
|
+
ZCODE_APPSERVER_ABORT_GRACE_MS,
|
|
2628
|
+
"abort grace \u7A97\u53E3"
|
|
2629
|
+
);
|
|
2630
|
+
}
|
|
2598
2631
|
function delayResolved(ms, value) {
|
|
2599
2632
|
return new Promise((resolve2) => {
|
|
2600
2633
|
const t = setTimeout(() => resolve2(value), ms);
|
|
@@ -2609,7 +2642,7 @@ function abortedAppServerAttempt(ctx) {
|
|
|
2609
2642
|
return {
|
|
2610
2643
|
kind: "aborted",
|
|
2611
2644
|
output: syntheticAppServerOutput(null),
|
|
2612
|
-
abortMessage: `engine_run_failed: zcode \u4EFB\u52A1\u88AB\u4E2D\u6B62\uFF08app-server abort \u94FE\uFF1Asession/stop \u2192 ${
|
|
2645
|
+
abortMessage: `engine_run_failed: zcode \u4EFB\u52A1\u88AB\u4E2D\u6B62\uFF08app-server abort \u94FE\uFF1Asession/stop \u2192 ${abortGraceMs()}ms grace \u786E\u8BA4 \u2192 \u8D85\u65F6 killChain SIGTERM\u2192${ZCODE_KILL_GRACE_MS}ms\u2192SIGKILL \u6536\u5272\u5171\u4EAB\u8FDB\u7A0B\uFF0C\u5728\u9014\u4EFB\u52A1\u8D70\u5D29\u6E83\u8DEF\u5F84\uFF09\u3002`
|
|
2613
2646
|
};
|
|
2614
2647
|
}
|
|
2615
2648
|
function turnResultToPayload(r) {
|
|
@@ -2791,7 +2824,7 @@ function createZcodeEngine(deps) {
|
|
|
2791
2824
|
function createDefaultZcodeEngine() {
|
|
2792
2825
|
return createZcodeEngine({
|
|
2793
2826
|
engineDataDir: defaultEngineDataDir,
|
|
2794
|
-
...process.env["
|
|
2827
|
+
...process.env["TAIJI_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["TAIJI_ZCODE_CLI"] } : {}
|
|
2795
2828
|
});
|
|
2796
2829
|
}
|
|
2797
2830
|
|
package/dist/index.cjs
CHANGED
|
@@ -62,8 +62,8 @@ var ZCODE_APPSERVER_STDERR_TAIL_CHARS = 400;
|
|
|
62
62
|
var ZCODE_APPSERVER_STDERR_TAIL_BUFFER_CHARS = 2048;
|
|
63
63
|
var ZCODE_APPSERVER_TURN_READ_TIMEOUT_MS = 5e3;
|
|
64
64
|
var ZCODE_APPSERVER_TURN_CLOSE_TIMEOUT_MS = 1500;
|
|
65
|
-
var ZCODE_TURN_IDLE_TIMEOUT_ENV = "
|
|
66
|
-
var ZCODE_TURN_MAX_TIMEOUT_ENV = "
|
|
65
|
+
var ZCODE_TURN_IDLE_TIMEOUT_ENV = "TAIJI_ZCODE_TURN_IDLE_TIMEOUT_MS";
|
|
66
|
+
var ZCODE_TURN_MAX_TIMEOUT_ENV = "TAIJI_ZCODE_TURN_MAX_TIMEOUT_MS";
|
|
67
67
|
var ZCODE_TURN_IDLE_TIMEOUT_MS = 18e5;
|
|
68
68
|
var ZCODE_TURN_MAX_TIMEOUT_MS = 36e5;
|
|
69
69
|
function parseZcodeTurnTimeoutEnv(raw) {
|
|
@@ -74,6 +74,14 @@ function parseZcodeTurnTimeoutEnv(raw) {
|
|
|
74
74
|
}
|
|
75
75
|
var ZCODE_APPSERVER_STOP_TIMEOUT_MS = 3e3;
|
|
76
76
|
var ZCODE_APPSERVER_ABORT_GRACE_MS = 3e3;
|
|
77
|
+
var ZCODE_APPSERVER_STOP_TIMEOUT_ENV = "TAIJI_ZCODE_TEST_STOP_TIMEOUT_MS";
|
|
78
|
+
var ZCODE_APPSERVER_ABORT_GRACE_ENV = "TAIJI_ZCODE_TEST_ABORT_GRACE_MS";
|
|
79
|
+
function parseZcodePositiveMsEnv(raw) {
|
|
80
|
+
if (raw === void 0 || raw === "") return { state: "unset" };
|
|
81
|
+
const parsed = Number(raw);
|
|
82
|
+
if (!Number.isFinite(parsed) || parsed <= 0) return { state: "invalid" };
|
|
83
|
+
return { state: "valid", ms: parsed };
|
|
84
|
+
}
|
|
77
85
|
var ZCODE_APPSERVER_ERR_MODEL_CONFIG_MISSING = -32603;
|
|
78
86
|
var ZCODE_APPSERVER_ERR_BUSY_SESSION = -32010;
|
|
79
87
|
var ZCODE_APPSERVER_HARVEST_GRACE_MS = 1e3;
|
|
@@ -867,10 +875,10 @@ var AppServerConnection = class {
|
|
|
867
875
|
command: this.nodeBin,
|
|
868
876
|
args: [script, "app-server", "--cwd", this.cwd],
|
|
869
877
|
env: (0, import_subagent_engine_sdk6.buildEngineChildEnv)(this.env, {
|
|
870
|
-
// L0
|
|
878
|
+
// L0 TAIJI_AGENT_DATA_DIR 缺省链:显式传参 > 宿主注入 env > tmpdir 占位
|
|
871
879
|
//(app-server 不消费该键,占位仅满足 L0 必注入契约;生产调用方
|
|
872
880
|
// zcode-engine.ensureAppServerRuntime 恒传 engineDataDir)。
|
|
873
|
-
dataDir: this.dataDir ?? process.env["
|
|
881
|
+
dataDir: this.dataDir ?? process.env["TAIJI_AGENT_DATA_DIR"] ?? (0, import_node_os.tmpdir)(),
|
|
874
882
|
envPrefixes: ["ZCODE_"]
|
|
875
883
|
}),
|
|
876
884
|
stdout: "pipe",
|
|
@@ -2116,8 +2124,9 @@ var ZcodeEngine = class {
|
|
|
2116
2124
|
onThinkingDelta: (delta) => ctx.onEvent?.({ type: "thinking_delta", delta }),
|
|
2117
2125
|
// [PR3] 工具执行期活性:非终态非增量的 session/event 帧(tool.updated progress
|
|
2118
2126
|
// 等,真机探针实证每 ~1s 一帧)→ activity 事件(零载荷纯活性信号——宿主无进展
|
|
2119
|
-
// 守护对任何事件类型刷新;reducer no-op、不落 journal)。zcode
|
|
2120
|
-
// conversation:"
|
|
2127
|
+
// 守护对任何事件类型刷新;reducer no-op、不落 journal)。zcode 引擎声明
|
|
2128
|
+
// conversation:"cold"(续聊 = session-store 冷恢复重建 + 新 run + resume 锚点,
|
|
2129
|
+
// 无热 steering/chat 域接线),run 域是唯一发射面。
|
|
2121
2130
|
onActivity: () => ctx.onEvent?.({ type: "activity" }),
|
|
2122
2131
|
onSessionCreated: (sessionId) => {
|
|
2123
2132
|
currentSessionId = sessionId;
|
|
@@ -2184,8 +2193,7 @@ var ZcodeEngine = class {
|
|
|
2184
2193
|
});
|
|
2185
2194
|
}
|
|
2186
2195
|
/**
|
|
2187
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
2188
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
2196
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
2189
2197
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
2190
2198
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
2191
2199
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -2210,7 +2218,7 @@ var ZcodeEngine = class {
|
|
|
2210
2218
|
() => true,
|
|
2211
2219
|
() => true
|
|
2212
2220
|
),
|
|
2213
|
-
delayResolved(
|
|
2221
|
+
delayResolved(abortGraceMs(), false)
|
|
2214
2222
|
]);
|
|
2215
2223
|
if (settled) return "settled-in-grace";
|
|
2216
2224
|
logger4.warn(
|
|
@@ -2222,7 +2230,7 @@ var ZcodeEngine = class {
|
|
|
2222
2230
|
};
|
|
2223
2231
|
let sessionId = getSessionId();
|
|
2224
2232
|
if (sessionId === void 0) {
|
|
2225
|
-
await Promise.race([sessionCreated, delayResolved(
|
|
2233
|
+
await Promise.race([sessionCreated, delayResolved(stopTimeoutMs(), void 0)]);
|
|
2226
2234
|
sessionId = getSessionId();
|
|
2227
2235
|
if (sessionId === void 0) {
|
|
2228
2236
|
if (entry.escalateOn === "stop-outcome") return "no-session";
|
|
@@ -2234,7 +2242,7 @@ var ZcodeEngine = class {
|
|
|
2234
2242
|
return graceRaceThenKill();
|
|
2235
2243
|
}
|
|
2236
2244
|
try {
|
|
2237
|
-
await rt.conn.request("session/stop", { sessionId }, { timeoutMs:
|
|
2245
|
+
await rt.conn.request("session/stop", { sessionId }, { timeoutMs: stopTimeoutMs() });
|
|
2238
2246
|
} catch (err) {
|
|
2239
2247
|
if (entry.escalateOn === "stop-outcome") {
|
|
2240
2248
|
if (isAppServerRpcError(err)) {
|
|
@@ -2616,6 +2624,31 @@ function isPlainObject(v) {
|
|
|
2616
2624
|
function errMessage3(err) {
|
|
2617
2625
|
return (0, import_subagent_engine_sdk3.toErrorMessage)(err);
|
|
2618
2626
|
}
|
|
2627
|
+
function resolveAppserverTimingMs(envName, fallbackMs, label) {
|
|
2628
|
+
const raw = process.env[envName];
|
|
2629
|
+
const parsed = parseZcodePositiveMsEnv(raw);
|
|
2630
|
+
if (parsed.state === "valid") return parsed.ms;
|
|
2631
|
+
if (parsed.state === "invalid") {
|
|
2632
|
+
logger4.warn(
|
|
2633
|
+
`[zcode-engine] ${envName}="${raw}" \u975E\u6CD5\uFF08\u5E94\u4E3A\u6B63\u6BEB\u79D2\u6570\u5B57\uFF09\u2014\u2014\u56DE\u843D\u9ED8\u8BA4 ${fallbackMs}ms\uFF08${label}\uFF09`
|
|
2634
|
+
);
|
|
2635
|
+
}
|
|
2636
|
+
return fallbackMs;
|
|
2637
|
+
}
|
|
2638
|
+
function stopTimeoutMs() {
|
|
2639
|
+
return resolveAppserverTimingMs(
|
|
2640
|
+
ZCODE_APPSERVER_STOP_TIMEOUT_ENV,
|
|
2641
|
+
ZCODE_APPSERVER_STOP_TIMEOUT_MS,
|
|
2642
|
+
"stop \u63A7\u5236\u9762\u8D85\u65F6"
|
|
2643
|
+
);
|
|
2644
|
+
}
|
|
2645
|
+
function abortGraceMs() {
|
|
2646
|
+
return resolveAppserverTimingMs(
|
|
2647
|
+
ZCODE_APPSERVER_ABORT_GRACE_ENV,
|
|
2648
|
+
ZCODE_APPSERVER_ABORT_GRACE_MS,
|
|
2649
|
+
"abort grace \u7A97\u53E3"
|
|
2650
|
+
);
|
|
2651
|
+
}
|
|
2619
2652
|
function delayResolved(ms, value) {
|
|
2620
2653
|
return new Promise((resolve2) => {
|
|
2621
2654
|
const t = setTimeout(() => resolve2(value), ms);
|
|
@@ -2630,7 +2663,7 @@ function abortedAppServerAttempt(ctx) {
|
|
|
2630
2663
|
return {
|
|
2631
2664
|
kind: "aborted",
|
|
2632
2665
|
output: syntheticAppServerOutput(null),
|
|
2633
|
-
abortMessage: `engine_run_failed: zcode \u4EFB\u52A1\u88AB\u4E2D\u6B62\uFF08app-server abort \u94FE\uFF1Asession/stop \u2192 ${
|
|
2666
|
+
abortMessage: `engine_run_failed: zcode \u4EFB\u52A1\u88AB\u4E2D\u6B62\uFF08app-server abort \u94FE\uFF1Asession/stop \u2192 ${abortGraceMs()}ms grace \u786E\u8BA4 \u2192 \u8D85\u65F6 killChain SIGTERM\u2192${ZCODE_KILL_GRACE_MS}ms\u2192SIGKILL \u6536\u5272\u5171\u4EAB\u8FDB\u7A0B\uFF0C\u5728\u9014\u4EFB\u52A1\u8D70\u5D29\u6E83\u8DEF\u5F84\uFF09\u3002`
|
|
2634
2667
|
};
|
|
2635
2668
|
}
|
|
2636
2669
|
function turnResultToPayload(r) {
|
|
@@ -2811,7 +2844,7 @@ function createZcodeEngine(deps) {
|
|
|
2811
2844
|
function createDefaultZcodeEngine() {
|
|
2812
2845
|
return createZcodeEngine({
|
|
2813
2846
|
engineDataDir: defaultEngineDataDir,
|
|
2814
|
-
...process.env["
|
|
2847
|
+
...process.env["TAIJI_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["TAIJI_ZCODE_CLI"] } : {}
|
|
2815
2848
|
});
|
|
2816
2849
|
}
|
|
2817
2850
|
|
package/dist/index.d.cts
CHANGED
|
@@ -158,8 +158,7 @@ declare class ZcodeEngine implements EnginePort {
|
|
|
158
158
|
*/
|
|
159
159
|
private awaitConnFinalized;
|
|
160
160
|
/**
|
|
161
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
162
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
161
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
163
162
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
164
163
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
165
164
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -303,7 +302,7 @@ declare function defaultEngineDataDir(): string;
|
|
|
303
302
|
/** 构造 ZcodeEngine(DI 工厂——测试/宿主注入 deps)。 */
|
|
304
303
|
declare function createZcodeEngine(deps: ZcodeEngineDeps): ZcodeEngine;
|
|
305
304
|
/**
|
|
306
|
-
* 缺省 deps 组合:engineDataDir 走 env 解析,cliPath 支持
|
|
305
|
+
* 缺省 deps 组合:engineDataDir 走 env 解析,cliPath 支持 TAIJI_ZCODE_CLI 覆盖
|
|
307
306
|
* (spawn-env-contract 出站白名单既有条目,随包迁移锚点改指本包——W12 回写项)。
|
|
308
307
|
*/
|
|
309
308
|
declare function createDefaultZcodeEngine(): ZcodeEngine;
|
package/dist/index.d.ts
CHANGED
|
@@ -158,8 +158,7 @@ declare class ZcodeEngine implements EnginePort {
|
|
|
158
158
|
*/
|
|
159
159
|
private awaitConnFinalized;
|
|
160
160
|
/**
|
|
161
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
162
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
161
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
163
162
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
164
163
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
165
164
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -303,7 +302,7 @@ declare function defaultEngineDataDir(): string;
|
|
|
303
302
|
/** 构造 ZcodeEngine(DI 工厂——测试/宿主注入 deps)。 */
|
|
304
303
|
declare function createZcodeEngine(deps: ZcodeEngineDeps): ZcodeEngine;
|
|
305
304
|
/**
|
|
306
|
-
* 缺省 deps 组合:engineDataDir 走 env 解析,cliPath 支持
|
|
305
|
+
* 缺省 deps 组合:engineDataDir 走 env 解析,cliPath 支持 TAIJI_ZCODE_CLI 覆盖
|
|
307
306
|
* (spawn-env-contract 出站白名单既有条目,随包迁移锚点改指本包——W12 回写项)。
|
|
308
307
|
*/
|
|
309
308
|
declare function createDefaultZcodeEngine(): ZcodeEngine;
|
package/dist/index.js
CHANGED
package/dist/main.cjs
CHANGED
|
@@ -42,8 +42,8 @@ var ZCODE_APPSERVER_STDERR_TAIL_CHARS = 400;
|
|
|
42
42
|
var ZCODE_APPSERVER_STDERR_TAIL_BUFFER_CHARS = 2048;
|
|
43
43
|
var ZCODE_APPSERVER_TURN_READ_TIMEOUT_MS = 5e3;
|
|
44
44
|
var ZCODE_APPSERVER_TURN_CLOSE_TIMEOUT_MS = 1500;
|
|
45
|
-
var ZCODE_TURN_IDLE_TIMEOUT_ENV = "
|
|
46
|
-
var ZCODE_TURN_MAX_TIMEOUT_ENV = "
|
|
45
|
+
var ZCODE_TURN_IDLE_TIMEOUT_ENV = "TAIJI_ZCODE_TURN_IDLE_TIMEOUT_MS";
|
|
46
|
+
var ZCODE_TURN_MAX_TIMEOUT_ENV = "TAIJI_ZCODE_TURN_MAX_TIMEOUT_MS";
|
|
47
47
|
var ZCODE_TURN_IDLE_TIMEOUT_MS = 18e5;
|
|
48
48
|
var ZCODE_TURN_MAX_TIMEOUT_MS = 36e5;
|
|
49
49
|
function parseZcodeTurnTimeoutEnv(raw) {
|
|
@@ -54,6 +54,14 @@ function parseZcodeTurnTimeoutEnv(raw) {
|
|
|
54
54
|
}
|
|
55
55
|
var ZCODE_APPSERVER_STOP_TIMEOUT_MS = 3e3;
|
|
56
56
|
var ZCODE_APPSERVER_ABORT_GRACE_MS = 3e3;
|
|
57
|
+
var ZCODE_APPSERVER_STOP_TIMEOUT_ENV = "TAIJI_ZCODE_TEST_STOP_TIMEOUT_MS";
|
|
58
|
+
var ZCODE_APPSERVER_ABORT_GRACE_ENV = "TAIJI_ZCODE_TEST_ABORT_GRACE_MS";
|
|
59
|
+
function parseZcodePositiveMsEnv(raw) {
|
|
60
|
+
if (raw === void 0 || raw === "") return { state: "unset" };
|
|
61
|
+
const parsed = Number(raw);
|
|
62
|
+
if (!Number.isFinite(parsed) || parsed <= 0) return { state: "invalid" };
|
|
63
|
+
return { state: "valid", ms: parsed };
|
|
64
|
+
}
|
|
57
65
|
var ZCODE_APPSERVER_ERR_MODEL_CONFIG_MISSING = -32603;
|
|
58
66
|
var ZCODE_APPSERVER_ERR_BUSY_SESSION = -32010;
|
|
59
67
|
var ZCODE_APPSERVER_HARVEST_GRACE_MS = 1e3;
|
|
@@ -847,10 +855,10 @@ var AppServerConnection = class {
|
|
|
847
855
|
command: this.nodeBin,
|
|
848
856
|
args: [script, "app-server", "--cwd", this.cwd],
|
|
849
857
|
env: (0, import_subagent_engine_sdk6.buildEngineChildEnv)(this.env, {
|
|
850
|
-
// L0
|
|
858
|
+
// L0 TAIJI_AGENT_DATA_DIR 缺省链:显式传参 > 宿主注入 env > tmpdir 占位
|
|
851
859
|
//(app-server 不消费该键,占位仅满足 L0 必注入契约;生产调用方
|
|
852
860
|
// zcode-engine.ensureAppServerRuntime 恒传 engineDataDir)。
|
|
853
|
-
dataDir: this.dataDir ?? process.env["
|
|
861
|
+
dataDir: this.dataDir ?? process.env["TAIJI_AGENT_DATA_DIR"] ?? (0, import_node_os.tmpdir)(),
|
|
854
862
|
envPrefixes: ["ZCODE_"]
|
|
855
863
|
}),
|
|
856
864
|
stdout: "pipe",
|
|
@@ -2096,8 +2104,9 @@ var ZcodeEngine = class {
|
|
|
2096
2104
|
onThinkingDelta: (delta) => ctx.onEvent?.({ type: "thinking_delta", delta }),
|
|
2097
2105
|
// [PR3] 工具执行期活性:非终态非增量的 session/event 帧(tool.updated progress
|
|
2098
2106
|
// 等,真机探针实证每 ~1s 一帧)→ activity 事件(零载荷纯活性信号——宿主无进展
|
|
2099
|
-
// 守护对任何事件类型刷新;reducer no-op、不落 journal)。zcode
|
|
2100
|
-
// conversation:"
|
|
2107
|
+
// 守护对任何事件类型刷新;reducer no-op、不落 journal)。zcode 引擎声明
|
|
2108
|
+
// conversation:"cold"(续聊 = session-store 冷恢复重建 + 新 run + resume 锚点,
|
|
2109
|
+
// 无热 steering/chat 域接线),run 域是唯一发射面。
|
|
2101
2110
|
onActivity: () => ctx.onEvent?.({ type: "activity" }),
|
|
2102
2111
|
onSessionCreated: (sessionId) => {
|
|
2103
2112
|
currentSessionId = sessionId;
|
|
@@ -2164,8 +2173,7 @@ var ZcodeEngine = class {
|
|
|
2164
2173
|
});
|
|
2165
2174
|
}
|
|
2166
2175
|
/**
|
|
2167
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
2168
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
2176
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
2169
2177
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
2170
2178
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
2171
2179
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -2190,7 +2198,7 @@ var ZcodeEngine = class {
|
|
|
2190
2198
|
() => true,
|
|
2191
2199
|
() => true
|
|
2192
2200
|
),
|
|
2193
|
-
delayResolved(
|
|
2201
|
+
delayResolved(abortGraceMs(), false)
|
|
2194
2202
|
]);
|
|
2195
2203
|
if (settled) return "settled-in-grace";
|
|
2196
2204
|
logger4.warn(
|
|
@@ -2202,7 +2210,7 @@ var ZcodeEngine = class {
|
|
|
2202
2210
|
};
|
|
2203
2211
|
let sessionId = getSessionId();
|
|
2204
2212
|
if (sessionId === void 0) {
|
|
2205
|
-
await Promise.race([sessionCreated, delayResolved(
|
|
2213
|
+
await Promise.race([sessionCreated, delayResolved(stopTimeoutMs(), void 0)]);
|
|
2206
2214
|
sessionId = getSessionId();
|
|
2207
2215
|
if (sessionId === void 0) {
|
|
2208
2216
|
if (entry.escalateOn === "stop-outcome") return "no-session";
|
|
@@ -2214,7 +2222,7 @@ var ZcodeEngine = class {
|
|
|
2214
2222
|
return graceRaceThenKill();
|
|
2215
2223
|
}
|
|
2216
2224
|
try {
|
|
2217
|
-
await rt.conn.request("session/stop", { sessionId }, { timeoutMs:
|
|
2225
|
+
await rt.conn.request("session/stop", { sessionId }, { timeoutMs: stopTimeoutMs() });
|
|
2218
2226
|
} catch (err) {
|
|
2219
2227
|
if (entry.escalateOn === "stop-outcome") {
|
|
2220
2228
|
if (isAppServerRpcError(err)) {
|
|
@@ -2596,6 +2604,31 @@ function isPlainObject(v) {
|
|
|
2596
2604
|
function errMessage3(err) {
|
|
2597
2605
|
return (0, import_subagent_engine_sdk3.toErrorMessage)(err);
|
|
2598
2606
|
}
|
|
2607
|
+
function resolveAppserverTimingMs(envName, fallbackMs, label) {
|
|
2608
|
+
const raw = process.env[envName];
|
|
2609
|
+
const parsed = parseZcodePositiveMsEnv(raw);
|
|
2610
|
+
if (parsed.state === "valid") return parsed.ms;
|
|
2611
|
+
if (parsed.state === "invalid") {
|
|
2612
|
+
logger4.warn(
|
|
2613
|
+
`[zcode-engine] ${envName}="${raw}" \u975E\u6CD5\uFF08\u5E94\u4E3A\u6B63\u6BEB\u79D2\u6570\u5B57\uFF09\u2014\u2014\u56DE\u843D\u9ED8\u8BA4 ${fallbackMs}ms\uFF08${label}\uFF09`
|
|
2614
|
+
);
|
|
2615
|
+
}
|
|
2616
|
+
return fallbackMs;
|
|
2617
|
+
}
|
|
2618
|
+
function stopTimeoutMs() {
|
|
2619
|
+
return resolveAppserverTimingMs(
|
|
2620
|
+
ZCODE_APPSERVER_STOP_TIMEOUT_ENV,
|
|
2621
|
+
ZCODE_APPSERVER_STOP_TIMEOUT_MS,
|
|
2622
|
+
"stop \u63A7\u5236\u9762\u8D85\u65F6"
|
|
2623
|
+
);
|
|
2624
|
+
}
|
|
2625
|
+
function abortGraceMs() {
|
|
2626
|
+
return resolveAppserverTimingMs(
|
|
2627
|
+
ZCODE_APPSERVER_ABORT_GRACE_ENV,
|
|
2628
|
+
ZCODE_APPSERVER_ABORT_GRACE_MS,
|
|
2629
|
+
"abort grace \u7A97\u53E3"
|
|
2630
|
+
);
|
|
2631
|
+
}
|
|
2599
2632
|
function delayResolved(ms, value) {
|
|
2600
2633
|
return new Promise((resolve2) => {
|
|
2601
2634
|
const t = setTimeout(() => resolve2(value), ms);
|
|
@@ -2610,7 +2643,7 @@ function abortedAppServerAttempt(ctx) {
|
|
|
2610
2643
|
return {
|
|
2611
2644
|
kind: "aborted",
|
|
2612
2645
|
output: syntheticAppServerOutput(null),
|
|
2613
|
-
abortMessage: `engine_run_failed: zcode \u4EFB\u52A1\u88AB\u4E2D\u6B62\uFF08app-server abort \u94FE\uFF1Asession/stop \u2192 ${
|
|
2646
|
+
abortMessage: `engine_run_failed: zcode \u4EFB\u52A1\u88AB\u4E2D\u6B62\uFF08app-server abort \u94FE\uFF1Asession/stop \u2192 ${abortGraceMs()}ms grace \u786E\u8BA4 \u2192 \u8D85\u65F6 killChain SIGTERM\u2192${ZCODE_KILL_GRACE_MS}ms\u2192SIGKILL \u6536\u5272\u5171\u4EAB\u8FDB\u7A0B\uFF0C\u5728\u9014\u4EFB\u52A1\u8D70\u5D29\u6E83\u8DEF\u5F84\uFF09\u3002`
|
|
2614
2647
|
};
|
|
2615
2648
|
}
|
|
2616
2649
|
function turnResultToPayload(r) {
|
|
@@ -2791,7 +2824,7 @@ function createZcodeEngine(deps) {
|
|
|
2791
2824
|
function createDefaultZcodeEngine() {
|
|
2792
2825
|
return createZcodeEngine({
|
|
2793
2826
|
engineDataDir: defaultEngineDataDir,
|
|
2794
|
-
...process.env["
|
|
2827
|
+
...process.env["TAIJI_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["TAIJI_ZCODE_CLI"] } : {}
|
|
2795
2828
|
});
|
|
2796
2829
|
}
|
|
2797
2830
|
|
package/dist/main.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhushanwen/zcode-subagent-cli",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "zcode subagent engine as an independent CLI package (W5 of subagent-engine-protocolization): speaks engine-protocol v1 over NDJSON stdio, depends only on @zhushanwen/subagent-engine-sdk (never subagent-core)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"default": "./dist/index.js"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
|
-
"
|
|
29
|
+
"taiji": {
|
|
30
30
|
"subagentEngine": {
|
|
31
31
|
"id": "zcode",
|
|
32
32
|
"bin": "zcode-subagent-cli",
|
|
@@ -55,13 +55,13 @@
|
|
|
55
55
|
"description": "ZCode app-server resident engine (shared host HOME, isolated session db, credential injection via fs-interception launcher)"
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
|
-
"$comment": "W5 (impl-plan §2.5): 引擎包只依赖 SDK,禁止依赖 @zhushanwen/subagent-core(check-engine-sdk-boundary 同精神,W10 静态断言目标)。manifest 按 §2.4 schema:capabilities 与 core engines/zcode 的 ZcodeEngine.capabilities() 逐位一致(快照权威);modelCatalog 由 `pnpm gen:model-catalog` 构建期生成进 manifest,committed 的 {dynamic:true, models:[]} 只是生成器缺席时的占位——models 运行期真相经协议 listModels/validateModel 诊断面。过渡期 core 侧 engines/zcode/ 保留(
|
|
58
|
+
"$comment": "W5 (impl-plan §2.5): 引擎包只依赖 SDK,禁止依赖 @zhushanwen/subagent-core(check-engine-sdk-boundary 同精神,W10 静态断言目标)。manifest 按 §2.4 schema:capabilities 与 core engines/zcode 的 ZcodeEngine.capabilities() 逐位一致(快照权威);modelCatalog 由 `pnpm gen:model-catalog` 构建期生成进 manifest,committed 的 {dynamic:true, models:[]} 只是生成器缺席时的占位——models 运行期真相经协议 listModels/validateModel 诊断面。过渡期 core 侧 engines/zcode/ 保留(TAIJI_SUBAGENT_ENGINE_MODE 双模,W11 删)。发布形态(MF-4/MF-5 修复,约束 C-proc-11):CLI 包——bin 是唯一 npm 消费面(仓内零生产 import),files 不带 src/(Node 拒载 node_modules 内 .ts,TS 源发布只产出误导 + __tests__/__golden__ 测试资产泄漏),npm 消费走 publishConfig -> dist(双形态约定同 subagent-core D4);构建 = tsup(src 内部 import 带 .ts 后缀 + allowImportingTsExtensions,tsc emit 不可行),SDK 保持 external 经宿主 node_modules 解析;bin = dist-first + 仅 workspace 形态回退 src(node_modules 判据禁用 npm 形态回退),见 bin/zcode-subagent-cli.mjs。main/module/types 顶层字段恒指 dist:npm pack 会强制包含 main 指向的文件(无视 files 白名单),指 src 会把 TS 源塞进不含 src/ 的 tarball;workspace 消费恒走 exports 的 import 条件 → src,顶层字段只是 exports 缺席时的 fallback,无 workspace DX 影响。",
|
|
59
59
|
"files": [
|
|
60
60
|
"bin/",
|
|
61
61
|
"dist/"
|
|
62
62
|
],
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@zhushanwen/subagent-engine-sdk": "0.
|
|
64
|
+
"@zhushanwen/subagent-engine-sdk": "0.5.1"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/node": "^24.0.0",
|