jinzd-ai-cli 0.4.214 → 0.4.216

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 (31) hide show
  1. package/README.md +2 -0
  2. package/dist/{batch-NPUUDETK.js → batch-C6HCXZIG.js} +2 -2
  3. package/dist/{chunk-JQC7IATA.js → chunk-6HLKCSB3.js} +1 -1
  4. package/dist/{chunk-YMFGGCUP.js → chunk-77HDCGTN.js} +1 -1
  5. package/dist/{chunk-DBYMX2ZC.js → chunk-7YWS3JLU.js} +1 -1
  6. package/dist/{ci-3TU7WCY4.js → chunk-GY3C3C2Y.js} +40 -46
  7. package/dist/{chunk-JOJA35RK.js → chunk-OLN7VUZA.js} +1 -1
  8. package/dist/{chunk-5FG7PSVM.js → chunk-PNTLA3MN.js} +2 -2
  9. package/dist/{chunk-R5CJD2AB.js → chunk-TCOC4AUI.js} +3 -3
  10. package/dist/chunk-TJ6GGN4B.js +105 -0
  11. package/dist/{chunk-TR6MSPSS.js → chunk-VW7Y27WW.js} +1 -1
  12. package/dist/{chunk-YFHF3PVB.js → chunk-WAI3WPV2.js} +1 -1
  13. package/dist/ci-6ZTFO3LX.js +19 -0
  14. package/dist/ci-format-CLZ6QJRL.js +18 -0
  15. package/dist/{constants-BKR7T3QH.js → constants-APSORFOH.js} +1 -1
  16. package/dist/{doctor-cli-TGVSWKDB.js → doctor-cli-GUIX4X5F.js} +4 -4
  17. package/dist/electron-server.js +2 -2
  18. package/dist/{hub-GURYEW6F.js → hub-ZGHQWNWE.js} +1 -1
  19. package/dist/index.js +58 -22
  20. package/dist/pr-JOL3IAGV.js +267 -0
  21. package/dist/{run-tests-R6FL6CQ3.js → run-tests-4PKSIVK5.js} +1 -1
  22. package/dist/{run-tests-F44JA2YW.js → run-tests-ZRK4TQUN.js} +2 -2
  23. package/dist/{server-FXWCSCDZ.js → server-FXUF5P64.js} +7 -7
  24. package/dist/{server-GQXC46R5.js → server-O3XHT56X.js} +4 -4
  25. package/dist/{task-orchestrator-6AZD5WSR.js → task-orchestrator-TUMDTOAX.js} +4 -4
  26. package/dist/{usage-W7J2QA3G.js → usage-X7MJX4YD.js} +2 -2
  27. package/dist/web/client/actions.js +1 -0
  28. package/dist/web/client/app.js +182 -13
  29. package/dist/web/client/index.html +21 -3
  30. package/dist/web/client/style.css +62 -0
  31. package/package.json +1 -1
package/README.md CHANGED
@@ -47,6 +47,8 @@
47
47
  - **Headless Mode** — `ai-cli -p "prompt"` for CI/CD pipelines and scripting
48
48
  - **44 REPL Commands** — Session management, checkpointing, code review, security review/scan, rewind, scaffolding, cross-session history search, chat-memory recall, smart model routing (`/route`), and more
49
49
  - **GitHub Actions CI/CD** — Automated testing on Node 20/22 + npm publish on release tags
50
+ - **PR Review CLI** *(v0.4.216+)* — `aicli pr review|security-review|summarize` reviews `main...HEAD`, custom `--base/--head`, or GitHub PR URLs; optional `--agents security,bugs,tests,maintainability`; never posts comments unless `--post` is explicit
51
+ - **CI Review Artifacts** *(v0.4.216+)* — `aicli ci` emits Markdown, JSON, or SARIF and gates on security-high, test-failure, and lint-failure findings in read-only review mode
50
52
  - **Cross-Platform** — Windows, macOS, Linux
51
53
 
52
54
  ## Installation
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ConfigManager
4
- } from "./chunk-YFHF3PVB.js";
4
+ } from "./chunk-WAI3WPV2.js";
5
5
  import "./chunk-TZQHYZKT.js";
6
- import "./chunk-DBYMX2ZC.js";
6
+ import "./chunk-7YWS3JLU.js";
7
7
  import {
8
8
  atomicWriteFileSync
9
9
  } from "./chunk-IW3Q7AE5.js";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  CONFIG_DIR_NAME,
4
4
  VERSION
5
- } from "./chunk-DBYMX2ZC.js";
5
+ } from "./chunk-7YWS3JLU.js";
6
6
 
7
7
  // src/diagnostics/crash-log.ts
8
8
  import {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CONFIG_DIR_NAME
4
- } from "./chunk-DBYMX2ZC.js";
4
+ } from "./chunk-7YWS3JLU.js";
5
5
  import {
6
6
  atomicWriteFileSync
7
7
  } from "./chunk-IW3Q7AE5.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/core/constants.ts
4
- var VERSION = "0.4.214";
4
+ var VERSION = "0.4.216";
5
5
  var APP_NAME = "ai-cli";
6
6
  var CONFIG_DIR_NAME = ".aicli";
7
7
  var CONFIG_FILE_NAME = "config.json";
@@ -1,4 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ evaluateCiGate,
4
+ normalizeCiThresholds
5
+ } from "./chunk-TJ6GGN4B.js";
2
6
  import {
3
7
  buildReviewPrompt,
4
8
  buildSecurityReviewPrompt,
@@ -7,19 +11,30 @@ import {
7
11
  import {
8
12
  ProviderRegistry
9
13
  } from "./chunk-QMXC327F.js";
10
- import "./chunk-XPBEJB27.js";
11
14
  import {
12
15
  ConfigManager
13
- } from "./chunk-YFHF3PVB.js";
14
- import "./chunk-TZQHYZKT.js";
16
+ } from "./chunk-WAI3WPV2.js";
15
17
  import {
16
18
  VERSION
17
- } from "./chunk-DBYMX2ZC.js";
18
- import "./chunk-IW3Q7AE5.js";
19
+ } from "./chunk-7YWS3JLU.js";
19
20
 
20
21
  // src/cli/ci.ts
21
22
  import { execFileSync } from "child_process";
22
23
  var CI_COMMENT_MARKER = "<!-- aicli-ci-review -->";
24
+ function zeroSeverity() {
25
+ return { critical: 0, high: 0, warning: 0, info: 0 };
26
+ }
27
+ function earlyResult(exitCode, markdown, thresholds) {
28
+ const gate = evaluateCiGate(markdown, thresholds);
29
+ return {
30
+ exitCode: exitCode === 0 && gate.failed ? 1 : exitCode,
31
+ markdown,
32
+ posted: false,
33
+ severity: zeroSeverity(),
34
+ gate,
35
+ meta: { mode: "read-only", thresholds }
36
+ };
37
+ }
23
38
  function fetchDiff(opts) {
24
39
  if (opts.diffOverride != null) return opts.diffOverride;
25
40
  if (opts.pr != null) {
@@ -48,9 +63,7 @@ function fetchDiff(opts) {
48
63
  throw new Error("aicli ci: must supply --pr <num> or --base <ref> to determine the diff source");
49
64
  }
50
65
  function validateGitRef(ref) {
51
- if (!/^[A-Za-z0-9._/\-]+$/.test(ref)) {
52
- throw new Error(`unsafe ref: ${ref}`);
53
- }
66
+ if (!/^[A-Za-z0-9._/\-]+$/.test(ref)) throw new Error(`unsafe ref: ${ref}`);
54
67
  }
55
68
  function buildGitContextStr(opts) {
56
69
  const parts = [];
@@ -62,6 +75,7 @@ function buildGitContextStr(opts) {
62
75
  } catch {
63
76
  }
64
77
  parts.push(`Reviewer: aicli v${VERSION}`);
78
+ parts.push("Mode: read-only CI review (no tools executed)");
65
79
  return parts.join(" | ");
66
80
  }
67
81
  function countSeverity(md) {
@@ -118,9 +132,7 @@ ${CI_COMMENT_MARKER}`;
118
132
  function gqlIdToRest(graphqlId) {
119
133
  if (/^\d+$/.test(graphqlId)) return graphqlId;
120
134
  const query = `query($id:ID!){ node(id:$id){ ... on IssueComment { databaseId } } }`;
121
- const out = execFileSync("gh", ["api", "graphql", "-f", `query=${query}`, "-F", `id=${graphqlId}`], {
122
- encoding: "utf-8"
123
- });
135
+ const out = execFileSync("gh", ["api", "graphql", "-f", `query=${query}`, "-F", `id=${graphqlId}`], { encoding: "utf-8" });
124
136
  const parsed = JSON.parse(out);
125
137
  const id = parsed.data?.node?.databaseId;
126
138
  if (!id) throw new Error(`could not resolve comment id ${graphqlId}`);
@@ -128,25 +140,14 @@ function gqlIdToRest(graphqlId) {
128
140
  }
129
141
  async function runCi(opts) {
130
142
  const maxDiff = opts.maxDiffChars ?? 3e4;
143
+ const thresholds = normalizeCiThresholds(opts.thresholds);
131
144
  let diff;
132
145
  try {
133
146
  diff = fetchDiff(opts).trim();
134
147
  } catch (err) {
135
- return {
136
- exitCode: 2,
137
- markdown: `\u274C ${err.message}`,
138
- posted: false,
139
- severity: { critical: 0, high: 0, warning: 0, info: 0 }
140
- };
141
- }
142
- if (!diff) {
143
- return {
144
- exitCode: 0,
145
- markdown: "\u2705 No changes to review.",
146
- posted: false,
147
- severity: { critical: 0, high: 0, warning: 0, info: 0 }
148
- };
148
+ return earlyResult(2, `\u274C ${err.message}`, thresholds);
149
149
  }
150
+ if (!diff) return earlyResult(0, "\u2705 No changes to review.", thresholds);
150
151
  const { diff: trimmedDiff, truncated } = truncateDiff(diff, maxDiff);
151
152
  const gitCtx = buildGitContextStr(opts);
152
153
  const config = new ConfigManager();
@@ -162,18 +163,14 @@ async function runCi(opts) {
162
163
  );
163
164
  const providerId = opts.provider ?? config.getDefaultProvider();
164
165
  if (!registry.has(providerId)) {
165
- return {
166
- exitCode: 2,
167
- markdown: `\u274C Provider '${providerId}' is not configured. Set the right AICLI_API_KEY_* env var or pass --provider.`,
168
- posted: false,
169
- severity: { critical: 0, high: 0, warning: 0, info: 0 }
170
- };
166
+ return earlyResult(2, `\u274C Provider '${providerId}' is not configured. Set the right AICLI_API_KEY_* env var or pass --provider.`, thresholds);
171
167
  }
172
168
  const providerInfo = registry.get(providerId).info;
173
169
  const modelId = opts.model ?? config.get("defaultModels")[providerId] ?? providerInfo.defaultModel;
170
+ const meta = { provider: providerId, model: modelId, mode: "read-only", thresholds };
174
171
  const sections = [];
175
- sections.push(`## \u{1F916} aicli code review`);
176
- sections.push(`*Provider: \`${providerId}\` \xB7 Model: \`${modelId}\` \xB7 aicli v${VERSION}*`);
172
+ sections.push("## \u{1F916} aicli code review");
173
+ sections.push(`*Provider: \`${providerId}\` \xB7 Model: \`${modelId}\` \xB7 Mode: \`read-only CI review\` \xB7 aicli v${VERSION}*`);
177
174
  sections.push("");
178
175
  try {
179
176
  if (!opts.skipCode) {
@@ -195,14 +192,15 @@ async function runCi(opts) {
195
192
  exitCode: 2,
196
193
  markdown: `\u274C Review call failed: ${err.message}`,
197
194
  posted: false,
198
- severity: { critical: 0, high: 0, warning: 0, info: 0 }
195
+ severity: zeroSeverity(),
196
+ gate: evaluateCiGate("", thresholds),
197
+ meta
199
198
  };
200
199
  }
201
- if (truncated) {
202
- sections.push(`> \u26A0 Diff was truncated to ${maxDiff} chars (original: ${diff.length}). Consider splitting large PRs.`);
203
- }
200
+ if (truncated) sections.push(`> \u26A0 Diff was truncated to ${maxDiff} chars (original: ${diff.length}). Consider splitting large PRs.`);
204
201
  const markdown = sections.join("\n");
205
202
  const severity = countSeverity(markdown);
203
+ const gate = evaluateCiGate(markdown, thresholds);
206
204
  let posted = false;
207
205
  let updatedCommentId;
208
206
  if (opts.post && opts.pr != null && !opts.dryRun) {
@@ -219,19 +217,15 @@ async function runCi(opts) {
219
217
 
220
218
  \u274C Failed to post comment: ${err.message}`,
221
219
  posted: false,
222
- severity
220
+ severity,
221
+ gate,
222
+ meta
223
223
  };
224
224
  }
225
225
  }
226
- const hasBlocker = severity.critical > 0 || severity.high > 0;
227
- return {
228
- exitCode: hasBlocker ? 1 : 0,
229
- markdown,
230
- posted,
231
- updatedCommentId,
232
- severity
233
- };
226
+ return { exitCode: gate.failed ? 1 : 0, markdown, posted, updatedCommentId, severity, gate, meta };
234
227
  }
228
+
235
229
  export {
236
230
  CI_COMMENT_MARKER,
237
231
  countSeverity,
@@ -6,7 +6,7 @@ import { platform } from "os";
6
6
  import chalk from "chalk";
7
7
 
8
8
  // src/core/constants.ts
9
- var VERSION = "0.4.214";
9
+ var VERSION = "0.4.216";
10
10
  var APP_NAME = "ai-cli";
11
11
  var CONFIG_DIR_NAME = ".aicli";
12
12
  var CONFIG_FILE_NAME = "config.json";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  truncateForPersist
4
- } from "./chunk-R5CJD2AB.js";
4
+ } from "./chunk-TCOC4AUI.js";
5
5
  import {
6
6
  APP_NAME,
7
7
  CONFIG_DIR_NAME,
@@ -13,7 +13,7 @@ import {
13
13
  MCP_PROTOCOL_VERSION,
14
14
  MCP_TOOL_PREFIX,
15
15
  VERSION
16
- } from "./chunk-DBYMX2ZC.js";
16
+ } from "./chunk-7YWS3JLU.js";
17
17
  import {
18
18
  atomicWriteFileSync
19
19
  } from "./chunk-IW3Q7AE5.js";
@@ -5,10 +5,10 @@ import {
5
5
  } from "./chunk-T2NL5ZIA.js";
6
6
  import {
7
7
  runTestsTool
8
- } from "./chunk-TR6MSPSS.js";
8
+ } from "./chunk-VW7Y27WW.js";
9
9
  import {
10
10
  runTool
11
- } from "./chunk-YMFGGCUP.js";
11
+ } from "./chunk-77HDCGTN.js";
12
12
  import {
13
13
  getDangerLevel,
14
14
  isFileWriteTool,
@@ -26,7 +26,7 @@ import {
26
26
  SUBAGENT_ALLOWED_TOOLS,
27
27
  SUBAGENT_DEFAULT_MAX_ROUNDS,
28
28
  SUBAGENT_MAX_ROUNDS_LIMIT
29
- } from "./chunk-DBYMX2ZC.js";
29
+ } from "./chunk-7YWS3JLU.js";
30
30
  import {
31
31
  fileCheckpoints
32
32
  } from "./chunk-4BKXL7SM.js";
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ VERSION
4
+ } from "./chunk-7YWS3JLU.js";
5
+
6
+ // src/cli/ci-format.ts
7
+ var DEFAULT_CI_THRESHOLDS = {
8
+ securityHigh: true,
9
+ testFailure: true,
10
+ lintFailure: true
11
+ };
12
+ function normalizeCiThresholds(input) {
13
+ return {
14
+ securityHigh: input?.securityHigh ?? DEFAULT_CI_THRESHOLDS.securityHigh,
15
+ testFailure: input?.testFailure ?? DEFAULT_CI_THRESHOLDS.testFailure,
16
+ lintFailure: input?.lintFailure ?? DEFAULT_CI_THRESHOLDS.lintFailure
17
+ };
18
+ }
19
+ function extractSection(markdown, heading) {
20
+ const start = markdown.indexOf(heading);
21
+ if (start < 0) return "";
22
+ const rest = markdown.slice(start + heading.length);
23
+ const next = rest.search(/\n###\s+/);
24
+ return next >= 0 ? rest.slice(0, next) : rest;
25
+ }
26
+ function detectCiGateSignals(markdown) {
27
+ const security = extractSection(markdown, "### Security Review");
28
+ const securityHigh = (security.match(/(?:🔴\s*CRITICAL|🔴\s*Critical|🟠\s*HIGH|🟠\s*High)/g) ?? []).length;
29
+ const testFailure = (markdown.match(/(?:test(?:s|ing)?\s+(?:failed|failure|failures)|failing\s+test|npm\s+test\s+failed|pytest\s+failed|vitest\s+failed)/gi) ?? []).length;
30
+ const lintFailure = (markdown.match(/(?:lint\s+(?:failed|failure|failures)|eslint\s+failed|ruff\s+failed|biome\s+failed|typecheck\s+failed|tsc\s+failed)/gi) ?? []).length;
31
+ return { securityHigh, testFailure, lintFailure };
32
+ }
33
+ function evaluateCiGate(markdown, thresholds) {
34
+ const normalized = normalizeCiThresholds(thresholds);
35
+ const signals = detectCiGateSignals(markdown);
36
+ const reasons = [];
37
+ if (normalized.securityHigh && signals.securityHigh > 0) reasons.push(`security-high:${signals.securityHigh}`);
38
+ if (normalized.testFailure && signals.testFailure > 0) reasons.push(`test-failure:${signals.testFailure}`);
39
+ if (normalized.lintFailure && signals.lintFailure > 0) reasons.push(`lint-failure:${signals.lintFailure}`);
40
+ return { thresholds: normalized, signals, failed: reasons.length > 0, reasons };
41
+ }
42
+ function sarifLevel(line) {
43
+ if (/🔴|🟠|CRITICAL|HIGH/i.test(line)) return "error";
44
+ if (/🟡|WARNING|MEDIUM/i.test(line)) return "warning";
45
+ return "note";
46
+ }
47
+ function stripMarkdown(line) {
48
+ return line.replace(/^[\s>*-]+/, "").replace(/[`*_]/g, "").trim();
49
+ }
50
+ function formatCiSarif(result) {
51
+ const lines = result.markdown.split(/\r?\n/);
52
+ const findingLines = lines.map((line, idx) => ({ line, idx })).filter(({ line }) => /🔴|🟠|🟡|🔵|CRITICAL|HIGH|MEDIUM|LOW|WARNING|INFO/i.test(line));
53
+ const results = findingLines.map(({ line, idx }, n) => ({
54
+ ruleId: "aicli-review-finding",
55
+ level: sarifLevel(line),
56
+ message: { text: stripMarkdown(line) || line.trim() },
57
+ locations: [{
58
+ physicalLocation: {
59
+ artifactLocation: { uri: "aicli-review.md" },
60
+ region: { startLine: idx + 1 }
61
+ }
62
+ }],
63
+ partialFingerprints: { aicliLine: String(n + 1) }
64
+ }));
65
+ return JSON.stringify({
66
+ version: "2.1.0",
67
+ $schema: "https://json.schemastore.org/sarif-2.1.0.json",
68
+ runs: [{
69
+ tool: {
70
+ driver: {
71
+ name: "aicli",
72
+ informationUri: "https://github.com/jinzhengdong/ai-cli",
73
+ version: VERSION,
74
+ rules: [{
75
+ id: "aicli-review-finding",
76
+ name: "aicli review finding",
77
+ shortDescription: { text: "Finding emitted by aicli CI review" },
78
+ helpUri: "https://github.com/jinzhengdong/ai-cli"
79
+ }]
80
+ }
81
+ },
82
+ invocations: [{ executionSuccessful: !result.gate.failed }],
83
+ results,
84
+ properties: {
85
+ severity: result.severity,
86
+ gate: result.gate,
87
+ posted: result.posted
88
+ }
89
+ }]
90
+ }, null, 2);
91
+ }
92
+ function formatCiResult(result, format) {
93
+ if (format === "json") return JSON.stringify(result, null, 2);
94
+ if (format === "sarif") return formatCiSarif(result);
95
+ return result.markdown;
96
+ }
97
+
98
+ export {
99
+ DEFAULT_CI_THRESHOLDS,
100
+ normalizeCiThresholds,
101
+ detectCiGateSignals,
102
+ evaluateCiGate,
103
+ formatCiSarif,
104
+ formatCiResult
105
+ };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TEST_TIMEOUT
4
- } from "./chunk-DBYMX2ZC.js";
4
+ } from "./chunk-7YWS3JLU.js";
5
5
 
6
6
  // src/tools/builtin/run-tests.ts
7
7
  import { execSync, spawnSync } from "child_process";
@@ -8,7 +8,7 @@ import {
8
8
  CONFIG_FILE_NAME,
9
9
  HISTORY_DIR_NAME,
10
10
  PLUGINS_DIR_NAME
11
- } from "./chunk-DBYMX2ZC.js";
11
+ } from "./chunk-7YWS3JLU.js";
12
12
  import {
13
13
  atomicWriteFileSync
14
14
  } from "./chunk-IW3Q7AE5.js";
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ CI_COMMENT_MARKER,
4
+ countSeverity,
5
+ runCi
6
+ } from "./chunk-GY3C3C2Y.js";
7
+ import "./chunk-TJ6GGN4B.js";
8
+ import "./chunk-HLWUDRBO.js";
9
+ import "./chunk-QMXC327F.js";
10
+ import "./chunk-XPBEJB27.js";
11
+ import "./chunk-WAI3WPV2.js";
12
+ import "./chunk-TZQHYZKT.js";
13
+ import "./chunk-7YWS3JLU.js";
14
+ import "./chunk-IW3Q7AE5.js";
15
+ export {
16
+ CI_COMMENT_MARKER,
17
+ countSeverity,
18
+ runCi
19
+ };
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ DEFAULT_CI_THRESHOLDS,
4
+ detectCiGateSignals,
5
+ evaluateCiGate,
6
+ formatCiResult,
7
+ formatCiSarif,
8
+ normalizeCiThresholds
9
+ } from "./chunk-TJ6GGN4B.js";
10
+ import "./chunk-7YWS3JLU.js";
11
+ export {
12
+ DEFAULT_CI_THRESHOLDS,
13
+ detectCiGateSignals,
14
+ evaluateCiGate,
15
+ formatCiResult,
16
+ formatCiSarif,
17
+ normalizeCiThresholds
18
+ };
@@ -37,7 +37,7 @@ import {
37
37
  TEST_TIMEOUT,
38
38
  VERSION,
39
39
  buildUserIdentityPrompt
40
- } from "./chunk-DBYMX2ZC.js";
40
+ } from "./chunk-7YWS3JLU.js";
41
41
  export {
42
42
  AGENTIC_BEHAVIOR_GUIDELINE,
43
43
  APP_NAME,
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  getConfigDirUsage,
4
4
  listRecentCrashes
5
- } from "./chunk-JQC7IATA.js";
5
+ } from "./chunk-6HLKCSB3.js";
6
6
  import {
7
7
  ProviderRegistry
8
8
  } from "./chunk-QMXC327F.js";
@@ -11,17 +11,17 @@ import {
11
11
  getTopFailingTools,
12
12
  getTopUsedTools,
13
13
  resetStats
14
- } from "./chunk-YMFGGCUP.js";
14
+ } from "./chunk-77HDCGTN.js";
15
15
  import "./chunk-XPBEJB27.js";
16
16
  import {
17
17
  ConfigManager
18
- } from "./chunk-YFHF3PVB.js";
18
+ } from "./chunk-WAI3WPV2.js";
19
19
  import "./chunk-TZQHYZKT.js";
20
20
  import {
21
21
  DEV_STATE_FILE_NAME,
22
22
  MEMORY_FILE_NAME,
23
23
  VERSION
24
- } from "./chunk-DBYMX2ZC.js";
24
+ } from "./chunk-7YWS3JLU.js";
25
25
  import "./chunk-IW3Q7AE5.js";
26
26
 
27
27
  // src/diagnostics/doctor-cli.ts
@@ -37,7 +37,7 @@ import {
37
37
  VERSION,
38
38
  buildUserIdentityPrompt,
39
39
  runTestsTool
40
- } from "./chunk-JOJA35RK.js";
40
+ } from "./chunk-OLN7VUZA.js";
41
41
  import {
42
42
  hasSemanticIndex,
43
43
  semanticSearch
@@ -16070,7 +16070,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
16070
16070
  case "test": {
16071
16071
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
16072
16072
  try {
16073
- const { executeTests } = await import("./run-tests-R6FL6CQ3.js");
16073
+ const { executeTests } = await import("./run-tests-4PKSIVK5.js");
16074
16074
  const argStr = args.join(" ").trim();
16075
16075
  let testArgs = {};
16076
16076
  if (argStr) {
@@ -154,7 +154,7 @@ ${content}`);
154
154
  }
155
155
  }
156
156
  async function runTaskMode(config, providers, configManager, topic) {
157
- const { TaskOrchestrator } = await import("./task-orchestrator-6AZD5WSR.js");
157
+ const { TaskOrchestrator } = await import("./task-orchestrator-TUMDTOAX.js");
158
158
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
159
159
  let interrupted = false;
160
160
  const onSigint = () => {