jinzd-ai-cli 0.4.40 → 0.4.42

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.
@@ -7,7 +7,7 @@ import {
7
7
  ProviderNotFoundError,
8
8
  RateLimitError,
9
9
  schemaToJsonSchema
10
- } from "./chunk-KPHYJOJT.js";
10
+ } from "./chunk-SJVTPIZR.js";
11
11
  import {
12
12
  APP_NAME,
13
13
  CONFIG_DIR_NAME,
@@ -20,7 +20,7 @@ import {
20
20
  MCP_TOOL_PREFIX,
21
21
  PLUGINS_DIR_NAME,
22
22
  VERSION
23
- } from "./chunk-RVJMWZEJ.js";
23
+ } from "./chunk-ZE36SAKZ.js";
24
24
 
25
25
  // src/config/config-manager.ts
26
26
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
@@ -1073,7 +1073,7 @@ var OpenAICompatibleProvider = class extends BaseProvider {
1073
1073
  let thinkingStarted = false;
1074
1074
  for await (const chunk of stream) {
1075
1075
  const choice = chunk.choices[0];
1076
- const done = choice?.finish_reason != null && choice.finish_reason !== "";
1076
+ const done = choice?.finish_reason != null;
1077
1077
  if (!choice && chunk.usage) {
1078
1078
  yield {
1079
1079
  delta: "",
@@ -2104,10 +2104,6 @@ var OllamaProvider = class extends OpenAICompatibleProvider {
2104
2104
  // 本地推理可能较慢,默认 2 分钟
2105
2105
  /** 动态模型列表 */
2106
2106
  dynamicModels = [];
2107
- /** 是否已成功连接过 Ollama */
2108
- connected = false;
2109
- /** base URL(不含 /v1),用于错误提示 */
2110
- ollamaHost = "http://127.0.0.1:11434";
2111
2107
  info = {
2112
2108
  id: "ollama",
2113
2109
  displayName: "Ollama (Local)",
@@ -2119,7 +2115,6 @@ var OllamaProvider = class extends OpenAICompatibleProvider {
2119
2115
  };
2120
2116
  async initialize(apiKey, options) {
2121
2117
  const baseUrl = options?.baseUrl ?? this.defaultBaseUrl;
2122
- this.ollamaHost = baseUrl.replace(/\/v1\/?$/, "");
2123
2118
  await super.initialize(apiKey || "ollama", { ...options, baseUrl });
2124
2119
  await this.tryConnect();
2125
2120
  }
@@ -2132,7 +2127,6 @@ var OllamaProvider = class extends OpenAICompatibleProvider {
2132
2127
  const response = await this.client.models.list();
2133
2128
  const modelIds = response.data.map((m) => m.id);
2134
2129
  if (modelIds.length === 0) {
2135
- this.connected = false;
2136
2130
  return false;
2137
2131
  }
2138
2132
  this.dynamicModels = modelIds.map((id) => ({
@@ -2150,12 +2144,10 @@ var OllamaProvider = class extends OpenAICompatibleProvider {
2150
2144
  defaultModel,
2151
2145
  models: this.dynamicModels
2152
2146
  });
2153
- this.connected = true;
2154
2147
  return true;
2155
2148
  } catch (err) {
2156
2149
  process.stderr.write(`[ollama] connect failed: ${err instanceof Error ? err.message : String(err)}
2157
2150
  `);
2158
- this.connected = false;
2159
2151
  return false;
2160
2152
  }
2161
2153
  }
@@ -2510,12 +2502,11 @@ function extractJsonField(header, field) {
2510
2502
  return m ? m[1] : void 0;
2511
2503
  }
2512
2504
  var SessionManager = class {
2505
+ _current = null;
2506
+ historyDir;
2513
2507
  constructor(config) {
2514
- this.config = config;
2515
2508
  this.historyDir = config.getHistoryDir();
2516
2509
  }
2517
- _current = null;
2518
- historyDir;
2519
2510
  get current() {
2520
2511
  return this._current;
2521
2512
  }
@@ -9,7 +9,7 @@ import {
9
9
  SUBAGENT_DEFAULT_MAX_ROUNDS,
10
10
  SUBAGENT_MAX_ROUNDS_LIMIT,
11
11
  runTestsTool
12
- } from "./chunk-RVJMWZEJ.js";
12
+ } from "./chunk-ZE36SAKZ.js";
13
13
 
14
14
  // src/tools/builtin/bash.ts
15
15
  import { execSync } from "child_process";
@@ -1382,7 +1382,7 @@ var ToolExecutor = class {
1382
1382
  rl.resume();
1383
1383
  process.stdout.write(prompt);
1384
1384
  this.confirming = true;
1385
- return new Promise((resolve5) => {
1385
+ return new Promise((resolve4) => {
1386
1386
  let completed = false;
1387
1387
  const cleanup = (result) => {
1388
1388
  if (completed) return;
@@ -1392,7 +1392,7 @@ var ToolExecutor = class {
1392
1392
  rl.pause();
1393
1393
  rlAny.output = savedOutput;
1394
1394
  this.confirming = false;
1395
- resolve5(result);
1395
+ resolve4(result);
1396
1396
  };
1397
1397
  const onLine = (line) => {
1398
1398
  const trimmed = line.trim();
@@ -1562,7 +1562,7 @@ var ToolExecutor = class {
1562
1562
  rl.resume();
1563
1563
  process.stdout.write(color("Proceed? [y/N] (type y + Enter to confirm) "));
1564
1564
  this.confirming = true;
1565
- return new Promise((resolve5) => {
1565
+ return new Promise((resolve4) => {
1566
1566
  let completed = false;
1567
1567
  const cleanup = (answer) => {
1568
1568
  if (completed) return;
@@ -1572,7 +1572,7 @@ var ToolExecutor = class {
1572
1572
  rl.pause();
1573
1573
  rlAny.output = savedOutput;
1574
1574
  this.confirming = false;
1575
- resolve5(answer === "y");
1575
+ resolve4(answer === "y");
1576
1576
  };
1577
1577
  const onLine = (line) => {
1578
1578
  const trimmed = line.trim();
@@ -2386,13 +2386,13 @@ var runInteractiveTool = {
2386
2386
  args: {
2387
2387
  type: "array",
2388
2388
  description: 'Arguments array for the executable, e.g. ["workspace/guess.py"] or ["-c", "print(1)"]',
2389
- items: { type: "string" },
2389
+ items: { type: "string", description: "A single argument string" },
2390
2390
  required: true
2391
2391
  },
2392
2392
  stdin_lines: {
2393
2393
  type: "array",
2394
2394
  description: `Input lines to feed to the program's stdin in order. E.g. for a guessing game: ["50", "25", "37"]. Each line gets a newline appended automatically.`,
2395
- items: { type: "string" },
2395
+ items: { type: "string", description: "A single stdin input line" },
2396
2396
  required: true
2397
2397
  },
2398
2398
  timeout: {
@@ -2433,7 +2433,7 @@ var runInteractiveTool = {
2433
2433
  PYTHONDONTWRITEBYTECODE: "1"
2434
2434
  };
2435
2435
  const prefixWarnings = [argsTypeWarning, stdinTypeWarning].filter(Boolean).join("");
2436
- return new Promise((resolve5) => {
2436
+ return new Promise((resolve4) => {
2437
2437
  const child = spawn(executable, cmdArgs.map(String), {
2438
2438
  cwd: process.cwd(),
2439
2439
  env,
@@ -2466,22 +2466,22 @@ var runInteractiveTool = {
2466
2466
  setTimeout(writeNextLine, 400);
2467
2467
  const timer = setTimeout(() => {
2468
2468
  child.kill();
2469
- resolve5(`${prefixWarnings}[Timeout after ${timeout}ms]
2469
+ resolve4(`${prefixWarnings}[Timeout after ${timeout}ms]
2470
2470
  ${buildOutput(stdout, stderr)}`);
2471
2471
  }, timeout);
2472
2472
  child.on("close", (code) => {
2473
2473
  clearTimeout(timer);
2474
2474
  const output = buildOutput(stdout, stderr);
2475
2475
  if (code !== 0 && code !== null) {
2476
- resolve5(`${prefixWarnings}Exit code ${code}:
2476
+ resolve4(`${prefixWarnings}Exit code ${code}:
2477
2477
  ${output}`);
2478
2478
  } else {
2479
- resolve5(`${prefixWarnings}${output || "(no output)"}`);
2479
+ resolve4(`${prefixWarnings}${output || "(no output)"}`);
2480
2480
  }
2481
2481
  });
2482
2482
  child.on("error", (err) => {
2483
2483
  clearTimeout(timer);
2484
- resolve5(
2484
+ resolve4(
2485
2485
  `${prefixWarnings}Failed to start process "${executable}": ${err.message}
2486
2486
  Hint: On Windows, use the full path to the executable, e.g.:
2487
2487
  C:\\Users\\Jinzd\\anaconda3\\envs\\python312\\python.exe`
@@ -2826,7 +2826,7 @@ function promptUser(rl, question) {
2826
2826
  console.log();
2827
2827
  console.log(chalk4.cyan("\u2753 ") + chalk4.bold(question));
2828
2828
  process.stdout.write(chalk4.cyan("> "));
2829
- return new Promise((resolve5) => {
2829
+ return new Promise((resolve4) => {
2830
2830
  let completed = false;
2831
2831
  const cleanup = (answer) => {
2832
2832
  if (completed) return;
@@ -2836,7 +2836,7 @@ function promptUser(rl, question) {
2836
2836
  rl.pause();
2837
2837
  rlAny.output = savedOutput;
2838
2838
  askUserContext.prompting = false;
2839
- resolve5(answer);
2839
+ resolve4(answer);
2840
2840
  };
2841
2841
  const onLine = (line) => {
2842
2842
  cleanup(line);
@@ -3087,7 +3087,7 @@ function resolveConfig() {
3087
3087
  }
3088
3088
  return { apiKey, cx };
3089
3089
  }
3090
- function formatResults(query, data, requested) {
3090
+ function formatResults(query, data, _requested) {
3091
3091
  const items = data.items ?? [];
3092
3092
  if (items.length === 0) {
3093
3093
  const info2 = data.searchInformation;
@@ -3875,7 +3875,7 @@ ${commitOutput.trim()}`;
3875
3875
  // src/tools/builtin/notebook-edit.ts
3876
3876
  import { readFileSync as readFileSync6, existsSync as existsSync11 } from "fs";
3877
3877
  import { writeFile } from "fs/promises";
3878
- import { resolve as resolve4, extname as extname3 } from "path";
3878
+ import { resolve as resolve3, extname as extname2 } from "path";
3879
3879
  var notebookEditTool = {
3880
3880
  definition: {
3881
3881
  name: "notebook_edit",
@@ -3924,8 +3924,8 @@ var notebookEditTool = {
3924
3924
  if (!Number.isInteger(cellIndexRaw) || cellIndexRaw < 1) {
3925
3925
  throw new ToolError("notebook_edit", "cell_index must be a positive integer (1-based)");
3926
3926
  }
3927
- const absPath = resolve4(filePath);
3928
- if (extname3(absPath).toLowerCase() !== ".ipynb") {
3927
+ const absPath = resolve3(filePath);
3928
+ if (extname2(absPath).toLowerCase() !== ".ipynb") {
3929
3929
  throw new ToolError("notebook_edit", "path must point to a .ipynb file");
3930
3930
  }
3931
3931
  if (!existsSync11(absPath)) {
@@ -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.40";
9
+ var VERSION = "0.4.42";
10
10
  var APP_NAME = "ai-cli";
11
11
  var CONFIG_DIR_NAME = ".aicli";
12
12
  var CONFIG_FILE_NAME = "config.json";
@@ -302,7 +302,7 @@ function parseGenericOutput(output) {
302
302
  }
303
303
  return null;
304
304
  }
305
- function formatReport(summary, framework, output, exitCode) {
305
+ function formatReport(summary, framework, output, _exitCode) {
306
306
  const status = summary.failures + summary.errors > 0 ? "FAILED \u2717" : "PASSED \u2713";
307
307
  const lines = [];
308
308
  lines.push(`## Test Results \u2014 ${status}`);
@@ -8,7 +8,7 @@ import { platform } from "os";
8
8
  import chalk from "chalk";
9
9
 
10
10
  // src/core/constants.ts
11
- var VERSION = "0.4.40";
11
+ var VERSION = "0.4.42";
12
12
  var APP_NAME = "ai-cli";
13
13
  var CONFIG_DIR_NAME = ".aicli";
14
14
  var CONFIG_FILE_NAME = "config.json";
@@ -306,7 +306,7 @@ function parseGenericOutput(output) {
306
306
  }
307
307
  return null;
308
308
  }
309
- function formatReport(summary, framework, output, exitCode) {
309
+ function formatReport(summary, framework, output, _exitCode) {
310
310
  const status = summary.failures + summary.errors > 0 ? "FAILED \u2717" : "PASSED \u2713";
311
311
  const lines = [];
312
312
  lines.push(`## Test Results \u2014 ${status}`);
@@ -8,9 +8,12 @@ import {
8
8
 
9
9
  // src/hub/discuss.ts
10
10
  var DiscussionOrchestrator = class {
11
+ agents = [];
12
+ state;
13
+ aborted = false;
14
+ /** Callback for rendering events */
15
+ onEvent;
11
16
  constructor(config, providers) {
12
- this.config = config;
13
- this.providers = providers;
14
17
  this.agents = config.roles.map(
15
18
  (role) => new HubAgent(role, providers, config.defaultProvider, config.defaultModel, config.context)
16
19
  );
@@ -22,11 +25,6 @@ var DiscussionOrchestrator = class {
22
25
  finished: false
23
26
  };
24
27
  }
25
- agents = [];
26
- state;
27
- aborted = false;
28
- /** Callback for rendering events */
29
- onEvent;
30
28
  /** Get all agents */
31
29
  getAgents() {
32
30
  return this.agents;
@@ -387,7 +385,7 @@ ${content}`);
387
385
  }
388
386
  }
389
387
  async function runTaskMode(config, providers, configManager, topic) {
390
- const { TaskOrchestrator } = await import("./task-orchestrator-7B3UBHMI.js");
388
+ const { TaskOrchestrator } = await import("./task-orchestrator-O5242DVR.js");
391
389
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
392
390
  let interrupted = false;
393
391
  const onSigint = () => {
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ import {
24
24
  saveDevState,
25
25
  sessionHasMeaningfulContent,
26
26
  setupProxy
27
- } from "./chunk-Y4B6HE6J.js";
27
+ } from "./chunk-LU7HXPO6.js";
28
28
  import {
29
29
  ToolExecutor,
30
30
  ToolRegistry,
@@ -37,7 +37,7 @@ import {
37
37
  spawnAgentContext,
38
38
  theme,
39
39
  undoStack
40
- } from "./chunk-KPHYJOJT.js";
40
+ } from "./chunk-SJVTPIZR.js";
41
41
  import {
42
42
  fileCheckpoints
43
43
  } from "./chunk-4BKXL7SM.js";
@@ -61,7 +61,7 @@ import {
61
61
  SKILLS_DIR_NAME,
62
62
  VERSION,
63
63
  buildUserIdentityPrompt
64
- } from "./chunk-RVJMWZEJ.js";
64
+ } from "./chunk-ZE36SAKZ.js";
65
65
 
66
66
  // src/index.ts
67
67
  import { program } from "commander";
@@ -2022,7 +2022,7 @@ ${hint}` : "")
2022
2022
  const sub = args[0];
2023
2023
  if (sub === "list" || !sub) {
2024
2024
  const msgs = session.messages;
2025
- console.log(theme.primary(`
2025
+ console.log(theme.heading(`
2026
2026
  Conversation messages (${msgs.length} total):
2027
2027
  `));
2028
2028
  for (let i = 0; i < msgs.length; i++) {
@@ -2099,7 +2099,7 @@ ${hint}` : "")
2099
2099
  usage: "/test [command|filter]",
2100
2100
  async execute(args, ctx) {
2101
2101
  try {
2102
- const { executeTests } = await import("./run-tests-AXMJPIO7.js");
2102
+ const { executeTests } = await import("./run-tests-6SHMCMGJ.js");
2103
2103
  const argStr = args.join(" ").trim();
2104
2104
  let testArgs = {};
2105
2105
  if (argStr) {
@@ -5018,8 +5018,6 @@ You have a maximum of ${MAX_TOOL_ROUNDS} tool call rounds for this task. Plan ef
5018
5018
  for (const rfc of readFileCalls) {
5019
5019
  const filePath = rfc.arguments?.path;
5020
5020
  if (filePath) {
5021
- const key = `read_file:${filePath}`;
5022
- const prevCount = roundToolHistory.flat().length > 0 ? roundToolHistory.filter((rh) => rh.tools.includes("read_file")).length : 0;
5023
5021
  const fileReadCount = extraMessages.filter((msg) => {
5024
5022
  const m = msg;
5025
5023
  if (m.role !== "assistant") return false;
@@ -5115,10 +5113,11 @@ You have a maximum of ${MAX_TOOL_ROUNDS} tool call rounds for this task. Plan ef
5115
5113
  process.stdout.write(theme.dim(" (Press ") + theme.info("n") + theme.dim(" or ") + theme.info("Esc") + theme.dim(" to stop)\n"));
5116
5114
  this.teardownInterjectionListener();
5117
5115
  const pauseResponse = await new Promise((resolve3) => {
5118
- const savedOutput = this.rl.output;
5119
- this.rl.output = process.stdout;
5116
+ const rlWithOutput = this.rl;
5117
+ const savedOutput = rlWithOutput.output;
5118
+ rlWithOutput.output = process.stdout;
5120
5119
  this.rl.question(theme.warning(" \u25B8 "), (answer) => {
5121
- this.rl.output = savedOutput;
5120
+ rlWithOutput.output = savedOutput;
5122
5121
  resolve3(answer.trim());
5123
5122
  });
5124
5123
  });
@@ -5470,7 +5469,7 @@ program.command("web").description("Start Web UI server with browser-based chat
5470
5469
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
5471
5470
  process.exit(1);
5472
5471
  }
5473
- const { startWebServer } = await import("./server-QJSBW5NP.js");
5472
+ const { startWebServer } = await import("./server-5Z5TLTUF.js");
5474
5473
  await startWebServer({ port, host: options.host });
5475
5474
  });
5476
5475
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
@@ -5703,7 +5702,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
5703
5702
  }),
5704
5703
  config.get("customProviders")
5705
5704
  );
5706
- const { startHub } = await import("./hub-YFHYOGDB.js");
5705
+ const { startHub } = await import("./hub-GVQRTUUZ.js");
5707
5706
  await startHub(
5708
5707
  {
5709
5708
  topic: topic ?? "",
@@ -5714,7 +5713,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
5714
5713
  mode: options.task === true ? "task" : void 0,
5715
5714
  maxRounds: options.maxRounds ? parseInt(options.maxRounds, 10) : void 0,
5716
5715
  listPresets: options.presets === true,
5717
- contextFiles: options.context?.length ? options.context : void 0,
5716
+ contextFiles: Array.isArray(options.context) && options.context.length > 0 ? options.context : void 0,
5718
5717
  distributed: options.distributed === true,
5719
5718
  taskRounds: options.taskRounds ? parseInt(options.taskRounds, 10) : void 0,
5720
5719
  port: options.port ? parseInt(options.port, 10) : void 0
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-RVJMWZEJ.js";
5
+ } from "./chunk-ZE36SAKZ.js";
6
6
  export {
7
7
  executeTests,
8
8
  runTestsTool
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeTests,
3
3
  runTestsTool
4
- } from "./chunk-CYBC7PWO.js";
4
+ } from "./chunk-WTYDYRPD.js";
5
5
  export {
6
6
  executeTests,
7
7
  runTestsTool
@@ -15,7 +15,7 @@ import {
15
15
  hadPreviousWriteToolCalls,
16
16
  loadDevState,
17
17
  setupProxy
18
- } from "./chunk-Y4B6HE6J.js";
18
+ } from "./chunk-LU7HXPO6.js";
19
19
  import {
20
20
  AuthManager
21
21
  } from "./chunk-BYNY5JPB.js";
@@ -33,7 +33,7 @@ import {
33
33
  spawnAgentContext,
34
34
  truncateOutput,
35
35
  undoStack
36
- } from "./chunk-KPHYJOJT.js";
36
+ } from "./chunk-SJVTPIZR.js";
37
37
  import "./chunk-4BKXL7SM.js";
38
38
  import {
39
39
  AGENTIC_BEHAVIOR_GUIDELINE,
@@ -52,7 +52,7 @@ import {
52
52
  SKILLS_DIR_NAME,
53
53
  VERSION,
54
54
  buildUserIdentityPrompt
55
- } from "./chunk-RVJMWZEJ.js";
55
+ } from "./chunk-ZE36SAKZ.js";
56
56
 
57
57
  // src/web/server.ts
58
58
  import express from "express";
@@ -180,7 +180,7 @@ var ToolExecutorWeb = class _ToolExecutorWeb {
180
180
  if (filePath && existsSync(filePath)) {
181
181
  try {
182
182
  const old = readFileSync(filePath, "utf-8");
183
- return renderDiff(old, newContent, filePath);
183
+ return renderDiff(old, newContent, { filePath });
184
184
  } catch {
185
185
  }
186
186
  }
@@ -192,7 +192,7 @@ var ToolExecutorWeb = class _ToolExecutorWeb {
192
192
  const oldStr = String(call.arguments["old_str"] ?? "");
193
193
  const newStr = String(call.arguments["new_str"] ?? "");
194
194
  if (oldStr || newStr) {
195
- return renderDiff(oldStr, newStr, String(call.arguments["path"] ?? "file"));
195
+ return renderDiff(oldStr, newStr, { filePath: String(call.arguments["path"] ?? "file") });
196
196
  }
197
197
  }
198
198
  return void 0;
@@ -535,7 +535,7 @@ var SessionHandler = class _SessionHandler {
535
535
  const providerList = this.providers.listAvailable().map((p) => ({
536
536
  id: p.info.id,
537
537
  displayName: p.info.displayName,
538
- models: p.info.models.map((m) => ({ id: m.id, name: m.name ?? m.id }))
538
+ models: p.info.models.map((m) => ({ id: m.id, name: m.displayName ?? m.id }))
539
539
  }));
540
540
  this.send({
541
541
  type: "status",
@@ -1606,7 +1606,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
1606
1606
  case "test": {
1607
1607
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
1608
1608
  try {
1609
- const { executeTests } = await import("./run-tests-AXMJPIO7.js");
1609
+ const { executeTests } = await import("./run-tests-6SHMCMGJ.js");
1610
1610
  const argStr = args.join(" ").trim();
1611
1611
  let testArgs = {};
1612
1612
  if (argStr) {
@@ -1808,7 +1808,6 @@ ${this.config.toFormattedJSON()}
1808
1808
  }
1809
1809
  const sub = args[0];
1810
1810
  if (sub === "reconnect") {
1811
- const targetId = args[1];
1812
1811
  this.send({ type: "info", message: "\u{1F504} Reconnecting MCP servers..." });
1813
1812
  try {
1814
1813
  await this.mcpManager.reconnectAll();
@@ -1915,7 +1914,7 @@ Add .md files to create commands.` });
1915
1914
  lines.push("Add .js files to the plugins directory and set allowPlugins:true in config.");
1916
1915
  } else {
1917
1916
  for (const t of pluginTools) {
1918
- lines.push(` \u2022 ${t.name} \u2014 ${t.description}`);
1917
+ lines.push(` \u2022 ${t.definition.name} \u2014 ${t.definition.description}`);
1919
1918
  }
1920
1919
  }
1921
1920
  this.send({ type: "info", message: lines.join("\n") });
@@ -2578,7 +2577,7 @@ async function startWebServer(options = {}) {
2578
2577
  providers: availableProviders.map((p) => ({
2579
2578
  id: p.info.id,
2580
2579
  displayName: p.info.displayName,
2581
- models: p.info.models.map((m) => ({ id: m.id, name: m.name ?? m.id }))
2580
+ models: p.info.models.map((m) => ({ id: m.id, name: m.displayName ?? m.id }))
2582
2581
  })),
2583
2582
  tools: toolRegistry.getDefinitions().length,
2584
2583
  cwd: process.cwd(),
@@ -4,11 +4,11 @@ import {
4
4
  getDangerLevel,
5
5
  googleSearchContext,
6
6
  truncateOutput
7
- } from "./chunk-KPHYJOJT.js";
7
+ } from "./chunk-SJVTPIZR.js";
8
8
  import "./chunk-4BKXL7SM.js";
9
9
  import {
10
10
  SUBAGENT_ALLOWED_TOOLS
11
- } from "./chunk-RVJMWZEJ.js";
11
+ } from "./chunk-ZE36SAKZ.js";
12
12
 
13
13
  // src/hub/task-orchestrator.ts
14
14
  import { createInterface } from "readline";
@@ -157,11 +157,8 @@ var TaskToolExecutor = class {
157
157
  this.onToolCall = onToolCall;
158
158
  this.onToolResult = onToolResult;
159
159
  }
160
- round = 0;
161
- totalRounds = 0;
162
- setRoundInfo(current, total) {
163
- this.round = current;
164
- this.totalRounds = total;
160
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
161
+ setRoundInfo(_current, _total) {
165
162
  }
166
163
  async execute(call) {
167
164
  const tool = this.registry.get(call.name);
@@ -360,7 +357,6 @@ Example:
360
357
  if (!Array.isArray(parsed) || parsed.length === 0) {
361
358
  throw new Error("Empty task list");
362
359
  }
363
- const validRoleIds = new Set(roles.map((r) => r.id));
364
360
  for (let i = 0; i < parsed.length; i++) {
365
361
  const t = parsed[i];
366
362
  if (typeof t !== "object" || t === null) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.40",
3
+ "version": "0.4.42",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",