jinzd-ai-cli 0.4.331 → 0.4.332

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.
Files changed (39) hide show
  1. package/dist/{batch-OOHC5POO.js → batch-5KB5ZD3J.js} +2 -2
  2. package/dist/{chunk-MJSK6ZYR.js → chunk-24FZG7J3.js} +4 -4
  3. package/dist/{chunk-CM5C7ZSM.js → chunk-2CWXRYVB.js} +1 -1
  4. package/dist/{chunk-Q26V2PNA.js → chunk-3HJKR5GL.js} +1 -1
  5. package/dist/{chunk-EWARNWJ4.js → chunk-4NTPVPTB.js} +4 -4
  6. package/dist/{chunk-DTVN2LDU.js → chunk-75QDO3E3.js} +1 -1
  7. package/dist/{chunk-L3FDFFD2.js → chunk-BCDBSJVD.js} +7 -7
  8. package/dist/{chunk-RZDRBFAB.js → chunk-C2TWTHXL.js} +4 -4
  9. package/dist/{chunk-R3XIU7NS.js → chunk-CJ3CKWHM.js} +1 -1
  10. package/dist/{chunk-MN25ELTF.js → chunk-DAAR4XOY.js} +3 -1
  11. package/dist/{chunk-6BGW25LG.js → chunk-EHHZFVJU.js} +1 -1
  12. package/dist/{chunk-TF2FNRDZ.js → chunk-HIU2O3TP.js} +1 -1
  13. package/dist/{chunk-IJNDIOOQ.js → chunk-KB3G7OUR.js} +1 -1
  14. package/dist/{chunk-YCDF6FNR.js → chunk-LXUPXNH3.js} +1 -1
  15. package/dist/{chunk-NOLK5C4U.js → chunk-NP2GRK2N.js} +1 -1
  16. package/dist/{chunk-56ME7PB2.js → chunk-OJOTU4DK.js} +1 -1
  17. package/dist/{chunk-QFF2PTI3.js → chunk-UKSQAX4M.js} +1 -1
  18. package/dist/{ci-HNYUXJUE.js → ci-T7NH6UPH.js} +5 -5
  19. package/dist/{ci-format-ZLBEAU7Z.js → ci-format-24Q5ASIV.js} +2 -2
  20. package/dist/{constants-JM6MK5SS.js → constants-TWHK4Z57.js} +1 -1
  21. package/dist/{constants-4EH6Y6VI.js → constants-XFVFZWXZ.js} +1 -1
  22. package/dist/{doctor-cli-VCNERMX5.js → doctor-cli-2YBJM2LX.js} +5 -5
  23. package/dist/electron-server.js +13 -11
  24. package/dist/{hub-3OXLWTEP.js → hub-GXTGURPL.js} +4 -4
  25. package/dist/{hub-server-LJWXNEWK.js → hub-server-HOQ6S3NK.js} +1 -1
  26. package/dist/index.js +18 -18
  27. package/dist/{persistent-memory-LMVWIHMX.js → persistent-memory-IQFJRGNW.js} +2 -2
  28. package/dist/{persistent-memory-PAS7NAPQ.js → persistent-memory-YWXEAVAH.js} +2 -2
  29. package/dist/{pr-IMR62OHN.js → pr-FJOUGUSY.js} +5 -5
  30. package/dist/{run-tests-MQVGE6FK.js → run-tests-CYGWBNOZ.js} +2 -2
  31. package/dist/{run-tests-2TVEWCQI.js → run-tests-KMJDP24I.js} +2 -2
  32. package/dist/{server-55X6MCGX.js → server-LVPB7MLP.js} +5 -5
  33. package/dist/{server-6MS2NGEJ.js → server-X57LWADN.js} +16 -16
  34. package/dist/{task-orchestrator-KIDJB7NP.js → task-orchestrator-SM6NA6AF.js} +5 -5
  35. package/dist/{usage-X2CQYAUA.js → usage-VZ2ZOHHI.js} +2 -2
  36. package/dist/web/client/app.js +21 -16
  37. package/dist/web/client/app.js.br +0 -0
  38. package/dist/web/client/app.js.gz +0 -0
  39. package/package.json +1 -1
@@ -4,12 +4,12 @@ import {
4
4
  } from "./chunk-RS7SKYTS.js";
5
5
  import {
6
6
  ConfigManager
7
- } from "./chunk-CM5C7ZSM.js";
7
+ } from "./chunk-2CWXRYVB.js";
8
8
  import "./chunk-TU3L3PW7.js";
9
9
  import {
10
10
  atomicWriteFileSync
11
11
  } from "./chunk-BMLQPSHP.js";
12
- import "./chunk-YCDF6FNR.js";
12
+ import "./chunk-LXUPXNH3.js";
13
13
 
14
14
  // src/cli/batch.ts
15
15
  import Anthropic from "@anthropic-ai/sdk";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  evaluateCiGate,
4
4
  normalizeCiThresholds
5
- } from "./chunk-IJNDIOOQ.js";
5
+ } from "./chunk-KB3G7OUR.js";
6
6
  import {
7
7
  buildReviewPrompt,
8
8
  buildSecurityReviewPrompt,
@@ -13,13 +13,13 @@ import {
13
13
  } from "./chunk-6YZEZFX5.js";
14
14
  import {
15
15
  ProviderRegistry
16
- } from "./chunk-QFF2PTI3.js";
16
+ } from "./chunk-UKSQAX4M.js";
17
17
  import {
18
18
  ConfigManager
19
- } from "./chunk-CM5C7ZSM.js";
19
+ } from "./chunk-2CWXRYVB.js";
20
20
  import {
21
21
  VERSION
22
- } from "./chunk-YCDF6FNR.js";
22
+ } from "./chunk-LXUPXNH3.js";
23
23
 
24
24
  // src/cli/ci.ts
25
25
  import { execFileSync } from "child_process";
@@ -11,7 +11,7 @@ import {
11
11
  CONFIG_FILE_NAME,
12
12
  HISTORY_DIR_NAME,
13
13
  PLUGINS_DIR_NAME
14
- } from "./chunk-YCDF6FNR.js";
14
+ } from "./chunk-LXUPXNH3.js";
15
15
 
16
16
  // src/config/config-manager.ts
17
17
  import { readFileSync, existsSync, mkdirSync } from "fs";
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  CONFIG_DIR_NAME,
10
10
  PLUGINS_DIR_NAME
11
- } from "./chunk-YCDF6FNR.js";
11
+ } from "./chunk-LXUPXNH3.js";
12
12
 
13
13
  // src/diagnostics/tool-stats.ts
14
14
  import { mkdirSync } from "fs";
@@ -8,13 +8,13 @@ import {
8
8
  listHooks,
9
9
  listInstalledPlugins,
10
10
  resetStats
11
- } from "./chunk-Q26V2PNA.js";
11
+ } from "./chunk-3HJKR5GL.js";
12
12
  import {
13
13
  ProviderRegistry
14
- } from "./chunk-QFF2PTI3.js";
14
+ } from "./chunk-UKSQAX4M.js";
15
15
  import {
16
16
  ConfigManager
17
- } from "./chunk-CM5C7ZSM.js";
17
+ } from "./chunk-2CWXRYVB.js";
18
18
  import {
19
19
  getGitRoot
20
20
  } from "./chunk-HOSJZMQS.js";
@@ -26,7 +26,7 @@ import {
26
26
  MCP_PROJECT_CONFIG_NAME,
27
27
  MEMORY_FILE_NAME,
28
28
  VERSION
29
- } from "./chunk-YCDF6FNR.js";
29
+ } from "./chunk-LXUPXNH3.js";
30
30
 
31
31
  // src/diagnostics/doctor-report.ts
32
32
  import { existsSync as existsSync3, statSync as statSync2 } from "fs";
@@ -1,5 +1,5 @@
1
1
  // src/core/constants.ts
2
- var VERSION = "0.4.331";
2
+ var VERSION = "0.4.332";
3
3
  var APP_NAME = "ai-cli";
4
4
  var CONFIG_DIR_NAME = ".aicli";
5
5
  var CONFIG_FILE_NAME = "config.json";
@@ -16,7 +16,7 @@ import {
16
16
  setPreferredAgentName,
17
17
  truncateForPersist,
18
18
  undoStack
19
- } from "./chunk-RZDRBFAB.js";
19
+ } from "./chunk-C2TWTHXL.js";
20
20
  import {
21
21
  buildReviewPrompt,
22
22
  buildSecurityReviewPrompt
@@ -51,7 +51,7 @@ import {
51
51
  touchMemoryReferences,
52
52
  updateMemoryApproval,
53
53
  updateMemoryEntry
54
- } from "./chunk-56ME7PB2.js";
54
+ } from "./chunk-OJOTU4DK.js";
55
55
  import {
56
56
  theme
57
57
  } from "./chunk-5C76XDDF.js";
@@ -65,7 +65,7 @@ import {
65
65
  import {
66
66
  buildDoctorReport,
67
67
  formatDoctorReport
68
- } from "./chunk-EWARNWJ4.js";
68
+ } from "./chunk-4NTPVPTB.js";
69
69
  import {
70
70
  describePlugin,
71
71
  getActivePluginAssets,
@@ -80,7 +80,7 @@ import {
80
80
  trustHook,
81
81
  trustPlugin,
82
82
  untrustHook
83
- } from "./chunk-Q26V2PNA.js";
83
+ } from "./chunk-3HJKR5GL.js";
84
84
  import {
85
85
  isCleanDocumentBody,
86
86
  stripOuterCodeFence
@@ -109,7 +109,7 @@ import {
109
109
  MCP_TOOL_PREFIX,
110
110
  REPO_URL,
111
111
  VERSION
112
- } from "./chunk-YCDF6FNR.js";
112
+ } from "./chunk-LXUPXNH3.js";
113
113
 
114
114
  // src/skills/manager.ts
115
115
  import { existsSync, readdirSync, mkdirSync, statSync } from "fs";
@@ -2445,7 +2445,7 @@ No tools match "${filter}".
2445
2445
  const { join: join6 } = await import("path");
2446
2446
  const { existsSync: existsSync6 } = await import("fs");
2447
2447
  const { getGitRoot } = await import("./git-context-EXOEHQSF.js");
2448
- const { MCP_PROJECT_CONFIG_NAME } = await import("./constants-4EH6Y6VI.js");
2448
+ const { MCP_PROJECT_CONFIG_NAME } = await import("./constants-XFVFZWXZ.js");
2449
2449
  const { approveProject, hashMcpFile } = await import("./project-trust-KGG2BWKC.js");
2450
2450
  const cwd = process.cwd();
2451
2451
  const projectRoot = getGitRoot(cwd) ?? cwd;
@@ -3553,7 +3553,7 @@ function createReviewCommands() {
3553
3553
  usage: "/test [command|filter]",
3554
3554
  async execute(args, ctx) {
3555
3555
  try {
3556
- const { executeTests } = await import("./run-tests-2TVEWCQI.js");
3556
+ const { executeTests } = await import("./run-tests-KMJDP24I.js");
3557
3557
  const argStr = args.join(" ").trim();
3558
3558
  let testArgs = {};
3559
3559
  if (argStr) {
@@ -11,7 +11,7 @@ import {
11
11
  searchPersistentMemories,
12
12
  touchMemoryReferences,
13
13
  updateMemoryEntry
14
- } from "./chunk-56ME7PB2.js";
14
+ } from "./chunk-OJOTU4DK.js";
15
15
  import {
16
16
  indexProject
17
17
  } from "./chunk-RWRZVQCB.js";
@@ -30,7 +30,7 @@ import {
30
30
  runHook,
31
31
  runLifecycleHooks,
32
32
  runTool
33
- } from "./chunk-Q26V2PNA.js";
33
+ } from "./chunk-3HJKR5GL.js";
34
34
  import {
35
35
  getDangerLevel,
36
36
  isFileWriteTool
@@ -66,7 +66,7 @@ import {
66
66
  recoverGbkMojibake,
67
67
  runTestsTool,
68
68
  shellInvocation
69
- } from "./chunk-6BGW25LG.js";
69
+ } from "./chunk-EHHZFVJU.js";
70
70
  import {
71
71
  CONFIG_DIR_NAME,
72
72
  DEFAULT_MAX_TOOL_OUTPUT_CHARS_CAP,
@@ -75,7 +75,7 @@ import {
75
75
  SUBAGENT_ALLOWED_TOOLS,
76
76
  SUBAGENT_DEFAULT_MAX_ROUNDS,
77
77
  SUBAGENT_MAX_ROUNDS_LIMIT
78
- } from "./chunk-YCDF6FNR.js";
78
+ } from "./chunk-LXUPXNH3.js";
79
79
  import {
80
80
  getCurrentSessionKey,
81
81
  getExecutionConfigDir,
@@ -12,7 +12,7 @@ import {
12
12
  MEMORY_FILE_NAME,
13
13
  MEMORY_MAX_CHARS,
14
14
  MEMORY_STORE_FILE_NAME
15
- } from "./chunk-DTVN2LDU.js";
15
+ } from "./chunk-75QDO3E3.js";
16
16
 
17
17
  // src/memory/persistent-memory.ts
18
18
  import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from "fs";
@@ -26,8 +26,10 @@ function stripThinkBlocks(raw) {
26
26
  const filter = new ThinkTagFilter();
27
27
  return filter.push(raw) + filter.flush();
28
28
  }
29
+ var REASONING_ONLY_NOTICE = "(no reply this round \u2014 reasoning ran past the output limit)";
29
30
  function parseTurn(raw) {
30
- const trimmed = stripThinkBlocks(raw).trim();
31
+ let trimmed = stripThinkBlocks(raw).trim();
32
+ if (!trimmed && /<think>/i.test(raw)) trimmed = REASONING_ONLY_NOTICE;
31
33
  const upper = trimmed.toUpperCase();
32
34
  if (upper.startsWith(PASS_MARKER) || upper === PASS_MARKER) {
33
35
  return { content: "", passed: true, converged: false };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TEST_TIMEOUT
4
- } from "./chunk-YCDF6FNR.js";
4
+ } from "./chunk-LXUPXNH3.js";
5
5
  import {
6
6
  getExecutionConfigDir,
7
7
  getExecutionSignal
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-QMFMST2T.js";
5
5
  import {
6
6
  TEST_TIMEOUT
7
- } from "./chunk-DTVN2LDU.js";
7
+ } from "./chunk-75QDO3E3.js";
8
8
 
9
9
  // src/tools/builtin/run-tests.ts
10
10
  import { spawn as spawn2 } from "child_process";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  VERSION
4
- } from "./chunk-YCDF6FNR.js";
4
+ } from "./chunk-LXUPXNH3.js";
5
5
 
6
6
  // src/cli/ci-format.ts
7
7
  var DEFAULT_CI_THRESHOLDS = {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/core/constants.ts
4
- var VERSION = "0.4.331";
4
+ var VERSION = "0.4.332";
5
5
  var APP_NAME = "ai-cli";
6
6
  var CONFIG_DIR_NAME = ".aicli";
7
7
  var CONFIG_FILE_NAME = "config.json";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  HubAgent,
4
4
  isConverged
5
- } from "./chunk-MN25ELTF.js";
5
+ } from "./chunk-DAAR4XOY.js";
6
6
 
7
7
  // src/hub/discuss.ts
8
8
  var DiscussionOrchestrator = class {
@@ -13,7 +13,7 @@ import {
13
13
  MEMORY_FILE_NAME,
14
14
  MEMORY_MAX_CHARS,
15
15
  MEMORY_STORE_FILE_NAME
16
- } from "./chunk-YCDF6FNR.js";
16
+ } from "./chunk-LXUPXNH3.js";
17
17
 
18
18
  // src/memory/persistent-memory.ts
19
19
  import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from "fs";
@@ -17,7 +17,7 @@ import {
17
17
  } from "./chunk-BMLQPSHP.js";
18
18
  import {
19
19
  DEFAULT_MAX_TOKENS
20
- } from "./chunk-YCDF6FNR.js";
20
+ } from "./chunk-LXUPXNH3.js";
21
21
 
22
22
  // src/providers/claude.ts
23
23
  import Anthropic from "@anthropic-ai/sdk";
@@ -3,17 +3,17 @@ import {
3
3
  CI_COMMENT_MARKER,
4
4
  countSeverity,
5
5
  runCi
6
- } from "./chunk-MJSK6ZYR.js";
7
- import "./chunk-IJNDIOOQ.js";
6
+ } from "./chunk-24FZG7J3.js";
7
+ import "./chunk-KB3G7OUR.js";
8
8
  import "./chunk-HLWUDRBO.js";
9
9
  import "./chunk-6YZEZFX5.js";
10
- import "./chunk-QFF2PTI3.js";
11
- import "./chunk-CM5C7ZSM.js";
10
+ import "./chunk-UKSQAX4M.js";
11
+ import "./chunk-2CWXRYVB.js";
12
12
  import "./chunk-W4P2KJZN.js";
13
13
  import "./chunk-C6GA7H5D.js";
14
14
  import "./chunk-TU3L3PW7.js";
15
15
  import "./chunk-BMLQPSHP.js";
16
- import "./chunk-YCDF6FNR.js";
16
+ import "./chunk-LXUPXNH3.js";
17
17
  export {
18
18
  CI_COMMENT_MARKER,
19
19
  countSeverity,
@@ -6,8 +6,8 @@ import {
6
6
  formatCiResult,
7
7
  formatCiSarif,
8
8
  normalizeCiThresholds
9
- } from "./chunk-IJNDIOOQ.js";
10
- import "./chunk-YCDF6FNR.js";
9
+ } from "./chunk-KB3G7OUR.js";
10
+ import "./chunk-LXUPXNH3.js";
11
11
  export {
12
12
  DEFAULT_CI_THRESHOLDS,
13
13
  detectCiGateSignals,
@@ -38,7 +38,7 @@ import {
38
38
  TEST_TIMEOUT,
39
39
  VERSION,
40
40
  buildUserIdentityPrompt
41
- } from "./chunk-DTVN2LDU.js";
41
+ } from "./chunk-75QDO3E3.js";
42
42
  export {
43
43
  AGENTIC_BEHAVIOR_GUIDELINE,
44
44
  APP_NAME,
@@ -39,7 +39,7 @@ import {
39
39
  TEST_TIMEOUT,
40
40
  VERSION,
41
41
  buildUserIdentityPrompt
42
- } from "./chunk-YCDF6FNR.js";
42
+ } from "./chunk-LXUPXNH3.js";
43
43
  export {
44
44
  AGENTIC_BEHAVIOR_GUIDELINE,
45
45
  APP_NAME,
@@ -2,17 +2,17 @@
2
2
  import {
3
3
  formatDoctorReport,
4
4
  runDoctorCli
5
- } from "./chunk-EWARNWJ4.js";
6
- import "./chunk-Q26V2PNA.js";
5
+ } from "./chunk-4NTPVPTB.js";
6
+ import "./chunk-3HJKR5GL.js";
7
7
  import "./chunk-RS7SKYTS.js";
8
- import "./chunk-QFF2PTI3.js";
9
- import "./chunk-CM5C7ZSM.js";
8
+ import "./chunk-UKSQAX4M.js";
9
+ import "./chunk-2CWXRYVB.js";
10
10
  import "./chunk-W4P2KJZN.js";
11
11
  import "./chunk-C6GA7H5D.js";
12
12
  import "./chunk-TU3L3PW7.js";
13
13
  import "./chunk-HOSJZMQS.js";
14
14
  import "./chunk-BMLQPSHP.js";
15
- import "./chunk-YCDF6FNR.js";
15
+ import "./chunk-LXUPXNH3.js";
16
16
  export {
17
17
  formatDoctorReport,
18
18
  runDoctorCli
@@ -55,7 +55,7 @@ import {
55
55
  touchMemoryReferences,
56
56
  updateMemoryApproval,
57
57
  updateMemoryEntry
58
- } from "./chunk-R3XIU7NS.js";
58
+ } from "./chunk-CJ3CKWHM.js";
59
59
  import {
60
60
  DEFAULT_PATTERNS,
61
61
  redactJson,
@@ -81,7 +81,7 @@ import {
81
81
  recoverGbkMojibake,
82
82
  runTestsTool,
83
83
  shellInvocation
84
- } from "./chunk-TF2FNRDZ.js";
84
+ } from "./chunk-HIU2O3TP.js";
85
85
  import {
86
86
  getCurrentSessionKey,
87
87
  getExecutionConfigDir,
@@ -123,7 +123,7 @@ import {
123
123
  SUBAGENT_MAX_ROUNDS_LIMIT,
124
124
  VERSION,
125
125
  buildUserIdentityPrompt
126
- } from "./chunk-DTVN2LDU.js";
126
+ } from "./chunk-75QDO3E3.js";
127
127
 
128
128
  // src/web/access.ts
129
129
  import { randomBytes, timingSafeEqual } from "crypto";
@@ -16008,8 +16008,10 @@ function stripThinkBlocks(raw) {
16008
16008
  const filter = new ThinkTagFilter();
16009
16009
  return filter.push(raw) + filter.flush();
16010
16010
  }
16011
+ var REASONING_ONLY_NOTICE = "(no reply this round \u2014 reasoning ran past the output limit)";
16011
16012
  function parseTurn(raw) {
16012
- const trimmed = stripThinkBlocks(raw).trim();
16013
+ let trimmed = stripThinkBlocks(raw).trim();
16014
+ if (!trimmed && /<think>/i.test(raw)) trimmed = REASONING_ONLY_NOTICE;
16013
16015
  const upper = trimmed.toUpperCase();
16014
16016
  if (upper.startsWith(PASS_MARKER) || upper === PASS_MARKER) {
16015
16017
  return { content: "", passed: true, converged: false };
@@ -17942,7 +17944,7 @@ Cache: write=${cacheCreate} read=${cacheRead}` : "";
17942
17944
  Cost: ${formatCost(cost)}` : "";
17943
17945
  let memoryLine = "";
17944
17946
  try {
17945
- const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-LMVWIHMX.js");
17947
+ const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-IQFJRGNW.js");
17946
17948
  const pending = countPendingMemories2(ctx.config.getConfigDir());
17947
17949
  if (pending > 0) memoryLine = `
17948
17950
  Memory: \u26A0 ${pending} pending approval \u2014 see the Memory panel or /memory`;
@@ -18930,7 +18932,7 @@ async function handleTest(args, ctx) {
18930
18932
  const isCommand = argStr.includes(" ") || /^(mvn|gradle|npm|pytest|cargo|go)\b/.test(argStr);
18931
18933
  testArgs = isCommand ? { command: argStr } : { filter: argStr };
18932
18934
  }
18933
- const runTests = ctx.runTests ?? (await import("./run-tests-MQVGE6FK.js")).executeTests;
18935
+ const runTests = ctx.runTests ?? (await import("./run-tests-CYGWBNOZ.js")).executeTests;
18934
18936
  const report = await runTests(testArgs);
18935
18937
  ctx.send({ type: "info", message: report });
18936
18938
  } catch (err) {
@@ -19321,7 +19323,7 @@ async function handleMemory(args, ctx) {
19321
19323
  }
19322
19324
  if (intent.kind === "status") {
19323
19325
  const { getChatIndexStatus: getChatIndexStatus2 } = await import("./chat-index-RLVLQRRC.js");
19324
- const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-LMVWIHMX.js");
19326
+ const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-IQFJRGNW.js");
19325
19327
  const memories = listMemoryEntries2(configDir, { includeExpired: true, includeRejected: true });
19326
19328
  const injected = formatMemoryForPrompt2(configDir, process.cwd(), ctx.config.get("memory")?.maxChars);
19327
19329
  const view = buildMemoryStatusView({
@@ -19344,7 +19346,7 @@ async function handleMemory(args, ctx) {
19344
19346
  return;
19345
19347
  }
19346
19348
  if (intent.kind === "recall") {
19347
- const { searchPersistentMemories: searchPersistentMemories2, touchMemoryReferences: touchMemoryReferences2 } = await import("./persistent-memory-LMVWIHMX.js");
19349
+ const { searchPersistentMemories: searchPersistentMemories2, touchMemoryReferences: touchMemoryReferences2 } = await import("./persistent-memory-IQFJRGNW.js");
19348
19350
  const { searchChatMemory: searchChatMemory2 } = await import("./chat-index-RLVLQRRC.js");
19349
19351
  const persistentHits = searchPersistentMemories2(configDir, intent.query, process.cwd(), 3);
19350
19352
  if (persistentHits.length > 0) {
@@ -19465,7 +19467,7 @@ async function handleMemory(args, ctx) {
19465
19467
  ctx.handleMemoryManage(intent.action, args[1], intent.action === "expire" ? args[2] : void 0);
19466
19468
  } else if (intent.kind === "export") {
19467
19469
  if (args[1] === "md") {
19468
- const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-LMVWIHMX.js");
19470
+ const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-IQFJRGNW.js");
19469
19471
  ctx.send({
19470
19472
  type: "export_data",
19471
19473
  format: "md",
@@ -20471,7 +20473,7 @@ No tools match "${filter}".
20471
20473
  const { join: join27 } = await import("path");
20472
20474
  const { existsSync: existsSync33 } = await import("fs");
20473
20475
  const { getGitRoot: getGitRoot2 } = await import("./git-context-VNCA2GU7.js");
20474
- const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-JM6MK5SS.js");
20476
+ const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-TWHK4Z57.js");
20475
20477
  const { approveProject, hashMcpFile } = await import("./project-trust-6CJB5ZMX.js");
20476
20478
  const cwd = process.cwd();
20477
20479
  const projectRoot = getGitRoot2(cwd) ?? cwd;
@@ -21390,7 +21392,7 @@ function createReviewCommands() {
21390
21392
  usage: "/test [command|filter]",
21391
21393
  async execute(args, ctx) {
21392
21394
  try {
21393
- const { executeTests } = await import("./run-tests-MQVGE6FK.js");
21395
+ const { executeTests } = await import("./run-tests-CYGWBNOZ.js");
21394
21396
  const argStr = args.join(" ").trim();
21395
21397
  let testArgs = {};
21396
21398
  if (argStr) {
@@ -10,8 +10,8 @@ import {
10
10
  listPresets,
11
11
  parseRolesJson,
12
12
  resolveRoleProviders
13
- } from "./chunk-NOLK5C4U.js";
14
- import "./chunk-MN25ELTF.js";
13
+ } from "./chunk-NP2GRK2N.js";
14
+ import "./chunk-DAAR4XOY.js";
15
15
  import {
16
16
  thinkingParamsFor
17
17
  } from "./chunk-6YZEZFX5.js";
@@ -148,7 +148,7 @@ ${content}`);
148
148
  }
149
149
  }
150
150
  async function runTaskMode(config, providers, configManager, topic) {
151
- const { TaskOrchestrator } = await import("./task-orchestrator-KIDJB7NP.js");
151
+ const { TaskOrchestrator } = await import("./task-orchestrator-SM6NA6AF.js");
152
152
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
153
153
  let interrupted = false;
154
154
  const onSigint = () => {
@@ -184,7 +184,7 @@ async function runTaskMode(config, providers, configManager, topic) {
184
184
  }
185
185
  }
186
186
  async function runDistributedDiscussion(config, providers, topic, port) {
187
- const { HubServer } = await import("./hub-server-LJWXNEWK.js");
187
+ const { HubServer } = await import("./hub-server-HOQ6S3NK.js");
188
188
  const hub = new HubServer(config, providers, port);
189
189
  let interrupted = false;
190
190
  const onSigint = () => {
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-TDQW2YHK.js";
17
17
  import {
18
18
  HubAgent
19
- } from "./chunk-MN25ELTF.js";
19
+ } from "./chunk-DAAR4XOY.js";
20
20
  import "./chunk-C6GA7H5D.js";
21
21
 
22
22
  // src/hub/hub-server.ts
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ import {
24
24
  setupProxy,
25
25
  snapshotFile,
26
26
  stripRoutingTags
27
- } from "./chunk-L3FDFFD2.js";
27
+ } from "./chunk-BCDBSJVD.js";
28
28
  import {
29
29
  CostTracker,
30
30
  getPricing,
@@ -47,7 +47,7 @@ import {
47
47
  setMaxOutputCap,
48
48
  spawnAgentContext,
49
49
  undoStack
50
- } from "./chunk-RZDRBFAB.js";
50
+ } from "./chunk-C2TWTHXL.js";
51
51
  import "./chunk-HLWUDRBO.js";
52
52
  import {
53
53
  NO_THINKING,
@@ -60,7 +60,7 @@ import {
60
60
  countPendingMemories,
61
61
  detectStaleLegacyMarkdownEdit,
62
62
  formatMemoryForPrompt
63
- } from "./chunk-56ME7PB2.js";
63
+ } from "./chunk-OJOTU4DK.js";
64
64
  import "./chunk-RWRZVQCB.js";
65
65
  import "./chunk-B3MPYI4E.js";
66
66
  import "./chunk-M6HLYG33.js";
@@ -81,22 +81,22 @@ import {
81
81
  import {
82
82
  loadContextFiles,
83
83
  writeCrashLog
84
- } from "./chunk-EWARNWJ4.js";
84
+ } from "./chunk-4NTPVPTB.js";
85
85
  import {
86
86
  getActivePluginAssets,
87
87
  getPendingHookTrust,
88
88
  installFlushOnExit,
89
89
  mergePluginHooks,
90
90
  runLifecycleHooks
91
- } from "./chunk-Q26V2PNA.js";
91
+ } from "./chunk-3HJKR5GL.js";
92
92
  import "./chunk-RS7SKYTS.js";
93
93
  import {
94
94
  ProviderRegistry,
95
95
  listBuiltInProviderMetadata
96
- } from "./chunk-QFF2PTI3.js";
96
+ } from "./chunk-UKSQAX4M.js";
97
97
  import {
98
98
  ConfigManager
99
- } from "./chunk-CM5C7ZSM.js";
99
+ } from "./chunk-2CWXRYVB.js";
100
100
  import "./chunk-W4P2KJZN.js";
101
101
  import {
102
102
  CONTENT_ONLY_STREAM_REMINDER,
@@ -135,7 +135,7 @@ import {
135
135
  isInterrupted,
136
136
  requestInterrupt,
137
137
  resetInterrupt
138
- } from "./chunk-6BGW25LG.js";
138
+ } from "./chunk-EHHZFVJU.js";
139
139
  import {
140
140
  AGENTIC_BEHAVIOR_GUIDELINE,
141
141
  AUTHOR,
@@ -153,7 +153,7 @@ import {
153
153
  SKILLS_DIR_NAME,
154
154
  VERSION,
155
155
  buildUserIdentityPrompt
156
- } from "./chunk-YCDF6FNR.js";
156
+ } from "./chunk-LXUPXNH3.js";
157
157
  import "./chunk-SXIJLSVF.js";
158
158
 
159
159
  // src/index.ts
@@ -4119,7 +4119,7 @@ program.command("web").description("Start Web UI server with browser-based chat
4119
4119
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
4120
4120
  process.exit(1);
4121
4121
  }
4122
- const { startWebServer, WebStartupError } = await import("./server-6MS2NGEJ.js");
4122
+ const { startWebServer, WebStartupError } = await import("./server-X57LWADN.js");
4123
4123
  try {
4124
4124
  await startWebServer({ port, host: options.host, externalOrigin: options.externalOrigin });
4125
4125
  } catch (err) {
@@ -4296,11 +4296,11 @@ program.command("sessions").description("List recent conversation sessions").opt
4296
4296
  console.log(footer + "\n");
4297
4297
  });
4298
4298
  program.command("usage").description("Show token + cost usage grouped by provider/model (cross-session)").option("--days <n>", "Only the last N days (inclusive of today)").option("--month <ym>", "Only a specific month, format YYYY-MM (e.g. 2026-06)").option("--json", "Output as JSON (for scripting)").action(async (options) => {
4299
- const { runUsageCli } = await import("./usage-X2CQYAUA.js");
4299
+ const { runUsageCli } = await import("./usage-VZ2ZOHHI.js");
4300
4300
  await runUsageCli(options);
4301
4301
  });
4302
4302
  program.command("doctor").description("Health check: API keys, config, MCP, recent crashes, tool usage, disk usage").option("--json", "Output as JSON (for scripting)").option("--reset-stats", "Reset accumulated tool usage statistics").action(async (options) => {
4303
- const { runDoctorCli } = await import("./doctor-cli-VCNERMX5.js");
4303
+ const { runDoctorCli } = await import("./doctor-cli-2YBJM2LX.js");
4304
4304
  const argv = process.argv.slice(2);
4305
4305
  await runDoctorCli({
4306
4306
  json: !!options.json || argv.includes("--json"),
@@ -4309,7 +4309,7 @@ program.command("doctor").description("Health check: API keys, config, MCP, rece
4309
4309
  });
4310
4310
  program.command("batch <action> [arg] [arg2]").description("Anthropic Message Batches: submit | list | status <id> | results <id> [out] | cancel <id>").option("--dry-run", "Parse and validate input without submitting (submit only)").action(async (action, arg, arg2, options) => {
4311
4311
  try {
4312
- const batch = await import("./batch-OOHC5POO.js");
4312
+ const batch = await import("./batch-5KB5ZD3J.js");
4313
4313
  switch (action) {
4314
4314
  case "submit":
4315
4315
  if (!arg) {
@@ -4352,7 +4352,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
4352
4352
  }
4353
4353
  });
4354
4354
  program.command("mcp-serve").description("Start an MCP server over STDIO, exposing aicli's built-in tools to Claude Desktop / Cursor / other MCP clients").option("--allow-destructive", "Allow bash / run_interactive / task_create (always destructive in MCP mode)").option("--allow-outside-cwd", "Allow tool path arguments to escape the sandbox root \u2014 disabled by default").option("--tools <list>", "Comma-separated whitelist of tools to expose (default: all eligible tools)").option("--cwd <path>", "Working directory AND sandbox root (default: current directory)").action(async (options) => {
4355
- const { startMcpServer } = await import("./server-55X6MCGX.js");
4355
+ const { startMcpServer } = await import("./server-LVPB7MLP.js");
4356
4356
  await startMcpServer({
4357
4357
  allowDestructive: !!options.allowDestructive,
4358
4358
  allowOutsideCwd: !!options.allowOutsideCwd,
@@ -4365,7 +4365,7 @@ program.command("pr <action> [target]").description("PR review helpers: review |
4365
4365
  console.error(`Unknown pr action: ${action}. Use review | security-review | summarize.`);
4366
4366
  process.exit(1);
4367
4367
  }
4368
- const { runPrCli } = await import("./pr-IMR62OHN.js");
4368
+ const { runPrCli } = await import("./pr-FJOUGUSY.js");
4369
4369
  const result = await runPrCli({
4370
4370
  action,
4371
4371
  target,
@@ -4385,8 +4385,8 @@ program.command("pr <action> [target]").description("PR review helpers: review |
4385
4385
  process.exit(result.exitCode);
4386
4386
  });
4387
4387
  program.command("ci").description("Headless PR review (code + security) \u2014 reads git/gh diff, optionally posts to PR. Designed for GitHub Actions.").option("--pr <num>", "PR number or URL; diff fetched via gh pr diff <value>", (v) => /^#?\d+$/.test(v) ? parseInt(v.replace(/^#/, ""), 10) : v).option("--base <ref>", "Base ref for git diff <ref>...HEAD (ignored when --pr set)").option("--post", "Post review as a PR comment (requires gh CLI + GH_TOKEN, needs --pr)").option("--no-update", "Always create a new comment instead of updating the previous aicli review").option("--skip-code", "Skip the code review section").option("--skip-security", "Skip the security review section").option("--detailed", "Use the detailed code-review prompt").option("--max-diff <n>", "Max diff chars sent to the model (default 30000)", (v) => parseInt(v, 10)).option("--provider <id>", "Override provider (default: config.defaultProvider)").option("--model <id>", "Override model").option("--dry-run", "Print result to stdout instead of posting (overrides --post)").option("--json", "Output a structured JSON report").option("--markdown", "Output Markdown report (default)").option("--sarif", "Output SARIF 2.1.0 for code scanning artifacts").option("--fail-on-security-high", "Fail when the security review contains HIGH/CRITICAL findings (default)").option("--no-fail-on-security-high", "Do not fail on security HIGH/CRITICAL findings").option("--fail-on-test-failure", "Fail when the report mentions test failures (default)").option("--no-fail-on-test-failure", "Do not fail on test failure findings").option("--fail-on-lint-failure", "Fail when the report mentions lint/typecheck failures (default)").option("--no-fail-on-lint-failure", "Do not fail on lint/typecheck failure findings").action(async (options) => {
4388
- const { runCi } = await import("./ci-HNYUXJUE.js");
4389
- const { formatCiResult } = await import("./ci-format-ZLBEAU7Z.js");
4388
+ const { runCi } = await import("./ci-T7NH6UPH.js");
4389
+ const { formatCiResult } = await import("./ci-format-24Q5ASIV.js");
4390
4390
  const formats = [options.json, options.markdown, options.sarif].filter(Boolean).length;
4391
4391
  if (formats > 1) {
4392
4392
  console.error("Choose only one output format: --json, --markdown, or --sarif.");
@@ -4545,7 +4545,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
4545
4545
  config.get("customProviders"),
4546
4546
  config.getConfigDir()
4547
4547
  );
4548
- const { startHub } = await import("./hub-3OXLWTEP.js");
4548
+ const { startHub } = await import("./hub-GXTGURPL.js");
4549
4549
  await startHub(
4550
4550
  {
4551
4551
  topic: topic ?? "",
@@ -27,11 +27,11 @@ import {
27
27
  touchMemoryReferences,
28
28
  updateMemoryApproval,
29
29
  updateMemoryEntry
30
- } from "./chunk-R3XIU7NS.js";
30
+ } from "./chunk-CJ3CKWHM.js";
31
31
  import "./chunk-FSC6KEWU.js";
32
32
  import "./chunk-2XMUCC42.js";
33
33
  import "./chunk-CGLYJRFA.js";
34
- import "./chunk-DTVN2LDU.js";
34
+ import "./chunk-75QDO3E3.js";
35
35
  export {
36
36
  addMemoryEntry,
37
37
  backupMemoryStore,
@@ -28,11 +28,11 @@ import {
28
28
  touchMemoryReferences,
29
29
  updateMemoryApproval,
30
30
  updateMemoryEntry
31
- } from "./chunk-56ME7PB2.js";
31
+ } from "./chunk-OJOTU4DK.js";
32
32
  import "./chunk-3FEZSLGI.js";
33
33
  import "./chunk-HOSJZMQS.js";
34
34
  import "./chunk-BMLQPSHP.js";
35
- import "./chunk-YCDF6FNR.js";
35
+ import "./chunk-LXUPXNH3.js";
36
36
  export {
37
37
  addMemoryEntry,
38
38
  backupMemoryStore,
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  countSeverity,
4
4
  runCi
5
- } from "./chunk-MJSK6ZYR.js";
6
- import "./chunk-IJNDIOOQ.js";
5
+ } from "./chunk-24FZG7J3.js";
6
+ import "./chunk-KB3G7OUR.js";
7
7
  import {
8
8
  buildReviewPrompt,
9
9
  buildSecurityReviewPrompt,
@@ -14,17 +14,17 @@ import {
14
14
  } from "./chunk-6YZEZFX5.js";
15
15
  import {
16
16
  ProviderRegistry
17
- } from "./chunk-QFF2PTI3.js";
17
+ } from "./chunk-UKSQAX4M.js";
18
18
  import {
19
19
  ConfigManager
20
- } from "./chunk-CM5C7ZSM.js";
20
+ } from "./chunk-2CWXRYVB.js";
21
21
  import "./chunk-W4P2KJZN.js";
22
22
  import "./chunk-C6GA7H5D.js";
23
23
  import "./chunk-TU3L3PW7.js";
24
24
  import "./chunk-BMLQPSHP.js";
25
25
  import {
26
26
  VERSION
27
- } from "./chunk-YCDF6FNR.js";
27
+ } from "./chunk-LXUPXNH3.js";
28
28
 
29
29
  // src/cli/pr.ts
30
30
  import { execFileSync } from "child_process";
@@ -2,9 +2,9 @@ import {
2
2
  executeTests,
3
3
  runTestProcess,
4
4
  runTestsTool
5
- } from "./chunk-TF2FNRDZ.js";
5
+ } from "./chunk-HIU2O3TP.js";
6
6
  import "./chunk-QMFMST2T.js";
7
- import "./chunk-DTVN2LDU.js";
7
+ import "./chunk-75QDO3E3.js";
8
8
  export {
9
9
  executeTests,
10
10
  runTestProcess,
@@ -3,8 +3,8 @@ import {
3
3
  executeTests,
4
4
  runTestProcess,
5
5
  runTestsTool
6
- } from "./chunk-6BGW25LG.js";
7
- import "./chunk-YCDF6FNR.js";
6
+ } from "./chunk-EHHZFVJU.js";
7
+ import "./chunk-LXUPXNH3.js";
8
8
  import "./chunk-SXIJLSVF.js";
9
9
  export {
10
10
  executeTests,
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ToolRegistry
4
- } from "./chunk-RZDRBFAB.js";
4
+ } from "./chunk-C2TWTHXL.js";
5
5
  import "./chunk-6JHACXB3.js";
6
- import "./chunk-56ME7PB2.js";
6
+ import "./chunk-OJOTU4DK.js";
7
7
  import "./chunk-RWRZVQCB.js";
8
8
  import "./chunk-B3MPYI4E.js";
9
9
  import "./chunk-M6HLYG33.js";
@@ -14,7 +14,7 @@ import "./chunk-JL44HGZC.js";
14
14
  import "./chunk-3FEZSLGI.js";
15
15
  import {
16
16
  runTool
17
- } from "./chunk-Q26V2PNA.js";
17
+ } from "./chunk-3HJKR5GL.js";
18
18
  import "./chunk-RS7SKYTS.js";
19
19
  import {
20
20
  getDangerLevel,
@@ -25,10 +25,10 @@ import "./chunk-TU3L3PW7.js";
25
25
  import "./chunk-HOSJZMQS.js";
26
26
  import "./chunk-BMLQPSHP.js";
27
27
  import "./chunk-JJFJWD35.js";
28
- import "./chunk-6BGW25LG.js";
28
+ import "./chunk-EHHZFVJU.js";
29
29
  import {
30
30
  VERSION
31
- } from "./chunk-YCDF6FNR.js";
31
+ } from "./chunk-LXUPXNH3.js";
32
32
  import "./chunk-SXIJLSVF.js";
33
33
 
34
34
  // src/mcp/server.ts
@@ -10,8 +10,8 @@ import {
10
10
  getPreset,
11
11
  loadCustomPresets,
12
12
  resolveRoleProviders
13
- } from "./chunk-NOLK5C4U.js";
14
- import "./chunk-MN25ELTF.js";
13
+ } from "./chunk-NP2GRK2N.js";
14
+ import "./chunk-DAAR4XOY.js";
15
15
  import {
16
16
  AuthManager,
17
17
  TOKEN_EXPIRY_MS
@@ -88,7 +88,7 @@ import {
88
88
  skillHistoryNote,
89
89
  snapshotFile,
90
90
  stripRoutingTags
91
- } from "./chunk-L3FDFFD2.js";
91
+ } from "./chunk-BCDBSJVD.js";
92
92
  import {
93
93
  CNY_PER_USD,
94
94
  CostTracker,
@@ -132,7 +132,7 @@ import {
132
132
  spawnAgentContext,
133
133
  truncateOutput,
134
134
  undoStack
135
- } from "./chunk-RZDRBFAB.js";
135
+ } from "./chunk-C2TWTHXL.js";
136
136
  import {
137
137
  buildReviewPrompt,
138
138
  buildSecurityReviewPrompt
@@ -159,7 +159,7 @@ import {
159
159
  restoreMemoryEntries,
160
160
  updateMemoryApproval,
161
161
  updateMemoryEntry
162
- } from "./chunk-56ME7PB2.js";
162
+ } from "./chunk-OJOTU4DK.js";
163
163
  import "./chunk-RWRZVQCB.js";
164
164
  import "./chunk-B3MPYI4E.js";
165
165
  import "./chunk-M6HLYG33.js";
@@ -178,7 +178,7 @@ import {
178
178
  buildDoctorReport,
179
179
  formatDoctorReport,
180
180
  loadContextFiles
181
- } from "./chunk-EWARNWJ4.js";
181
+ } from "./chunk-4NTPVPTB.js";
182
182
  import {
183
183
  describePlugin,
184
184
  getActivePluginAssets,
@@ -193,14 +193,14 @@ import {
193
193
  runTool,
194
194
  setPluginEnabled,
195
195
  trustPlugin
196
- } from "./chunk-Q26V2PNA.js";
196
+ } from "./chunk-3HJKR5GL.js";
197
197
  import "./chunk-RS7SKYTS.js";
198
198
  import {
199
199
  ProviderRegistry
200
- } from "./chunk-QFF2PTI3.js";
200
+ } from "./chunk-UKSQAX4M.js";
201
201
  import {
202
202
  ConfigManager
203
- } from "./chunk-CM5C7ZSM.js";
203
+ } from "./chunk-2CWXRYVB.js";
204
204
  import {
205
205
  getDangerLevel
206
206
  } from "./chunk-W4P2KJZN.js";
@@ -235,7 +235,7 @@ import {
235
235
  import {
236
236
  assertReadablePath
237
237
  } from "./chunk-JJFJWD35.js";
238
- import "./chunk-6BGW25LG.js";
238
+ import "./chunk-EHHZFVJU.js";
239
239
  import {
240
240
  AGENTIC_BEHAVIOR_GUIDELINE,
241
241
  AUTHOR,
@@ -251,7 +251,7 @@ import {
251
251
  SKILLS_DIR_NAME,
252
252
  VERSION,
253
253
  buildUserIdentityPrompt
254
- } from "./chunk-YCDF6FNR.js";
254
+ } from "./chunk-LXUPXNH3.js";
255
255
  import {
256
256
  runWithExecutionContext,
257
257
  runWithSessionKey
@@ -983,7 +983,7 @@ Cache: write=${cacheCreate} read=${cacheRead}` : "";
983
983
  Cost: ${formatCost(cost)}` : "";
984
984
  let memoryLine = "";
985
985
  try {
986
- const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-PAS7NAPQ.js");
986
+ const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-YWXEAVAH.js");
987
987
  const pending = countPendingMemories2(ctx.config.getConfigDir());
988
988
  if (pending > 0) memoryLine = `
989
989
  Memory: \u26A0 ${pending} pending approval \u2014 see the Memory panel or /memory`;
@@ -1912,7 +1912,7 @@ async function handleTest(args, ctx) {
1912
1912
  const isCommand = argStr.includes(" ") || /^(mvn|gradle|npm|pytest|cargo|go)\b/.test(argStr);
1913
1913
  testArgs = isCommand ? { command: argStr } : { filter: argStr };
1914
1914
  }
1915
- const runTests = ctx.runTests ?? (await import("./run-tests-2TVEWCQI.js")).executeTests;
1915
+ const runTests = ctx.runTests ?? (await import("./run-tests-KMJDP24I.js")).executeTests;
1916
1916
  const report = await runTests(testArgs);
1917
1917
  ctx.send({ type: "info", message: report });
1918
1918
  } catch (err) {
@@ -2188,7 +2188,7 @@ async function handleMemory(args, ctx) {
2188
2188
  }
2189
2189
  if (intent.kind === "status") {
2190
2190
  const { getChatIndexStatus } = await import("./chat-index-7CLR4CBG.js");
2191
- const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-PAS7NAPQ.js");
2191
+ const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-YWXEAVAH.js");
2192
2192
  const memories = listMemoryEntries2(configDir, { includeExpired: true, includeRejected: true });
2193
2193
  const injected = formatMemoryForPrompt2(configDir, process.cwd(), ctx.config.get("memory")?.maxChars);
2194
2194
  const view = buildMemoryStatusView({
@@ -2211,7 +2211,7 @@ async function handleMemory(args, ctx) {
2211
2211
  return;
2212
2212
  }
2213
2213
  if (intent.kind === "recall") {
2214
- const { searchPersistentMemories, touchMemoryReferences } = await import("./persistent-memory-PAS7NAPQ.js");
2214
+ const { searchPersistentMemories, touchMemoryReferences } = await import("./persistent-memory-YWXEAVAH.js");
2215
2215
  const { searchChatMemory } = await import("./chat-index-7CLR4CBG.js");
2216
2216
  const persistentHits = searchPersistentMemories(configDir, intent.query, process.cwd(), 3);
2217
2217
  if (persistentHits.length > 0) {
@@ -2332,7 +2332,7 @@ async function handleMemory(args, ctx) {
2332
2332
  ctx.handleMemoryManage(intent.action, args[1], intent.action === "expire" ? args[2] : void 0);
2333
2333
  } else if (intent.kind === "export") {
2334
2334
  if (args[1] === "md") {
2335
- const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-PAS7NAPQ.js");
2335
+ const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-YWXEAVAH.js");
2336
2336
  ctx.send({
2337
2337
  type: "export_data",
2338
2338
  format: "md",
@@ -4,9 +4,9 @@ import {
4
4
  googleSearchContext,
5
5
  isToolCapableProvider,
6
6
  truncateOutput
7
- } from "./chunk-RZDRBFAB.js";
7
+ } from "./chunk-C2TWTHXL.js";
8
8
  import "./chunk-6JHACXB3.js";
9
- import "./chunk-56ME7PB2.js";
9
+ import "./chunk-OJOTU4DK.js";
10
10
  import "./chunk-RWRZVQCB.js";
11
11
  import "./chunk-B3MPYI4E.js";
12
12
  import "./chunk-M6HLYG33.js";
@@ -17,7 +17,7 @@ import "./chunk-JL44HGZC.js";
17
17
  import "./chunk-3FEZSLGI.js";
18
18
  import {
19
19
  runTool
20
- } from "./chunk-Q26V2PNA.js";
20
+ } from "./chunk-3HJKR5GL.js";
21
21
  import "./chunk-RS7SKYTS.js";
22
22
  import {
23
23
  getDangerLevel
@@ -31,10 +31,10 @@ import {
31
31
  atomicWriteFileSync
32
32
  } from "./chunk-BMLQPSHP.js";
33
33
  import "./chunk-JJFJWD35.js";
34
- import "./chunk-6BGW25LG.js";
34
+ import "./chunk-EHHZFVJU.js";
35
35
  import {
36
36
  SUBAGENT_ALLOWED_TOOLS
37
- } from "./chunk-YCDF6FNR.js";
37
+ } from "./chunk-LXUPXNH3.js";
38
38
  import "./chunk-SXIJLSVF.js";
39
39
 
40
40
  // src/hub/task-orchestrator.ts
@@ -9,10 +9,10 @@ import {
9
9
  import "./chunk-RS7SKYTS.js";
10
10
  import {
11
11
  ConfigManager
12
- } from "./chunk-CM5C7ZSM.js";
12
+ } from "./chunk-2CWXRYVB.js";
13
13
  import "./chunk-TU3L3PW7.js";
14
14
  import "./chunk-BMLQPSHP.js";
15
- import "./chunk-YCDF6FNR.js";
15
+ import "./chunk-LXUPXNH3.js";
16
16
 
17
17
  // src/cli/usage.ts
18
18
  function classifyRowCost(row) {
@@ -3203,6 +3203,24 @@ function hubAgentContainer(roleId) {
3203
3203
 
3204
3204
  function hubColor(c) { return HUB_COLORS[c] || '#9ca3af'; }
3205
3205
 
3206
+ /** Open a new turn block for roleId (its lane in lane mode, else the flow) and make it the stream slot. */
3207
+ function hubOpenTurn(roleId) {
3208
+ const role = hubRoles[roleId] || { name: roleId, color: 'white' };
3209
+ hubStreamEl = document.createElement('div');
3210
+ if (hubLaneMode) {
3211
+ // Column header already shows the role name — just the body here.
3212
+ hubStreamEl.className = 'hub-msg';
3213
+ hubStreamEl.innerHTML = `<div class="hub-body text-sm"></div>`;
3214
+ } else {
3215
+ hubStreamEl.className = 'hub-msg border-l-2 pl-2 my-2';
3216
+ hubStreamEl.style.borderColor = hubColor(role.color);
3217
+ hubStreamEl.innerHTML = `<div class="text-xs font-bold mb-1" style="color:${hubColor(role.color)}">${escapeHtml(role.name)}</div><div class="hub-body text-sm"></div>`;
3218
+ }
3219
+ hubAgentContainer(roleId).appendChild(hubStreamEl);
3220
+ hubStreamRoleId = roleId;
3221
+ hubStreamEl._raw = '';
3222
+ }
3223
+
3206
3224
  /** Sync the `custom:` entries of the preset dropdown with `<configDir>/hub-roles/*.json`. */
3207
3225
  function updateHubPresets(list) {
3208
3226
  const select = document.getElementById('hub-preset');
@@ -3302,28 +3320,15 @@ function hubEvent(ev) {
3302
3320
  break;
3303
3321
  }
3304
3322
  case 'agent_token': {
3305
- if (hubStreamRoleId !== ev.roleId || !hubStreamEl) {
3306
- const role = hubRoles[ev.roleId] || { name: ev.roleId, color: 'white' };
3307
- hubStreamEl = document.createElement('div');
3308
- if (hubLaneMode) {
3309
- // Column header already shows the role name — just the body here.
3310
- hubStreamEl.className = 'hub-msg';
3311
- hubStreamEl.innerHTML = `<div class="hub-body text-sm"></div>`;
3312
- } else {
3313
- hubStreamEl.className = 'hub-msg border-l-2 pl-2 my-2';
3314
- hubStreamEl.style.borderColor = hubColor(role.color);
3315
- hubStreamEl.innerHTML = `<div class="text-xs font-bold mb-1" style="color:${hubColor(role.color)}">${escapeHtml(role.name)}</div><div class="hub-body text-sm"></div>`;
3316
- }
3317
- hubAgentContainer(ev.roleId).appendChild(hubStreamEl);
3318
- hubStreamRoleId = ev.roleId;
3319
- hubStreamEl._raw = '';
3320
- }
3323
+ if (hubStreamRoleId !== ev.roleId || !hubStreamEl) hubOpenTurn(ev.roleId);
3321
3324
  hubStreamEl._raw += ev.token;
3322
3325
  appendStreamText(hubStreamEl.querySelector('.hub-body'), ev.token);
3323
3326
  scrollToBottom();
3324
3327
  break;
3325
3328
  }
3326
3329
  case 'agent_spoke':
3330
+ // 一个 token 都没流出来(推理被截断后只剩提示、或 provider 不支持流式)时也要画出这条发言
3331
+ if (!hubStreamEl && ev.message?.content) hubOpenTurn(ev.roleId);
3327
3332
  if (hubStreamEl) renderMarkdown(hubStreamEl.querySelector('.hub-body'), ev.message?.content ?? hubStreamEl._raw);
3328
3333
  // Streaming already rendered the body; finalize the stream slot.
3329
3334
  hubStreamEl = null; hubStreamRoleId = null;
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.331",
3
+ "version": "0.4.332",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",