jinzd-ai-cli 0.4.90 → 0.4.91

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.
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm version](https://img.shields.io/npm/v/jinzd-ai-cli)](https://www.npmjs.com/package/jinzd-ai-cli)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
9
9
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)
10
- [![Tests](https://img.shields.io/badge/tests-529%20passing-brightgreen)]()
10
+ [![Tests](https://img.shields.io/badge/tests-647%20passing-brightgreen)]()
11
11
  [![GitHub Release](https://img.shields.io/github/v/release/jinzhengdong/ai-cli)](https://github.com/jinzhengdong/ai-cli/releases)
12
12
  [![CI](https://github.com/jinzhengdong/ai-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/jinzhengdong/ai-cli/actions/workflows/ci.yml)
13
13
 
@@ -31,6 +31,10 @@
31
31
  - **Conversation Branching** *(v0.4.74+)* — `/branch list/new/switch/delete/rename` inside the REPL, plus a 🌿 "fork here" button on every replay step — explore alternate directions without losing the original thread
32
32
  - **Symbol Index** *(v0.4.76+)* — persistent tree-sitter index for TS/JS/TSX/Python powers three new AI tools: `find_symbol`, `get_outline`, `find_references`. Orders of magnitude faster than grep for definition lookups; background refresh on REPL startup, `/index status|rebuild|clear` to manage
33
33
  - **Semantic Code Search** *(v0.4.77+)* — `search_code` tool finds code by meaning, not name. Local sentence embeddings (multilingual MiniLM, 117 MB one-time download) score symbols by cosine similarity against natural-language queries in English or Chinese ("where are users authenticated", "哪里做了速率限制"). No API key, runs on CPU. Manage with `/index semantic-rebuild|semantic-clear`
34
+ - **MCP Server Mode** *(v0.4.84+)* — `aicli mcp-serve` reverses ai-cli into an MCP server (JSON-RPC 2.0 over stdio), exposing its 26 built-in tools (incl. `find_symbol` / `search_code` / `run_tests`) to Claude Desktop / Cursor / any MCP client. Opt-in destructive-tool allow, `--tools` whitelist, `--cwd` override
35
+ - **Session Sensitive-Data Redaction** *(v0.4.88+)* — unified redactor scrubs `password=` / `api_key` / bearer tokens / OpenAI-style keys from every message **before it hits disk**. Query text is redacted too, so secrets never reach embeddings or logs. `/security status` + `/security scan` to audit
36
+ - **Human-like Long-Term Memory** *(v0.4.89+, B4)* — semantic index over every past chat session + `recall_memory` AI tool + `/memory rebuild|refresh|status|recall` commands. AI is prompted to auto-recall when it sees "last time" / "之前" / ambiguous references. Reuses the same MiniLM embedder as semantic code search
37
+ - **Web UI Memory Panel** *(v0.4.90+, B4)* — new 🧠 Memory sidebar tab with semantic search across past chats; each hit has **➕ Inject** (quotes the snippet into the chat input as a markdown blockquote so you can review/edit before sending — no silent context injection) and **↗ Load** (jumps to source session). Bulk "Inject top 3" for recall bundles
34
38
  - **Streaming Tool Use** — Real-time streaming of AI reasoning and tool calls as they happen
35
39
  - **Sub-Agents** — Delegate complex subtasks to isolated child agents with independent tool loops
36
40
  - **Extended Thinking** — Claude deep reasoning mode with `/think` toggle
@@ -41,7 +45,7 @@
41
45
  - **PWA Support** — Install Web UI as a desktop/mobile app, accessible over LAN
42
46
  - **Hierarchical Context** — 3-layer context files (global / project / subdirectory) auto-injected
43
47
  - **Headless Mode** — `ai-cli -p "prompt"` for CI/CD pipelines and scripting
44
- - **40 REPL Commands** — Session management, checkpointing, code review, security review, rewind, scaffolding, cross-session history search, and more
48
+ - **43 REPL Commands** — Session management, checkpointing, code review, security review/scan, rewind, scaffolding, cross-session history search, chat-memory recall, and more
45
49
  - **GitHub Actions CI/CD** — Automated testing on Node 20/22 + npm publish on release tags
46
50
  - **Cross-Platform** — Windows, macOS, Linux
47
51
 
package/README.zh-CN.md CHANGED
@@ -7,7 +7,7 @@
7
7
  [![npm version](https://img.shields.io/npm/v/jinzd-ai-cli)](https://www.npmjs.com/package/jinzd-ai-cli)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
9
9
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)
10
- [![Tests](https://img.shields.io/badge/tests-529%20passing-brightgreen)]()
10
+ [![Tests](https://img.shields.io/badge/tests-647%20passing-brightgreen)]()
11
11
  [![GitHub Release](https://img.shields.io/github/v/release/jinzhengdong/ai-cli)](https://github.com/jinzhengdong/ai-cli/releases)
12
12
  [![CI](https://github.com/jinzhengdong/ai-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/jinzhengdong/ai-cli/actions/workflows/ci.yml)
13
13
 
@@ -23,6 +23,10 @@
23
23
  - **对话分支**(v0.4.74+)— REPL 内 `/branch list/new/switch/delete/rename/diff/cherry-pick`,Web UI 回放面板每条消息旁 🌿 "fork here" 按钮,任意位置开辟新分支探索不同方向,原对话保持不变;v0.4.81 起所有子命令支持 id / title / 唯一前缀
24
24
  - **符号索引**(v0.4.76+,C1)— tree-sitter 持久化索引(TS/JS/TSX/JSX/Python)+ 3 个只读 AI 工具(`find_symbol` / `get_outline` / `find_references`)+ `/index status/rebuild/clear`;启动后台增量刷新,`write_file` 后自动 upsert
25
25
  - **语义代码搜索**(v0.4.77+,C2)— `search_code` AI 工具 + 本地 sentence embedding(`paraphrase-multilingual-MiniLM-L12-v2`,117 MB 一次性下载,384 维,CPU 运行);支持中英文自然语言查询代码;`/index semantic-rebuild/semantic-clear` 管理
26
+ - **MCP Server 模式**(v0.4.84+,E1)— `aicli mcp-serve` 把 aicli 反转为 MCP 服务器(JSON-RPC 2.0 over stdio),把 26 个内置工具(含 `find_symbol` / `search_code` / `run_tests`)输出给 Claude Desktop / Cursor / 任何 MCP 客户端;支持 `--tools` 白名单、`--cwd` 覆盖、`--allow-destructive`
27
+ - **Session 敏感数据脱敏**(v0.4.88+)— 统一 redactor 在 session **落盘前**自动替换 `password=` / `api_key` / bearer token / OpenAI key 为 `[REDACTED:*]`;查询文本也走脱敏,secret 不会进 embedding 或日志;`/security status` + `/security scan` 审计
28
+ - **类人长期记忆**(v0.4.89+,B4)— 聊天记录语义索引跨 session 可召回 + `recall_memory` AI 工具 + `/memory rebuild/refresh/status/recall/index-clear`;AI 看到"上次"/"之前"/指代不明时自动回忆。复用 C2 的 MiniLM embedder
29
+ - **Web UI Memory 面板**(v0.4.90+,B4)— sidebar 新增 🧠 Memory 标签页,跨 session 语义搜索;每条 hit 带 **➕ Inject**(把片段作为 markdown 引用块塞进聊天输入框,用户可在上面继续打字编辑——不是静默注入上下文)和 **↗ Load**(跳转对应 session);顶部"➕ Inject top 3"一键批量
26
30
  - **流式工具调用** — 实时流式展示 AI 推理过程和工具调用
27
31
  - **子代理系统** — 将复杂子任务委派给独立子代理执行
28
32
  - **深度推理** — Claude Extended Thinking,`/think` 一键切换
@@ -33,7 +37,7 @@
33
37
  - **PWA 支持** — Web UI 可安装为桌面/移动应用,支持局域网访问
34
38
  - **三层级上下文** — 全局 / 项目 / 子目录上下文文件自动注入
35
39
  - **无头模式** — `aicli -p "提示词"` 用于 CI/CD 管道和脚本
36
- - **40 个 REPL 命令** — 会话管理、检查点、代码审查、安全审查、对话回退、脚手架等
40
+ - **43 个 REPL 命令** — 会话管理、检查点、代码审查、安全审查/扫描、对话回退、脚手架、聊天记忆召回等
37
41
  - **GitHub Actions CI/CD** — Node 20/22 自动测试 + Release tag 自动发布 npm
38
42
  - **跨平台** — Windows、macOS、Linux
39
43
 
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ConfigManager
4
- } from "./chunk-AB2LA33A.js";
4
+ } from "./chunk-US6MQO6W.js";
5
5
  import "./chunk-2ZD3YTVM.js";
6
- import "./chunk-WPQ4D6T3.js";
6
+ import "./chunk-AKCXRW2Q.js";
7
7
 
8
8
  // src/cli/batch.ts
9
9
  import Anthropic from "@anthropic-ai/sdk";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  // src/core/constants.ts
4
- var VERSION = "0.4.90";
4
+ var VERSION = "0.4.91";
5
5
  var APP_NAME = "ai-cli";
6
6
  var CONFIG_DIR_NAME = ".aicli";
7
7
  var CONFIG_FILE_NAME = "config.json";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  TEST_TIMEOUT
4
- } from "./chunk-WPQ4D6T3.js";
4
+ } from "./chunk-AKCXRW2Q.js";
5
5
 
6
6
  // src/tools/builtin/run-tests.ts
7
7
  import { execSync } from "child_process";
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  schemaToJsonSchema,
4
4
  truncateForPersist
5
- } from "./chunk-G65IDWVP.js";
5
+ } from "./chunk-Z2V6EYPQ.js";
6
6
  import {
7
7
  AuthError,
8
8
  ProviderError,
@@ -21,7 +21,7 @@ import {
21
21
  MCP_PROTOCOL_VERSION,
22
22
  MCP_TOOL_PREFIX,
23
23
  VERSION
24
- } from "./chunk-WPQ4D6T3.js";
24
+ } from "./chunk-AKCXRW2Q.js";
25
25
 
26
26
  // src/providers/claude.ts
27
27
  import Anthropic from "@anthropic-ai/sdk";
@@ -8,7 +8,7 @@ import {
8
8
  CONFIG_FILE_NAME,
9
9
  HISTORY_DIR_NAME,
10
10
  PLUGINS_DIR_NAME
11
- } from "./chunk-WPQ4D6T3.js";
11
+ } from "./chunk-AKCXRW2Q.js";
12
12
 
13
13
  // src/config/config-manager.ts
14
14
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
@@ -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.90";
9
+ var VERSION = "0.4.91";
10
10
  var APP_NAME = "ai-cli";
11
11
  var CONFIG_DIR_NAME = ".aicli";
12
12
  var CONFIG_FILE_NAME = "config.json";
@@ -23,7 +23,7 @@ import {
23
23
  } from "./chunk-6VRJGH25.js";
24
24
  import {
25
25
  runTestsTool
26
- } from "./chunk-EEEAFWNK.js";
26
+ } from "./chunk-IGNYJUZU.js";
27
27
  import {
28
28
  CONFIG_DIR_NAME,
29
29
  DEFAULT_MAX_TOOL_OUTPUT_CHARS_CAP,
@@ -31,7 +31,7 @@ import {
31
31
  SUBAGENT_ALLOWED_TOOLS,
32
32
  SUBAGENT_DEFAULT_MAX_ROUNDS,
33
33
  SUBAGENT_MAX_ROUNDS_LIMIT
34
- } from "./chunk-WPQ4D6T3.js";
34
+ } from "./chunk-AKCXRW2Q.js";
35
35
 
36
36
  // src/tools/types.ts
37
37
  function isFileWriteTool(name) {
@@ -36,7 +36,7 @@ import {
36
36
  VERSION,
37
37
  buildUserIdentityPrompt,
38
38
  runTestsTool
39
- } from "./chunk-BJXGZFE6.js";
39
+ } from "./chunk-XQHCCV3A.js";
40
40
  import {
41
41
  hasSemanticIndex,
42
42
  semanticSearch
@@ -11229,7 +11229,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
11229
11229
  case "test": {
11230
11230
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
11231
11231
  try {
11232
- const { executeTests } = await import("./run-tests-37FEBJTR.js");
11232
+ const { executeTests } = await import("./run-tests-KHJ6YCPH.js");
11233
11233
  const argStr = args.join(" ").trim();
11234
11234
  let testArgs = {};
11235
11235
  if (argStr) {
@@ -385,7 +385,7 @@ ${content}`);
385
385
  }
386
386
  }
387
387
  async function runTaskMode(config, providers, configManager, topic) {
388
- const { TaskOrchestrator } = await import("./task-orchestrator-K6HDX4YE.js");
388
+ const { TaskOrchestrator } = await import("./task-orchestrator-JB5TZNBK.js");
389
389
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
390
390
  let interrupted = false;
391
391
  const onSigint = () => {
package/dist/index.js CHANGED
@@ -30,10 +30,10 @@ import {
30
30
  saveDevState,
31
31
  sessionHasMeaningfulContent,
32
32
  setupProxy
33
- } from "./chunk-DJGP7AR6.js";
33
+ } from "./chunk-MYQANQ6F.js";
34
34
  import {
35
35
  ConfigManager
36
- } from "./chunk-AB2LA33A.js";
36
+ } from "./chunk-US6MQO6W.js";
37
37
  import {
38
38
  ToolExecutor,
39
39
  ToolRegistry,
@@ -49,7 +49,7 @@ import {
49
49
  spawnAgentContext,
50
50
  theme,
51
51
  undoStack
52
- } from "./chunk-G65IDWVP.js";
52
+ } from "./chunk-Z2V6EYPQ.js";
53
53
  import "./chunk-2ZD3YTVM.js";
54
54
  import {
55
55
  fileCheckpoints
@@ -67,7 +67,7 @@ import "./chunk-KJLJPUY2.js";
67
67
  import "./chunk-6VRJGH25.js";
68
68
  import "./chunk-2DXY7UGF.js";
69
69
  import "./chunk-KHYD3WXE.js";
70
- import "./chunk-EEEAFWNK.js";
70
+ import "./chunk-IGNYJUZU.js";
71
71
  import {
72
72
  AGENTIC_BEHAVIOR_GUIDELINE,
73
73
  AUTHOR,
@@ -89,7 +89,7 @@ import {
89
89
  SKILLS_DIR_NAME,
90
90
  VERSION,
91
91
  buildUserIdentityPrompt
92
- } from "./chunk-WPQ4D6T3.js";
92
+ } from "./chunk-AKCXRW2Q.js";
93
93
 
94
94
  // src/index.ts
95
95
  import { program } from "commander";
@@ -227,7 +227,7 @@ var Renderer = class {
227
227
  console.log(theme.dim(" Gemini (Google) \xB7 Zhipu (GLM) \xB7 OpenRouter \xB7 Ollama (Local, no API key)"));
228
228
  console.log(HR);
229
229
  const mcpToolCount = mcpInfo?.tools ?? 0;
230
- const toolTotal = 28 + pluginCount + mcpToolCount;
230
+ const toolTotal = 29 + pluginCount + mcpToolCount;
231
231
  const extras = [];
232
232
  if (pluginCount > 0) extras.push(`${pluginCount} plugin(s)`);
233
233
  if (mcpToolCount > 0) extras.push(`${mcpToolCount} MCP`);
@@ -261,14 +261,15 @@ var Renderer = class {
261
261
  console.log(tool("get_outline", "Enumerate all top-level declarations in one source file"));
262
262
  console.log(tool("find_references", "Search indexed files for references to a symbol name"));
263
263
  console.log(tool("search_code", 'Semantic (meaning-based) code search via local embeddings \u2014 "grep by meaning", bilingual'));
264
+ console.log(tool("recall_memory", 'Semantic recall over past chat sessions \u2014 "remember when we discussed X" across history (v0.4.89+)'));
264
265
  console.log(HR);
265
- console.log(theme.dim(" REPL Commands (42):"));
266
+ console.log(theme.dim(" REPL Commands (43):"));
266
267
  console.log(theme.dim(" /help /about /provider /model /clear /compact /plan /session"));
267
268
  console.log(theme.dim(" /system /context /status /search /undo /export /copy /paste"));
268
269
  console.log(theme.dim(" /cost /init /skill /tools /plugins /mcp /config /checkpoint"));
269
- console.log(theme.dim(" /review /security-review /rewind /commands /test /scaffold"));
270
- console.log(theme.dim(" /add-dir /memory /profile /doctor /bug /think /diff /fork"));
271
- console.log(theme.dim(" /branch /index /yolo /exit"));
270
+ console.log(theme.dim(" /review /security-review /security /rewind /commands /test"));
271
+ console.log(theme.dim(" /scaffold /add-dir /memory /profile /doctor /bug /think"));
272
+ console.log(theme.dim(" /diff /fork /branch /index /yolo /exit"));
272
273
  console.log(HR);
273
274
  console.log(theme.dim(" Key Features:"));
274
275
  console.log(feat("Agentic loop (up to 200 tool-call rounds, configurable via config/CLI, final answer streamed)"));
@@ -338,6 +339,12 @@ var Renderer = class {
338
339
  console.log(feat("Anthropic Batches API (A3, v0.4.73+): aicli batch submit/list/status/results/cancel \u2014 50% off, 24h window"));
339
340
  console.log(feat("Session Replay (B1, v0.4.71+): Web UI \u{1F3AC} button \u2014 timeline view of every message, tool call, reasoning, and cache-aware token usage"));
340
341
  console.log(feat("Conversation Branching (B2, v0.4.74+): /branch list/new/switch/delete/rename \u2014 fork the conversation at any message; Web UI replay \u{1F33F} fork-here button"));
342
+ console.log(feat("Branch tree sidebar (B2 polish, v0.4.75+): Web UI \u{1F33F} Branches tab with tree-indented picker, click to switch, hover to rename/delete, + Fork button"));
343
+ console.log(feat("Cross-branch ops (B3, v0.4.80+): /branch diff and /branch cherry-pick \u2014 compare branches and pick messages across forks; v0.4.81 accepts id/title/prefix"));
344
+ console.log(feat("MCP Server mode (E1, v0.4.84+): aicli mcp-serve \u2014 reverse aicli into an MCP server so Claude Desktop/Cursor/any MCP client can use its 26 built-in tools (including find_symbol/search_code)"));
345
+ console.log(feat("Session sensitive-data redaction (v0.4.88+): unified redactor scrubs passwords/tokens/keys from every message before it hits disk; /security status and scan to audit"));
346
+ console.log(feat('Chat memory recall (B4, v0.4.89+): "human-like long-term memory" \u2014 semantic index over all past sessions + recall_memory AI tool + /memory rebuild|refresh|status|recall, AI auto-recalls on "last time"/"\u4E0A\u6B21"'));
347
+ console.log(feat("Web UI Memory panel (B4, v0.4.90+): \u{1F9E0} Memory sidebar tab \u2014 cross-session semantic search with \u2795 Inject-to-input (quotes hit into chat box for user-reviewed recall) and \u2197 jump-to-session"));
341
348
  console.log();
342
349
  }
343
350
  printPrompt(provider, _model) {
@@ -982,7 +989,7 @@ function createDefaultCommands() {
982
989
  " /scaffold <description> - Generate project scaffolding with AI",
983
990
  " /add-dir [path|remove] - Add/remove a directory from AI context",
984
991
  " /profile [show|set|clear] - View or edit your identity (AI knows who you are)",
985
- " /memory [show|add|clear] - View or edit persistent memory (memory.md)",
992
+ " /memory [show|add|clear|path|rebuild|refresh|status|recall <q>|index-clear] - Persistent memory + chat memory recall index (v0.4.89+)",
986
993
  " /doctor - Health check (API keys, config, MCP status)",
987
994
  " /bug [--copy] - Generate bug report template (--copy to clipboard)",
988
995
  " /diff [--stats] - Show all file modifications in this session",
@@ -2602,7 +2609,7 @@ ${hint}` : "")
2602
2609
  usage: "/test [command|filter]",
2603
2610
  async execute(args, ctx) {
2604
2611
  try {
2605
- const { executeTests } = await import("./run-tests-2DYVHTIH.js");
2612
+ const { executeTests } = await import("./run-tests-MKBVRMBA.js");
2606
2613
  const argStr = args.join(" ").trim();
2607
2614
  let testArgs = {};
2608
2615
  if (argStr) {
@@ -6715,7 +6722,7 @@ program.command("web").description("Start Web UI server with browser-based chat
6715
6722
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
6716
6723
  process.exit(1);
6717
6724
  }
6718
- const { startWebServer } = await import("./server-FCTPLKGO.js");
6725
+ const { startWebServer } = await import("./server-J7BPHI7D.js");
6719
6726
  await startWebServer({ port, host: options.host });
6720
6727
  });
6721
6728
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
@@ -6838,7 +6845,7 @@ program.command("sessions").description("List recent conversation sessions").act
6838
6845
  });
6839
6846
  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) => {
6840
6847
  try {
6841
- const batch = await import("./batch-3MJ56YAA.js");
6848
+ const batch = await import("./batch-KZQHKPE5.js");
6842
6849
  switch (action) {
6843
6850
  case "submit":
6844
6851
  if (!arg) {
@@ -6881,7 +6888,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
6881
6888
  }
6882
6889
  });
6883
6890
  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) => {
6884
- const { startMcpServer } = await import("./server-S6JYNMMF.js");
6891
+ const { startMcpServer } = await import("./server-B6U5GMZ7.js");
6885
6892
  await startMcpServer({
6886
6893
  allowDestructive: !!options.allowDestructive,
6887
6894
  allowOutsideCwd: !!options.allowOutsideCwd,
@@ -7008,7 +7015,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
7008
7015
  }),
7009
7016
  config.get("customProviders")
7010
7017
  );
7011
- const { startHub } = await import("./hub-B7NJSCWF.js");
7018
+ const { startHub } = await import("./hub-A66CLTFF.js");
7012
7019
  await startHub(
7013
7020
  {
7014
7021
  topic: topic ?? "",
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeTests,
3
3
  runTestsTool
4
- } from "./chunk-BJXGZFE6.js";
4
+ } from "./chunk-XQHCCV3A.js";
5
5
  export {
6
6
  executeTests,
7
7
  runTestsTool
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-EEEAFWNK.js";
6
- import "./chunk-WPQ4D6T3.js";
5
+ } from "./chunk-IGNYJUZU.js";
6
+ import "./chunk-AKCXRW2Q.js";
7
7
  export {
8
8
  executeTests,
9
9
  runTestsTool
@@ -3,7 +3,7 @@ import {
3
3
  ToolRegistry,
4
4
  getDangerLevel,
5
5
  schemaToJsonSchema
6
- } from "./chunk-G65IDWVP.js";
6
+ } from "./chunk-Z2V6EYPQ.js";
7
7
  import "./chunk-2ZD3YTVM.js";
8
8
  import "./chunk-4BKXL7SM.js";
9
9
  import "./chunk-ANYYM4CF.js";
@@ -12,10 +12,10 @@ import "./chunk-KJLJPUY2.js";
12
12
  import "./chunk-6VRJGH25.js";
13
13
  import "./chunk-2DXY7UGF.js";
14
14
  import "./chunk-KHYD3WXE.js";
15
- import "./chunk-EEEAFWNK.js";
15
+ import "./chunk-IGNYJUZU.js";
16
16
  import {
17
17
  VERSION
18
- } from "./chunk-WPQ4D6T3.js";
18
+ } from "./chunk-AKCXRW2Q.js";
19
19
 
20
20
  // src/mcp/server.ts
21
21
  import { createInterface } from "readline";
@@ -23,10 +23,10 @@ import {
23
23
  persistToolRound,
24
24
  rebuildExtraMessages,
25
25
  setupProxy
26
- } from "./chunk-DJGP7AR6.js";
26
+ } from "./chunk-MYQANQ6F.js";
27
27
  import {
28
28
  ConfigManager
29
- } from "./chunk-AB2LA33A.js";
29
+ } from "./chunk-US6MQO6W.js";
30
30
  import {
31
31
  ToolExecutor,
32
32
  ToolRegistry,
@@ -44,7 +44,7 @@ import {
44
44
  spawnAgentContext,
45
45
  truncateOutput,
46
46
  undoStack
47
- } from "./chunk-G65IDWVP.js";
47
+ } from "./chunk-Z2V6EYPQ.js";
48
48
  import "./chunk-2ZD3YTVM.js";
49
49
  import "./chunk-4BKXL7SM.js";
50
50
  import "./chunk-ANYYM4CF.js";
@@ -53,7 +53,7 @@ import "./chunk-KJLJPUY2.js";
53
53
  import "./chunk-6VRJGH25.js";
54
54
  import "./chunk-2DXY7UGF.js";
55
55
  import "./chunk-KHYD3WXE.js";
56
- import "./chunk-EEEAFWNK.js";
56
+ import "./chunk-IGNYJUZU.js";
57
57
  import {
58
58
  AGENTIC_BEHAVIOR_GUIDELINE,
59
59
  AUTHOR,
@@ -72,7 +72,7 @@ import {
72
72
  SKILLS_DIR_NAME,
73
73
  VERSION,
74
74
  buildUserIdentityPrompt
75
- } from "./chunk-WPQ4D6T3.js";
75
+ } from "./chunk-AKCXRW2Q.js";
76
76
 
77
77
  // src/web/server.ts
78
78
  import express from "express";
@@ -2237,7 +2237,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
2237
2237
  case "test": {
2238
2238
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
2239
2239
  try {
2240
- const { executeTests } = await import("./run-tests-2DYVHTIH.js");
2240
+ const { executeTests } = await import("./run-tests-MKBVRMBA.js");
2241
2241
  const argStr = args.join(" ").trim();
2242
2242
  let testArgs = {};
2243
2243
  if (argStr) {
@@ -4,7 +4,7 @@ import {
4
4
  getDangerLevel,
5
5
  googleSearchContext,
6
6
  truncateOutput
7
- } from "./chunk-G65IDWVP.js";
7
+ } from "./chunk-Z2V6EYPQ.js";
8
8
  import "./chunk-2ZD3YTVM.js";
9
9
  import "./chunk-4BKXL7SM.js";
10
10
  import "./chunk-ANYYM4CF.js";
@@ -13,10 +13,10 @@ import "./chunk-KJLJPUY2.js";
13
13
  import "./chunk-6VRJGH25.js";
14
14
  import "./chunk-2DXY7UGF.js";
15
15
  import "./chunk-KHYD3WXE.js";
16
- import "./chunk-EEEAFWNK.js";
16
+ import "./chunk-IGNYJUZU.js";
17
17
  import {
18
18
  SUBAGENT_ALLOWED_TOOLS
19
- } from "./chunk-WPQ4D6T3.js";
19
+ } from "./chunk-AKCXRW2Q.js";
20
20
 
21
21
  // src/hub/task-orchestrator.ts
22
22
  import { createInterface } from "readline";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.90",
3
+ "version": "0.4.91",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",