jinzd-ai-cli 0.2.12 → 0.2.13

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
@@ -237,6 +237,50 @@ Configuration is stored at `~/.aicli/config.json`. Run `aicli config` for the in
237
237
  }
238
238
  ```
239
239
 
240
+ ### Permission Rules
241
+
242
+ Control when tools require confirmation. Rules are checked in order — first match wins:
243
+
244
+ ```json
245
+ {
246
+ "permissionRules": [
247
+ { "tool": "read_file", "action": "auto-approve" },
248
+ { "tool": "list_dir", "action": "auto-approve" },
249
+ { "tool": "grep_files", "action": "auto-approve" },
250
+ { "tool": "glob_files", "action": "auto-approve" },
251
+ { "tool": "write_todos", "action": "auto-approve" },
252
+ { "tool": "bash", "action": "auto-approve", "when": { "dangerLevel": "safe" } },
253
+ { "tool": "write_file", "action": "auto-approve", "when": { "pathPattern": "src/" } },
254
+ { "tool": "bash", "action": "deny", "when": { "pathPattern": "rm -rf" } },
255
+ { "tool": "*", "action": "confirm" }
256
+ ]
257
+ }
258
+ ```
259
+
260
+ | Field | Description |
261
+ |-------|-------------|
262
+ | `tool` | Tool name, or `*` for all tools |
263
+ | `action` | `auto-approve` (skip confirmation), `deny` (block), `confirm` (ask user) |
264
+ | `when.dangerLevel` | Only match when danger level is `safe`, `write`, or `destructive` |
265
+ | `when.pathPattern` | Substring match against tool's `path` or `command` argument |
266
+
267
+ **Recommended minimal config** — auto-approve all read-only tools to reduce y/N prompts:
268
+
269
+ ```json
270
+ {
271
+ "permissionRules": [
272
+ { "tool": "read_file", "action": "auto-approve" },
273
+ { "tool": "list_dir", "action": "auto-approve" },
274
+ { "tool": "grep_files", "action": "auto-approve" },
275
+ { "tool": "glob_files", "action": "auto-approve" },
276
+ { "tool": "web_fetch", "action": "auto-approve" },
277
+ { "tool": "write_todos", "action": "auto-approve" },
278
+ { "tool": "ask_user", "action": "auto-approve" },
279
+ { "tool": "run_tests", "action": "auto-approve" }
280
+ ]
281
+ }
282
+ ```
283
+
240
284
  ### Environment Variables
241
285
 
242
286
  Environment variables take precedence over config file values:
package/README.zh-CN.md CHANGED
@@ -252,6 +252,50 @@ aicli
252
252
  HTTPS_PROXY=http://127.0.0.1:10809 aicli
253
253
  ```
254
254
 
255
+ ### 权限规则(Permission Rules)
256
+
257
+ 控制工具何时需要用户确认。规则按顺序匹配,第一条命中的生效:
258
+
259
+ ```json
260
+ {
261
+ "permissionRules": [
262
+ { "tool": "read_file", "action": "auto-approve" },
263
+ { "tool": "list_dir", "action": "auto-approve" },
264
+ { "tool": "grep_files", "action": "auto-approve" },
265
+ { "tool": "glob_files", "action": "auto-approve" },
266
+ { "tool": "write_todos", "action": "auto-approve" },
267
+ { "tool": "bash", "action": "auto-approve", "when": { "dangerLevel": "safe" } },
268
+ { "tool": "write_file", "action": "auto-approve", "when": { "pathPattern": "src/" } },
269
+ { "tool": "bash", "action": "deny", "when": { "pathPattern": "rm -rf" } },
270
+ { "tool": "*", "action": "confirm" }
271
+ ]
272
+ }
273
+ ```
274
+
275
+ | 字段 | 说明 |
276
+ |------|------|
277
+ | `tool` | 工具名,`*` 匹配所有工具 |
278
+ | `action` | `auto-approve`(跳过确认自动执行)、`deny`(拒绝)、`confirm`(需用户确认) |
279
+ | `when.dangerLevel` | 仅当危险级别为 `safe`、`write` 或 `destructive` 时匹配 |
280
+ | `when.pathPattern` | 子串匹配工具的 `path` 或 `command` 参数 |
281
+
282
+ **推荐配置** — 自动放行所有只读工具,减少 y/N 确认次数:
283
+
284
+ ```json
285
+ {
286
+ "permissionRules": [
287
+ { "tool": "read_file", "action": "auto-approve" },
288
+ { "tool": "list_dir", "action": "auto-approve" },
289
+ { "tool": "grep_files", "action": "auto-approve" },
290
+ { "tool": "glob_files", "action": "auto-approve" },
291
+ { "tool": "web_fetch", "action": "auto-approve" },
292
+ { "tool": "write_todos", "action": "auto-approve" },
293
+ { "tool": "ask_user", "action": "auto-approve" },
294
+ { "tool": "run_tests", "action": "auto-approve" }
295
+ ]
296
+ }
297
+ ```
298
+
255
299
  ### 环境变量
256
300
 
257
301
  | 变量 | 说明 |
@@ -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.2.12";
11
+ var VERSION = "0.2.13";
12
12
  var APP_NAME = "ai-cli";
13
13
  var CONFIG_DIR_NAME = ".aicli";
14
14
  var CONFIG_FILE_NAME = "config.json";
@@ -16,7 +16,7 @@ import {
16
16
  SUBAGENT_MAX_ROUNDS_LIMIT,
17
17
  VERSION,
18
18
  runTestsTool
19
- } from "./chunk-GGAA3JRD.js";
19
+ } from "./chunk-2VKCVDHP.js";
20
20
 
21
21
  // src/config/config-manager.ts
22
22
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ import {
35
35
  theme,
36
36
  truncateOutput,
37
37
  undoStack
38
- } from "./chunk-IGZDXYIX.js";
38
+ } from "./chunk-64ORNJVC.js";
39
39
  import {
40
40
  AGENTIC_BEHAVIOR_GUIDELINE,
41
41
  AUTHOR,
@@ -55,7 +55,7 @@ import {
55
55
  REPO_URL,
56
56
  SKILLS_DIR_NAME,
57
57
  VERSION
58
- } from "./chunk-GGAA3JRD.js";
58
+ } from "./chunk-2VKCVDHP.js";
59
59
 
60
60
  // src/index.ts
61
61
  import { program } from "commander";
@@ -1904,7 +1904,7 @@ ${hint}` : "")
1904
1904
  description: "Run project tests and show structured report",
1905
1905
  usage: "/test [command|filter]",
1906
1906
  async execute(args, _ctx) {
1907
- const { executeTests } = await import("./run-tests-R2BHDFGB.js");
1907
+ const { executeTests } = await import("./run-tests-7L33QJHM.js");
1908
1908
  const argStr = args.join(" ").trim();
1909
1909
  let testArgs = {};
1910
1910
  if (argStr) {
@@ -5474,7 +5474,7 @@ program.command("web").description("Start Web UI server with browser-based chat
5474
5474
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
5475
5475
  process.exit(1);
5476
5476
  }
5477
- const { startWebServer } = await import("./server-Z3UV3EZB.js");
5477
+ const { startWebServer } = await import("./server-SZVS3S42.js");
5478
5478
  await startWebServer({ port, host: options.host });
5479
5479
  });
5480
5480
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-GGAA3JRD.js";
5
+ } from "./chunk-2VKCVDHP.js";
6
6
  export {
7
7
  executeTests,
8
8
  runTestsTool
@@ -23,7 +23,7 @@ import {
23
23
  setupProxy,
24
24
  spawnAgentContext,
25
25
  truncateOutput
26
- } from "./chunk-IGZDXYIX.js";
26
+ } from "./chunk-64ORNJVC.js";
27
27
  import {
28
28
  AGENTIC_BEHAVIOR_GUIDELINE,
29
29
  CONTEXT_FILE_CANDIDATES,
@@ -35,7 +35,7 @@ import {
35
35
  PLAN_MODE_SYSTEM_ADDON,
36
36
  SKILLS_DIR_NAME,
37
37
  VERSION
38
- } from "./chunk-GGAA3JRD.js";
38
+ } from "./chunk-2VKCVDHP.js";
39
39
  import {
40
40
  AuthManager
41
41
  } from "./chunk-CPLT6CD3.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",