@zhushanwen/zcode-subagent-cli 0.3.1 → 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-I5OX22FU.js → chunk-YVCSSNF6.js} +43 -11
- package/dist/index.cjs +43 -11
- package/dist/index.d.cts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +1 -1
- package/dist/main.cjs +43 -11
- 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",
|
|
@@ -2164,8 +2172,7 @@ var ZcodeEngine = class {
|
|
|
2164
2172
|
});
|
|
2165
2173
|
}
|
|
2166
2174
|
/**
|
|
2167
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
2168
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
2175
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
2169
2176
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
2170
2177
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
2171
2178
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -2190,7 +2197,7 @@ var ZcodeEngine = class {
|
|
|
2190
2197
|
() => true,
|
|
2191
2198
|
() => true
|
|
2192
2199
|
),
|
|
2193
|
-
delayResolved(
|
|
2200
|
+
delayResolved(abortGraceMs(), false)
|
|
2194
2201
|
]);
|
|
2195
2202
|
if (settled) return "settled-in-grace";
|
|
2196
2203
|
logger4.warn(
|
|
@@ -2202,7 +2209,7 @@ var ZcodeEngine = class {
|
|
|
2202
2209
|
};
|
|
2203
2210
|
let sessionId = getSessionId();
|
|
2204
2211
|
if (sessionId === void 0) {
|
|
2205
|
-
await Promise.race([sessionCreated, delayResolved(
|
|
2212
|
+
await Promise.race([sessionCreated, delayResolved(stopTimeoutMs(), void 0)]);
|
|
2206
2213
|
sessionId = getSessionId();
|
|
2207
2214
|
if (sessionId === void 0) {
|
|
2208
2215
|
if (entry.escalateOn === "stop-outcome") return "no-session";
|
|
@@ -2214,7 +2221,7 @@ var ZcodeEngine = class {
|
|
|
2214
2221
|
return graceRaceThenKill();
|
|
2215
2222
|
}
|
|
2216
2223
|
try {
|
|
2217
|
-
await rt.conn.request("session/stop", { sessionId }, { timeoutMs:
|
|
2224
|
+
await rt.conn.request("session/stop", { sessionId }, { timeoutMs: stopTimeoutMs() });
|
|
2218
2225
|
} catch (err) {
|
|
2219
2226
|
if (entry.escalateOn === "stop-outcome") {
|
|
2220
2227
|
if (isAppServerRpcError(err)) {
|
|
@@ -2596,6 +2603,31 @@ function isPlainObject(v) {
|
|
|
2596
2603
|
function errMessage3(err) {
|
|
2597
2604
|
return toErrorMessage(err);
|
|
2598
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
|
+
}
|
|
2599
2631
|
function delayResolved(ms, value) {
|
|
2600
2632
|
return new Promise((resolve2) => {
|
|
2601
2633
|
const t = setTimeout(() => resolve2(value), ms);
|
|
@@ -2610,7 +2642,7 @@ function abortedAppServerAttempt(ctx) {
|
|
|
2610
2642
|
return {
|
|
2611
2643
|
kind: "aborted",
|
|
2612
2644
|
output: syntheticAppServerOutput(null),
|
|
2613
|
-
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`
|
|
2614
2646
|
};
|
|
2615
2647
|
}
|
|
2616
2648
|
function turnResultToPayload(r) {
|
|
@@ -2792,7 +2824,7 @@ function createZcodeEngine(deps) {
|
|
|
2792
2824
|
function createDefaultZcodeEngine() {
|
|
2793
2825
|
return createZcodeEngine({
|
|
2794
2826
|
engineDataDir: defaultEngineDataDir,
|
|
2795
|
-
...process.env["
|
|
2827
|
+
...process.env["TAIJI_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["TAIJI_ZCODE_CLI"] } : {}
|
|
2796
2828
|
});
|
|
2797
2829
|
}
|
|
2798
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",
|
|
@@ -2185,8 +2193,7 @@ var ZcodeEngine = class {
|
|
|
2185
2193
|
});
|
|
2186
2194
|
}
|
|
2187
2195
|
/**
|
|
2188
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
2189
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
2196
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
2190
2197
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
2191
2198
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
2192
2199
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -2211,7 +2218,7 @@ var ZcodeEngine = class {
|
|
|
2211
2218
|
() => true,
|
|
2212
2219
|
() => true
|
|
2213
2220
|
),
|
|
2214
|
-
delayResolved(
|
|
2221
|
+
delayResolved(abortGraceMs(), false)
|
|
2215
2222
|
]);
|
|
2216
2223
|
if (settled) return "settled-in-grace";
|
|
2217
2224
|
logger4.warn(
|
|
@@ -2223,7 +2230,7 @@ var ZcodeEngine = class {
|
|
|
2223
2230
|
};
|
|
2224
2231
|
let sessionId = getSessionId();
|
|
2225
2232
|
if (sessionId === void 0) {
|
|
2226
|
-
await Promise.race([sessionCreated, delayResolved(
|
|
2233
|
+
await Promise.race([sessionCreated, delayResolved(stopTimeoutMs(), void 0)]);
|
|
2227
2234
|
sessionId = getSessionId();
|
|
2228
2235
|
if (sessionId === void 0) {
|
|
2229
2236
|
if (entry.escalateOn === "stop-outcome") return "no-session";
|
|
@@ -2235,7 +2242,7 @@ var ZcodeEngine = class {
|
|
|
2235
2242
|
return graceRaceThenKill();
|
|
2236
2243
|
}
|
|
2237
2244
|
try {
|
|
2238
|
-
await rt.conn.request("session/stop", { sessionId }, { timeoutMs:
|
|
2245
|
+
await rt.conn.request("session/stop", { sessionId }, { timeoutMs: stopTimeoutMs() });
|
|
2239
2246
|
} catch (err) {
|
|
2240
2247
|
if (entry.escalateOn === "stop-outcome") {
|
|
2241
2248
|
if (isAppServerRpcError(err)) {
|
|
@@ -2617,6 +2624,31 @@ function isPlainObject(v) {
|
|
|
2617
2624
|
function errMessage3(err) {
|
|
2618
2625
|
return (0, import_subagent_engine_sdk3.toErrorMessage)(err);
|
|
2619
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
|
+
}
|
|
2620
2652
|
function delayResolved(ms, value) {
|
|
2621
2653
|
return new Promise((resolve2) => {
|
|
2622
2654
|
const t = setTimeout(() => resolve2(value), ms);
|
|
@@ -2631,7 +2663,7 @@ function abortedAppServerAttempt(ctx) {
|
|
|
2631
2663
|
return {
|
|
2632
2664
|
kind: "aborted",
|
|
2633
2665
|
output: syntheticAppServerOutput(null),
|
|
2634
|
-
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`
|
|
2635
2667
|
};
|
|
2636
2668
|
}
|
|
2637
2669
|
function turnResultToPayload(r) {
|
|
@@ -2812,7 +2844,7 @@ function createZcodeEngine(deps) {
|
|
|
2812
2844
|
function createDefaultZcodeEngine() {
|
|
2813
2845
|
return createZcodeEngine({
|
|
2814
2846
|
engineDataDir: defaultEngineDataDir,
|
|
2815
|
-
...process.env["
|
|
2847
|
+
...process.env["TAIJI_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["TAIJI_ZCODE_CLI"] } : {}
|
|
2816
2848
|
});
|
|
2817
2849
|
}
|
|
2818
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",
|
|
@@ -2165,8 +2173,7 @@ var ZcodeEngine = class {
|
|
|
2165
2173
|
});
|
|
2166
2174
|
}
|
|
2167
2175
|
/**
|
|
2168
|
-
* D3 abort 链执行体(双入口分岔,P0-1 U2
|
|
2169
|
-
* timeout-zcode-turn-and-settled-watchdog.md §6 D3 v1.1):
|
|
2176
|
+
* D3 abort 链执行体(双入口分岔,P0-1 U2 参数化,D3 v1.1):
|
|
2170
2177
|
* - **用户取消入口**(`escalateOn: "turn-settled"`,现状语义零改动;fire-and-forget——
|
|
2171
2178
|
* 与 turn promise 并行推进):stop 帧(超时 ZCODE_APPSERVER_STOP_TIMEOUT_MS)→
|
|
2172
2179
|
* grace 窗口内 turn 落定即止(不杀共享进程)→ 超窗 killChain(conn.shutdown 全序:
|
|
@@ -2191,7 +2198,7 @@ var ZcodeEngine = class {
|
|
|
2191
2198
|
() => true,
|
|
2192
2199
|
() => true
|
|
2193
2200
|
),
|
|
2194
|
-
delayResolved(
|
|
2201
|
+
delayResolved(abortGraceMs(), false)
|
|
2195
2202
|
]);
|
|
2196
2203
|
if (settled) return "settled-in-grace";
|
|
2197
2204
|
logger4.warn(
|
|
@@ -2203,7 +2210,7 @@ var ZcodeEngine = class {
|
|
|
2203
2210
|
};
|
|
2204
2211
|
let sessionId = getSessionId();
|
|
2205
2212
|
if (sessionId === void 0) {
|
|
2206
|
-
await Promise.race([sessionCreated, delayResolved(
|
|
2213
|
+
await Promise.race([sessionCreated, delayResolved(stopTimeoutMs(), void 0)]);
|
|
2207
2214
|
sessionId = getSessionId();
|
|
2208
2215
|
if (sessionId === void 0) {
|
|
2209
2216
|
if (entry.escalateOn === "stop-outcome") return "no-session";
|
|
@@ -2215,7 +2222,7 @@ var ZcodeEngine = class {
|
|
|
2215
2222
|
return graceRaceThenKill();
|
|
2216
2223
|
}
|
|
2217
2224
|
try {
|
|
2218
|
-
await rt.conn.request("session/stop", { sessionId }, { timeoutMs:
|
|
2225
|
+
await rt.conn.request("session/stop", { sessionId }, { timeoutMs: stopTimeoutMs() });
|
|
2219
2226
|
} catch (err) {
|
|
2220
2227
|
if (entry.escalateOn === "stop-outcome") {
|
|
2221
2228
|
if (isAppServerRpcError(err)) {
|
|
@@ -2597,6 +2604,31 @@ function isPlainObject(v) {
|
|
|
2597
2604
|
function errMessage3(err) {
|
|
2598
2605
|
return (0, import_subagent_engine_sdk3.toErrorMessage)(err);
|
|
2599
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
|
+
}
|
|
2600
2632
|
function delayResolved(ms, value) {
|
|
2601
2633
|
return new Promise((resolve2) => {
|
|
2602
2634
|
const t = setTimeout(() => resolve2(value), ms);
|
|
@@ -2611,7 +2643,7 @@ function abortedAppServerAttempt(ctx) {
|
|
|
2611
2643
|
return {
|
|
2612
2644
|
kind: "aborted",
|
|
2613
2645
|
output: syntheticAppServerOutput(null),
|
|
2614
|
-
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`
|
|
2615
2647
|
};
|
|
2616
2648
|
}
|
|
2617
2649
|
function turnResultToPayload(r) {
|
|
@@ -2792,7 +2824,7 @@ function createZcodeEngine(deps) {
|
|
|
2792
2824
|
function createDefaultZcodeEngine() {
|
|
2793
2825
|
return createZcodeEngine({
|
|
2794
2826
|
engineDataDir: defaultEngineDataDir,
|
|
2795
|
-
...process.env["
|
|
2827
|
+
...process.env["TAIJI_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["TAIJI_ZCODE_CLI"] } : {}
|
|
2796
2828
|
});
|
|
2797
2829
|
}
|
|
2798
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.5.
|
|
64
|
+
"@zhushanwen/subagent-engine-sdk": "0.5.1"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/node": "^24.0.0",
|