jinzd-ai-cli 0.4.284 → 0.4.285

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.
Files changed (33) hide show
  1. package/README.md +3 -3
  2. package/README.zh-CN.md +3 -3
  3. package/dist/{batch-DA7VA35X.js → batch-R563COWE.js} +2 -2
  4. package/dist/{chunk-OZKTHQWA.js → chunk-3LFB4YZA.js} +3 -3
  5. package/dist/{chunk-BXG44VIQ.js → chunk-5CC5HQFW.js} +1 -1
  6. package/dist/{chunk-PWLQU43X.js → chunk-6G7Y2VG4.js} +1 -1
  7. package/dist/{chunk-PPPSK4MA.js → chunk-AOF4K5N7.js} +1 -1
  8. package/dist/{chunk-XSBGCZOP.js → chunk-DV5D7RXZ.js} +1 -1
  9. package/dist/{chunk-Z23JYUOL.js → chunk-HBAYEVVJ.js} +69 -3
  10. package/dist/{chunk-I4FJGILK.js → chunk-KLBMKONV.js} +10 -10
  11. package/dist/{chunk-3DRSBZQ7.js → chunk-LF6SPK7I.js} +1 -1
  12. package/dist/{chunk-RV2YOTEQ.js → chunk-PHK7QQH3.js} +1 -1
  13. package/dist/{chunk-VFVN5CWA.js → chunk-UW33KJW5.js} +1 -1
  14. package/dist/{chunk-QKGKWCXE.js → chunk-VLM4SKKX.js} +1 -1
  15. package/dist/{chunk-FZ4THGUP.js → chunk-WBF4AOHJ.js} +1 -1
  16. package/dist/{chunk-C4CIIIDT.js → chunk-XGRZA5V6.js} +3 -3
  17. package/dist/{ci-HG2TPYVY.js → ci-E4CYVEOW.js} +4 -4
  18. package/dist/{ci-format-UB7K63UZ.js → ci-format-7XTLOAB5.js} +2 -2
  19. package/dist/{constants-3DDHA3LT.js → constants-L7D3IXWV.js} +1 -1
  20. package/dist/{doctor-cli-ISFDY7LZ.js → doctor-cli-JLROIGLO.js} +4 -4
  21. package/dist/electron-server.js +117 -69
  22. package/dist/{hub-MP2CNDMZ.js → hub-7UDPLWBI.js} +1 -1
  23. package/dist/index.js +76 -21
  24. package/dist/{persistent-memory-AMDRRB5E.js → persistent-memory-CNJOZ7U2.js} +2 -2
  25. package/dist/{persistent-memory-J2OVPLWI.js → persistent-memory-DRXWYBJS.js} +2 -2
  26. package/dist/{pr-BREZ3DJX.js → pr-3W5547IS.js} +4 -4
  27. package/dist/{run-tests-DPO23PKA.js → run-tests-7B7N4YAE.js} +2 -2
  28. package/dist/{run-tests-XHLV74GU.js → run-tests-LP2CI4MT.js} +2 -2
  29. package/dist/{server-KK7DIV3J.js → server-NIPB62XP.js} +5 -5
  30. package/dist/{server-W2VIUKTQ.js → server-YBMWBJVG.js} +70 -74
  31. package/dist/{task-orchestrator-YM5IMIKL.js → task-orchestrator-RYG4ZTDO.js} +5 -5
  32. package/dist/{usage-TXPZY7EB.js → usage-YDVLCZDU.js} +2 -2
  33. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ToolRegistry
4
- } from "./chunk-I4FJGILK.js";
4
+ } from "./chunk-KLBMKONV.js";
5
5
  import "./chunk-GHWZVPUV.js";
6
- import "./chunk-PPPSK4MA.js";
6
+ import "./chunk-AOF4K5N7.js";
7
7
  import "./chunk-4DEMGCK4.js";
8
8
  import "./chunk-UUSRWSSX.js";
9
9
  import "./chunk-CKH4KQ4E.js";
@@ -14,7 +14,7 @@ import "./chunk-NYNSYLFY.js";
14
14
  import "./chunk-3FEZSLGI.js";
15
15
  import {
16
16
  runTool
17
- } from "./chunk-BXG44VIQ.js";
17
+ } from "./chunk-5CC5HQFW.js";
18
18
  import {
19
19
  getDangerLevel,
20
20
  schemaToJsonSchema
@@ -23,10 +23,10 @@ import "./chunk-TU3L3PW7.js";
23
23
  import "./chunk-HOSJZMQS.js";
24
24
  import "./chunk-IW3Q7AE5.js";
25
25
  import "./chunk-4BKXL7SM.js";
26
- import "./chunk-PWLQU43X.js";
26
+ import "./chunk-6G7Y2VG4.js";
27
27
  import {
28
28
  VERSION
29
- } from "./chunk-RV2YOTEQ.js";
29
+ } from "./chunk-PHK7QQH3.js";
30
30
 
31
31
  // src/mcp/server.ts
32
32
  import { createInterface } from "readline";
@@ -16,6 +16,8 @@ import {
16
16
  AUTO_COMPACT_INSTRUCTION,
17
17
  McpManager,
18
18
  SkillManager,
19
+ agentStopMessage,
20
+ agentUnknownMessage,
19
21
  applyPlanCommand,
20
22
  applyProfileCommand,
21
23
  applyThinkCommand,
@@ -39,11 +41,14 @@ import {
39
41
  estimateConversationTokens,
40
42
  evaluateContextPressure,
41
43
  filterMemoryEntries,
44
+ formatAgentList,
45
+ formatAgentRuns,
42
46
  formatCheckpointList,
43
47
  formatForkReport,
44
48
  formatRewindReport,
45
49
  formatSessionSummaryLine,
46
50
  loadDevState,
51
+ parseAgentCommand,
47
52
  parseBatchDeleteArgs,
48
53
  parseCheckpointCommand,
49
54
  parseCleanArgs,
@@ -53,6 +58,7 @@ import {
53
58
  parseRewindArgs,
54
59
  parseRouteCommand,
55
60
  parseSessionListArgs,
61
+ parseSkillCommand,
56
62
  persistToolRound,
57
63
  readGitDiff,
58
64
  rebuildDoneMessage,
@@ -71,9 +77,10 @@ import {
71
77
  sessionListNeedsFileSize,
72
78
  sessionListSummary,
73
79
  setupProxy,
80
+ skillHistoryNote,
74
81
  snapshotFile,
75
82
  stripRoutingTags
76
- } from "./chunk-Z23JYUOL.js";
83
+ } from "./chunk-HBAYEVVJ.js";
77
84
  import {
78
85
  CNY_PER_USD,
79
86
  CostTracker,
@@ -115,7 +122,7 @@ import {
115
122
  spawnAgentContext,
116
123
  truncateOutput,
117
124
  undoStack
118
- } from "./chunk-I4FJGILK.js";
125
+ } from "./chunk-KLBMKONV.js";
119
126
  import {
120
127
  buildReviewPrompt,
121
128
  buildSecurityReviewPrompt
@@ -142,7 +149,7 @@ import {
142
149
  restoreMemoryEntries,
143
150
  updateMemoryApproval,
144
151
  updateMemoryEntry
145
- } from "./chunk-PPPSK4MA.js";
152
+ } from "./chunk-AOF4K5N7.js";
146
153
  import "./chunk-4DEMGCK4.js";
147
154
  import "./chunk-UUSRWSSX.js";
148
155
  import "./chunk-CKH4KQ4E.js";
@@ -161,7 +168,7 @@ import {
161
168
  buildDoctorReport,
162
169
  formatDoctorReport,
163
170
  loadContextFiles
164
- } from "./chunk-C4CIIIDT.js";
171
+ } from "./chunk-XGRZA5V6.js";
165
172
  import {
166
173
  describePlugin,
167
174
  getActivePluginAssets,
@@ -176,13 +183,13 @@ import {
176
183
  runTool,
177
184
  setPluginEnabled,
178
185
  trustPlugin
179
- } from "./chunk-BXG44VIQ.js";
186
+ } from "./chunk-5CC5HQFW.js";
180
187
  import {
181
188
  ProviderRegistry
182
189
  } from "./chunk-UGY5SVNX.js";
183
190
  import {
184
191
  ConfigManager
185
- } from "./chunk-XSBGCZOP.js";
192
+ } from "./chunk-DV5D7RXZ.js";
186
193
  import {
187
194
  CONTENT_ONLY_STREAM_REMINDER,
188
195
  TEE_FINAL_USER_NUDGE,
@@ -212,7 +219,7 @@ import {
212
219
  maskConfigSecrets
213
220
  } from "./chunk-XNFIYS7G.js";
214
221
  import "./chunk-4BKXL7SM.js";
215
- import "./chunk-PWLQU43X.js";
222
+ import "./chunk-6G7Y2VG4.js";
216
223
  import {
217
224
  AGENTIC_BEHAVIOR_GUIDELINE,
218
225
  AUTHOR,
@@ -228,7 +235,7 @@ import {
228
235
  SKILLS_DIR_NAME,
229
236
  VERSION,
230
237
  buildUserIdentityPrompt
231
- } from "./chunk-RV2YOTEQ.js";
238
+ } from "./chunk-PHK7QQH3.js";
232
239
 
233
240
  // src/web/server.ts
234
241
  import express from "express";
@@ -986,7 +993,7 @@ Cache: write=${cacheCreate} read=${cacheRead}` : "";
986
993
  Cost: ${formatCost(cost)}` : "";
987
994
  let memoryLine = "";
988
995
  try {
989
- const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-J2OVPLWI.js");
996
+ const { countPendingMemories: countPendingMemories2 } = await import("./persistent-memory-DRXWYBJS.js");
990
997
  const pending = countPendingMemories2(ctx.config.getConfigDir());
991
998
  if (pending > 0) memoryLine = `
992
999
  Memory: \u26A0 ${pending} pending approval \u2014 see the Memory panel or /memory`;
@@ -1740,14 +1747,14 @@ async function handleMcp(_args, ctx) {
1740
1747
  ctx.send({ type: "info", message: lines.join("\n") });
1741
1748
  }
1742
1749
  async function handleSkill(args, ctx) {
1743
- const sub = args[0];
1744
1750
  if (!ctx.skillManager) {
1745
1751
  ctx.send({ type: "error", message: "Skill system not available." });
1746
1752
  return;
1747
1753
  }
1748
- if (!sub || sub === "list") {
1754
+ const intent = parseSkillCommand(args);
1755
+ const active = ctx.skillManager.getActive();
1756
+ if (intent.kind === "list") {
1749
1757
  const skills = ctx.skillManager.listSkills();
1750
- const active = ctx.skillManager.getActive();
1751
1758
  if (skills.length === 0) {
1752
1759
  ctx.send({ type: "info", message: "No skills available. Add .md files to ~/.aicli/skills/" });
1753
1760
  } else {
@@ -1761,29 +1768,45 @@ ${lines.join("\n")}` });
1761
1768
  }
1762
1769
  return;
1763
1770
  }
1764
- if (sub === "off") {
1765
- ctx.skillManager.deactivate();
1766
- ctx.send({ type: "info", message: "\u{1F50C} Skill deactivated." });
1767
- ctx.sendToolsList();
1768
- ctx.sendStatus();
1769
- return;
1770
- }
1771
- if (sub === "reload") {
1771
+ if (intent.kind === "reload") {
1772
1772
  ctx.skillManager.loadSkills(getActivePluginAssets(ctx.config.getConfigDir()).skillDirs);
1773
1773
  ctx.send({ type: "info", message: `\u{1F504} Reloaded ${ctx.skillManager.listSkills().length} skill(s).` });
1774
1774
  ctx.sendToolsList();
1775
1775
  return;
1776
1776
  }
1777
- const activated = ctx.skillManager.activate(sub);
1778
- if (activated) {
1779
- ctx.send({ type: "info", message: `\u2705 Skill activated: ${activated.meta.name}
1780
- ${activated.meta.description || ""}` });
1777
+ const note = skillHistoryNote(
1778
+ active?.meta.name ?? "(none)",
1779
+ intent.kind === "deactivate" ? "(none)" : intent.name,
1780
+ ctx.sessions.current?.messages.length ?? 0
1781
+ );
1782
+ if (intent.kind === "deactivate") {
1783
+ if (!active) {
1784
+ ctx.send({ type: "info", message: "No skill is currently active." });
1785
+ return;
1786
+ }
1787
+ ctx.skillManager.deactivate();
1788
+ ctx.send({ type: "info", message: note ? `\u{1F50C} Skill deactivated.
1789
+ ${note}` : "\u{1F50C} Skill deactivated." });
1781
1790
  ctx.sendToolsList();
1782
1791
  ctx.sendStatus();
1783
- } else {
1792
+ return;
1793
+ }
1794
+ if (active?.meta.name === intent.name) {
1795
+ ctx.send({ type: "info", message: `Skill '${intent.name}' is already active.` });
1796
+ return;
1797
+ }
1798
+ const activated = ctx.skillManager.activate(intent.name);
1799
+ if (!activated) {
1784
1800
  const available = ctx.skillManager.listSkills().map((s) => s.meta.name).join(", ");
1785
- ctx.send({ type: "error", message: `Skill "${sub}" not found. Available: ${available}` });
1801
+ ctx.send({ type: "error", message: `Skill "${intent.name}" not found. Available: ${available}` });
1802
+ return;
1786
1803
  }
1804
+ const head = `\u2705 Skill activated: ${activated.meta.name}
1805
+ ${activated.meta.description || ""}`;
1806
+ ctx.send({ type: "info", message: note ? `${head}
1807
+ ${note}` : head });
1808
+ ctx.sendToolsList();
1809
+ ctx.sendStatus();
1787
1810
  }
1788
1811
  async function handleCommands(_args, ctx) {
1789
1812
  const configDir = ctx.config.getConfigDir();
@@ -1894,7 +1917,7 @@ async function handleTest(args, ctx) {
1894
1917
  const isCommand = argStr.includes(" ") || /^(mvn|gradle|npm|pytest|cargo|go)\b/.test(argStr);
1895
1918
  testArgs = isCommand ? { command: argStr } : { filter: argStr };
1896
1919
  }
1897
- const runTests = ctx.runTests ?? (await import("./run-tests-DPO23PKA.js")).executeTests;
1920
+ const runTests = ctx.runTests ?? (await import("./run-tests-7B7N4YAE.js")).executeTests;
1898
1921
  const report = await runTests(testArgs);
1899
1922
  ctx.send({ type: "info", message: report });
1900
1923
  } catch (err) {
@@ -2169,7 +2192,7 @@ async function handleMemory(args, ctx) {
2169
2192
  }
2170
2193
  if (intent.kind === "status") {
2171
2194
  const { getChatIndexStatus } = await import("./chat-index-2D5GK2DB.js");
2172
- const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-J2OVPLWI.js");
2195
+ const { listMemoryEntries: listMemoryEntries2, isMemoryExpired: isMemoryExpired2, formatMemoryForPrompt: formatMemoryForPrompt2 } = await import("./persistent-memory-DRXWYBJS.js");
2173
2196
  const memories = listMemoryEntries2(configDir, { includeExpired: true, includeRejected: true });
2174
2197
  const injected = formatMemoryForPrompt2(configDir, process.cwd(), ctx.config.get("memory")?.maxChars);
2175
2198
  const view = buildMemoryStatusView({
@@ -2192,7 +2215,7 @@ async function handleMemory(args, ctx) {
2192
2215
  return;
2193
2216
  }
2194
2217
  if (intent.kind === "recall") {
2195
- const { searchPersistentMemories, touchMemoryReferences } = await import("./persistent-memory-J2OVPLWI.js");
2218
+ const { searchPersistentMemories, touchMemoryReferences } = await import("./persistent-memory-DRXWYBJS.js");
2196
2219
  const { searchChatMemory } = await import("./chat-index-2D5GK2DB.js");
2197
2220
  const persistentHits = searchPersistentMemories(configDir, intent.query, process.cwd(), 3);
2198
2221
  if (persistentHits.length > 0) {
@@ -2313,7 +2336,7 @@ async function handleMemory(args, ctx) {
2313
2336
  ctx.handleMemoryManage(intent.action, args[1], intent.action === "expire" ? args[2] : void 0);
2314
2337
  } else if (intent.kind === "export") {
2315
2338
  if (args[1] === "md") {
2316
- const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-J2OVPLWI.js");
2339
+ const { exportMemoryEntries: exportMemoryEntries2 } = await import("./persistent-memory-DRXWYBJS.js");
2317
2340
  ctx.send({
2318
2341
  type: "export_data",
2319
2342
  format: "md",
@@ -2493,31 +2516,23 @@ async function handleYolo(args, ctx) {
2493
2516
  }
2494
2517
  }
2495
2518
  async function handleAgent(args, ctx) {
2496
- const sub = args[0]?.toLowerCase() ?? "summary";
2497
- if (sub === "list") {
2498
- const agents = listAgentConfigs(ctx.config.getConfigDir());
2499
- const lines = [`Agents (${agents.length})`, ""];
2500
- for (const agent of agents) {
2501
- const active = agent.name === getPreferredAgentName() ? " *" : " ";
2502
- const model = [agent.provider, agent.model].filter(Boolean).join("/") || "inherit";
2503
- lines.push(`${active} ${agent.name} [${agent.source ?? "builtin"}] \u2014 ${agent.description ?? ""}`);
2504
- lines.push(` model: ${model} \xB7 permission: ${agent.permissionProfile ?? "workspace-write"} \xB7 maxRounds: ${agent.maxToolRounds ?? "inherit"}`);
2505
- }
2506
- lines.push("", "Config dirs: ~/.aicli/agents/ and .aicli/agents/");
2507
- ctx.send({ type: "info", message: lines.join("\n") });
2519
+ const configDir = ctx.config.getConfigDir();
2520
+ const intent = parseAgentCommand(args);
2521
+ if (intent.kind === "usage") {
2522
+ ctx.send({ type: "error", message: intent.message });
2508
2523
  return;
2509
2524
  }
2510
- if (sub === "switch") {
2511
- const name = args[1];
2512
- if (!name) {
2513
- ctx.send({ type: "error", message: "Usage: /agent switch <name>" });
2514
- return;
2515
- }
2516
- const agent = resolveAgentConfig(name, ctx.config.getConfigDir());
2525
+ if (intent.kind === "list") {
2526
+ ctx.send({ type: "info", message: formatAgentList(listAgentConfigs(configDir), getPreferredAgentName()).join("\n") });
2527
+ return;
2528
+ }
2529
+ if (intent.kind === "switch") {
2530
+ const agent = resolveAgentConfig(intent.name, configDir);
2517
2531
  if (!agent) {
2518
- const available = listAgentConfigs(ctx.config.getConfigDir()).map((a) => a.name).join(", ");
2519
- ctx.send({ type: "error", message: `Unknown agent: ${name}
2520
- Available: ${available}` });
2532
+ ctx.send({
2533
+ type: "error",
2534
+ message: agentUnknownMessage(intent.name, listAgentConfigs(configDir).map((a) => a.name))
2535
+ });
2521
2536
  return;
2522
2537
  }
2523
2538
  setPreferredAgentName(agent.name);
@@ -2525,31 +2540,12 @@ Available: ${available}` });
2525
2540
  ctx.sendStatus();
2526
2541
  return;
2527
2542
  }
2528
- if (sub === "stop") {
2529
- const target = args[1] ?? "all";
2530
- const count = requestAgentStop(target);
2531
- ctx.send({ type: "info", message: count > 0 ? `Stop requested for ${count} running agent(s).` : "No matching running agents." });
2543
+ if (intent.kind === "stop") {
2544
+ ctx.send({ type: "info", message: agentStopMessage(requestAgentStop(intent.target)) });
2532
2545
  ctx.sendStatus();
2533
2546
  return;
2534
2547
  }
2535
- if (sub === "summary") {
2536
- const runs = listAgentRuns();
2537
- if (runs.length === 0) {
2538
- ctx.send({ type: "info", message: "No sub-agent runs yet." });
2539
- return;
2540
- }
2541
- const lines = [`Recent agent runs (${runs.length})`, ""];
2542
- for (const run of runs.slice(0, 20)) {
2543
- lines.push(`${run.id} ${run.status} ${run.agentName} ${run.startedAt}`);
2544
- lines.push(` task: ${run.task.slice(0, 120)}${run.task.length > 120 ? "..." : ""}`);
2545
- if (run.toolNames.length > 0) lines.push(` tools: ${run.toolNames.join(", ")}`);
2546
- if (run.summary) lines.push(` summary: ${run.summary.slice(0, 180)}${run.summary.length > 180 ? "..." : ""}`);
2547
- if (run.error) lines.push(` error: ${run.error}`);
2548
- }
2549
- ctx.send({ type: "info", message: lines.join("\n") });
2550
- return;
2551
- }
2552
- ctx.send({ type: "error", message: "Usage: /agent list|switch <name>|stop <id|all>|summary" });
2548
+ ctx.send({ type: "info", message: formatAgentRuns(listAgentRuns()).join("\n") });
2553
2549
  }
2554
2550
 
2555
2551
  // src/web/commands/misc-commands.ts
@@ -4,9 +4,9 @@ import {
4
4
  googleSearchContext,
5
5
  isToolCapableProvider,
6
6
  truncateOutput
7
- } from "./chunk-I4FJGILK.js";
7
+ } from "./chunk-KLBMKONV.js";
8
8
  import "./chunk-GHWZVPUV.js";
9
- import "./chunk-PPPSK4MA.js";
9
+ import "./chunk-AOF4K5N7.js";
10
10
  import "./chunk-4DEMGCK4.js";
11
11
  import "./chunk-UUSRWSSX.js";
12
12
  import "./chunk-CKH4KQ4E.js";
@@ -17,7 +17,7 @@ import "./chunk-NYNSYLFY.js";
17
17
  import "./chunk-3FEZSLGI.js";
18
18
  import {
19
19
  runTool
20
- } from "./chunk-BXG44VIQ.js";
20
+ } from "./chunk-5CC5HQFW.js";
21
21
  import {
22
22
  getDangerLevel,
23
23
  runLeanAgentLoop
@@ -28,10 +28,10 @@ import {
28
28
  atomicWriteFileSync
29
29
  } from "./chunk-IW3Q7AE5.js";
30
30
  import "./chunk-4BKXL7SM.js";
31
- import "./chunk-PWLQU43X.js";
31
+ import "./chunk-6G7Y2VG4.js";
32
32
  import {
33
33
  SUBAGENT_ALLOWED_TOOLS
34
- } from "./chunk-RV2YOTEQ.js";
34
+ } from "./chunk-PHK7QQH3.js";
35
35
 
36
36
  // src/hub/task-orchestrator.ts
37
37
  import { createInterface } from "readline";
@@ -8,10 +8,10 @@ import {
8
8
  } from "./chunk-DPTEC6AQ.js";
9
9
  import {
10
10
  ConfigManager
11
- } from "./chunk-XSBGCZOP.js";
11
+ } from "./chunk-DV5D7RXZ.js";
12
12
  import "./chunk-TU3L3PW7.js";
13
13
  import "./chunk-IW3Q7AE5.js";
14
- import "./chunk-RV2YOTEQ.js";
14
+ import "./chunk-PHK7QQH3.js";
15
15
 
16
16
  // src/cli/usage.ts
17
17
  function classifyRowCost(row) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jinzd-ai-cli",
3
- "version": "0.4.284",
3
+ "version": "0.4.285",
4
4
  "description": "Cross-platform REPL-style AI CLI with multi-provider support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",