@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.
@@ -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 = "XYZ_ZCODE_TURN_IDLE_TIMEOUT_MS";
16
- var ZCODE_TURN_MAX_TIMEOUT_ENV = "XYZ_ZCODE_TURN_MAX_TIMEOUT_MS";
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 XYZ_AGENT_DATA_DIR 缺省链:显式传参 > 宿主注入 env > tmpdir 占位
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["XYZ_AGENT_DATA_DIR"] ?? tmpdir(),
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(ZCODE_APPSERVER_ABORT_GRACE_MS, false)
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(ZCODE_APPSERVER_STOP_TIMEOUT_MS, void 0)]);
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: ZCODE_APPSERVER_STOP_TIMEOUT_MS });
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 ${ZCODE_APPSERVER_ABORT_GRACE_MS}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`
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["XYZ_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["XYZ_ZCODE_CLI"] } : {}
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 = "XYZ_ZCODE_TURN_IDLE_TIMEOUT_MS";
66
- var ZCODE_TURN_MAX_TIMEOUT_ENV = "XYZ_ZCODE_TURN_MAX_TIMEOUT_MS";
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 XYZ_AGENT_DATA_DIR 缺省链:显式传参 > 宿主注入 env > tmpdir 占位
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["XYZ_AGENT_DATA_DIR"] ?? (0, import_node_os.tmpdir)(),
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(ZCODE_APPSERVER_ABORT_GRACE_MS, false)
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(ZCODE_APPSERVER_STOP_TIMEOUT_MS, void 0)]);
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: ZCODE_APPSERVER_STOP_TIMEOUT_MS });
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 ${ZCODE_APPSERVER_ABORT_GRACE_MS}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`
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["XYZ_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["XYZ_ZCODE_CLI"] } : {}
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 支持 XYZ_ZCODE_CLI 覆盖
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 支持 XYZ_ZCODE_CLI 覆盖
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
@@ -10,7 +10,7 @@ import {
10
10
  readZcodeSessionView,
11
11
  zcodeDbPathAllowlist,
12
12
  zcodeSessionDbPath
13
- } from "./chunk-I5OX22FU.js";
13
+ } from "./chunk-YVCSSNF6.js";
14
14
 
15
15
  // src/golden-sample.ts
16
16
  var ZCODE_APPSERVER_GOLDEN = {
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 = "XYZ_ZCODE_TURN_IDLE_TIMEOUT_MS";
46
- var ZCODE_TURN_MAX_TIMEOUT_ENV = "XYZ_ZCODE_TURN_MAX_TIMEOUT_MS";
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 XYZ_AGENT_DATA_DIR 缺省链:显式传参 > 宿主注入 env > tmpdir 占位
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["XYZ_AGENT_DATA_DIR"] ?? (0, import_node_os.tmpdir)(),
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(ZCODE_APPSERVER_ABORT_GRACE_MS, false)
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(ZCODE_APPSERVER_STOP_TIMEOUT_MS, void 0)]);
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: ZCODE_APPSERVER_STOP_TIMEOUT_MS });
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 ${ZCODE_APPSERVER_ABORT_GRACE_MS}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`
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["XYZ_ZCODE_CLI"] !== void 0 ? { cliPath: process.env["XYZ_ZCODE_CLI"] } : {}
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
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EngineProtocolServer
3
- } from "./chunk-I5OX22FU.js";
3
+ } from "./chunk-YVCSSNF6.js";
4
4
 
5
5
  // src/main.ts
6
6
  import {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhushanwen/zcode-subagent-cli",
3
- "version": "0.3.1",
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
- "xyz-agent": {
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/ 保留(XYZ_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 影响。",
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.0"
64
+ "@zhushanwen/subagent-engine-sdk": "0.5.1"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@types/node": "^24.0.0",