@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.
@@ -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",
@@ -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:"unsupported",run 域是唯一发射面(无 chat 域接线)。
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(ZCODE_APPSERVER_ABORT_GRACE_MS, false)
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(ZCODE_APPSERVER_STOP_TIMEOUT_MS, void 0)]);
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: ZCODE_APPSERVER_STOP_TIMEOUT_MS });
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 ${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`
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["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"] } : {}
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 = "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",
@@ -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:"unsupported",run 域是唯一发射面(无 chat 域接线)。
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(ZCODE_APPSERVER_ABORT_GRACE_MS, false)
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(ZCODE_APPSERVER_STOP_TIMEOUT_MS, void 0)]);
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: ZCODE_APPSERVER_STOP_TIMEOUT_MS });
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 ${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`
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["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"] } : {}
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 支持 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-DMHXNYG2.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",
@@ -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:"unsupported",run 域是唯一发射面(无 chat 域接线)。
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(ZCODE_APPSERVER_ABORT_GRACE_MS, false)
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(ZCODE_APPSERVER_STOP_TIMEOUT_MS, void 0)]);
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: ZCODE_APPSERVER_STOP_TIMEOUT_MS });
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 ${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`
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["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"] } : {}
2795
2828
  });
2796
2829
  }
2797
2830
 
package/dist/main.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EngineProtocolServer
3
- } from "./chunk-DMHXNYG2.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.0",
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.4.0"
64
+ "@zhushanwen/subagent-engine-sdk": "0.5.1"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@types/node": "^24.0.0",