jinzd-ai-cli 0.4.46 → 0.4.48

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.
@@ -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.46";
11
+ var VERSION = "0.4.48";
12
12
  var APP_NAME = "ai-cli";
13
13
  var CONFIG_DIR_NAME = ".aicli";
14
14
  var CONFIG_FILE_NAME = "config.json";
@@ -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.46";
9
+ var VERSION = "0.4.48";
10
10
  var APP_NAME = "ai-cli";
11
11
  var CONFIG_DIR_NAME = ".aicli";
12
12
  var CONFIG_FILE_NAME = "config.json";
@@ -7,7 +7,7 @@ import {
7
7
  ProviderNotFoundError,
8
8
  RateLimitError,
9
9
  schemaToJsonSchema
10
- } from "./chunk-BSO3S6AN.js";
10
+ } from "./chunk-IOBYDSAC.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-R5XH32QG.js";
23
+ } from "./chunk-3LYM62CK.js";
24
24
 
25
25
  // src/config/config-manager.ts
26
26
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";
@@ -1544,38 +1544,31 @@ var ZhipuProvider = class extends OpenAICompatibleProvider {
1544
1544
  };
1545
1545
 
1546
1546
  // src/tools/hallucination.ts
1547
- var HALLUCINATION_PATTERNS = [
1548
- /文件路径[::]\s*`?[^\s`]+\.\w{1,5}/,
1549
- // 文件路径: `path/to/file.ext`(要求文件扩展名)
1550
- /已生成[::!!]/,
1551
- // 已生成完成!
1552
- /已保存到?\s*[`'"]/,
1553
- // 已保存到 `path`(要求后跟路径引号)
1554
- /已写入[::!!]/,
1555
- // 已写入!
1556
- /已创建[::!!]/,
1557
- // 已创建!
1558
- /File\s+(?:written|saved|created)\s+(?:to|as|at)/i,
1559
- // File written to / saved as(要求介词)
1560
- /生成完成[!!]/,
1561
- // 生成完成!
1562
- /✅\s*(?:文件|已[生保写创]|第)\S*\.\w{1,5}/,
1563
- // ✅ 文件已保存 path.ext(要求文件扩展名)
1564
- /文件已[成功]?创建/,
1565
- // 文件已成功创建 / 文件已创建
1566
- /教案已[成功]?[生创保写]/,
1567
- // 教案已成功生成 / 教案已保存
1568
- /已成功[保写创生]入?[::!!\s`'"]/,
1569
- // 已成功保存 / 已成功写入 / 已成功创建
1570
- /保存[到至]了?\s*[`'"]/,
1571
- // 保存到了 `path` / 保存至 'path'
1572
- /内容如下[::]/,
1573
- // 内容如下:(后跟大段文件内容)
1574
- /以下是.*(?:教案|文件|内容)[::]/
1575
- // 以下是xx教案内容:(Kimi 常见模式)
1576
- ];
1577
1547
  function detectsHallucinatedFileOp(content) {
1578
- return HALLUCINATION_PATTERNS.some((pattern) => pattern.test(content));
1548
+ const sentences = content.split(/[。!?;!?!;]/);
1549
+ const objects = ["\u6559\u6848", "\u6587\u6863", "\u6587\u4EF6", "\u4EE3\u7801", "\u5185\u5BB9", "lesson plan", "file", "content", "document"];
1550
+ const actions = ["\u5DF2\u4FDD\u5B58", "\u5DF2\u5199\u5165", "\u5DF2\u521B\u5EFA", "\u5DF2\u751F\u6210", "\u7F16\u5199\u5B8C\u6210", "\u4FDD\u5B58\u5B8C\u6210", "\u5199\u5165\u5B8C\u6210", "\u751F\u6210\u5B8C\u6210", "\u6210\u529F\u4FDD\u5B58", "\u6210\u529F\u5199\u5165", "\u4FDD\u5B58\u5230", "\u5199\u5165\u5230", "written", "saved", "created", "generated", "completed"];
1551
+ const lessonPattern = /第\s*\d+\s*课时.*(?:完成|保存|编写)/;
1552
+ for (const s of sentences) {
1553
+ const trimmed = s.trim();
1554
+ if (!trimmed) continue;
1555
+ if (lessonPattern.test(trimmed)) return true;
1556
+ const hasObject = objects.some((obj) => trimmed.includes(obj));
1557
+ const hasAction = actions.some((act) => trimmed.includes(act));
1558
+ if (hasObject && hasAction) {
1559
+ const ignoreKeywords = ["\u662F\u5426", "\u786E\u8BA4", "\u9700\u8981", "\u51C6\u5907", "\u8BA1\u5212", "if you", "do you"];
1560
+ if (!ignoreKeywords.some((ik) => trimmed.includes(ignoreKeywords))) {
1561
+ return true;
1562
+ }
1563
+ }
1564
+ }
1565
+ const backupPatterns = [
1566
+ /✅\s*已完成[::]?\s*第?\d+\s*课时/,
1567
+ /内容如下[::]/,
1568
+ /以下是.*(?:教案|文件|内容)[::]/,
1569
+ /File\s+(?:written|saved|created)\s+(?:to|as|at)/i
1570
+ ];
1571
+ return backupPatterns.some((p) => p.test(content));
1579
1572
  }
1580
1573
  function hadPreviousWriteToolCalls(extraMessages) {
1581
1574
  const msgs = extraMessages;
@@ -9,7 +9,7 @@ import {
9
9
  SUBAGENT_DEFAULT_MAX_ROUNDS,
10
10
  SUBAGENT_MAX_ROUNDS_LIMIT,
11
11
  runTestsTool
12
- } from "./chunk-R5XH32QG.js";
12
+ } from "./chunk-3LYM62CK.js";
13
13
 
14
14
  // src/tools/builtin/bash.ts
15
15
  import { execSync } from "child_process";
@@ -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-ZTFNMBTW.js");
388
+ const { TaskOrchestrator } = await import("./task-orchestrator-FZ6MMN23.js");
389
389
  const orchestrator = new TaskOrchestrator(config, providers, configManager);
390
390
  let interrupted = false;
391
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-IP7FPI3C.js";
27
+ } from "./chunk-6LRI6VU5.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-BSO3S6AN.js";
40
+ } from "./chunk-IOBYDSAC.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-R5XH32QG.js";
64
+ } from "./chunk-3LYM62CK.js";
65
65
 
66
66
  // src/index.ts
67
67
  import { program } from "commander";
@@ -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-RZTULQ3R.js");
2102
+ const { executeTests } = await import("./run-tests-G4WGBJGQ.js");
2103
2103
  const argStr = args.join(" ").trim();
2104
2104
  let testArgs = {};
2105
2105
  if (argStr) {
@@ -5484,7 +5484,7 @@ program.command("web").description("Start Web UI server with browser-based chat
5484
5484
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
5485
5485
  process.exit(1);
5486
5486
  }
5487
- const { startWebServer } = await import("./server-2TZ3ZUVZ.js");
5487
+ const { startWebServer } = await import("./server-SBFYZ3PX.js");
5488
5488
  await startWebServer({ port, host: options.host });
5489
5489
  });
5490
5490
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
@@ -5717,7 +5717,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
5717
5717
  }),
5718
5718
  config.get("customProviders")
5719
5719
  );
5720
- const { startHub } = await import("./hub-IO6QCF5C.js");
5720
+ const { startHub } = await import("./hub-5SKCTVFM.js");
5721
5721
  await startHub(
5722
5722
  {
5723
5723
  topic: topic ?? "",
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeTests,
3
3
  runTestsTool
4
- } from "./chunk-TMYJUJIY.js";
4
+ } from "./chunk-4FTOI5FP.js";
5
5
  export {
6
6
  executeTests,
7
7
  runTestsTool
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-R5XH32QG.js";
5
+ } from "./chunk-3LYM62CK.js";
6
6
  export {
7
7
  executeTests,
8
8
  runTestsTool
@@ -15,7 +15,7 @@ import {
15
15
  hadPreviousWriteToolCalls,
16
16
  loadDevState,
17
17
  setupProxy
18
- } from "./chunk-IP7FPI3C.js";
18
+ } from "./chunk-6LRI6VU5.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-BSO3S6AN.js";
36
+ } from "./chunk-IOBYDSAC.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-R5XH32QG.js";
55
+ } from "./chunk-3LYM62CK.js";
56
56
 
57
57
  // src/web/server.ts
58
58
  import express from "express";
@@ -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-RZTULQ3R.js");
1609
+ const { executeTests } = await import("./run-tests-G4WGBJGQ.js");
1610
1610
  const argStr = args.join(" ").trim();
1611
1611
  let testArgs = {};
1612
1612
  if (argStr) {
@@ -4,11 +4,11 @@ import {
4
4
  getDangerLevel,
5
5
  googleSearchContext,
6
6
  truncateOutput
7
- } from "./chunk-BSO3S6AN.js";
7
+ } from "./chunk-IOBYDSAC.js";
8
8
  import "./chunk-4BKXL7SM.js";
9
9
  import {
10
10
  SUBAGENT_ALLOWED_TOOLS
11
- } from "./chunk-R5XH32QG.js";
11
+ } from "./chunk-3LYM62CK.js";
12
12
 
13
13
  // src/hub/task-orchestrator.ts
14
14
  import { createInterface } from "readline";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.46",
3
+ "version": "0.4.48",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",