jinzd-ai-cli 0.4.87 → 0.4.89

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/dist/index.js CHANGED
@@ -30,10 +30,10 @@ import {
30
30
  saveDevState,
31
31
  sessionHasMeaningfulContent,
32
32
  setupProxy
33
- } from "./chunk-3DGNN4RM.js";
33
+ } from "./chunk-FVRLRIKC.js";
34
34
  import {
35
35
  ConfigManager
36
- } from "./chunk-Y75YPB5F.js";
36
+ } from "./chunk-3O3U3L5W.js";
37
37
  import {
38
38
  ToolExecutor,
39
39
  ToolRegistry,
@@ -49,16 +49,25 @@ import {
49
49
  spawnAgentContext,
50
50
  theme,
51
51
  undoStack
52
- } from "./chunk-SP6RFAKW.js";
52
+ } from "./chunk-ABPT6XCI.js";
53
53
  import "./chunk-2ZD3YTVM.js";
54
54
  import {
55
55
  fileCheckpoints
56
56
  } from "./chunk-4BKXL7SM.js";
57
+ import {
58
+ DEFAULT_PATTERNS,
59
+ buildChatIndex,
60
+ clearChatIndex,
61
+ getChatIndexStatus,
62
+ scanString,
63
+ searchChatMemory
64
+ } from "./chunk-ANYYM4CF.js";
57
65
  import "./chunk-NHNWUBXB.js";
58
- import "./chunk-CQQQFNND.js";
66
+ import "./chunk-KJLJPUY2.js";
59
67
  import "./chunk-6VRJGH25.js";
60
- import "./chunk-PFYAAX2S.js";
61
- import "./chunk-TFLBQRQM.js";
68
+ import "./chunk-2DXY7UGF.js";
69
+ import "./chunk-KHYD3WXE.js";
70
+ import "./chunk-TKYNTXKB.js";
62
71
  import {
63
72
  AGENTIC_BEHAVIOR_GUIDELINE,
64
73
  AUTHOR,
@@ -80,7 +89,7 @@ import {
80
89
  SKILLS_DIR_NAME,
81
90
  VERSION,
82
91
  buildUserIdentityPrompt
83
- } from "./chunk-BAOIXQHD.js";
92
+ } from "./chunk-E7YC4GWV.js";
84
93
 
85
94
  // src/index.ts
86
95
  import { program } from "commander";
@@ -980,6 +989,7 @@ function createDefaultCommands() {
980
989
  " /fork [checkpoint] - Fork session from checkpoint or current position",
981
990
  " /branch [list|new|switch|delete|rename|diff|cherry-pick] - Manage conversation branches (fork tree, cross-branch picks)",
982
991
  " /index [status|rebuild|clear|semantic-rebuild|semantic-clear] - Symbol + semantic index (find_symbol / search_code)",
992
+ " /security [status|scan|on|off] - Sensitive-data redaction status & session scan",
983
993
  " /yolo [on|off] - Toggle session auto-approve (skip confirmations)",
984
994
  " /exit - Exit"
985
995
  ] : [];
@@ -2467,7 +2477,7 @@ ${hint}` : "")
2467
2477
  const root = process.cwd();
2468
2478
  const { loadIndex, clearIndex } = await import("./store-S24SPPDZ.js");
2469
2479
  const { indexProject } = await import("./indexer-C7QYYHSZ.js");
2470
- const { loadVectorStore, clearVectorStore } = await import("./vector-store-YTVHACBV.js");
2480
+ const { loadVectorStore, clearVectorStore } = await import("./vector-store-QARQ2P6D.js");
2471
2481
  if (sub === "status") {
2472
2482
  const idx = loadIndex(root);
2473
2483
  const vec = loadVectorStore(root);
@@ -2526,7 +2536,7 @@ ${hint}` : "")
2526
2536
  }
2527
2537
  console.log(theme.dim(` Building semantic index for ${idx.symbolCount} symbols\u2026`));
2528
2538
  console.log(theme.dim(" (First run downloads ~117 MB embedding model to ~/.aicli/models/)"));
2529
- const { rebuildSemanticIndex } = await import("./semantic-ICJ536BG.js");
2539
+ const { rebuildSemanticIndex } = await import("./semantic-YDRPPVWK.js");
2530
2540
  try {
2531
2541
  const stats = await rebuildSemanticIndex(root, {
2532
2542
  onProgress: (done, total) => {
@@ -2592,7 +2602,7 @@ ${hint}` : "")
2592
2602
  usage: "/test [command|filter]",
2593
2603
  async execute(args, ctx) {
2594
2604
  try {
2595
- const { executeTests } = await import("./run-tests-7PTRRO4D.js");
2605
+ const { executeTests } = await import("./run-tests-5TO5G3YH.js");
2596
2606
  const argStr = args.join(" ").trim();
2597
2607
  let testArgs = {};
2598
2608
  if (argStr) {
@@ -2747,11 +2757,92 @@ ${hint}` : "")
2747
2757
  // ── /memory ────────────────────────────────────────────────────────────────
2748
2758
  {
2749
2759
  name: "memory",
2750
- description: "View, add to, or clear persistent memory (memory.md)",
2751
- usage: "/memory [show|add <text>|clear|path]",
2752
- execute(args, ctx) {
2760
+ description: "Persistent memory (memory.md) + chat memory recall index (v0.4.89+)",
2761
+ usage: "/memory [show|add <text>|clear|path|rebuild|refresh|status|recall <query>|index-clear]",
2762
+ async execute(args, ctx) {
2753
2763
  const memoryFile = join2(ctx.config.getConfigDir(), MEMORY_FILE_NAME);
2754
2764
  const sub = args[0] ?? "show";
2765
+ if (sub === "rebuild" || sub === "refresh") {
2766
+ const full = sub === "rebuild";
2767
+ ctx.renderer.printInfo(
2768
+ full ? "\u{1F9E0} Rebuilding chat memory index from scratch (this may take a while on first run \u2014 embedding model ~117 MB)\u2026" : "\u{1F9E0} Refreshing chat memory index (incremental)\u2026"
2769
+ );
2770
+ try {
2771
+ let lastStage = "";
2772
+ const stats = await buildChatIndex({
2773
+ full,
2774
+ onProgress: (p) => {
2775
+ if (p.stage !== lastStage) {
2776
+ lastStage = p.stage;
2777
+ if (p.stage === "embedding" && p.total) {
2778
+ process.stdout.write(theme.dim(` embedding ${p.total} chunk(s)\u2026
2779
+ `));
2780
+ } else if (p.stage !== "done") {
2781
+ process.stdout.write(theme.dim(` ${p.stage}\u2026
2782
+ `));
2783
+ }
2784
+ }
2785
+ }
2786
+ });
2787
+ ctx.renderer.printSuccess(
2788
+ `\u2713 Chat index: ${stats.chunksTotal} chunks (${stats.chunksAdded} new, ${stats.chunksRemoved} removed) across ${stats.sessionsIndexed + stats.sessionsSkipped} sessions (${stats.sessionsIndexed} re-indexed, ${stats.sessionsSkipped} cached) in ${stats.durationMs}ms`
2789
+ );
2790
+ } catch (err) {
2791
+ ctx.renderer.renderError(`Rebuild failed: ${err instanceof Error ? err.message : String(err)}`);
2792
+ }
2793
+ return;
2794
+ }
2795
+ if (sub === "status") {
2796
+ const s = getChatIndexStatus();
2797
+ console.log(theme.heading("\n\u{1F9E0} Chat Memory Index"));
2798
+ if (!s.exists) {
2799
+ console.log(theme.dim(" not built yet \u2014 run /memory rebuild\n"));
2800
+ return;
2801
+ }
2802
+ const mb = (n) => `${(n / 1024 / 1024).toFixed(2)} MB`;
2803
+ console.log(` chunks : ${s.chunks}`);
2804
+ console.log(` sessions : ${s.sessions}`);
2805
+ console.log(` built : ${s.built?.replace("T", " ").slice(0, 19) ?? "-"}`);
2806
+ console.log(` model : ${s.model ?? "-"}`);
2807
+ console.log(` vec file : ${mb(s.vecFileSizeBytes)}`);
2808
+ console.log(` chunks file : ${mb(s.chunksFileSizeBytes)}`);
2809
+ console.log();
2810
+ return;
2811
+ }
2812
+ if (sub === "recall") {
2813
+ const query = args.slice(1).join(" ").trim();
2814
+ if (!query) {
2815
+ ctx.renderer.printInfo("Usage: /memory recall <query>");
2816
+ return;
2817
+ }
2818
+ try {
2819
+ const hits = await searchChatMemory(query, { topK: 5, minScore: 0.2 });
2820
+ if (hits.length === 0) {
2821
+ console.log(theme.warning(` No memories matched "${query}" above score 0.20.`));
2822
+ console.log();
2823
+ return;
2824
+ }
2825
+ console.log(theme.heading(`
2826
+ \u{1F9E0} Memory recall for "${query}" \u2014 ${hits.length} hit(s):
2827
+ `));
2828
+ for (const [i, h] of hits.entries()) {
2829
+ const ts = h.chunk.timestamp.slice(0, 16).replace("T", " ");
2830
+ const title = h.chunk.sessionTitle ?? h.chunk.sessionId.slice(0, 8);
2831
+ console.log(theme.accent(` [${i + 1}] ${ts} \xB7 ${title} \xB7 score ${h.score.toFixed(3)}`));
2832
+ const body = h.chunk.text.length > 400 ? h.chunk.text.slice(0, 400) + "\u2026" : h.chunk.text;
2833
+ console.log(theme.dim(" ") + body.replace(/\n/g, "\n "));
2834
+ console.log();
2835
+ }
2836
+ } catch (err) {
2837
+ ctx.renderer.renderError(`Recall failed: ${err instanceof Error ? err.message : String(err)}`);
2838
+ }
2839
+ return;
2840
+ }
2841
+ if (sub === "index-clear") {
2842
+ clearChatIndex();
2843
+ ctx.renderer.printSuccess("Chat memory index cleared (memory.md untouched).");
2844
+ return;
2845
+ }
2755
2846
  if (sub === "show" || sub === "view") {
2756
2847
  if (!existsSync2(memoryFile)) {
2757
2848
  ctx.renderer.printInfo("Memory is empty (memory.md not found)");
@@ -3031,6 +3122,94 @@ Summary: ${fileMap.size} file(s) \u2014 ${newFiles} new, ${modifiedFiles} modifi
3031
3122
  }
3032
3123
  }
3033
3124
  },
3125
+ {
3126
+ name: "security",
3127
+ description: "Sensitive-data redaction \u2014 status, scan sessions, toggle on/off",
3128
+ usage: "/security [status|scan [--all]|on|off]",
3129
+ async execute(args, ctx) {
3130
+ const sub = (args[0] || "status").toLowerCase();
3131
+ const security = ctx.config.get("security") ?? {
3132
+ redactOnSave: true,
3133
+ redactOnSend: false,
3134
+ mode: "default",
3135
+ customPatterns: []
3136
+ };
3137
+ if (sub === "status") {
3138
+ console.log(theme.heading(" \u{1F6E1} Security / Redaction"));
3139
+ console.log(` redactOnSave : ${security.redactOnSave ? theme.success("on") : theme.warning("off")}`);
3140
+ console.log(` redactOnSend : ${security.redactOnSend ? theme.success("on") : theme.dim("off")}`);
3141
+ console.log(` mode : ${security.mode}`);
3142
+ console.log(` patterns : ${DEFAULT_PATTERNS.length} built-in + ${security.customPatterns?.length ?? 0} custom`);
3143
+ console.log(` last save : ${ctx.sessions.lastRedactionHits} hit(s) redacted`);
3144
+ console.log();
3145
+ console.log(theme.dim(" /security scan \u2014 scan current session for leaks"));
3146
+ console.log(theme.dim(" /security scan --all \u2014 scan all saved sessions"));
3147
+ console.log(theme.dim(" /security on|off \u2014 toggle redactOnSave"));
3148
+ console.log();
3149
+ return;
3150
+ }
3151
+ if (sub === "on" || sub === "off") {
3152
+ ctx.config.set("security", { ...security, redactOnSave: sub === "on" });
3153
+ console.log(theme.success(` \u2713 redactOnSave = ${sub}`));
3154
+ console.log();
3155
+ return;
3156
+ }
3157
+ if (sub === "scan") {
3158
+ const scanAll = args.includes("--all");
3159
+ const opts = { customRegexes: security.customPatterns ?? [] };
3160
+ let totalHits = 0;
3161
+ let filesWithHits = 0;
3162
+ if (scanAll) {
3163
+ const metas = ctx.sessions.listSessions();
3164
+ console.log(theme.info(` Scanning ${metas.length} session(s)\u2026`));
3165
+ const { readFileSync: readFileSync5 } = await import("fs");
3166
+ const { join: join6 } = await import("path");
3167
+ const historyDir = ctx.config.getHistoryDir();
3168
+ for (const m of metas) {
3169
+ try {
3170
+ const content = readFileSync5(join6(historyDir, `${m.id}.json`), "utf-8");
3171
+ const hits2 = scanString(content, opts);
3172
+ if (hits2.length) {
3173
+ filesWithHits++;
3174
+ totalHits += hits2.length;
3175
+ const kinds = [...new Set(hits2.map((h) => h.kind))].join(", ");
3176
+ console.log(` ${theme.warning("\u26A0")} ${m.id.slice(0, 8)}\u2026 ${theme.dim(m.title || "")} \u2014 ${hits2.length} hit(s) [${kinds}]`);
3177
+ }
3178
+ } catch {
3179
+ }
3180
+ }
3181
+ console.log();
3182
+ console.log(
3183
+ totalHits === 0 ? theme.success(` \u2713 No secrets found in ${metas.length} session(s).`) : theme.warning(` Found ${totalHits} hit(s) across ${filesWithHits} session(s). Re-save them with redactOnSave=on to sanitize.`)
3184
+ );
3185
+ console.log();
3186
+ return;
3187
+ }
3188
+ const current = ctx.sessions.current;
3189
+ if (!current) {
3190
+ console.log(theme.warning(" No active session to scan."));
3191
+ console.log();
3192
+ return;
3193
+ }
3194
+ const json = JSON.stringify(current.toJSON());
3195
+ const hits = scanString(json, opts);
3196
+ if (hits.length === 0) {
3197
+ console.log(theme.success(" \u2713 Current session: no secrets detected."));
3198
+ } else {
3199
+ const byKind = /* @__PURE__ */ new Map();
3200
+ for (const h of hits) byKind.set(h.kind, (byKind.get(h.kind) ?? 0) + 1);
3201
+ console.log(theme.warning(` \u26A0 Current session: ${hits.length} hit(s)`));
3202
+ for (const [k, n] of byKind) console.log(` \u2022 ${k}: ${n}`);
3203
+ console.log(theme.dim(" (save the session to replace them with placeholders)"));
3204
+ }
3205
+ console.log();
3206
+ return;
3207
+ }
3208
+ console.log(theme.error(` Unknown subcommand: ${sub}`));
3209
+ console.log(theme.dim(" Usage: /security [status|scan [--all]|on|off]"));
3210
+ console.log();
3211
+ }
3212
+ },
3034
3213
  {
3035
3214
  name: "yolo",
3036
3215
  description: "Toggle session auto-approve (skip all confirmations)",
@@ -4032,6 +4211,12 @@ var Repl = class {
4032
4211
  toolExecutor;
4033
4212
  /** 运行时有效的 system prompt(合并了项目上下文 + 用户配置) */
4034
4213
  activeSystemPrompt;
4214
+ /** v0.4.89: cached chat memory index status, refreshed at startup and after /memory rebuild. */
4215
+ chatMemoryStatus = {
4216
+ exists: false,
4217
+ chunks: 0,
4218
+ sessions: 0
4219
+ };
4035
4220
  /** 当前加载的层级上下文(全局/项目/子目录) */
4036
4221
  contextLayers = [];
4037
4222
  /** 本次会话累计 token 用量 */
@@ -4489,6 +4674,23 @@ You have a maximum of ${effectiveMaxRounds} tool call rounds per conversation tu
4489
4674
  if (memory) stableParts.push(`# Persistent Memory
4490
4675
 
4491
4676
  ${memory.content}`);
4677
+ if (this.chatMemoryStatus.exists && this.chatMemoryStatus.chunks > 0) {
4678
+ stableParts.push(
4679
+ `# Long-term Memory Recall
4680
+
4681
+ You have a semantic index over ${this.chatMemoryStatus.chunks} chunks from ${this.chatMemoryStatus.sessions} past sessions. Call \`recall_memory({ query: "\u2026" })\` whenever:
4682
+ - The user references something that may have been discussed before ("\u4E0A\u6B21", "\u4E4B\u524D", "last time", "remember")
4683
+ - A pronoun/demonstrative is ambiguous ("\u90A3\u4E2A", "it", "that project") and current context doesn't resolve it
4684
+ - The user asks about preferences, decisions, or conventions that might have been established earlier
4685
+ - Continuity across sessions would clearly help (e.g. user returns after days to the same project)
4686
+
4687
+ Do NOT call it for:
4688
+ - Queries fully answerable from the current conversation
4689
+ - Obviously-new topics with no continuity signal
4690
+
4691
+ Prefer recall over asking the user "can you remind me". When a hit is relevant, cite it briefly ("we established last session that\u2026") so the user sees you remembered.`
4692
+ );
4693
+ }
4492
4694
  const devState = loadDevState();
4493
4695
  if (devState) {
4494
4696
  stableParts.push(
@@ -4822,6 +5024,34 @@ Session '${this.resumeSessionId}' not found.
4822
5024
  } catch {
4823
5025
  }
4824
5026
  })();
5027
+ void (async () => {
5028
+ try {
5029
+ const { getChatIndexStatus: getChatIndexStatus2, buildChatIndex: buildChatIndex2 } = await import("./chat-index-W2UZ34ZI.js");
5030
+ const initial = getChatIndexStatus2();
5031
+ this.chatMemoryStatus = {
5032
+ exists: initial.exists,
5033
+ chunks: initial.chunks,
5034
+ sessions: initial.sessions
5035
+ };
5036
+ if (!initial.exists) return;
5037
+ const stats = await buildChatIndex2({ full: false });
5038
+ const after = getChatIndexStatus2();
5039
+ this.chatMemoryStatus = {
5040
+ exists: after.exists,
5041
+ chunks: after.chunks,
5042
+ sessions: after.sessions
5043
+ };
5044
+ if (stats.sessionsIndexed > 0 || stats.chunksRemoved > 0) {
5045
+ process.stdout.write(
5046
+ theme.dim(
5047
+ ` \u{1F9E0} Chat memory refreshed: ${stats.chunksAdded} new \xB7 ${stats.chunksRemoved} removed \xB7 ${stats.chunksTotal} total
5048
+ `
5049
+ )
5050
+ );
5051
+ }
5052
+ } catch {
5053
+ }
5054
+ })();
4825
5055
  const globalMcpServers = this.config.get("mcpServers") ?? {};
4826
5056
  const projectMcpResult = this.loadProjectMcpConfig();
4827
5057
  const projectMcpServers = projectMcpResult?.servers ?? {};
@@ -6485,7 +6715,7 @@ program.command("web").description("Start Web UI server with browser-based chat
6485
6715
  console.error("Error: Invalid port number. Must be between 1 and 65535.");
6486
6716
  process.exit(1);
6487
6717
  }
6488
- const { startWebServer } = await import("./server-TRTN3RVO.js");
6718
+ const { startWebServer } = await import("./server-NG7AEAD5.js");
6489
6719
  await startWebServer({ port, host: options.host });
6490
6720
  });
6491
6721
  program.command("user [action] [username]").description("Manage Web UI users (list | create <name> | delete <name> | reset-password <name> | migrate <name>)").action(async (action, username) => {
@@ -6608,7 +6838,7 @@ program.command("sessions").description("List recent conversation sessions").act
6608
6838
  });
6609
6839
  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) => {
6610
6840
  try {
6611
- const batch = await import("./batch-FNHSLCMV.js");
6841
+ const batch = await import("./batch-UMQYXVKG.js");
6612
6842
  switch (action) {
6613
6843
  case "submit":
6614
6844
  if (!arg) {
@@ -6651,7 +6881,7 @@ program.command("batch <action> [arg] [arg2]").description("Anthropic Message Ba
6651
6881
  }
6652
6882
  });
6653
6883
  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) => {
6654
- const { startMcpServer } = await import("./server-GJRBVTTQ.js");
6884
+ const { startMcpServer } = await import("./server-U2BBLP4Y.js");
6655
6885
  await startMcpServer({
6656
6886
  allowDestructive: !!options.allowDestructive,
6657
6887
  allowOutsideCwd: !!options.allowOutsideCwd,
@@ -6778,7 +7008,7 @@ program.command("hub [topic]").description("Start multi-agent hub (discuss / bra
6778
7008
  }),
6779
7009
  config.get("customProviders")
6780
7010
  );
6781
- const { startHub } = await import("./hub-HEC4GYKR.js");
7011
+ const { startHub } = await import("./hub-4P2BH57W.js");
6782
7012
  await startHub(
6783
7013
  {
6784
7014
  topic: topic ?? "",
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  executeTests,
4
4
  runTestsTool
5
- } from "./chunk-TFLBQRQM.js";
6
- import "./chunk-BAOIXQHD.js";
5
+ } from "./chunk-TKYNTXKB.js";
6
+ import "./chunk-E7YC4GWV.js";
7
7
  export {
8
8
  executeTests,
9
9
  runTestsTool
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  executeTests,
3
3
  runTestsTool
4
- } from "./chunk-AQX3GYRD.js";
4
+ } from "./chunk-4WVXTADR.js";
5
5
  export {
6
6
  executeTests,
7
7
  runTestsTool
@@ -5,9 +5,10 @@ import {
5
5
  pathTokens,
6
6
  rebuildSemanticIndex,
7
7
  semanticSearch
8
- } from "./chunk-CQQQFNND.js";
8
+ } from "./chunk-KJLJPUY2.js";
9
9
  import "./chunk-6VRJGH25.js";
10
- import "./chunk-PFYAAX2S.js";
10
+ import "./chunk-2DXY7UGF.js";
11
+ import "./chunk-KHYD3WXE.js";
11
12
  export {
12
13
  buildEmbeddingText,
13
14
  hasSemanticIndex,
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ AuthManager
4
+ } from "./chunk-BYNY5JPB.js";
2
5
  import {
3
6
  HALLUCINATION_CORRECTION_MESSAGE,
4
7
  McpManager,
@@ -20,10 +23,10 @@ import {
20
23
  persistToolRound,
21
24
  rebuildExtraMessages,
22
25
  setupProxy
23
- } from "./chunk-3DGNN4RM.js";
26
+ } from "./chunk-FVRLRIKC.js";
24
27
  import {
25
28
  ConfigManager
26
- } from "./chunk-Y75YPB5F.js";
29
+ } from "./chunk-3O3U3L5W.js";
27
30
  import {
28
31
  ToolExecutor,
29
32
  ToolRegistry,
@@ -41,14 +44,16 @@ import {
41
44
  spawnAgentContext,
42
45
  truncateOutput,
43
46
  undoStack
44
- } from "./chunk-SP6RFAKW.js";
47
+ } from "./chunk-ABPT6XCI.js";
45
48
  import "./chunk-2ZD3YTVM.js";
46
49
  import "./chunk-4BKXL7SM.js";
50
+ import "./chunk-ANYYM4CF.js";
47
51
  import "./chunk-NHNWUBXB.js";
48
- import "./chunk-CQQQFNND.js";
52
+ import "./chunk-KJLJPUY2.js";
49
53
  import "./chunk-6VRJGH25.js";
50
- import "./chunk-PFYAAX2S.js";
51
- import "./chunk-TFLBQRQM.js";
54
+ import "./chunk-2DXY7UGF.js";
55
+ import "./chunk-KHYD3WXE.js";
56
+ import "./chunk-TKYNTXKB.js";
52
57
  import {
53
58
  AGENTIC_BEHAVIOR_GUIDELINE,
54
59
  AUTHOR,
@@ -67,10 +72,7 @@ import {
67
72
  SKILLS_DIR_NAME,
68
73
  VERSION,
69
74
  buildUserIdentityPrompt
70
- } from "./chunk-BAOIXQHD.js";
71
- import {
72
- AuthManager
73
- } from "./chunk-BYNY5JPB.js";
75
+ } from "./chunk-E7YC4GWV.js";
74
76
 
75
77
  // src/web/server.ts
76
78
  import express from "express";
@@ -1993,7 +1995,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
1993
1995
  const root = process.cwd();
1994
1996
  const { loadIndex, clearIndex } = await import("./store-S24SPPDZ.js");
1995
1997
  const { indexProject } = await import("./indexer-C7QYYHSZ.js");
1996
- const { loadVectorStore, clearVectorStore } = await import("./vector-store-YTVHACBV.js");
1998
+ const { loadVectorStore, clearVectorStore } = await import("./vector-store-QARQ2P6D.js");
1997
1999
  if (sub === "status") {
1998
2000
  const idx = loadIndex(root);
1999
2001
  const vec = loadVectorStore(root);
@@ -2042,7 +2044,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
2042
2044
  message: `Building semantic index for ${idx.symbolCount} symbols\u2026 (first run downloads ~117 MB model)`
2043
2045
  });
2044
2046
  try {
2045
- const { rebuildSemanticIndex } = await import("./semantic-ICJ536BG.js");
2047
+ const { rebuildSemanticIndex } = await import("./semantic-YDRPPVWK.js");
2046
2048
  const stats = await rebuildSemanticIndex(root);
2047
2049
  const first = stats.modelFirstLoadMs ? ` (model load+first batch ${stats.modelFirstLoadMs}ms)` : "";
2048
2050
  this.send({
@@ -2229,7 +2231,7 @@ ${undoResults.map((r) => ` \u2022 ${r}`).join("\n")}` });
2229
2231
  case "test": {
2230
2232
  this.send({ type: "info", message: "\u{1F9EA} Running tests..." });
2231
2233
  try {
2232
- const { executeTests } = await import("./run-tests-7PTRRO4D.js");
2234
+ const { executeTests } = await import("./run-tests-5TO5G3YH.js");
2233
2235
  const argStr = args.join(" ").trim();
2234
2236
  let testArgs = {};
2235
2237
  if (argStr) {
@@ -3,17 +3,19 @@ import {
3
3
  ToolRegistry,
4
4
  getDangerLevel,
5
5
  schemaToJsonSchema
6
- } from "./chunk-SP6RFAKW.js";
6
+ } from "./chunk-ABPT6XCI.js";
7
7
  import "./chunk-2ZD3YTVM.js";
8
8
  import "./chunk-4BKXL7SM.js";
9
+ import "./chunk-ANYYM4CF.js";
9
10
  import "./chunk-NHNWUBXB.js";
10
- import "./chunk-CQQQFNND.js";
11
+ import "./chunk-KJLJPUY2.js";
11
12
  import "./chunk-6VRJGH25.js";
12
- import "./chunk-PFYAAX2S.js";
13
- import "./chunk-TFLBQRQM.js";
13
+ import "./chunk-2DXY7UGF.js";
14
+ import "./chunk-KHYD3WXE.js";
15
+ import "./chunk-TKYNTXKB.js";
14
16
  import {
15
17
  VERSION
16
- } from "./chunk-BAOIXQHD.js";
18
+ } from "./chunk-E7YC4GWV.js";
17
19
 
18
20
  // src/mcp/server.ts
19
21
  import { createInterface } from "readline";
@@ -4,17 +4,19 @@ import {
4
4
  getDangerLevel,
5
5
  googleSearchContext,
6
6
  truncateOutput
7
- } from "./chunk-SP6RFAKW.js";
7
+ } from "./chunk-ABPT6XCI.js";
8
8
  import "./chunk-2ZD3YTVM.js";
9
9
  import "./chunk-4BKXL7SM.js";
10
+ import "./chunk-ANYYM4CF.js";
10
11
  import "./chunk-NHNWUBXB.js";
11
- import "./chunk-CQQQFNND.js";
12
+ import "./chunk-KJLJPUY2.js";
12
13
  import "./chunk-6VRJGH25.js";
13
- import "./chunk-PFYAAX2S.js";
14
- import "./chunk-TFLBQRQM.js";
14
+ import "./chunk-2DXY7UGF.js";
15
+ import "./chunk-KHYD3WXE.js";
16
+ import "./chunk-TKYNTXKB.js";
15
17
  import {
16
18
  SUBAGENT_ALLOWED_TOOLS
17
- } from "./chunk-BAOIXQHD.js";
19
+ } from "./chunk-E7YC4GWV.js";
18
20
 
19
21
  // src/hub/task-orchestrator.ts
20
22
  import { createInterface } from "readline";
@@ -5,7 +5,8 @@ import {
5
5
  loadVectorStore,
6
6
  saveVectorStore,
7
7
  searchVectorStore
8
- } from "./chunk-PFYAAX2S.js";
8
+ } from "./chunk-2DXY7UGF.js";
9
+ import "./chunk-KHYD3WXE.js";
9
10
  export {
10
11
  clearVectorStore,
11
12
  emptyVectorStore,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.87",
3
+ "version": "0.4.89",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",