jinzd-ai-cli 0.4.306 → 0.4.308

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 (95) hide show
  1. package/README.md +1 -0
  2. package/THIRD_PARTY_NOTICES.md +3 -0
  3. package/dist/{agent-client-6GX6QQDU.js → agent-client-TIEAYZXV.js} +4 -1
  4. package/dist/{auth-PE3Z5OHS.js → auth-QTQNZ6IX.js} +2 -2
  5. package/dist/{batch-JLGWQ7HU.js → batch-S7XLEEOH.js} +3 -3
  6. package/dist/{chat-index-2D5GK2DB.js → chat-index-7CLR4CBG.js} +4 -3
  7. package/dist/{chat-index-DGUOUUQW.js → chat-index-RLVLQRRC.js} +3 -2
  8. package/dist/{chunk-JDT6UG6R.js → chunk-2DYQDLLF.js} +1 -1
  9. package/dist/{chunk-T6WQEQI4.js → chunk-2MNUMLN4.js} +1 -1
  10. package/dist/chunk-2XMUCC42.js +67 -0
  11. package/dist/{chunk-7SSCSSC6.js → chunk-3537CQ5M.js} +2 -2
  12. package/dist/{chunk-OAXLMF3U.js → chunk-3YVNDYOY.js} +1 -1
  13. package/dist/{chunk-RYQBBEMM.js → chunk-4PR5AVJ5.js} +115 -19
  14. package/dist/{chunk-GHWZVPUV.js → chunk-6JHACXB3.js} +7 -5
  15. package/dist/{chunk-WZWRA7R2.js → chunk-7OHXFTZO.js} +2 -2
  16. package/dist/{chunk-IUVDZVZ4.js → chunk-AXTLYOA7.js} +24 -17
  17. package/dist/{chunk-XJOK5353.js → chunk-B3MPYI4E.js} +2 -2
  18. package/dist/{chunk-3RDJEYF7.js → chunk-BGZN4K7Q.js} +4 -4
  19. package/dist/chunk-BMLQPSHP.js +69 -0
  20. package/dist/{chunk-NRSYBKWA.js → chunk-C7CKDFJS.js} +1 -1
  21. package/dist/{chunk-JFNBJHR6.js → chunk-E2PNXNKI.js} +4 -4
  22. package/dist/chunk-FVXNEZEW.js +161 -0
  23. package/dist/{chunk-YKJO3SI4.js → chunk-G6DVGQ4I.js} +1 -1
  24. package/dist/{chunk-AYLK4EGA.js → chunk-HC33C4U3.js} +18 -18
  25. package/dist/chunk-JJFJWD35.js +162 -0
  26. package/dist/{chunk-W6PLV3EY.js → chunk-JJNUASMJ.js} +263 -55
  27. package/dist/{chunk-NYNSYLFY.js → chunk-JL44HGZC.js} +1 -1
  28. package/dist/{chunk-NUJTNH76.js → chunk-LBWKMTT3.js} +1 -1
  29. package/dist/{chunk-LAP7TPPK.js → chunk-LR3TGZWQ.js} +2 -2
  30. package/dist/{chunk-WQ3OMEC4.js → chunk-M6HLYG33.js} +1 -1
  31. package/dist/{chunk-I4GQRMFV.js → chunk-M6YV5KSS.js} +6 -4
  32. package/dist/{chunk-K5SDDTN7.js → chunk-NLK45GUS.js} +1 -1
  33. package/dist/{chunk-KBDKKHXB.js → chunk-O6CGOVD4.js} +2 -2
  34. package/dist/chunk-QMFMST2T.js +39 -0
  35. package/dist/{chunk-MI4SFZGX.js → chunk-RMEJR3AW.js} +5 -2
  36. package/dist/{chunk-UFW4S3RU.js → chunk-RVMCY6DP.js} +1 -1
  37. package/dist/{chunk-LF67HWWR.js → chunk-RWRZVQCB.js} +1 -1
  38. package/dist/chunk-SXIJLSVF.js +41 -0
  39. package/dist/chunk-TDQW2YHK.js +65 -0
  40. package/dist/{chunk-VLDB2SVN.js → chunk-TPTFV3Y6.js} +383 -513
  41. package/dist/{chunk-45UVJXFQ.js → chunk-W2UOVGRC.js} +1 -1
  42. package/dist/{chunk-VXEF2SWG.js → chunk-WT252ZDV.js} +2 -2
  43. package/dist/{chunk-NLB7JZSO.js → chunk-WVEIUSXE.js} +246 -55
  44. package/dist/{chunk-OC2XHG5L.js → chunk-YBZM7PHI.js} +4 -4
  45. package/dist/{ci-6PHEL3C7.js → ci-5HONSUAS.js} +7 -7
  46. package/dist/{ci-format-AZYUP6BL.js → ci-format-URUH3ZZ5.js} +2 -2
  47. package/dist/{constants-CPNWIUGZ.js → constants-BLDBI7IG.js} +1 -1
  48. package/dist/{constants-AXBD2EEB.js → constants-FG27DQMS.js} +1 -1
  49. package/dist/doctor-cli-QQLMNJN7.js +18 -0
  50. package/dist/electron-server.js +1003 -829
  51. package/dist/file-checkpoint-64A2AXHE.js +7 -0
  52. package/dist/{file-checkpoint-NKBHGC7L.js → file-checkpoint-VVPUJNCI.js} +2 -1
  53. package/dist/{hub-DDYAWLF2.js → hub-GGFW3DCC.js} +3 -3
  54. package/dist/{hub-server-CBKCP5VD.js → hub-server-JLC7CNP7.js} +55 -17
  55. package/dist/index.js +42 -40
  56. package/dist/{indexer-P3FPRTPJ.js → indexer-GKIWSSRP.js} +3 -3
  57. package/dist/indexer-VRXDZ74A.js +10 -0
  58. package/dist/{persist-S77WRVLD.js → persist-ZZXRWFBX.js} +4 -4
  59. package/dist/{persistent-memory-XZISXRWT.js → persistent-memory-UNLCXUWH.js} +3 -3
  60. package/dist/{persistent-memory-6XYYOMSC.js → persistent-memory-YYWIN6BG.js} +3 -3
  61. package/dist/{pr-UY4ZCZNI.js → pr-YCFGPFI7.js} +7 -7
  62. package/dist/{project-trust-MUG325AW.js → project-trust-6CJB5ZMX.js} +1 -1
  63. package/dist/{project-trust-NKYHL3VZ.js → project-trust-KGG2BWKC.js} +1 -1
  64. package/dist/run-tests-GHY4BYDE.js +13 -0
  65. package/dist/run-tests-KRNMFXAN.js +12 -0
  66. package/dist/{semantic-7GM5M4MU.js → semantic-N227CLSC.js} +4 -4
  67. package/dist/{semantic-QOBAXEQ4.js → semantic-TRQAZSRY.js} +4 -4
  68. package/dist/{server-6IC33CJK.js → server-73UBHSFV.js} +16 -14
  69. package/dist/{server-DBHLVQVP.js → server-QRAWSG4Z.js} +231 -103
  70. package/dist/{store-SIKHCUYJ.js → store-2N6PPPBP.js} +2 -2
  71. package/dist/{store-CMSSWZF7.js → store-76VVFDXM.js} +2 -2
  72. package/dist/{task-orchestrator-RDDETDW2.js → task-orchestrator-GI3RGLZI.js} +15 -14
  73. package/dist/{usage-D473ZVIP.js → usage-GWTIGZF5.js} +4 -4
  74. package/dist/{vector-store-JAXWDZYW.js → vector-store-T2DVUMY4.js} +2 -2
  75. package/dist/{vector-store-PWIOQFTP.js → vector-store-V6UGEYWK.js} +2 -2
  76. package/dist/web/client/app.js +7 -0
  77. package/dist/web/client/app.js.br +0 -0
  78. package/dist/web/client/app.js.gz +0 -0
  79. package/dist/web/client/util.js +14 -23
  80. package/dist/web/client/util.js.br +0 -0
  81. package/dist/web/client/util.js.gz +0 -0
  82. package/dist/web/client/vendor/DOMPurify-LICENSE.txt +202 -0
  83. package/dist/web/client/vendor/purify.es.mjs +2722 -0
  84. package/dist/web/client/vendor/purify.es.mjs.br +0 -0
  85. package/dist/web/client/vendor/purify.es.mjs.gz +0 -0
  86. package/package.json +4 -2
  87. package/dist/chunk-4BKXL7SM.js +0 -98
  88. package/dist/chunk-6BUTA5VW.js +0 -38
  89. package/dist/chunk-IW3Q7AE5.js +0 -40
  90. package/dist/chunk-SKET65WZ.js +0 -96
  91. package/dist/doctor-cli-DDHHDMMJ.js +0 -18
  92. package/dist/file-checkpoint-CGH6OJVI.js +0 -6
  93. package/dist/indexer-FPKY7LCT.js +0 -10
  94. package/dist/run-tests-BAMLVLO6.js +0 -10
  95. package/dist/run-tests-UEE3OMLS.js +0 -9
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  atomicWriteFileSync
3
- } from "./chunk-6BUTA5VW.js";
3
+ } from "./chunk-2XMUCC42.js";
4
4
 
5
5
  // src/symbols/store.ts
6
6
  import fs from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  detectsHallucinatedFileOp,
4
4
  parseToolCallArguments,
5
5
  schemaToJsonSchema
6
- } from "./chunk-MI4SFZGX.js";
6
+ } from "./chunk-RMEJR3AW.js";
7
7
  import {
8
8
  AuthError,
9
9
  ProviderError,
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-TU3L3PW7.js";
13
13
  import {
14
14
  atomicWriteFileSync
15
- } from "./chunk-IW3Q7AE5.js";
15
+ } from "./chunk-BMLQPSHP.js";
16
16
 
17
17
  // src/providers/claude.ts
18
18
  import Anthropic from "@anthropic-ai/sdk";
@@ -1,15 +1,180 @@
1
+ import {
2
+ getExecutionConfigDir,
3
+ getExecutionSignal
4
+ } from "./chunk-QMFMST2T.js";
1
5
  import {
2
6
  TEST_TIMEOUT
3
- } from "./chunk-JDT6UG6R.js";
7
+ } from "./chunk-2DYQDLLF.js";
8
+
9
+ // src/tools/builtin/run-tests.ts
10
+ import { spawn as spawn2 } from "child_process";
11
+
12
+ // src/core/interrupt.ts
13
+ var controller = new AbortController();
14
+ function currentAbortSignal() {
15
+ return getExecutionSignal() ?? controller.signal;
16
+ }
17
+
18
+ // src/tools/win-shell.ts
19
+ import { platform } from "os";
20
+ import { spawn } from "child_process";
21
+ var IS_WINDOWS = platform() === "win32";
22
+ var WIN_UTF8_PREAMBLE = "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; $OutputEncoding = [System.Text.Encoding]::UTF8; ";
23
+ function shellInvocation(command) {
24
+ if (IS_WINDOWS) {
25
+ return {
26
+ shell: "powershell.exe",
27
+ args: ["-NoProfile", "-NonInteractive", "-Command", WIN_UTF8_PREAMBLE + command]
28
+ };
29
+ }
30
+ return { shell: process.env["SHELL"] ?? "/bin/bash", args: ["-c", command] };
31
+ }
32
+ function decodeWindowsBuffer(buf) {
33
+ const utf8 = buf.toString("utf-8");
34
+ if (!utf8.includes("\uFFFD")) return utf8;
35
+ try {
36
+ return new TextDecoder("gbk").decode(buf);
37
+ } catch {
38
+ return utf8;
39
+ }
40
+ }
41
+ var GBK_MOJIBAKE_FINGERPRINTS = [
42
+ "\uFFFD",
43
+ "\u9215",
44
+ "\u951B",
45
+ "\u9983",
46
+ "\u9241",
47
+ "\u6D93",
48
+ "\u935B",
49
+ "\u9428",
50
+ "\u7EFE",
51
+ "\u95AB",
52
+ "\u9593",
53
+ "\u95BF",
54
+ "\u68E3",
55
+ "\u95B4",
56
+ "\u5A11",
57
+ "\u95B8",
58
+ "\u95BB",
59
+ "\u7F01",
60
+ "\u95C1"
61
+ ];
62
+ var gbkReverse = null;
63
+ function gbkReverseMap() {
64
+ if (gbkReverse) return gbkReverse;
65
+ const map = /* @__PURE__ */ new Map();
66
+ try {
67
+ const dec = new TextDecoder("gbk");
68
+ for (let hi = 129; hi <= 254; hi++) {
69
+ for (let lo = 64; lo <= 254; lo++) {
70
+ if (lo === 127) continue;
71
+ const ch = dec.decode(new Uint8Array([hi, lo]));
72
+ if (ch.length === 1 && ch !== "\uFFFD" && !map.has(ch)) map.set(ch, [hi, lo]);
73
+ }
74
+ }
75
+ } catch {
76
+ }
77
+ gbkReverse = map;
78
+ return map;
79
+ }
80
+ function decodeRunAsChinese(bytes) {
81
+ for (let start = 0; start <= 2 && start < bytes.length; start++) {
82
+ for (let end = 0; end <= 2 && bytes.length - end > start; end++) {
83
+ const slice = bytes.slice(start, bytes.length - end);
84
+ if (slice.length < 6) continue;
85
+ try {
86
+ const out = new TextDecoder("utf-8", { fatal: true }).decode(new Uint8Array(slice));
87
+ if (/[一-鿿]/.test(out)) return out;
88
+ } catch {
89
+ }
90
+ }
91
+ }
92
+ return null;
93
+ }
94
+ function recoverGbkMojibake(text) {
95
+ if (!text) return null;
96
+ const map = gbkReverseMap();
97
+ if (map.size === 0) return null;
98
+ let run = [];
99
+ let best = null;
100
+ const flush = () => {
101
+ if (run.length >= 4) {
102
+ const bytes = [];
103
+ for (const p of run) bytes.push(p[0], p[1]);
104
+ const out = decodeRunAsChinese(bytes);
105
+ if (out && (!best || out.length > best.length)) best = out;
106
+ }
107
+ run = [];
108
+ };
109
+ for (const ch of text) {
110
+ const pair = ch.codePointAt(0) < 128 ? void 0 : map.get(ch);
111
+ if (pair) run.push(pair);
112
+ else flush();
113
+ }
114
+ flush();
115
+ return best;
116
+ }
117
+ function looksLikeGbkMojibake(text) {
118
+ if (recoverGbkMojibake(text) !== null) return true;
119
+ let hits = 0;
120
+ for (const ch of GBK_MOJIBAKE_FINGERPRINTS) {
121
+ if (text.includes(ch) && ++hits >= 2) return true;
122
+ }
123
+ return false;
124
+ }
125
+ function killProcessTree(proc, processGroup = false) {
126
+ if (proc.killed || proc.exitCode !== null) return;
127
+ if (IS_WINDOWS && proc.pid) {
128
+ try {
129
+ const tk = spawn("taskkill", ["/PID", String(proc.pid), "/T", "/F"], {
130
+ windowsHide: true,
131
+ stdio: "ignore"
132
+ });
133
+ tk.on("exit", () => {
134
+ try {
135
+ proc.kill();
136
+ } catch {
137
+ }
138
+ });
139
+ tk.on("error", () => {
140
+ try {
141
+ proc.kill();
142
+ } catch {
143
+ }
144
+ });
145
+ } catch {
146
+ try {
147
+ proc.kill();
148
+ } catch {
149
+ }
150
+ }
151
+ return;
152
+ }
153
+ const signal = (value) => {
154
+ if (processGroup && proc.pid) process.kill(-proc.pid, value);
155
+ else proc.kill(value);
156
+ };
157
+ try {
158
+ signal("SIGTERM");
159
+ } catch {
160
+ }
161
+ setTimeout(() => {
162
+ if (processGroup || proc.exitCode === null) {
163
+ try {
164
+ signal("SIGKILL");
165
+ } catch {
166
+ }
167
+ }
168
+ }, 500).unref();
169
+ }
4
170
 
5
171
  // src/tools/builtin/run-tests.ts
6
- import { execSync, spawnSync } from "child_process";
7
172
  import { existsSync, readFileSync, readdirSync } from "fs";
8
173
  import { join } from "path";
9
- import { platform } from "os";
174
+ import { platform as platform2 } from "os";
10
175
  import chalk from "chalk";
11
- var FILTER_WHITELIST = /^[\w.\-/:#\s*?()\[\]@+]{1,200}$/;
12
- var IS_WINDOWS = platform() === "win32";
176
+ var FILTER_WHITELIST = /^[\w.\-/:# *?\[\]@+]{1,200}$/;
177
+ var IS_WINDOWS2 = platform2() === "win32";
13
178
  function detectNodeTestFramework(cwd, pkg) {
14
179
  const devDeps = pkg.devDependencies ?? {};
15
180
  const deps = pkg.dependencies ?? {};
@@ -79,11 +244,11 @@ function safeReadPackageJson(cwd) {
79
244
  }
80
245
  function detectProject(cwd) {
81
246
  if (existsSync(join(cwd, "pom.xml"))) {
82
- return { type: "java", framework: "Maven (JUnit)", command: IS_WINDOWS ? "mvn.cmd test" : "mvn test" };
247
+ return { type: "java", framework: "Maven (JUnit)", command: IS_WINDOWS2 ? "mvn.cmd test" : "mvn test" };
83
248
  }
84
249
  if (existsSync(join(cwd, "build.gradle")) || existsSync(join(cwd, "build.gradle.kts"))) {
85
- const wrapper = IS_WINDOWS ? "gradlew.bat" : "./gradlew";
86
- const cmd = existsSync(join(cwd, IS_WINDOWS ? "gradlew.bat" : "gradlew")) ? `${wrapper} test` : "gradle test";
250
+ const wrapper = IS_WINDOWS2 ? "gradlew.bat" : "./gradlew";
251
+ const cmd = existsSync(join(cwd, IS_WINDOWS2 ? "gradlew.bat" : "gradlew")) ? `${wrapper} test` : "gradle test";
87
252
  return { type: "java", framework: "Gradle (JUnit)", command: cmd };
88
253
  }
89
254
  if (existsSync(join(cwd, "package.json"))) {
@@ -239,7 +404,7 @@ function renderColorReport(summary, framework) {
239
404
  console.log();
240
405
  }
241
406
  function needsWindowsShell(file) {
242
- if (!IS_WINDOWS) return false;
407
+ if (!IS_WINDOWS2) return false;
243
408
  const lower = file.toLowerCase();
244
409
  return lower.endsWith(".cmd") || lower.endsWith(".bat") || lower === "mvn" || lower === "gradle" || lower === "npm" || lower === "npx";
245
410
  }
@@ -306,51 +471,9 @@ Got: ${filter.slice(0, 60)}${filter.length > 60 ? "..." : ""}`;
306
471
  framework = detected.framework;
307
472
  argv = buildArgv(detected, filter);
308
473
  }
309
- let output;
310
- let exitCode = 0;
311
- if (argv) {
312
- const r = spawnSync(argv.file, argv.args, {
313
- cwd,
314
- timeout: TEST_TIMEOUT,
315
- stdio: ["pipe", "pipe", "pipe"],
316
- // shell:false is the default for spawnSync; on Windows .cmd/.bat
317
- // requires shell:true, so we opt-in only for known wrapper names.
318
- shell: needsWindowsShell(argv.file),
319
- env: {
320
- ...process.env,
321
- ...IS_WINDOWS ? {} : { FORCE_COLOR: "0" }
322
- },
323
- encoding: "utf-8",
324
- maxBuffer: 64 * 1024 * 1024
325
- });
326
- if (r.error) {
327
- output = `Failed to launch test runner: ${r.error.message}`;
328
- exitCode = 1;
329
- } else {
330
- exitCode = r.status ?? 1;
331
- output = (r.stdout ?? "") + (r.stderr ? "\n" + r.stderr : "");
332
- }
333
- } else {
334
- try {
335
- const buf = execSync(command, {
336
- cwd,
337
- timeout: TEST_TIMEOUT,
338
- encoding: "buffer",
339
- stdio: ["pipe", "pipe", "pipe"],
340
- env: {
341
- ...process.env,
342
- ...IS_WINDOWS ? {} : { FORCE_COLOR: "0" }
343
- }
344
- });
345
- output = buf.toString("utf-8");
346
- } catch (err) {
347
- const e = err;
348
- exitCode = e.status ?? 1;
349
- const stdout = e.stdout?.toString("utf-8") ?? "";
350
- const stderr = e.stderr?.toString("utf-8") ?? "";
351
- output = stdout + (stderr ? "\n" + stderr : "");
352
- }
353
- }
474
+ const result = await runTestProcess(argv, command, cwd, currentAbortSignal());
475
+ const output = result.output;
476
+ const exitCode = result.exitCode;
354
477
  let summary = {
355
478
  tests: 0,
356
479
  passed: 0,
@@ -389,6 +512,7 @@ Got: ${filter.slice(0, 60)}${filter.length > 60 ? "..." : ""}`;
389
512
  }
390
513
  }
391
514
  }
515
+ if (exitCode !== 0 && summary.failures + summary.errors === 0) summary.errors = 1;
392
516
  renderColorReport(summary, framework);
393
517
  return formatReport(summary, framework, output, exitCode);
394
518
  }
@@ -413,8 +537,75 @@ var runTestsTool = {
413
537
  return executeTests(args);
414
538
  }
415
539
  };
540
+ var MAX_TEST_OUTPUT_BYTES = 4 * 1024 * 1024;
541
+ var activeTestProcesses = 0;
542
+ var activeTestsByOwner = /* @__PURE__ */ new Map();
543
+ async function runTestProcess(argv, command, cwd, signal) {
544
+ if (signal.aborted) throw new Error("Test run cancelled");
545
+ const owner = getExecutionConfigDir();
546
+ if ((activeTestsByOwner.get(owner) ?? 0) >= 2) throw new Error("Test runner capacity reached (2 per user).");
547
+ if (activeTestProcesses >= 4) throw new Error("Test runner capacity reached (4). Try again after a run finishes.");
548
+ activeTestProcesses++;
549
+ activeTestsByOwner.set(owner, (activeTestsByOwner.get(owner) ?? 0) + 1);
550
+ try {
551
+ return await new Promise((resolve, reject) => {
552
+ const child = argv ? spawn2(argv.file, argv.args, { cwd, shell: needsWindowsShell(argv.file), windowsHide: true, detached: !IS_WINDOWS2, stdio: ["ignore", "pipe", "pipe"] }) : spawn2(command, { cwd, shell: true, windowsHide: true, detached: !IS_WINDOWS2, stdio: ["ignore", "pipe", "pipe"] });
553
+ const chunks = [];
554
+ let bytes = 0;
555
+ let stopped = "";
556
+ let settled = false;
557
+ const stop = (reason) => {
558
+ if (stopped) return;
559
+ stopped = reason;
560
+ killProcessTree(child, true);
561
+ };
562
+ const onAbort = () => stop("Test run cancelled");
563
+ const timer = setTimeout(() => stop("Test run timed out"), TEST_TIMEOUT);
564
+ signal.addEventListener("abort", onAbort, { once: true });
565
+ if (signal.aborted) onAbort();
566
+ const append = (chunk) => {
567
+ const take = Math.min(chunk.length, MAX_TEST_OUTPUT_BYTES - bytes);
568
+ if (take > 0) chunks.push(chunk.subarray(0, take));
569
+ bytes += take;
570
+ if (bytes >= MAX_TEST_OUTPUT_BYTES) stop("Test output exceeded 4 MiB limit");
571
+ };
572
+ child.stdout?.on("data", append);
573
+ child.stderr?.on("data", append);
574
+ const clean = () => {
575
+ clearTimeout(timer);
576
+ signal.removeEventListener("abort", onAbort);
577
+ };
578
+ child.once("error", (error) => {
579
+ if (settled) return;
580
+ settled = true;
581
+ clean();
582
+ reject(error);
583
+ });
584
+ child.once("close", (code) => {
585
+ if (settled) return;
586
+ settled = true;
587
+ clean();
588
+ resolve({ output: Buffer.concat(chunks).toString("utf8") + (stopped ? "\n" + stopped : ""), exitCode: stopped ? 1 : code ?? 1 });
589
+ });
590
+ });
591
+ } finally {
592
+ activeTestProcesses--;
593
+ const remaining = (activeTestsByOwner.get(owner) ?? 1) - 1;
594
+ if (remaining) activeTestsByOwner.set(owner, remaining);
595
+ else activeTestsByOwner.delete(owner);
596
+ }
597
+ }
416
598
 
417
599
  export {
600
+ currentAbortSignal,
601
+ IS_WINDOWS,
602
+ WIN_UTF8_PREAMBLE,
603
+ shellInvocation,
604
+ decodeWindowsBuffer,
605
+ recoverGbkMojibake,
606
+ looksLikeGbkMojibake,
607
+ killProcessTree,
418
608
  executeTests,
419
- runTestsTool
609
+ runTestsTool,
610
+ runTestProcess
420
611
  };
@@ -5,13 +5,13 @@ import {
5
5
  } from "./chunk-TU3L3PW7.js";
6
6
  import {
7
7
  atomicWriteFileSync
8
- } from "./chunk-IW3Q7AE5.js";
8
+ } from "./chunk-BMLQPSHP.js";
9
9
  import {
10
10
  CONFIG_DIR_NAME,
11
11
  CONFIG_FILE_NAME,
12
12
  HISTORY_DIR_NAME,
13
13
  PLUGINS_DIR_NAME
14
- } from "./chunk-T6WQEQI4.js";
14
+ } from "./chunk-2MNUMLN4.js";
15
15
 
16
16
  // src/config/config-manager.ts
17
17
  import { readFileSync, existsSync, mkdirSync } from "fs";
@@ -427,8 +427,8 @@ ${err}`
427
427
  return changed;
428
428
  }
429
429
  save() {
430
- mkdirSync(this.configDir, { recursive: true });
431
- atomicWriteFileSync(this.configPath, JSON.stringify(this.config, null, 2));
430
+ mkdirSync(this.configDir, { recursive: true, mode: 448 });
431
+ atomicWriteFileSync(this.configPath, JSON.stringify(this.config, null, 2), { mode: 384 });
432
432
  }
433
433
  getApiKey(providerId) {
434
434
  const envKey = EnvLoader.getApiKey(providerId);
@@ -3,16 +3,16 @@ import {
3
3
  CI_COMMENT_MARKER,
4
4
  countSeverity,
5
5
  runCi
6
- } from "./chunk-3RDJEYF7.js";
7
- import "./chunk-K5SDDTN7.js";
6
+ } from "./chunk-BGZN4K7Q.js";
7
+ import "./chunk-NLK45GUS.js";
8
8
  import "./chunk-HLWUDRBO.js";
9
9
  import "./chunk-6YZEZFX5.js";
10
- import "./chunk-VXEF2SWG.js";
11
- import "./chunk-OC2XHG5L.js";
12
- import "./chunk-MI4SFZGX.js";
10
+ import "./chunk-WT252ZDV.js";
11
+ import "./chunk-YBZM7PHI.js";
12
+ import "./chunk-RMEJR3AW.js";
13
13
  import "./chunk-TU3L3PW7.js";
14
- import "./chunk-IW3Q7AE5.js";
15
- import "./chunk-T6WQEQI4.js";
14
+ import "./chunk-BMLQPSHP.js";
15
+ import "./chunk-2MNUMLN4.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-K5SDDTN7.js";
10
- import "./chunk-T6WQEQI4.js";
9
+ } from "./chunk-NLK45GUS.js";
10
+ import "./chunk-2MNUMLN4.js";
11
11
  export {
12
12
  DEFAULT_CI_THRESHOLDS,
13
13
  detectCiGateSignals,
@@ -39,7 +39,7 @@ import {
39
39
  TEST_TIMEOUT,
40
40
  VERSION,
41
41
  buildUserIdentityPrompt
42
- } from "./chunk-T6WQEQI4.js";
42
+ } from "./chunk-2MNUMLN4.js";
43
43
  export {
44
44
  AGENTIC_BEHAVIOR_GUIDELINE,
45
45
  APP_NAME,
@@ -38,7 +38,7 @@ import {
38
38
  TEST_TIMEOUT,
39
39
  VERSION,
40
40
  buildUserIdentityPrompt
41
- } from "./chunk-JDT6UG6R.js";
41
+ } from "./chunk-2DYQDLLF.js";
42
42
  export {
43
43
  AGENTIC_BEHAVIOR_GUIDELINE,
44
44
  APP_NAME,
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ formatDoctorReport,
4
+ runDoctorCli
5
+ } from "./chunk-E2PNXNKI.js";
6
+ import "./chunk-3537CQ5M.js";
7
+ import "./chunk-RS7SKYTS.js";
8
+ import "./chunk-WT252ZDV.js";
9
+ import "./chunk-YBZM7PHI.js";
10
+ import "./chunk-RMEJR3AW.js";
11
+ import "./chunk-TU3L3PW7.js";
12
+ import "./chunk-HOSJZMQS.js";
13
+ import "./chunk-BMLQPSHP.js";
14
+ import "./chunk-2MNUMLN4.js";
15
+ export {
16
+ formatDoctorReport,
17
+ runDoctorCli
18
+ };