jinzd-ai-cli 0.4.165 → 0.4.166

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.
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ConfigManager
4
- } from "./chunk-3IRLZJEZ.js";
5
- import "./chunk-2ZD3YTVM.js";
6
- import "./chunk-R6F6V6AA.js";
4
+ } from "./chunk-3Q2B5YQP.js";
5
+ import "./chunk-TZQHYZKT.js";
6
+ import "./chunk-CQDCL3CR.js";
7
7
  import "./chunk-PDX44BCA.js";
8
8
 
9
9
  // src/cli/batch.ts
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  CONFIG_DIR_NAME,
4
4
  VERSION
5
- } from "./chunk-R6F6V6AA.js";
5
+ } from "./chunk-CQDCL3CR.js";
6
6
 
7
7
  // src/diagnostics/crash-log.ts
8
8
  import {
@@ -2,13 +2,13 @@
2
2
  import {
3
3
  ConfigError,
4
4
  EnvLoader
5
- } from "./chunk-2ZD3YTVM.js";
5
+ } from "./chunk-TZQHYZKT.js";
6
6
  import {
7
7
  CONFIG_DIR_NAME,
8
8
  CONFIG_FILE_NAME,
9
9
  HISTORY_DIR_NAME,
10
10
  PLUGINS_DIR_NAME
11
- } from "./chunk-R6F6V6AA.js";
11
+ } from "./chunk-CQDCL3CR.js";
12
12
 
13
13
  // src/config/config-manager.ts
14
14
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CONFIG_DIR_NAME
4
- } from "./chunk-R6F6V6AA.js";
4
+ } from "./chunk-CQDCL3CR.js";
5
5
 
6
6
  // src/diagnostics/tool-stats.ts
7
7
  import { existsSync, readFileSync, writeFileSync, mkdirSync, renameSync } 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.165";
4
+ var VERSION = "0.4.166";
5
5
  var APP_NAME = "ai-cli";
6
6
  var CONFIG_DIR_NAME = ".aicli";
7
7
  var CONFIG_FILE_NAME = "config.json";
@@ -7,7 +7,7 @@ import {
7
7
  ProviderError,
8
8
  ProviderNotFoundError,
9
9
  RateLimitError
10
- } from "./chunk-2ZD3YTVM.js";
10
+ } from "./chunk-TZQHYZKT.js";
11
11
 
12
12
  // src/providers/claude.ts
13
13
  import Anthropic from "@anthropic-ai/sdk";
@@ -2150,6 +2150,69 @@ var KimiProvider = class _KimiProvider extends OpenAICompatibleProvider {
2150
2150
  }
2151
2151
  };
2152
2152
 
2153
+ // src/providers/minimax.ts
2154
+ var MiniMaxProvider = class extends OpenAICompatibleProvider {
2155
+ defaultBaseUrl = "https://api.minimaxi.com/v1";
2156
+ info = {
2157
+ id: "minimax",
2158
+ displayName: "MiniMax (\u6D77\u87BA)",
2159
+ defaultModel: "MiniMax-M3",
2160
+ apiKeyEnvVar: "AICLI_API_KEY_MINIMAX",
2161
+ requiresApiKey: true,
2162
+ baseUrl: this.defaultBaseUrl,
2163
+ models: [
2164
+ {
2165
+ id: "MiniMax-M3",
2166
+ displayName: "MiniMax M3\uFF08\u65D7\u8230\uFF0C1M \u4E0A\u4E0B\u6587\uFF09",
2167
+ contextWindow: 1e6,
2168
+ supportsStreaming: true
2169
+ },
2170
+ {
2171
+ id: "MiniMax-M2.7",
2172
+ displayName: "MiniMax M2.7",
2173
+ contextWindow: 1e6,
2174
+ supportsStreaming: true
2175
+ },
2176
+ {
2177
+ id: "MiniMax-M2.7-highspeed",
2178
+ displayName: "MiniMax M2.7 Highspeed",
2179
+ contextWindow: 1e6,
2180
+ supportsStreaming: true
2181
+ },
2182
+ {
2183
+ id: "MiniMax-M2.5",
2184
+ displayName: "MiniMax M2.5",
2185
+ contextWindow: 1e6,
2186
+ supportsStreaming: true
2187
+ },
2188
+ {
2189
+ id: "MiniMax-M2.5-highspeed",
2190
+ displayName: "MiniMax M2.5 Highspeed",
2191
+ contextWindow: 1e6,
2192
+ supportsStreaming: true
2193
+ },
2194
+ {
2195
+ id: "MiniMax-M2.1",
2196
+ displayName: "MiniMax M2.1",
2197
+ contextWindow: 1e6,
2198
+ supportsStreaming: true
2199
+ },
2200
+ {
2201
+ id: "MiniMax-M2.1-highspeed",
2202
+ displayName: "MiniMax M2.1 Highspeed",
2203
+ contextWindow: 1e6,
2204
+ supportsStreaming: true
2205
+ },
2206
+ {
2207
+ id: "MiniMax-M2",
2208
+ displayName: "MiniMax M2",
2209
+ contextWindow: 1e6,
2210
+ supportsStreaming: true
2211
+ }
2212
+ ]
2213
+ };
2214
+ };
2215
+
2153
2216
  // src/providers/openai.ts
2154
2217
  var OpenAIProvider = class extends OpenAICompatibleProvider {
2155
2218
  defaultBaseUrl = "https://api.openai.com/v1";
@@ -2487,6 +2550,7 @@ var BUILT_IN_PROVIDERS = [
2487
2550
  DeepSeekProvider,
2488
2551
  ZhipuProvider,
2489
2552
  KimiProvider,
2553
+ MiniMaxProvider,
2490
2554
  OpenAIProvider,
2491
2555
  OpenRouterProvider,
2492
2556
  OllamaProvider
@@ -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.165";
9
+ var VERSION = "0.4.166";
10
10
  var APP_NAME = "ai-cli";
11
11
  var CONFIG_DIR_NAME = ".aicli";
12
12
  var CONFIG_FILE_NAME = "config.json";
@@ -5,10 +5,10 @@ import {
5
5
  } from "./chunk-HDSKW7Q3.js";
6
6
  import {
7
7
  runTestsTool
8
- } from "./chunk-AYYIFOLV.js";
8
+ } from "./chunk-X65N6VMM.js";
9
9
  import {
10
10
  runTool
11
- } from "./chunk-A2QRIRWR.js";
11
+ } from "./chunk-AUOY5WJL.js";
12
12
  import {
13
13
  getDangerLevel,
14
14
  isFileWriteTool
@@ -17,7 +17,7 @@ import {
17
17
  EnvLoader,
18
18
  NetworkError,
19
19
  ToolError
20
- } from "./chunk-2ZD3YTVM.js";
20
+ } from "./chunk-TZQHYZKT.js";
21
21
  import {
22
22
  CONFIG_DIR_NAME,
23
23
  DEFAULT_MAX_TOOL_OUTPUT_CHARS_CAP,
@@ -25,7 +25,7 @@ import {
25
25
  SUBAGENT_ALLOWED_TOOLS,
26
26
  SUBAGENT_DEFAULT_MAX_ROUNDS,
27
27
  SUBAGENT_MAX_ROUNDS_LIMIT
28
- } from "./chunk-R6F6V6AA.js";
28
+ } from "./chunk-CQDCL3CR.js";
29
29
  import {
30
30
  fileCheckpoints
31
31
  } from "./chunk-4BKXL7SM.js";
@@ -7,6 +7,7 @@ var ENV_KEY_MAP = {
7
7
  deepseek: "AICLI_API_KEY_DEEPSEEK",
8
8
  zhipu: "AICLI_API_KEY_ZHIPU",
9
9
  kimi: "AICLI_API_KEY_KIMI",
10
+ minimax: "AICLI_API_KEY_MINIMAX",
10
11
  openai: "AICLI_API_KEY_OPENAI",
11
12
  openrouter: "AICLI_API_KEY_OPENROUTER",
12
13
  "google-search": "AICLI_API_KEY_GOOGLESEARCH",
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TEST_TIMEOUT
4
- } from "./chunk-R6F6V6AA.js";
4
+ } from "./chunk-CQDCL3CR.js";
5
5
 
6
6
  // src/tools/builtin/run-tests.ts
7
7
  import { execSync, spawnSync } from "child_process";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  truncateForPersist
4
- } from "./chunk-VSJHW3CU.js";
4
+ } from "./chunk-MSUBGV52.js";
5
5
  import {
6
6
  APP_NAME,
7
7
  CONFIG_DIR_NAME,
@@ -11,7 +11,7 @@ import {
11
11
  MCP_PROTOCOL_VERSION,
12
12
  MCP_TOOL_PREFIX,
13
13
  VERSION
14
- } from "./chunk-R6F6V6AA.js";
14
+ } from "./chunk-CQDCL3CR.js";
15
15
 
16
16
  // src/mcp/client.ts
17
17
  import { spawn } from "child_process";
@@ -6,15 +6,15 @@ import {
6
6
  } from "./chunk-HLWUDRBO.js";
7
7
  import {
8
8
  ProviderRegistry
9
- } from "./chunk-2INGXRYC.js";
9
+ } from "./chunk-GNJOC6ZN.js";
10
10
  import "./chunk-NXXNLLSG.js";
11
11
  import {
12
12
  ConfigManager
13
- } from "./chunk-3IRLZJEZ.js";
14
- import "./chunk-2ZD3YTVM.js";
13
+ } from "./chunk-3Q2B5YQP.js";
14
+ import "./chunk-TZQHYZKT.js";
15
15
  import {
16
16
  VERSION
17
- } from "./chunk-R6F6V6AA.js";
17
+ } from "./chunk-CQDCL3CR.js";
18
18
  import "./chunk-PDX44BCA.js";
19
19
 
20
20
  // src/cli/ci.ts
@@ -36,7 +36,7 @@ import {
36
36
  TEST_TIMEOUT,
37
37
  VERSION,
38
38
  buildUserIdentityPrompt
39
- } from "./chunk-R6F6V6AA.js";
39
+ } from "./chunk-CQDCL3CR.js";
40
40
  import "./chunk-PDX44BCA.js";
41
41
  export {
42
42
  AGENTIC_BEHAVIOR_GUIDELINE,
@@ -2,26 +2,26 @@
2
2
  import {
3
3
  getConfigDirUsage,
4
4
  listRecentCrashes
5
- } from "./chunk-TQOW4QXI.js";
5
+ } from "./chunk-2RBJNHBS.js";
6
6
  import {
7
7
  ProviderRegistry
8
- } from "./chunk-2INGXRYC.js";
8
+ } from "./chunk-GNJOC6ZN.js";
9
9
  import {
10
10
  getStatsSnapshot,
11
11
  getTopFailingTools,
12
12
  getTopUsedTools,
13
13
  resetStats
14
- } from "./chunk-A2QRIRWR.js";
14
+ } from "./chunk-AUOY5WJL.js";
15
15
  import "./chunk-NXXNLLSG.js";
16
16
  import {
17
17
  ConfigManager
18
- } from "./chunk-3IRLZJEZ.js";
19
- import "./chunk-2ZD3YTVM.js";
18
+ } from "./chunk-3Q2B5YQP.js";
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-R6F6V6AA.js";
24
+ } from "./chunk-CQDCL3CR.js";
25
25
  import "./chunk-PDX44BCA.js";
26
26
 
27
27
  // src/diagnostics/doctor-cli.ts
@@ -36,7 +36,7 @@ import {
36
36
  VERSION,
37
37
  buildUserIdentityPrompt,
38
38
  runTestsTool
39
- } from "./chunk-GX4MZJ6R.js";
39
+ } from "./chunk-HAFUJYZQ.js";
40
40
  import {
41
41
  hasSemanticIndex,
42
42
  semanticSearch
@@ -316,6 +316,7 @@ var ENV_KEY_MAP = {
316
316
  deepseek: "AICLI_API_KEY_DEEPSEEK",
317
317
  zhipu: "AICLI_API_KEY_ZHIPU",
318
318
  kimi: "AICLI_API_KEY_KIMI",
319
+ minimax: "AICLI_API_KEY_MINIMAX",
319
320
  openai: "AICLI_API_KEY_OPENAI",
320
321
  openrouter: "AICLI_API_KEY_OPENROUTER",
321
322
  "google-search": "AICLI_API_KEY_GOOGLESEARCH",
@@ -2676,6 +2677,69 @@ var KimiProvider = class _KimiProvider extends OpenAICompatibleProvider {
2676
2677
  }
2677
2678
  };
2678
2679
 
2680
+ // src/providers/minimax.ts
2681
+ var MiniMaxProvider = class extends OpenAICompatibleProvider {
2682
+ defaultBaseUrl = "https://api.minimaxi.com/v1";
2683
+ info = {
2684
+ id: "minimax",
2685
+ displayName: "MiniMax (\u6D77\u87BA)",
2686
+ defaultModel: "MiniMax-M3",
2687
+ apiKeyEnvVar: "AICLI_API_KEY_MINIMAX",
2688
+ requiresApiKey: true,
2689
+ baseUrl: this.defaultBaseUrl,
2690
+ models: [
2691
+ {
2692
+ id: "MiniMax-M3",
2693
+ displayName: "MiniMax M3\uFF08\u65D7\u8230\uFF0C1M \u4E0A\u4E0B\u6587\uFF09",
2694
+ contextWindow: 1e6,
2695
+ supportsStreaming: true
2696
+ },
2697
+ {
2698
+ id: "MiniMax-M2.7",
2699
+ displayName: "MiniMax M2.7",
2700
+ contextWindow: 1e6,
2701
+ supportsStreaming: true
2702
+ },
2703
+ {
2704
+ id: "MiniMax-M2.7-highspeed",
2705
+ displayName: "MiniMax M2.7 Highspeed",
2706
+ contextWindow: 1e6,
2707
+ supportsStreaming: true
2708
+ },
2709
+ {
2710
+ id: "MiniMax-M2.5",
2711
+ displayName: "MiniMax M2.5",
2712
+ contextWindow: 1e6,
2713
+ supportsStreaming: true
2714
+ },
2715
+ {
2716
+ id: "MiniMax-M2.5-highspeed",
2717
+ displayName: "MiniMax M2.5 Highspeed",
2718
+ contextWindow: 1e6,
2719
+ supportsStreaming: true
2720
+ },
2721
+ {
2722
+ id: "MiniMax-M2.1",
2723
+ displayName: "MiniMax M2.1",
2724
+ contextWindow: 1e6,
2725
+ supportsStreaming: true
2726
+ },
2727
+ {
2728
+ id: "MiniMax-M2.1-highspeed",
2729
+ displayName: "MiniMax M2.1 Highspeed",
2730
+ contextWindow: 1e6,
2731
+ supportsStreaming: true
2732
+ },
2733
+ {
2734
+ id: "MiniMax-M2",
2735
+ displayName: "MiniMax M2",
2736
+ contextWindow: 1e6,
2737
+ supportsStreaming: true
2738
+ }
2739
+ ]
2740
+ };
2741
+ };
2742
+
2679
2743
  // src/providers/openai.ts
2680
2744
  var OpenAIProvider = class extends OpenAICompatibleProvider {
2681
2745
  defaultBaseUrl = "https://api.openai.com/v1";
@@ -3013,6 +3077,7 @@ var BUILT_IN_PROVIDERS = [
3013
3077
  DeepSeekProvider,
3014
3078
  ZhipuProvider,
3015
3079
  KimiProvider,
3080
+ MiniMaxProvider,
3016
3081
  OpenAIProvider,
3017
3082
  OpenRouterProvider,
3018
3083
  OllamaProvider
@@ -13483,7 +13548,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
13483
13548
  case "test": {
13484
13549
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
13485
13550
  try {
13486
- const { executeTests } = await import("./run-tests-WOGF7YL7.js");
13551
+ const { executeTests } = await import("./run-tests-NQGUFKOJ.js");
13487
13552
  const argStr = args.join(" ").trim();
13488
13553
  let testArgs = {};
13489
13554
  if (argStr) {
@@ -155,7 +155,7 @@ ${content}`);
155
155
  }
156
156
  }
157
157
  async function runTaskMode(config, providers, configManager, topic) {
158
- const { TaskOrchestrator } = await import("./task-orchestrator-QLMPQB3D.js");
158
+ const { TaskOrchestrator } = await import("./task-orchestrator-MOCZJHX3.js");
159
159
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
160
160
  let interrupted = false;
161
161
  const onSigint = () => {
package/dist/index.js CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  saveDevState,
19
19
  sessionHasMeaningfulContent,
20
20
  setupProxy
21
- } from "./chunk-YC7N44MJ.js";
21
+ } from "./chunk-ZGH5QTIF.js";
22
22
  import {
23
23
  ToolExecutor,
24
24
  ToolRegistry,
@@ -37,10 +37,10 @@ import {
37
37
  spawnAgentContext,
38
38
  theme,
39
39
  undoStack
40
- } from "./chunk-VSJHW3CU.js";
40
+ } from "./chunk-MSUBGV52.js";
41
41
  import "./chunk-HDSKW7Q3.js";
42
42
  import "./chunk-ZWVIDFGY.js";
43
- import "./chunk-AYYIFOLV.js";
43
+ import "./chunk-X65N6VMM.js";
44
44
  import {
45
45
  SessionManager,
46
46
  getContentText
@@ -49,7 +49,7 @@ import {
49
49
  getConfigDirUsage,
50
50
  listRecentCrashes,
51
51
  writeCrashLog
52
- } from "./chunk-TQOW4QXI.js";
52
+ } from "./chunk-2RBJNHBS.js";
53
53
  import {
54
54
  CONTENT_ONLY_STREAM_REMINDER,
55
55
  HALLUCINATION_CORRECTION_MESSAGE,
@@ -68,22 +68,22 @@ import {
68
68
  looksLikeDocumentBody,
69
69
  stripPseudoToolCalls,
70
70
  stripToolCallReminder
71
- } from "./chunk-2INGXRYC.js";
71
+ } from "./chunk-GNJOC6ZN.js";
72
72
  import {
73
73
  getStatsSnapshot,
74
74
  getTopFailingTools,
75
75
  getTopUsedTools,
76
76
  installFlushOnExit
77
- } from "./chunk-A2QRIRWR.js";
77
+ } from "./chunk-AUOY5WJL.js";
78
78
  import "./chunk-NXXNLLSG.js";
79
79
  import {
80
80
  ConfigManager
81
- } from "./chunk-3IRLZJEZ.js";
81
+ } from "./chunk-3Q2B5YQP.js";
82
82
  import {
83
83
  AuthError,
84
84
  ProviderError,
85
85
  RateLimitError
86
- } from "./chunk-2ZD3YTVM.js";
86
+ } from "./chunk-TZQHYZKT.js";
87
87
  import {
88
88
  AGENTIC_BEHAVIOR_GUIDELINE,
89
89
  AUTHOR,
@@ -105,7 +105,7 @@ import {
105
105
  SKILLS_DIR_NAME,
106
106
  VERSION,
107
107
  buildUserIdentityPrompt
108
- } from "./chunk-R6F6V6AA.js";
108
+ } from "./chunk-CQDCL3CR.js";
109
109
  import {
110
110
  formatGitContextForPrompt,
111
111
  getGitContext,
@@ -320,14 +320,14 @@ var Renderer = class {
320
320
  const feat = (s) => theme.dim(" \u2726 ") + chalk.white(s);
321
321
  console.log();
322
322
  console.log(
323
- theme.heading(" \u{1F916} ai-cli") + theme.dim(` v${VERSION}`) + theme.dim(" \u2014 Cross-platform REPL-style AI chat tool")
323
+ theme.heading(" \u{1F916} ai-cli") + theme.dim(` v${VERSION}`) + theme.dim(" \u2014 Cross-platform agentic AI assistant (REPL \xB7 Web \xB7 Desktop, 9 providers)")
324
324
  );
325
325
  console.log(HR);
326
326
  console.log(label("Desc") + chalk.white(DESCRIPTION));
327
327
  console.log(label("Author") + theme.warning(AUTHOR) + theme.dim(" <" + AUTHOR_EMAIL + ">"));
328
328
  console.log(HR);
329
- console.log(theme.dim(" Supported Providers (8):"));
330
- console.log(theme.dim(" OpenAI \xB7 DeepSeek \xB7 Kimi (Moonshot) \xB7 Claude (Anthropic)"));
329
+ console.log(theme.dim(" Supported Providers (9):"));
330
+ console.log(theme.dim(" OpenAI \xB7 DeepSeek \xB7 Kimi (Moonshot) \xB7 Claude (Anthropic) \xB7 MiniMax (\u6D77\u87BA)"));
331
331
  console.log(theme.dim(" Gemini (Google) \xB7 Zhipu (GLM) \xB7 OpenRouter \xB7 Ollama (Local, no API key)"));
332
332
  console.log(HR);
333
333
  const mcpToolCount = mcpInfo?.tools ?? 0;
@@ -460,6 +460,20 @@ var Renderer = class {
460
460
  console.log(feat("write_file long-content guidance (v0.4.103+): tool description no longer encourages AI to chunk long files \u2014 single-shot writes prevented from being split into truncated parts"));
461
461
  console.log(feat("Provider retry + fallback chain (v0.4.144+): transient network / 5xx / 429 errors retry on the same provider with exponential backoff; persistent failures walk config.fallback.chain (per-entry provider+model). Opt-in via config.fallback.enabled. Stream-safe: never retries after first chunk yielded"));
462
462
  console.log(feat("aicli ci \u2014 headless PR review for GitHub Actions (v0.4.145+): `aicli ci --pr <num> --post` reads diff via gh CLI, runs code + security review, posts/updates a single PR comment via sentinel marker. Drop-in workflow YAML at docs/github-actions-example.yml. Critical/high findings \u2192 exit 1 (CI gate)"));
463
+ console.log(feat("Kimi K2.6 family + temperature fix (v0.4.146\u20130.4.149): kimi-k2.6 / k2.5 / k2-thinking default models; auto-migrate retired k2-0711/k2-turbo ids in config + history; K2.x models force temperature=1 (API requires it)"));
464
+ console.log(feat("bash error hints (v0.4.146\u20130.4.165): on common Windows/PowerShell failures the bash tool appends actionable hints \u2014 Test-Path over -EA SilentlyContinue probes, python (not python3) incl. the WindowsApps stub that exits 1 silently, write_file over hallucinated Write-Content cmdlets"));
465
+ console.log(feat("6th security + perf audit (v0.4.151): SSRF hardening (IPv4 int/hex/octal + IPv6 + DNS-rebinding pinned via undici lookup), newline command-chain bypass in permissions, timing-safe token compare, interpreter inline-code (-c/-e) danger elevation, vector-store top-k + redactor perf"));
466
+ console.log(feat("C1/C2 index extended to Go/Rust/Java/C++ (v0.4.143): find_symbol/get_outline/find_references/search_code now cover 8 languages via bundled tree-sitter grammars"));
467
+ console.log(feat("Provider streaming tool-call fixes (v0.4.142): Zhipu/GLM repeated id+name delta aggregation no longer drops args; conformance tests across OpenAI-standard vs repeated-chunk shapes"));
468
+ console.log(feat("Hub P1 \u2014 mixed multi-model brainstorm (v0.4.152): aicli hub --mix spreads configured providers across roles (Claude vs GPT vs DeepSeek really debate); fixes per-role model bug via resolveRoleProviders"));
469
+ console.log(feat("Hub P2 \u2014 human-in-the-loop + convergence (v0.4.154): --steer pauses each round for guidance/stop; --vote lets agents append [CONVERGED], 2/3 majority ends early (zero extra API calls); structured Decision/Action-Items summary"));
470
+ console.log(feat("Hub P3 \u2014 discussion persistence (v0.4.155): finished discussions auto-save to ~/.aicli/history as a normal session, listed by `aicli sessions`, replayable via Web UI \u{1F3AC} \u2014 reuses Session Replay, zero new machinery"));
471
+ console.log(feat("Hub P4 \u2014 Web UI multi-agent room (v0.4.156\u20130.4.158): \u{1F3DB} Hub sidebar tab runs discussions live in the browser (streaming per-role blocks, vote rows, summary card); P4b adds in-browser --steer and side-by-side agent lanes. Hub roadmap complete"));
472
+ console.log(feat("aicli web fixes (v0.4.153): honor config.mcpEnabled in web mode; vendor Tailwind/DaisyUI/marked/highlight.js locally (GFW-blocked CDNs broke styling + login overlay)"));
473
+ console.log(feat("Self-updating service worker (v0.4.159): network-only HTML/JS + activate-time reload broadcast \u2014 upgrades take effect without manual SW unregister; fixes stale-cache ghost"));
474
+ console.log(feat("Web UI CSP fix (v0.4.160\u20130.4.162): restore missing \u{1F3DB} Hub tab button; loosen script-src to unsafe-inline so inline onclick handlers fire (strict CSP had silently blocked every button)"));
475
+ console.log(feat("Windows process-tree kill (v0.4.163): killChild uses taskkill /T /F so Ctrl+C actually interrupts ssh/psql grandchildren (child.kill only hit the powershell parent)"));
476
+ console.log(feat("Hallucination detector bash-aware (v0.4.165): files written via bash (python open().write(), Out-File, scp, redirects) no longer false-flagged as phantom claims; coarse check suppressed when bash ran this turn"));
463
477
  console.log();
464
478
  }
465
479
  printPrompt(provider, _model) {
@@ -1774,7 +1788,7 @@ No tools match "${filter}".
1774
1788
  const { join: join6 } = await import("path");
1775
1789
  const { existsSync: existsSync6 } = await import("fs");
1776
1790
  const { getGitRoot: getGitRoot2 } = await import("./git-context-7KIP4X2V.js");
1777
- const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-EFVA3BWE.js");
1791
+ const { MCP_PROJECT_CONFIG_NAME: MCP_PROJECT_CONFIG_NAME2 } = await import("./constants-WTXRMREX.js");
1778
1792
  const { approveProject, hashMcpFile } = await import("./project-trust-IFM7FXEV.js");
1779
1793
  const cwd = process.cwd();
1780
1794
  const projectRoot = getGitRoot2(cwd) ?? cwd;
@@ -2835,7 +2849,7 @@ ${hint}` : "")
2835
2849
  usage: "/test [command|filter]",
2836
2850
  async execute(args, ctx) {
2837
2851
  try {
2838
- const { executeTests } = await import("./run-tests-SH56G6VK.js");
2852
+ const { executeTests } = await import("./run-tests-3G2PJXGO.js");
2839
2853
  const argStr = args.join(" ").trim();
2840
2854
  let testArgs = {};
2841
2855
  if (argStr) {
@@ -7537,7 +7551,7 @@ program.command("web").description("Start Web UI server with browser-based chat
7537
7551
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
7538
7552
  process.exit(1);
7539
7553
  }
7540
- const { startWebServer } = await import("./server-EC4VLKEM.js");
7554
+ const { startWebServer } = await import("./server-MXD7VVUS.js");
7541
7555
  await startWebServer({ port, host: options.host });
7542
7556
  });
7543
7557
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | logout-all <name> | migrate <name>)").action(async (action, username) => {
@@ -7704,12 +7718,12 @@ program.command("sessions").description("List recent conversation sessions").opt
7704
7718
  console.log(footer + "\n");
7705
7719
  });
7706
7720
  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) => {
7707
- const { runDoctorCli } = await import("./doctor-cli-WIQX3QCP.js");
7721
+ const { runDoctorCli } = await import("./doctor-cli-LOEEIEOP.js");
7708
7722
  await runDoctorCli({ json: !!options.json, resetStats: !!options.resetStats });
7709
7723
  });
7710
7724
  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) => {
7711
7725
  try {
7712
- const batch = await import("./batch-KV33HTXT.js");
7726
+ const batch = await import("./batch-XYA52SO5.js");
7713
7727
  switch (action) {
7714
7728
  case "submit":
7715
7729
  if (!arg) {
@@ -7752,7 +7766,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
7752
7766
  }
7753
7767
  });
7754
7768
  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) => {
7755
- const { startMcpServer } = await import("./server-YOOT2T67.js");
7769
+ const { startMcpServer } = await import("./server-32ZENZ3A.js");
7756
7770
  await startMcpServer({
7757
7771
  allowDestructive: !!options.allowDestructive,
7758
7772
  allowOutsideCwd: !!options.allowOutsideCwd,
@@ -7761,7 +7775,7 @@ program.command("mcp-serve").description("Start an MCP server over STDIO, exposi
7761
7775
  });
7762
7776
  });
7763
7777
  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; diff fetched via `gh pr diff <num>`", (v) => parseInt(v, 10)).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)").action(async (options) => {
7764
- const { runCi } = await import("./ci-H3U5MT23.js");
7778
+ const { runCi } = await import("./ci-65KIRMAD.js");
7765
7779
  const result = await runCi({
7766
7780
  pr: options.pr,
7767
7781
  base: options.base,
@@ -7906,7 +7920,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
7906
7920
  }),
7907
7921
  config.get("customProviders")
7908
7922
  );
7909
- const { startHub } = await import("./hub-OVROTRRS.js");
7923
+ const { startHub } = await import("./hub-UM3LKKSJ.js");
7910
7924
  await startHub(
7911
7925
  {
7912
7926
  topic: topic ?? "",
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-AYYIFOLV.js";
6
- import "./chunk-R6F6V6AA.js";
5
+ } from "./chunk-X65N6VMM.js";
6
+ import "./chunk-CQDCL3CR.js";
7
7
  import "./chunk-PDX44BCA.js";
8
8
  export {
9
9
  executeTests,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeTests,
3
3
  runTestsTool
4
- } from "./chunk-GX4MZJ6R.js";
4
+ } from "./chunk-HAFUJYZQ.js";
5
5
  import "./chunk-3RG5ZIWI.js";
6
6
  export {
7
7
  executeTests,
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ToolRegistry
4
- } from "./chunk-VSJHW3CU.js";
4
+ } from "./chunk-MSUBGV52.js";
5
5
  import "./chunk-HDSKW7Q3.js";
6
6
  import "./chunk-ZWVIDFGY.js";
7
- import "./chunk-AYYIFOLV.js";
7
+ import "./chunk-X65N6VMM.js";
8
8
  import {
9
9
  runTool
10
- } from "./chunk-A2QRIRWR.js";
10
+ } from "./chunk-AUOY5WJL.js";
11
11
  import {
12
12
  getDangerLevel,
13
13
  schemaToJsonSchema
14
14
  } from "./chunk-NXXNLLSG.js";
15
- import "./chunk-2ZD3YTVM.js";
15
+ import "./chunk-TZQHYZKT.js";
16
16
  import {
17
17
  VERSION
18
- } from "./chunk-R6F6V6AA.js";
18
+ } from "./chunk-CQDCL3CR.js";
19
19
  import "./chunk-4BKXL7SM.js";
20
20
  import "./chunk-MM3F43H6.js";
21
21
  import "./chunk-KHYD3WXE.js";
@@ -21,7 +21,7 @@ import {
21
21
  loadDevState,
22
22
  persistToolRound,
23
23
  setupProxy
24
- } from "./chunk-YC7N44MJ.js";
24
+ } from "./chunk-ZGH5QTIF.js";
25
25
  import {
26
26
  ToolExecutor,
27
27
  ToolRegistry,
@@ -39,10 +39,10 @@ import {
39
39
  spawnAgentContext,
40
40
  truncateOutput,
41
41
  undoStack
42
- } from "./chunk-VSJHW3CU.js";
42
+ } from "./chunk-MSUBGV52.js";
43
43
  import "./chunk-HDSKW7Q3.js";
44
44
  import "./chunk-ZWVIDFGY.js";
45
- import "./chunk-AYYIFOLV.js";
45
+ import "./chunk-X65N6VMM.js";
46
46
  import {
47
47
  SessionManager,
48
48
  getContentText
@@ -61,17 +61,17 @@ import {
61
61
  looksLikeDocumentBody,
62
62
  stripPseudoToolCalls,
63
63
  stripToolCallReminder
64
- } from "./chunk-2INGXRYC.js";
64
+ } from "./chunk-GNJOC6ZN.js";
65
65
  import {
66
66
  runTool
67
- } from "./chunk-A2QRIRWR.js";
67
+ } from "./chunk-AUOY5WJL.js";
68
68
  import {
69
69
  getDangerLevel
70
70
  } from "./chunk-NXXNLLSG.js";
71
71
  import {
72
72
  ConfigManager
73
- } from "./chunk-3IRLZJEZ.js";
74
- import "./chunk-2ZD3YTVM.js";
73
+ } from "./chunk-3Q2B5YQP.js";
74
+ import "./chunk-TZQHYZKT.js";
75
75
  import {
76
76
  AGENTIC_BEHAVIOR_GUIDELINE,
77
77
  AUTHOR,
@@ -90,7 +90,7 @@ import {
90
90
  SKILLS_DIR_NAME,
91
91
  VERSION,
92
92
  buildUserIdentityPrompt
93
- } from "./chunk-R6F6V6AA.js";
93
+ } from "./chunk-CQDCL3CR.js";
94
94
  import {
95
95
  formatGitContextForPrompt,
96
96
  getGitContext,
@@ -2577,7 +2577,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
2577
2577
  case "test": {
2578
2578
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
2579
2579
  try {
2580
- const { executeTests } = await import("./run-tests-SH56G6VK.js");
2580
+ const { executeTests } = await import("./run-tests-3G2PJXGO.js");
2581
2581
  const argStr = args.join(" ").trim();
2582
2582
  let testArgs = {};
2583
2583
  if (argStr) {
@@ -3,20 +3,20 @@ import {
3
3
  ToolRegistry,
4
4
  googleSearchContext,
5
5
  truncateOutput
6
- } from "./chunk-VSJHW3CU.js";
6
+ } from "./chunk-MSUBGV52.js";
7
7
  import "./chunk-HDSKW7Q3.js";
8
8
  import "./chunk-ZWVIDFGY.js";
9
- import "./chunk-AYYIFOLV.js";
9
+ import "./chunk-X65N6VMM.js";
10
10
  import {
11
11
  runTool
12
- } from "./chunk-A2QRIRWR.js";
12
+ } from "./chunk-AUOY5WJL.js";
13
13
  import {
14
14
  getDangerLevel
15
15
  } from "./chunk-NXXNLLSG.js";
16
- import "./chunk-2ZD3YTVM.js";
16
+ import "./chunk-TZQHYZKT.js";
17
17
  import {
18
18
  SUBAGENT_ALLOWED_TOOLS
19
- } from "./chunk-R6F6V6AA.js";
19
+ } from "./chunk-CQDCL3CR.js";
20
20
  import "./chunk-4BKXL7SM.js";
21
21
  import "./chunk-MM3F43H6.js";
22
22
  import "./chunk-KHYD3WXE.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.165",
3
+ "version": "0.4.166",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",