@autonsh/cli 0.18.0 → 0.19.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 (121) hide show
  1. package/dist/chat.d.ts +1 -1
  2. package/dist/chat.js +177 -119
  3. package/dist/chat.js.map +1 -1
  4. package/dist/completion.d.ts +2 -0
  5. package/dist/completion.js +379 -0
  6. package/dist/completion.js.map +1 -0
  7. package/dist/config-validation.d.ts +10 -0
  8. package/dist/config-validation.js +101 -0
  9. package/dist/config-validation.js.map +1 -0
  10. package/dist/config.d.ts +9 -3
  11. package/dist/config.js +23 -11
  12. package/dist/config.js.map +1 -1
  13. package/dist/doctor.d.ts +18 -0
  14. package/dist/doctor.js +409 -0
  15. package/dist/doctor.js.map +1 -0
  16. package/dist/errors.d.ts +22 -0
  17. package/dist/errors.js +60 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/index.js +62 -64
  20. package/dist/index.js.map +1 -1
  21. package/dist/input.d.ts +43 -0
  22. package/dist/input.js +288 -0
  23. package/dist/input.js.map +1 -0
  24. package/dist/llm/factory.d.ts +5 -0
  25. package/dist/llm/factory.js +54 -0
  26. package/dist/llm/factory.js.map +1 -0
  27. package/dist/llm/index.d.ts +9 -0
  28. package/dist/llm/index.js +11 -0
  29. package/dist/llm/index.js.map +1 -0
  30. package/dist/llm/provider.d.ts +27 -0
  31. package/dist/llm/provider.js +98 -0
  32. package/dist/llm/provider.js.map +1 -0
  33. package/dist/llm/providers/anthropic.d.ts +23 -0
  34. package/dist/llm/providers/anthropic.js +198 -0
  35. package/dist/llm/providers/anthropic.js.map +1 -0
  36. package/dist/llm/providers/google.d.ts +31 -0
  37. package/dist/llm/providers/google.js +190 -0
  38. package/dist/llm/providers/google.js.map +1 -0
  39. package/dist/llm/providers/ollama.d.ts +21 -0
  40. package/dist/llm/providers/ollama.js +157 -0
  41. package/dist/llm/providers/ollama.js.map +1 -0
  42. package/dist/llm/providers/openai-compatible.d.ts +22 -0
  43. package/dist/llm/providers/openai-compatible.js +175 -0
  44. package/dist/llm/providers/openai-compatible.js.map +1 -0
  45. package/dist/llm/providers/openai.d.ts +20 -0
  46. package/dist/llm/providers/openai.js +167 -0
  47. package/dist/llm/providers/openai.js.map +1 -0
  48. package/dist/llm/registry.d.ts +19 -0
  49. package/dist/llm/registry.js +421 -0
  50. package/dist/llm/registry.js.map +1 -0
  51. package/dist/llm/types.d.ts +174 -0
  52. package/dist/llm/types.js +3 -0
  53. package/dist/llm/types.js.map +1 -0
  54. package/dist/login.d.ts +1 -1
  55. package/dist/login.js +14 -14
  56. package/dist/login.js.map +1 -1
  57. package/dist/mcp/client.d.ts +36 -0
  58. package/dist/mcp/client.js +199 -0
  59. package/dist/mcp/client.js.map +1 -0
  60. package/dist/mcp/config.d.ts +10 -0
  61. package/dist/mcp/config.js +43 -0
  62. package/dist/mcp/config.js.map +1 -0
  63. package/dist/mcp/index.d.ts +4 -0
  64. package/dist/mcp/index.js +6 -0
  65. package/dist/mcp/index.js.map +1 -0
  66. package/dist/mcp/types.d.ts +104 -0
  67. package/dist/mcp/types.js +3 -0
  68. package/dist/mcp/types.js.map +1 -0
  69. package/dist/model.d.ts +3 -14
  70. package/dist/model.js +131 -91
  71. package/dist/model.js.map +1 -1
  72. package/dist/ollama.d.ts +10 -0
  73. package/dist/ollama.js +11 -0
  74. package/dist/ollama.js.map +1 -0
  75. package/dist/repomap.d.ts +37 -0
  76. package/dist/repomap.js +431 -0
  77. package/dist/repomap.js.map +1 -0
  78. package/dist/skills/index.d.ts +3 -0
  79. package/dist/skills/index.js +5 -0
  80. package/dist/skills/index.js.map +1 -0
  81. package/dist/skills/registry.d.ts +16 -0
  82. package/dist/skills/registry.js +128 -0
  83. package/dist/skills/registry.js.map +1 -0
  84. package/dist/skills/types.d.ts +48 -0
  85. package/dist/skills/types.js +3 -0
  86. package/dist/skills/types.js.map +1 -0
  87. package/dist/statusline.d.ts +21 -0
  88. package/dist/statusline.js +69 -0
  89. package/dist/statusline.js.map +1 -0
  90. package/dist/streaming.d.ts +25 -0
  91. package/dist/streaming.js +94 -0
  92. package/dist/streaming.js.map +1 -0
  93. package/dist/theme.d.ts +54 -0
  94. package/dist/theme.js +115 -0
  95. package/dist/theme.js.map +1 -0
  96. package/dist/tools/builtin.d.ts +11 -0
  97. package/dist/tools/builtin.js +491 -0
  98. package/dist/tools/builtin.js.map +1 -0
  99. package/dist/tools/index.d.ts +3 -0
  100. package/dist/tools/index.js +5 -0
  101. package/dist/tools/index.js.map +1 -0
  102. package/dist/tools/types.d.ts +186 -0
  103. package/dist/tools/types.js +29 -0
  104. package/dist/tools/types.js.map +1 -0
  105. package/dist/ui.d.ts +5 -0
  106. package/dist/ui.js +50 -83
  107. package/dist/ui.js.map +1 -1
  108. package/dist/verbose.d.ts +20 -0
  109. package/dist/verbose.js +75 -0
  110. package/dist/verbose.js.map +1 -0
  111. package/package.json +13 -2
  112. package/templates/api-json/task.yaml +0 -2
  113. package/templates/coding/task.yaml +1 -1
  114. package/templates/cron-digester/task.yaml +0 -2
  115. package/templates/harness/task.yaml +0 -11
  116. package/templates/multi-agent/agent.ts +7 -8
  117. package/templates/multi-agent/task.yaml +1 -3
  118. package/templates/research/task.yaml +0 -28
  119. package/templates/support/task.yaml +0 -2
  120. package/templates/webhook-echo/task.yaml +0 -2
  121. package/templates/with-approval/task.yaml +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/skills/types.ts"],"names":[],"mappings":"AAAA,oFAAoF"}
@@ -0,0 +1,21 @@
1
+ export type StatusSegment = {
2
+ content: string;
3
+ color?: "red" | "green" | "blue" | "yellow" | "cyan" | "magenta" | "white" | "gray";
4
+ flex?: boolean;
5
+ };
6
+ export type StatusLineOptions = {
7
+ segments?: StatusSegment[];
8
+ separator?: string;
9
+ padding?: number;
10
+ };
11
+ export declare class StatusLine {
12
+ private segments;
13
+ private separator;
14
+ private padding;
15
+ constructor(options?: StatusLineOptions);
16
+ setSegments(segments: StatusSegment[]): void;
17
+ updateSegment(index: number, segment: StatusSegment): void;
18
+ render(): void;
19
+ private getColorFn;
20
+ }
21
+ export declare function buildDefaultStatusLine(model?: string, tokensIn?: number, tokensOut?: number, mode?: string, branch?: string): StatusSegment[];
@@ -0,0 +1,69 @@
1
+ // statusline.ts — Styled status bar: blood red pipe separators, friendly model names.
2
+ import chalk from "chalk";
3
+ import { fmtTokens, sep, friendlyModel } from "./theme.js";
4
+ export class StatusLine {
5
+ segments;
6
+ separator;
7
+ padding;
8
+ constructor(options = {}) {
9
+ this.segments = options.segments ?? [];
10
+ this.separator = options.separator ?? ` ${chalk.dim("│")} `;
11
+ this.padding = options.padding ?? 1;
12
+ }
13
+ setSegments(segments) {
14
+ this.segments = segments;
15
+ this.render();
16
+ }
17
+ updateSegment(index, segment) {
18
+ if (index < this.segments.length) {
19
+ this.segments[index] = segment;
20
+ this.render();
21
+ }
22
+ }
23
+ render() {
24
+ process.stdout.write("\r\x1B[K");
25
+ process.stdout.write(sep(40) + "\n");
26
+ const parts = [];
27
+ for (const seg of this.segments) {
28
+ const colorFn = this.getColorFn(seg.color);
29
+ parts.push(colorFn(seg.content));
30
+ }
31
+ const line = parts.join(this.separator);
32
+ const padded = " ".repeat(this.padding) + line;
33
+ process.stdout.write(padded + "\n");
34
+ }
35
+ getColorFn(color) {
36
+ switch (color) {
37
+ case "red": return chalk.red;
38
+ case "green": return chalk.green;
39
+ case "blue": return chalk.cyan;
40
+ case "yellow": return chalk.yellow;
41
+ case "cyan": return chalk.gray;
42
+ case "magenta": return chalk.magenta;
43
+ case "white": return chalk.white;
44
+ case "gray": return chalk.dim;
45
+ default: return chalk.dim;
46
+ }
47
+ }
48
+ }
49
+ // --- Default status line: friendly model, tokens, branch ---
50
+ export function buildDefaultStatusLine(model, tokensIn, tokensOut, mode, branch) {
51
+ const segments = [];
52
+ if (model) {
53
+ segments.push({ content: friendlyModel(model), color: "red" });
54
+ }
55
+ if (tokensIn !== undefined && tokensOut !== undefined) {
56
+ segments.push({
57
+ content: `${fmtTokens(tokensIn)}→${fmtTokens(tokensOut)} tok`,
58
+ color: "gray",
59
+ });
60
+ }
61
+ if (branch) {
62
+ segments.push({ content: branch, color: "gray" });
63
+ }
64
+ if (mode) {
65
+ segments.push({ content: mode, color: "cyan" });
66
+ }
67
+ return segments;
68
+ }
69
+ //# sourceMappingURL=statusline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../src/statusline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type StreamEvent = {
2
+ type: "token" | "done" | "error" | "tool";
3
+ content?: string;
4
+ tokensIn?: number;
5
+ tokensOut?: number;
6
+ error?: string;
7
+ };
8
+ export declare class StreamingDisplay {
9
+ private buffer;
10
+ private rendered;
11
+ private spinnerFrame;
12
+ private spinnerInterval;
13
+ private isStreaming;
14
+ start(): void;
15
+ handleEvent(event: StreamEvent): void;
16
+ private startSpinner;
17
+ private stopSpinner;
18
+ private renderIncremental;
19
+ private renderFinal;
20
+ private renderError;
21
+ private renderTool;
22
+ stop(): void;
23
+ getBuffer(): string;
24
+ clear(): void;
25
+ }
@@ -0,0 +1,94 @@
1
+ // streaming.ts — Streaming display: blood red braille spinner + token counts.
2
+ import chalk from "chalk";
3
+ import { SYM, fmtTokens } from "./theme.js";
4
+ export class StreamingDisplay {
5
+ buffer = "";
6
+ rendered = 0;
7
+ spinnerFrame = 0;
8
+ spinnerInterval = null;
9
+ isStreaming = false;
10
+ start() {
11
+ this.isStreaming = true;
12
+ this.buffer = "";
13
+ this.rendered = 0;
14
+ this.startSpinner();
15
+ }
16
+ handleEvent(event) {
17
+ switch (event.type) {
18
+ case "token":
19
+ if (event.content) {
20
+ this.buffer += event.content;
21
+ this.renderIncremental(event.content);
22
+ }
23
+ break;
24
+ case "done":
25
+ this.stop();
26
+ this.renderFinal(event.tokensIn, event.tokensOut);
27
+ break;
28
+ case "error":
29
+ this.stop();
30
+ this.renderError(event.error ?? "erro desconhecido");
31
+ break;
32
+ case "tool":
33
+ this.renderTool(event.content ?? "");
34
+ break;
35
+ }
36
+ }
37
+ startSpinner() {
38
+ // Braille spinner in blood red
39
+ const frames = ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"];
40
+ const label = "thinking";
41
+ this.spinnerInterval = setInterval(() => {
42
+ if (!this.isStreaming)
43
+ return;
44
+ const frame = frames[this.spinnerFrame % frames.length];
45
+ process.stdout.write(`\r${chalk.rgb(180, 0, 30)(frame)} ${chalk.dim(label)} `);
46
+ this.spinnerFrame++;
47
+ }, 80);
48
+ }
49
+ stopSpinner() {
50
+ if (this.spinnerInterval) {
51
+ clearInterval(this.spinnerInterval);
52
+ this.spinnerInterval = null;
53
+ }
54
+ }
55
+ renderIncremental(token) {
56
+ process.stdout.write("\r\x1B[K");
57
+ process.stdout.write(token);
58
+ }
59
+ renderFinal(tokensIn, tokensOut) {
60
+ this.stopSpinner();
61
+ process.stdout.write("\r\x1B[K");
62
+ if (tokensOut !== undefined) {
63
+ const inStr = tokensIn !== undefined ? fmtTokens(tokensIn) : "?";
64
+ process.stdout.write(chalk.dim(` ${inStr} → ${fmtTokens(tokensOut)} tokens\n`));
65
+ }
66
+ if (this.rendered < this.buffer.length) {
67
+ const remaining = this.buffer.slice(this.rendered);
68
+ process.stdout.write(remaining);
69
+ this.rendered = this.buffer.length;
70
+ }
71
+ process.stdout.write("\n");
72
+ }
73
+ renderError(error) {
74
+ this.stopSpinner();
75
+ process.stdout.write("\r\x1B[K");
76
+ process.stdout.write(`${chalk.red(`${SYM.fail} ${error}`)}\n`);
77
+ }
78
+ renderTool(content) {
79
+ this.stopSpinner();
80
+ process.stdout.write(`${chalk.gray(` ${SYM.gear} ${content}`)}\n`);
81
+ }
82
+ stop() {
83
+ this.isStreaming = false;
84
+ this.stopSpinner();
85
+ }
86
+ getBuffer() {
87
+ return this.buffer;
88
+ }
89
+ clear() {
90
+ this.buffer = "";
91
+ this.rendered = 0;
92
+ }
93
+ }
94
+ //# sourceMappingURL=streaming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.js","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export declare const C: {
2
+ readonly blood: (...a: [string] | []) => string | import("chalk").ChalkInstance;
3
+ readonly crimson: (...a: [string] | []) => string;
4
+ readonly dark: (...a: [string] | []) => string | import("chalk").ChalkInstance;
5
+ readonly maroon: (...a: [string] | []) => string | import("chalk").ChalkInstance;
6
+ readonly black: import("chalk").ChalkInstance;
7
+ readonly white: import("chalk").ChalkInstance;
8
+ readonly gray: import("chalk").ChalkInstance;
9
+ readonly dim: import("chalk").ChalkInstance;
10
+ readonly bold: import("chalk").ChalkInstance;
11
+ readonly green: import("chalk").ChalkInstance;
12
+ readonly yellow: import("chalk").ChalkInstance;
13
+ readonly cyan: import("chalk").ChalkInstance;
14
+ readonly magenta: import("chalk").ChalkInstance;
15
+ readonly red: import("chalk").ChalkInstance;
16
+ readonly inverse: import("chalk").ChalkInstance;
17
+ };
18
+ export declare const bloodGradient: import("gradient-string").Gradient;
19
+ export declare const highlightGradient: import("gradient-string").Gradient;
20
+ export declare const SYM: {
21
+ readonly ok: "✔";
22
+ readonly fail: "✖";
23
+ readonly info: "ℹ";
24
+ readonly warn: "⚠";
25
+ readonly bullet: "·";
26
+ readonly pointer: "❯";
27
+ readonly line: "─";
28
+ readonly doubleLine: "═";
29
+ readonly dot: "●";
30
+ readonly hollowDot: "○";
31
+ readonly diamond: "◆";
32
+ readonly gear: "⚙";
33
+ readonly check: "✓";
34
+ readonly arrow: "→";
35
+ readonly pipe: "│";
36
+ readonly cornerTL: "╭";
37
+ readonly cornerTR: "╮";
38
+ readonly cornerBL: "╰";
39
+ readonly cornerBR: "╯";
40
+ };
41
+ export declare const BOX: {
42
+ borderStyle: "round";
43
+ borderColor: "red";
44
+ padding: number;
45
+ margin: {
46
+ readonly top: 0;
47
+ readonly bottom: 0;
48
+ };
49
+ };
50
+ export declare function fmtTokens(n: number): string;
51
+ export declare function timestamp(): string;
52
+ export declare function sep(width?: number): string;
53
+ export declare function gitBranch(): string | undefined;
54
+ export declare function friendlyModel(raw?: string): string;
package/dist/theme.js ADDED
@@ -0,0 +1,115 @@
1
+ // theme.ts — Blood red palette with chalk RGB + gradient-string.
2
+ import chalk from "chalk";
3
+ import gradient from "gradient-string";
4
+ // --- RGB Palette ---
5
+ // Blood red spectrum: bright crimson → deep blood → dark maroon
6
+ const BLOOD_RED = [220, 20, 60];
7
+ const CRIMSON = [180, 0, 30];
8
+ const DARK_RED = [120, 0, 20];
9
+ const MAROON = [80, 0, 15];
10
+ export const C = {
11
+ // Blood reds — RGB precision
12
+ blood: (...a) => a.length ? chalk.rgb(...BLOOD_RED)(a[0]) : chalk.rgb(...BLOOD_RED),
13
+ crimson: (...a) => a.length ? chalk.bold(chalk.rgb(...CRIMSON)(a[0])) : chalk.bold(chalk.rgb(...CRIMSON)),
14
+ dark: (...a) => a.length ? chalk.rgb(...DARK_RED)(a[0]) : chalk.rgb(...DARK_RED),
15
+ maroon: (...a) => a.length ? chalk.rgb(...MAROON)(a[0]) : chalk.rgb(...MAROON),
16
+ // Basics
17
+ black: chalk.black,
18
+ white: chalk.white,
19
+ gray: chalk.gray,
20
+ dim: chalk.dim,
21
+ bold: chalk.bold,
22
+ green: chalk.green,
23
+ yellow: chalk.yellow,
24
+ cyan: chalk.cyan,
25
+ magenta: chalk.magenta,
26
+ red: chalk.red,
27
+ inverse: chalk.inverse,
28
+ };
29
+ // --- Gradient: blood red spectrum (3-stop) ---
30
+ export const bloodGradient = gradient([
31
+ chalk.rgb(...CRIMSON), // bright
32
+ chalk.rgb(...BLOOD_RED), // mid
33
+ chalk.rgb(...DARK_RED), // dark
34
+ ]);
35
+ // --- Gradient: crimson → white (for highlight text) ---
36
+ export const highlightGradient = gradient([
37
+ chalk.rgb(...BLOOD_RED),
38
+ chalk.white,
39
+ ]);
40
+ // --- Unicode Symbols ---
41
+ export const SYM = {
42
+ ok: "✔",
43
+ fail: "✖",
44
+ info: "ℹ",
45
+ warn: "⚠",
46
+ bullet: "·",
47
+ pointer: "❯",
48
+ line: "─",
49
+ doubleLine: "═",
50
+ dot: "●",
51
+ hollowDot: "○",
52
+ diamond: "◆",
53
+ gear: "⚙",
54
+ check: "✓",
55
+ arrow: "→",
56
+ pipe: "│",
57
+ cornerTL: "╭",
58
+ cornerTR: "╮",
59
+ cornerBL: "╰",
60
+ cornerBR: "╯",
61
+ };
62
+ // --- Boxen config ---
63
+ export const BOX = {
64
+ borderStyle: "round",
65
+ borderColor: "red",
66
+ padding: 1,
67
+ margin: { top: 0, bottom: 0 },
68
+ };
69
+ // --- Token count: 1234 → 1.2k ---
70
+ export function fmtTokens(n) {
71
+ if (n >= 1000)
72
+ return (n / 1000).toFixed(1).replace(/\.0$/, "") + "k";
73
+ return String(n);
74
+ }
75
+ // --- Timestamp HH:MM ---
76
+ export function timestamp() {
77
+ const d = new Date();
78
+ const h = String(d.getHours()).padStart(2, "0");
79
+ const m = String(d.getMinutes()).padStart(2, "0");
80
+ return chalk.dim(`${h}:${m}`);
81
+ }
82
+ // --- Separator line (full width, blood red) ---
83
+ export function sep(width = 40) {
84
+ return chalk.rgb(...DARK_RED)(SYM.line.repeat(width));
85
+ }
86
+ // --- Git branch (best-effort, sync) ---
87
+ export function gitBranch() {
88
+ try {
89
+ const { execSync } = require("node:child_process");
90
+ const out = execSync("git rev-parse --abbrev-ref HEAD", {
91
+ encoding: "utf8",
92
+ timeout: 500,
93
+ stdio: ["pipe", "pipe", "pipe"],
94
+ }).trim();
95
+ return out || undefined;
96
+ }
97
+ catch {
98
+ return undefined;
99
+ }
100
+ }
101
+ // --- Friendly model name: strip ugly suffixes ---
102
+ export function friendlyModel(raw) {
103
+ if (!raw)
104
+ return "none";
105
+ // ollama:qwen2.5-coder:14b-instruct-q4_K_M → qwen2.5-coder 14b
106
+ // openai:gpt-4o → gpt-4o
107
+ // anthropic:claude-sonnet-4-20250514 → claude-sonnet-4
108
+ return raw
109
+ .replace(/^(ollama|openai|anthropic|groq|mistral):/i, "")
110
+ .replace(/-instruct.*$/i, "")
111
+ .replace(/-q4_.*$/i, "")
112
+ .replace(/-\d{8}$/, "")
113
+ .trim();
114
+ }
115
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Tool } from "./types.js";
2
+ export declare const readTool: Tool<any, any>;
3
+ export declare const writeTool: Tool<any, any>;
4
+ export declare const editTool: Tool<any, any>;
5
+ export declare const listTool: Tool<any, any>;
6
+ export declare const globTool: Tool<any, any>;
7
+ export declare const grepTool: Tool<any, any>;
8
+ export declare const bashTool: Tool<any, any>;
9
+ export declare const taskTool: Tool<any, any>;
10
+ export declare const BUILTIN_TOOLS: Tool[];
11
+ export declare function getBuiltinTools(): Tool[];