@pentoshi/clai 0.13.0 โ†’ 1.0.1

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 (77) hide show
  1. package/bin/clai.mjs +25 -0
  2. package/dist/agent/runner.d.ts +38 -1
  3. package/dist/agent/runner.js +472 -31
  4. package/dist/agent/runner.js.map +1 -1
  5. package/dist/commands/update.js +1 -1
  6. package/dist/commands/update.js.map +1 -1
  7. package/dist/llm/anthropic.js +31 -12
  8. package/dist/llm/anthropic.js.map +1 -1
  9. package/dist/llm/capabilities.d.ts +13 -0
  10. package/dist/llm/capabilities.js +107 -24
  11. package/dist/llm/capabilities.js.map +1 -1
  12. package/dist/llm/gemini.js +17 -4
  13. package/dist/llm/gemini.js.map +1 -1
  14. package/dist/llm/http.d.ts +12 -1
  15. package/dist/llm/http.js +50 -25
  16. package/dist/llm/http.js.map +1 -1
  17. package/dist/llm/ollama.js +16 -8
  18. package/dist/llm/ollama.js.map +1 -1
  19. package/dist/modes/agent.d.ts +2 -1
  20. package/dist/modes/agent.js.map +1 -1
  21. package/dist/modes/ask.d.ts +2 -1
  22. package/dist/modes/ask.js +5 -1
  23. package/dist/modes/ask.js.map +1 -1
  24. package/dist/os/cwd.d.ts +30 -0
  25. package/dist/os/cwd.js +76 -0
  26. package/dist/os/cwd.js.map +1 -0
  27. package/dist/os/detect.js +2 -1
  28. package/dist/os/detect.js.map +1 -1
  29. package/dist/prompts/index.d.ts +1 -1
  30. package/dist/prompts/index.js +66 -21
  31. package/dist/prompts/index.js.map +1 -1
  32. package/dist/repl.d.ts +10 -0
  33. package/dist/repl.js +260 -28
  34. package/dist/repl.js.map +1 -1
  35. package/dist/safety/classifier.js +121 -26
  36. package/dist/safety/classifier.js.map +1 -1
  37. package/dist/safety/patterns.d.ts +26 -0
  38. package/dist/safety/patterns.js +167 -0
  39. package/dist/safety/patterns.js.map +1 -1
  40. package/dist/store/config.js +2 -1
  41. package/dist/store/config.js.map +1 -1
  42. package/dist/store/history.js +19 -5
  43. package/dist/store/history.js.map +1 -1
  44. package/dist/store/plan.d.ts +43 -0
  45. package/dist/store/plan.js +201 -0
  46. package/dist/store/plan.js.map +1 -0
  47. package/dist/store/project.js +3 -2
  48. package/dist/store/project.js.map +1 -1
  49. package/dist/tools/capabilities.js +6 -1
  50. package/dist/tools/capabilities.js.map +1 -1
  51. package/dist/tools/fs.js +3 -2
  52. package/dist/tools/fs.js.map +1 -1
  53. package/dist/tools/image.d.ts +13 -0
  54. package/dist/tools/image.js +81 -0
  55. package/dist/tools/image.js.map +1 -0
  56. package/dist/tools/jobs.js +2 -1
  57. package/dist/tools/jobs.js.map +1 -1
  58. package/dist/tools/pdf.d.ts +18 -0
  59. package/dist/tools/pdf.js +200 -0
  60. package/dist/tools/pdf.js.map +1 -0
  61. package/dist/tools/registry.js +79 -7
  62. package/dist/tools/registry.js.map +1 -1
  63. package/dist/tools/shell.js +3 -2
  64. package/dist/tools/shell.js.map +1 -1
  65. package/dist/types.d.ts +16 -0
  66. package/dist/ui/keys.d.ts +1 -0
  67. package/dist/ui/keys.js +4 -0
  68. package/dist/ui/keys.js.map +1 -1
  69. package/dist/ui/mentions.d.ts +32 -1
  70. package/dist/ui/mentions.js +304 -27
  71. package/dist/ui/mentions.js.map +1 -1
  72. package/dist/ui/output-pane.js +11 -2
  73. package/dist/ui/output-pane.js.map +1 -1
  74. package/dist/ui/plan-pane.d.ts +19 -0
  75. package/dist/ui/plan-pane.js +101 -0
  76. package/dist/ui/plan-pane.js.map +1 -0
  77. package/package.json +4 -1
@@ -0,0 +1,101 @@
1
+ import chalk from "chalk";
2
+ const CHECKBOX = {
3
+ pending: "[ ]",
4
+ in_progress: "[~]",
5
+ done: "[x]",
6
+ failed: "[!]",
7
+ skipped: "[-]",
8
+ };
9
+ const STATE_COLOR = {
10
+ pending: chalk.gray,
11
+ in_progress: chalk.cyan,
12
+ done: chalk.green,
13
+ failed: chalk.red,
14
+ skipped: chalk.dim,
15
+ };
16
+ function renderTaskLine(task, index) {
17
+ const color = STATE_COLOR[task.state];
18
+ const box = color(CHECKBOX[task.state]);
19
+ const num = chalk.dim(`${index + 1}.`);
20
+ const title = task.state === "done" ? chalk.dim(task.title) : task.title;
21
+ const note = task.note ? chalk.dim(` โ€” ${task.note}`) : "";
22
+ return ` ${box} ${num} ${title}${note}`;
23
+ }
24
+ /**
25
+ * Compact inline checklist shown after the plan is created and as tasks are
26
+ * marked done. Always safe to print (no width assumptions).
27
+ */
28
+ export function renderPlanChecklist(plan) {
29
+ const done = plan.tasks.filter((t) => t.state === "done").length;
30
+ const total = plan.tasks.length;
31
+ const lines = [];
32
+ lines.push(chalk.bold(` ๐Ÿ“‹ ${plan.goal}`) +
33
+ chalk.dim(` [${done}/${total}]`));
34
+ plan.tasks.forEach((task, i) => lines.push(renderTaskLine(task, i)));
35
+ return lines.join("\n");
36
+ }
37
+ /**
38
+ * Full plan body for the Ctrl+P pager / `/plan` command. Includes the goal,
39
+ * the comprehensive detail, and the checklist with states.
40
+ */
41
+ export function renderPlanDocument(plan) {
42
+ const done = plan.tasks.filter((t) => t.state === "done").length;
43
+ const total = plan.tasks.length;
44
+ const lines = [];
45
+ lines.push(chalk.bold.underline(`Plan: ${plan.goal}`));
46
+ lines.push(chalk.dim(`kind: ${plan.kind} ยท status: ${plan.status} ยท progress: ${done}/${total} ยท updated: ${plan.updatedAt.replace("T", " ").slice(0, 19)}`));
47
+ lines.push("");
48
+ if (plan.detail.trim()) {
49
+ lines.push(chalk.bold("Approach"));
50
+ for (const line of plan.detail.split(/\r?\n/)) {
51
+ lines.push(` ${line}`);
52
+ }
53
+ lines.push("");
54
+ }
55
+ lines.push(chalk.bold("Tasks"));
56
+ plan.tasks.forEach((task, i) => lines.push(renderTaskLine(task, i)));
57
+ lines.push("");
58
+ lines.push(chalk.dim(plan.status === "approved" || plan.status === "in_progress"
59
+ ? "Approved. The agent is following this plan; tasks are marked as they complete."
60
+ : "Type /implement to approve and have the agent execute this plan, or refine it with another message."));
61
+ return lines.join("\n");
62
+ }
63
+ /**
64
+ * Right-aligned side pane for wide terminals (Claude-Code style). Returns
65
+ * undefined when the terminal is too narrow; callers fall back to the inline
66
+ * checklist. The pane is a self-contained block the caller prints; we do not
67
+ * try to anchor it to the right column across redraws (that fights the
68
+ * streaming output), instead we render a clearly delimited panel.
69
+ */
70
+ export function renderPlanSidePane(plan, columns) {
71
+ const PANE_WIDTH = 34;
72
+ if (columns < PANE_WIDTH + 24)
73
+ return undefined; // not enough room
74
+ const done = plan.tasks.filter((t) => t.state === "done").length;
75
+ const total = plan.tasks.length;
76
+ const inner = PANE_WIDTH - 2;
77
+ const top = "โ•ญ" + "โ”€".repeat(inner) + "โ•ฎ";
78
+ const bottom = "โ•ฐ" + "โ”€".repeat(inner) + "โ•ฏ";
79
+ const rows = [top];
80
+ const header = fit(`Plan [${done}/${total}]`, inner - 2);
81
+ rows.push("โ”‚ " + chalk.bold(header.padEnd(inner - 2)) + " โ”‚");
82
+ rows.push("โ”‚" + " ".repeat(inner) + "โ”‚");
83
+ plan.tasks.forEach((task) => {
84
+ const color = STATE_COLOR[task.state];
85
+ const box = CHECKBOX[task.state];
86
+ const text = fit(`${box} ${task.title}`, inner - 2);
87
+ rows.push("โ”‚ " + color(text.padEnd(inner - 2)) + " โ”‚");
88
+ });
89
+ rows.push(bottom);
90
+ return rows.join("\n");
91
+ }
92
+ function fit(text, width) {
93
+ if (width <= 0)
94
+ return "";
95
+ if (text.length <= width)
96
+ return text;
97
+ if (width === 1)
98
+ return "โ€ฆ";
99
+ return text.slice(0, width - 1) + "โ€ฆ";
100
+ }
101
+ //# sourceMappingURL=plan-pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-pane.js","sourceRoot":"","sources":["../../src/ui/plan-pane.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pentoshi/clai",
3
- "version": "0.13.0",
3
+ "version": "1.0.1",
4
4
  "description": "A fast, cross-platform AI CLI assistant with ask and agent modes for shell tasks, file operations, and cybersecurity workflows.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -54,6 +54,9 @@
54
54
  "optionalDependencies": {
55
55
  "@napi-rs/keyring": "^1.3.0"
56
56
  },
57
+ "overrides": {
58
+ "encoding-sniffer": "^1.0.2"
59
+ },
57
60
  "devDependencies": {
58
61
  "@types/node": "^25.6.0",
59
62
  "fast-check": "^4.3.0",