jinzd-ai-cli 0.4.300 → 0.4.303

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 (34) hide show
  1. package/dist/{batch-ESHQ5NMB.js → batch-PEH5MTMC.js} +2 -2
  2. package/dist/{chunk-KQLKS3ZQ.js → chunk-3GOHR45I.js} +1 -1
  3. package/dist/{chunk-ZMIAVBFY.js → chunk-55AANMEM.js} +1 -1
  4. package/dist/{chunk-YFCGMH2R.js → chunk-6ZRLM3NG.js} +4 -4
  5. package/dist/{chunk-2MOYOMY5.js → chunk-7WD2TBWY.js} +1 -1
  6. package/dist/{chunk-NJ2E3ZYE.js → chunk-DHQCJC2B.js} +1 -1
  7. package/dist/{chunk-RXK3SNCO.js → chunk-EMLRCVY2.js} +1 -1
  8. package/dist/{chunk-Y56UGZPX.js → chunk-MI4SFZGX.js} +3 -1
  9. package/dist/{chunk-MZCMJC3K.js → chunk-ORDEOJXX.js} +1 -1
  10. package/dist/{chunk-QL5HASTV.js → chunk-PEDN3AWT.js} +1 -1
  11. package/dist/{chunk-LNGH6PEC.js → chunk-Q24BN6WF.js} +1 -1
  12. package/dist/{chunk-FBOVBL7P.js → chunk-VXEF2SWG.js} +1 -1
  13. package/dist/{chunk-4CEF4ROO.js → chunk-WCJR5HCF.js} +130 -10
  14. package/dist/{chunk-RPI74YNP.js → chunk-XEKMGE2G.js} +1 -1
  15. package/dist/{chunk-34TV5BBH.js → chunk-YK42KYKN.js} +4 -4
  16. package/dist/{chunk-ZBFNKCH4.js → chunk-ZMCZMR4R.js} +8 -8
  17. package/dist/{ci-5NGCQYUX.js → ci-UXULLQMN.js} +6 -6
  18. package/dist/{ci-format-EKOB2WRP.js → ci-format-23FWBZN6.js} +2 -2
  19. package/dist/{constants-3VGUBD6L.js → constants-A6VKRPMA.js} +1 -1
  20. package/dist/{constants-LZ5UUYEY.js → constants-HL7DYRDJ.js} +1 -1
  21. package/dist/{doctor-cli-5KEROB3Z.js → doctor-cli-FXBLI3EA.js} +6 -6
  22. package/dist/electron-server.js +137 -16
  23. package/dist/{hub-ARZNS7IH.js → hub-NLULKDKU.js} +1 -1
  24. package/dist/index.js +112 -56
  25. package/dist/{persistent-memory-2AWOTKKK.js → persistent-memory-NLXNNWOW.js} +2 -2
  26. package/dist/{persistent-memory-KKEM3K5D.js → persistent-memory-R4KLRI5Q.js} +2 -2
  27. package/dist/{pr-IFMDC3I4.js → pr-K6Z73QYN.js} +6 -6
  28. package/dist/{run-tests-LEY4IOUG.js → run-tests-PQ3SUDDN.js} +2 -2
  29. package/dist/{run-tests-3JIOK2H4.js → run-tests-RYUB6PVF.js} +2 -2
  30. package/dist/{server-4V3F2WSC.js → server-QCCH3277.js} +15 -15
  31. package/dist/{server-L53NTLYW.js → server-UJDYIBVR.js} +6 -6
  32. package/dist/{task-orchestrator-ZNLQD2SM.js → task-orchestrator-QAQFB7DG.js} +6 -6
  33. package/dist/{usage-ZS3LZOUI.js → usage-PMHXXU2P.js} +2 -2
  34. 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-RPI74YNP.js";
7
+ } from "./chunk-XEKMGE2G.js";
8
8
  import "./chunk-TU3L3PW7.js";
9
9
  import {
10
10
  atomicWriteFileSync
11
11
  } from "./chunk-IW3Q7AE5.js";
12
- import "./chunk-2MOYOMY5.js";
12
+ import "./chunk-7WD2TBWY.js";
13
13
 
14
14
  // src/cli/batch.ts
15
15
  import Anthropic from "@anthropic-ai/sdk";
@@ -1,5 +1,5 @@
1
1
  // src/core/constants.ts
2
- var VERSION = "0.4.300";
2
+ var VERSION = "0.4.303";
3
3
  var APP_NAME = "ai-cli";
4
4
  var CONFIG_DIR_NAME = ".aicli";
5
5
  var CONFIG_FILE_NAME = "config.json";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  VERSION
4
- } from "./chunk-2MOYOMY5.js";
4
+ } from "./chunk-7WD2TBWY.js";
5
5
 
6
6
  // src/cli/ci-format.ts
7
7
  var DEFAULT_CI_THRESHOLDS = {
@@ -8,13 +8,13 @@ import {
8
8
  listHooks,
9
9
  listInstalledPlugins,
10
10
  resetStats
11
- } from "./chunk-LNGH6PEC.js";
11
+ } from "./chunk-Q24BN6WF.js";
12
12
  import {
13
13
  ProviderRegistry
14
- } from "./chunk-FBOVBL7P.js";
14
+ } from "./chunk-VXEF2SWG.js";
15
15
  import {
16
16
  ConfigManager
17
- } from "./chunk-RPI74YNP.js";
17
+ } from "./chunk-XEKMGE2G.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-2MOYOMY5.js";
29
+ } from "./chunk-7WD2TBWY.js";
30
30
 
31
31
  // src/diagnostics/doctor-report.ts
32
32
  import { existsSync as existsSync3, statSync as statSync2 } from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/core/constants.ts
4
- var VERSION = "0.4.300";
4
+ var VERSION = "0.4.303";
5
5
  var APP_NAME = "ai-cli";
6
6
  var CONFIG_DIR_NAME = ".aicli";
7
7
  var CONFIG_FILE_NAME = "config.json";
@@ -13,7 +13,7 @@ import {
13
13
  MEMORY_FILE_NAME,
14
14
  MEMORY_MAX_CHARS,
15
15
  MEMORY_STORE_FILE_NAME
16
- } from "./chunk-2MOYOMY5.js";
16
+ } from "./chunk-7WD2TBWY.js";
17
17
 
18
18
  // src/memory/persistent-memory.ts
19
19
  import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from "fs";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TEST_TIMEOUT
3
- } from "./chunk-KQLKS3ZQ.js";
3
+ } from "./chunk-3GOHR45I.js";
4
4
 
5
5
  // src/tools/builtin/run-tests.ts
6
6
  import { execSync, spawnSync } from "child_process";
@@ -174,7 +174,9 @@ function extractClaimedFilePaths(content) {
174
174
  const paths = /* @__PURE__ */ new Set();
175
175
  const add = (p) => {
176
176
  const trimmed = p.trim().replace(/[,,。、;;::]+$/, "");
177
- if (trimmed && /\.\w{1,6}$/.test(trimmed)) paths.add(trimmed);
177
+ if (!trimmed || !/\.\w{1,6}$/.test(trimmed)) return;
178
+ if (trimmed.startsWith("@")) return;
179
+ paths.add(trimmed);
178
180
  };
179
181
  let m;
180
182
  const backtickRe = /`([^`\n]+?\.\w{1,6})`/g;
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TEST_TIMEOUT
4
- } from "./chunk-2MOYOMY5.js";
4
+ } from "./chunk-7WD2TBWY.js";
5
5
 
6
6
  // src/tools/builtin/run-tests.ts
7
7
  import { execSync, spawnSync } from "child_process";
@@ -12,7 +12,7 @@ import {
12
12
  MEMORY_FILE_NAME,
13
13
  MEMORY_MAX_CHARS,
14
14
  MEMORY_STORE_FILE_NAME
15
- } from "./chunk-KQLKS3ZQ.js";
15
+ } from "./chunk-3GOHR45I.js";
16
16
 
17
17
  // src/memory/persistent-memory.ts
18
18
  import { copyFileSync, existsSync, mkdirSync, readFileSync, statSync } from "fs";
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  CONFIG_DIR_NAME,
10
10
  PLUGINS_DIR_NAME
11
- } from "./chunk-2MOYOMY5.js";
11
+ } from "./chunk-7WD2TBWY.js";
12
12
 
13
13
  // src/diagnostics/tool-stats.ts
14
14
  import { mkdirSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  detectsHallucinatedFileOp,
4
4
  parseToolCallArguments,
5
5
  schemaToJsonSchema
6
- } from "./chunk-Y56UGZPX.js";
6
+ } from "./chunk-MI4SFZGX.js";
7
7
  import {
8
8
  AuthError,
9
9
  ProviderError,
@@ -11,7 +11,7 @@ import {
11
11
  searchPersistentMemories,
12
12
  touchMemoryReferences,
13
13
  updateMemoryEntry
14
- } from "./chunk-NJ2E3ZYE.js";
14
+ } from "./chunk-DHQCJC2B.js";
15
15
  import {
16
16
  indexProject
17
17
  } from "./chunk-4DEMGCK4.js";
@@ -30,13 +30,13 @@ import {
30
30
  runHook,
31
31
  runLifecycleHooks,
32
32
  runTool
33
- } from "./chunk-LNGH6PEC.js";
33
+ } from "./chunk-Q24BN6WF.js";
34
34
  import {
35
35
  buildTruncatedArgumentsError,
36
36
  getDangerLevel,
37
37
  isFileWriteTool,
38
38
  runLeanAgentLoop
39
- } from "./chunk-Y56UGZPX.js";
39
+ } from "./chunk-MI4SFZGX.js";
40
40
  import {
41
41
  EnvLoader,
42
42
  NetworkError,
@@ -50,7 +50,7 @@ import {
50
50
  } from "./chunk-4BKXL7SM.js";
51
51
  import {
52
52
  runTestsTool
53
- } from "./chunk-MZCMJC3K.js";
53
+ } from "./chunk-ORDEOJXX.js";
54
54
  import {
55
55
  CONFIG_DIR_NAME,
56
56
  DEFAULT_MAX_TOOL_OUTPUT_CHARS_CAP,
@@ -58,7 +58,7 @@ import {
58
58
  SUBAGENT_ALLOWED_TOOLS,
59
59
  SUBAGENT_DEFAULT_MAX_ROUNDS,
60
60
  SUBAGENT_MAX_ROUNDS_LIMIT
61
- } from "./chunk-2MOYOMY5.js";
61
+ } from "./chunk-7WD2TBWY.js";
62
62
 
63
63
  // src/tools/shell-pool.ts
64
64
  import { spawn as spawn2 } from "child_process";
@@ -87,6 +87,90 @@ function decodeWindowsBuffer(buf) {
87
87
  return utf8;
88
88
  }
89
89
  }
90
+ var GBK_MOJIBAKE_FINGERPRINTS = [
91
+ "\uFFFD",
92
+ "\u9215",
93
+ "\u951B",
94
+ "\u9983",
95
+ "\u9241",
96
+ "\u6D93",
97
+ "\u935B",
98
+ "\u9428",
99
+ "\u7EFE",
100
+ "\u95AB",
101
+ "\u9593",
102
+ "\u95BF",
103
+ "\u68E3",
104
+ "\u95B4",
105
+ "\u5A11",
106
+ "\u95B8",
107
+ "\u95BB",
108
+ "\u7F01",
109
+ "\u95C1"
110
+ ];
111
+ var gbkReverse = null;
112
+ function gbkReverseMap() {
113
+ if (gbkReverse) return gbkReverse;
114
+ const map = /* @__PURE__ */ new Map();
115
+ try {
116
+ const dec = new TextDecoder("gbk");
117
+ for (let hi = 129; hi <= 254; hi++) {
118
+ for (let lo = 64; lo <= 254; lo++) {
119
+ if (lo === 127) continue;
120
+ const ch = dec.decode(new Uint8Array([hi, lo]));
121
+ if (ch.length === 1 && ch !== "\uFFFD" && !map.has(ch)) map.set(ch, [hi, lo]);
122
+ }
123
+ }
124
+ } catch {
125
+ }
126
+ gbkReverse = map;
127
+ return map;
128
+ }
129
+ function decodeRunAsChinese(bytes) {
130
+ for (let start = 0; start <= 2 && start < bytes.length; start++) {
131
+ for (let end = 0; end <= 2 && bytes.length - end > start; end++) {
132
+ const slice = bytes.slice(start, bytes.length - end);
133
+ if (slice.length < 6) continue;
134
+ try {
135
+ const out = new TextDecoder("utf-8", { fatal: true }).decode(new Uint8Array(slice));
136
+ if (/[一-鿿]/.test(out)) return out;
137
+ } catch {
138
+ }
139
+ }
140
+ }
141
+ return null;
142
+ }
143
+ function recoverGbkMojibake(text) {
144
+ if (!text) return null;
145
+ const map = gbkReverseMap();
146
+ if (map.size === 0) return null;
147
+ let run = [];
148
+ let best = null;
149
+ const flush = () => {
150
+ if (run.length >= 4) {
151
+ const bytes = [];
152
+ for (const p of run) bytes.push(p[0], p[1]);
153
+ const out = decodeRunAsChinese(bytes);
154
+ if (out && (!best || out.length > best.length)) best = out;
155
+ }
156
+ run = [];
157
+ };
158
+ for (const ch of text) {
159
+ const pair = ch.codePointAt(0) < 128 ? void 0 : map.get(ch);
160
+ if (pair) run.push(pair);
161
+ else flush();
162
+ }
163
+ flush();
164
+ return best;
165
+ }
166
+ function looksLikeGbkMojibake(text) {
167
+ if (recoverGbkMojibake(text) !== null) return true;
168
+ let hits = 0;
169
+ for (const ch of GBK_MOJIBAKE_FINGERPRINTS) {
170
+ if (text.includes(ch) && ++hits >= 2) return true;
171
+ }
172
+ return false;
173
+ }
90
174
  function killProcessTree(proc) {
91
175
  if (proc.killed || proc.exitCode !== null) return;
92
176
  if (IS_WINDOWS && proc.pid) {
@@ -651,7 +735,7 @@ ${combined || formatFailureFallback(status)}
651
735
  }
652
736
  pushBashUndoEntries(beforeSnapshot, parsedTargetsBefore, effectiveCwd);
653
737
  updateCwdFromCommand(command, effectiveCwd);
654
- return stdout || emptyOutputResult(command);
738
+ return annotateSuccessOutput(command, stdout) || emptyOutputResult(command, stderr ?? "");
655
739
  }
656
740
  try {
657
741
  const { stdout, stderr, status, signal, timedOut, aborted } = await runShell(
@@ -688,7 +772,10 @@ ${combined || formatFailureFallback(status)}
688
772
  updateCwdFromCommand(command, effectiveCwd);
689
773
  pushBashUndoEntries(beforeSnapshot, parsedTargetsBefore, effectiveCwd);
690
774
  const result = Buffer.isBuffer(stdout) ? IS_WINDOWS3 ? decodeWindowsBuffer(stdout) : stdout.toString("utf-8") : String(stdout ?? "");
691
- return result || emptyOutputResult(command);
775
+ return annotateSuccessOutput(command, result) || emptyOutputResult(
776
+ command,
777
+ Buffer.isBuffer(stderr) ? IS_WINDOWS3 ? decodeWindowsBuffer(stderr) : stderr.toString("utf-8") : String(stderr ?? "")
778
+ );
692
779
  } catch (err) {
693
780
  pushBashUndoEntries(beforeSnapshot, parsedTargetsBefore, effectiveCwd);
694
781
  if (err && typeof err === "object") {
@@ -789,10 +876,26 @@ var BACKSLASH_QUOTE_SILENT_WARNING = `
789
876
 
790
877
  \u26A0 WARNING: this command contains \\" inside a double-quoted string, but PowerShell does NOT treat \\ as an escape \u2014 that quote CLOSED the string and the command was split into fragments. It exited 0 with no output because the outer program (e.g. ssh) still ran, but it very likely did NOT run what you intended. Do NOT assume this succeeded.
791
878
  Fix: write the payload to a local file with the 'write_file' tool, then 'scp' it over and run 'ssh host "psql -d <db> -f /tmp/x.sql"' (single level of quoting). Inside PowerShell strings, escape a quote with \`" or "" \u2014 never \\".`;
792
- function emptyOutputResult(command) {
879
+ function emptyOutputResult(command, stderr = "") {
793
880
  const base = "(command completed with no output)";
881
+ const err = stderr.trim();
882
+ if (err) {
883
+ return `${base}, but stderr was not empty:
884
+ ${err}`;
885
+ }
794
886
  return detectPowerShellBackslashQuote(command) ? base + BACKSLASH_QUOTE_SILENT_WARNING : base;
795
887
  }
888
+ var PS_TEXT_READ_CMDLET = /\b(?:Get-Content|gc|cat|type|Select-String|sls|Import-Csv)\b/i;
889
+ function annotateSuccessOutput(command, stdout) {
890
+ if (!IS_WINDOWS3 || !PS_TEXT_READ_CMDLET.test(command)) return stdout;
891
+ if (!looksLikeGbkMojibake(stdout)) return stdout;
892
+ const recovered = recoverGbkMojibake(stdout);
893
+ return stdout + `
894
+
895
+ \u26A0 WARNING: this output is mojibake (UTF-8 text decoded as GBK). PowerShell's Get-Content / Select-String read BOM-less UTF-8 files using the system code page, so the content was corrupted BEFORE it reached you \u2014 what you see above is NOT what the file says. Do NOT rely on it, and do not quote it back to the user.
896
+ ` + (recovered ? `Recovered fragment (proof, not the whole file): ${recovered}
897
+ ` : "") + `Fix: use the 'read_file' tool instead (it decodes UTF-8 correctly). If you must stay in PowerShell, pass -Encoding utf8.`;
898
+ }
796
899
  function buildErrorHint(command, stderr) {
797
900
  const hints = [];
798
901
  if (IS_WINDOWS3 && /\|\|/.test(command) && /(\|\||is not a valid argument|不是此版本中的有效|ParserError|Unexpected token)/i.test(stderr)) {
@@ -1205,6 +1308,16 @@ var BINARY_EXTENSIONS = /* @__PURE__ */ new Set([
1205
1308
  ".class",
1206
1309
  ".pyc"
1207
1310
  ]);
1311
+ var IMAGE_EXTENSIONS = /* @__PURE__ */ new Set([
1312
+ ".png",
1313
+ ".jpg",
1314
+ ".jpeg",
1315
+ ".gif",
1316
+ ".bmp",
1317
+ ".ico",
1318
+ ".webp",
1319
+ ".tiff"
1320
+ ]);
1208
1321
  function isBinaryBuffer(buf) {
1209
1322
  const sample = buf.subarray(0, 512);
1210
1323
  let nullCount = 0;
@@ -1375,6 +1488,12 @@ ${err.message}`;
1375
1488
  }
1376
1489
  }
1377
1490
  if (BINARY_EXTENSIONS.has(ext)) {
1491
+ if (IMAGE_EXTENSIONS.has(ext)) {
1492
+ return `[Image file: ${filePath} (${ext})]
1493
+ read_file cannot return image content \u2014 tool results are text-only, so no tool can put an image into your context.
1494
+ To have an image looked at, ask the USER to reference it from their input line with @${filePath} (they can use a glob for a batch, e.g. @dir/*.png, up to 20 at a time). A vision-capable model must be active, or the reference is rejected.
1495
+ Do NOT claim you inspected this image \u2014 you have not seen it.`;
1496
+ }
1378
1497
  return `[Binary file: ${filePath} (${ext})]
1379
1498
  This is a binary file and cannot be read as text. If there is a text version (.md / .txt) in the project, please read that instead.`;
1380
1499
  }
@@ -2253,7 +2372,7 @@ var RuleBasedActionClassifier = class {
2253
2372
  var defaultActionClassifier = new RuleBasedActionClassifier();
2254
2373
 
2255
2374
  // src/tools/executor.ts
2256
- var PS_ERROR_RECORD_HEAD = /^(?:At line:\d+ char:\d+|所在位置\s+行:\d+\s+字符:\d+)\s*$/;
2375
+ var PS_ERROR_RECORD_HEAD = /^(?:[\w.\-]+\s:\s)?(?:At line:\d+ char:\s*\d+|所在位置\s+行:\d+\s+字符:\s*\d+)\s*$/;
2257
2376
  var ERROR_SIGNATURE = new RegExp(
2258
2377
  [
2259
2378
  // Python / .NET / Java: "OSError: …", "pkg.SomeException: …"
@@ -2270,7 +2389,7 @@ var ERROR_SIGNATURE = new RegExp(
2270
2389
  );
2271
2390
  var PY_TRACEBACK_FRAME = /^\s*File ".*", line \d+/;
2272
2391
  function buildErrorPreview(content) {
2273
- const raw = content.split("\n");
2392
+ const raw = content.split("\n").map((l) => l.replace(/\r+$/, ""));
2274
2393
  const undecorated = [];
2275
2394
  for (let i = 0; i < raw.length; i++) {
2276
2395
  if (PS_ERROR_RECORD_HEAD.test(raw[i])) {
@@ -7065,6 +7184,7 @@ export {
7065
7184
  truncateForPersist,
7066
7185
  truncateOutput,
7067
7186
  ToolExecutor,
7187
+ globToRegex,
7068
7188
  lastResponseStore,
7069
7189
  cleanupRejectedTeeFile,
7070
7190
  askUserContext,
@@ -11,7 +11,7 @@ import {
11
11
  CONFIG_FILE_NAME,
12
12
  HISTORY_DIR_NAME,
13
13
  PLUGINS_DIR_NAME
14
- } from "./chunk-2MOYOMY5.js";
14
+ } from "./chunk-7WD2TBWY.js";
15
15
 
16
16
  // src/config/config-manager.ts
17
17
  import { readFileSync, existsSync, mkdirSync } from "fs";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  evaluateCiGate,
4
4
  normalizeCiThresholds
5
- } from "./chunk-ZMIAVBFY.js";
5
+ } from "./chunk-55AANMEM.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-FBOVBL7P.js";
16
+ } from "./chunk-VXEF2SWG.js";
17
17
  import {
18
18
  ConfigManager
19
- } from "./chunk-RPI74YNP.js";
19
+ } from "./chunk-XEKMGE2G.js";
20
20
  import {
21
21
  VERSION
22
- } from "./chunk-2MOYOMY5.js";
22
+ } from "./chunk-7WD2TBWY.js";
23
23
 
24
24
  // src/cli/ci.ts
25
25
  import { execFileSync } from "child_process";
@@ -16,7 +16,7 @@ import {
16
16
  setPreferredAgentName,
17
17
  truncateForPersist,
18
18
  undoStack
19
- } from "./chunk-4CEF4ROO.js";
19
+ } from "./chunk-WCJR5HCF.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-NJ2E3ZYE.js";
54
+ } from "./chunk-DHQCJC2B.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-YFCGMH2R.js";
68
+ } from "./chunk-6ZRLM3NG.js";
69
69
  import {
70
70
  describePlugin,
71
71
  getActivePluginAssets,
@@ -80,11 +80,11 @@ import {
80
80
  trustHook,
81
81
  trustPlugin,
82
82
  untrustHook
83
- } from "./chunk-LNGH6PEC.js";
83
+ } from "./chunk-Q24BN6WF.js";
84
84
  import {
85
85
  isCleanDocumentBody,
86
86
  stripOuterCodeFence
87
- } from "./chunk-Y56UGZPX.js";
87
+ } from "./chunk-MI4SFZGX.js";
88
88
  import {
89
89
  formatGitContextForPrompt,
90
90
  getGitContext
@@ -109,7 +109,7 @@ import {
109
109
  MCP_TOOL_PREFIX,
110
110
  REPO_URL,
111
111
  VERSION
112
- } from "./chunk-2MOYOMY5.js";
112
+ } from "./chunk-7WD2TBWY.js";
113
113
 
114
114
  // src/skills/manager.ts
115
115
  import { existsSync, readdirSync, mkdirSync, statSync } from "fs";
@@ -2426,7 +2426,7 @@ No tools match "${filter}".
2426
2426
  const { join: join6 } = await import("path");
2427
2427
  const { existsSync: existsSync6 } = await import("fs");
2428
2428
  const { getGitRoot } = await import("./git-context-EXOEHQSF.js");
2429
- const { MCP_PROJECT_CONFIG_NAME } = await import("./constants-LZ5UUYEY.js");
2429
+ const { MCP_PROJECT_CONFIG_NAME } = await import("./constants-HL7DYRDJ.js");
2430
2430
  const { approveProject, hashMcpFile } = await import("./project-trust-NKYHL3VZ.js");
2431
2431
  const cwd = process.cwd();
2432
2432
  const projectRoot = getGitRoot(cwd) ?? cwd;
@@ -3534,7 +3534,7 @@ function createReviewCommands() {
3534
3534
  usage: "/test [command|filter]",
3535
3535
  async execute(args, ctx) {
3536
3536
  try {
3537
- const { executeTests } = await import("./run-tests-LEY4IOUG.js");
3537
+ const { executeTests } = await import("./run-tests-PQ3SUDDN.js");
3538
3538
  const argStr = args.join(" ").trim();
3539
3539
  let testArgs = {};
3540
3540
  if (argStr) {
@@ -3,16 +3,16 @@ import {
3
3
  CI_COMMENT_MARKER,
4
4
  countSeverity,
5
5
  runCi
6
- } from "./chunk-34TV5BBH.js";
7
- import "./chunk-ZMIAVBFY.js";
6
+ } from "./chunk-YK42KYKN.js";
7
+ import "./chunk-55AANMEM.js";
8
8
  import "./chunk-HLWUDRBO.js";
9
9
  import "./chunk-6YZEZFX5.js";
10
- import "./chunk-FBOVBL7P.js";
11
- import "./chunk-RPI74YNP.js";
12
- import "./chunk-Y56UGZPX.js";
10
+ import "./chunk-VXEF2SWG.js";
11
+ import "./chunk-XEKMGE2G.js";
12
+ import "./chunk-MI4SFZGX.js";
13
13
  import "./chunk-TU3L3PW7.js";
14
14
  import "./chunk-IW3Q7AE5.js";
15
- import "./chunk-2MOYOMY5.js";
15
+ import "./chunk-7WD2TBWY.js";
16
16
  export {
17
17
  CI_COMMENT_MARKER,
18
18
  countSeverity,
@@ -6,8 +6,8 @@ import {
6
6
  formatCiResult,
7
7
  formatCiSarif,
8
8
  normalizeCiThresholds
9
- } from "./chunk-ZMIAVBFY.js";
10
- import "./chunk-2MOYOMY5.js";
9
+ } from "./chunk-55AANMEM.js";
10
+ import "./chunk-7WD2TBWY.js";
11
11
  export {
12
12
  DEFAULT_CI_THRESHOLDS,
13
13
  detectCiGateSignals,
@@ -37,7 +37,7 @@ import {
37
37
  TEST_TIMEOUT,
38
38
  VERSION,
39
39
  buildUserIdentityPrompt
40
- } from "./chunk-KQLKS3ZQ.js";
40
+ } from "./chunk-3GOHR45I.js";
41
41
  export {
42
42
  AGENTIC_BEHAVIOR_GUIDELINE,
43
43
  APP_NAME,
@@ -38,7 +38,7 @@ import {
38
38
  TEST_TIMEOUT,
39
39
  VERSION,
40
40
  buildUserIdentityPrompt
41
- } from "./chunk-2MOYOMY5.js";
41
+ } from "./chunk-7WD2TBWY.js";
42
42
  export {
43
43
  AGENTIC_BEHAVIOR_GUIDELINE,
44
44
  APP_NAME,
@@ -2,16 +2,16 @@
2
2
  import {
3
3
  formatDoctorReport,
4
4
  runDoctorCli
5
- } from "./chunk-YFCGMH2R.js";
6
- import "./chunk-LNGH6PEC.js";
5
+ } from "./chunk-6ZRLM3NG.js";
6
+ import "./chunk-Q24BN6WF.js";
7
7
  import "./chunk-RS7SKYTS.js";
8
- import "./chunk-FBOVBL7P.js";
9
- import "./chunk-RPI74YNP.js";
10
- import "./chunk-Y56UGZPX.js";
8
+ import "./chunk-VXEF2SWG.js";
9
+ import "./chunk-XEKMGE2G.js";
10
+ import "./chunk-MI4SFZGX.js";
11
11
  import "./chunk-TU3L3PW7.js";
12
12
  import "./chunk-HOSJZMQS.js";
13
13
  import "./chunk-IW3Q7AE5.js";
14
- import "./chunk-2MOYOMY5.js";
14
+ import "./chunk-7WD2TBWY.js";
15
15
  export {
16
16
  formatDoctorReport,
17
17
  runDoctorCli