@autonsh/cli 0.17.2 → 0.19.0

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 (136) hide show
  1. package/dist/chat.d.ts +1 -1
  2. package/dist/chat.js +166 -120
  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 +304 -119
  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/prompts.d.ts +34 -8
  76. package/dist/prompts.js +186 -8
  77. package/dist/prompts.js.map +1 -1
  78. package/dist/repomap.d.ts +37 -0
  79. package/dist/repomap.js +431 -0
  80. package/dist/repomap.js.map +1 -0
  81. package/dist/skills/index.d.ts +3 -0
  82. package/dist/skills/index.js +5 -0
  83. package/dist/skills/index.js.map +1 -0
  84. package/dist/skills/registry.d.ts +16 -0
  85. package/dist/skills/registry.js +128 -0
  86. package/dist/skills/registry.js.map +1 -0
  87. package/dist/skills/types.d.ts +48 -0
  88. package/dist/skills/types.js +3 -0
  89. package/dist/skills/types.js.map +1 -0
  90. package/dist/statusline.d.ts +21 -0
  91. package/dist/statusline.js +68 -0
  92. package/dist/statusline.js.map +1 -0
  93. package/dist/streaming.d.ts +25 -0
  94. package/dist/streaming.js +91 -0
  95. package/dist/streaming.js.map +1 -0
  96. package/dist/task.d.ts +9 -1
  97. package/dist/task.js +21 -0
  98. package/dist/task.js.map +1 -1
  99. package/dist/template-engine.d.ts +19 -0
  100. package/dist/template-engine.js +187 -0
  101. package/dist/template-engine.js.map +1 -0
  102. package/dist/template-registry.d.ts +36 -0
  103. package/dist/template-registry.js +294 -0
  104. package/dist/template-registry.js.map +1 -0
  105. package/dist/theme.d.ts +52 -0
  106. package/dist/theme.js +92 -0
  107. package/dist/theme.js.map +1 -0
  108. package/dist/tools/builtin.d.ts +11 -0
  109. package/dist/tools/builtin.js +491 -0
  110. package/dist/tools/builtin.js.map +1 -0
  111. package/dist/tools/index.d.ts +3 -0
  112. package/dist/tools/index.js +5 -0
  113. package/dist/tools/index.js.map +1 -0
  114. package/dist/tools/types.d.ts +186 -0
  115. package/dist/tools/types.js +29 -0
  116. package/dist/tools/types.js.map +1 -0
  117. package/dist/ui.js +34 -30
  118. package/dist/ui.js.map +1 -1
  119. package/dist/verbose.d.ts +20 -0
  120. package/dist/verbose.js +75 -0
  121. package/dist/verbose.js.map +1 -0
  122. package/package.json +12 -2
  123. package/templates/api-json/task.yaml +0 -2
  124. package/templates/coding/agent.md +39 -0
  125. package/templates/coding/agent.ts +83 -0
  126. package/templates/coding/task.yaml +36 -0
  127. package/templates/cron-digester/task.yaml +0 -2
  128. package/templates/harness/agent.md +43 -0
  129. package/templates/harness/harness.ts +145 -0
  130. package/templates/harness/task.yaml +4 -0
  131. package/templates/multi-agent/agent.ts +7 -8
  132. package/templates/multi-agent/task.yaml +1 -3
  133. package/templates/research/task.yaml +4 -0
  134. package/templates/support/task.yaml +0 -2
  135. package/templates/webhook-echo/task.yaml +0 -2
  136. package/templates/with-approval/task.yaml +0 -2
@@ -0,0 +1,186 @@
1
+ export interface ToolSchema<T> {
2
+ parse(input: unknown): T | undefined;
3
+ serialize(output: T): unknown;
4
+ }
5
+ export interface ToolExecuteContext {
6
+ id: string;
7
+ name: string;
8
+ }
9
+ export type ToolExecute<Params, Output> = (params: Params, context?: ToolExecuteContext) => Promise<ToolResult<Output>>;
10
+ export interface ToolResult<Output> {
11
+ data: Output;
12
+ newMessages?: unknown[];
13
+ contextModifier?: (context: ToolUseContext) => ToolUseContext;
14
+ mcpMeta?: {
15
+ _meta?: Record<string, unknown>;
16
+ structuredContent?: Record<string, unknown>;
17
+ };
18
+ }
19
+ export interface ToolUseContext {
20
+ abortController: AbortController;
21
+ getAppState(): unknown;
22
+ setAppState(f: (prev: unknown) => unknown): void;
23
+ options: {
24
+ commands: unknown[];
25
+ debug: boolean;
26
+ mainLoopModel: string;
27
+ tools: Tool[];
28
+ verbose: boolean;
29
+ mcpClients: unknown[];
30
+ isNonInteractiveSession: boolean;
31
+ maxBudgetUsd?: number;
32
+ customSystemPrompt?: string;
33
+ appendSystemPrompt?: string;
34
+ };
35
+ }
36
+ export interface Tool<Params = unknown, Output = unknown, ProgressData = unknown> {
37
+ name: string;
38
+ aliases?: string[];
39
+ searchHint?: string;
40
+ description: string;
41
+ inputSchema: ToolSchema<Params>;
42
+ outputSchema?: ToolSchema<Output>;
43
+ execute?: ToolExecute<Params, Output>;
44
+ isEnabled(): boolean;
45
+ isConcurrencySafe(params: Params): boolean;
46
+ isReadOnly(params: Params): boolean;
47
+ isDestructive?(params: Params): boolean;
48
+ interruptBehavior?(): "cancel" | "block";
49
+ isSearchOrReadCommand?(params: Params): {
50
+ isSearch: boolean;
51
+ isRead: boolean;
52
+ isList?: boolean;
53
+ };
54
+ isOpenWorld?(params: Params): boolean;
55
+ requiresUserInteraction?(): boolean;
56
+ shouldDefer?: boolean;
57
+ alwaysLoad?: boolean;
58
+ maxResultSizeChars: number;
59
+ strict?: boolean;
60
+ renderToolUseMessage(input: Partial<Params>, options: {
61
+ theme: string;
62
+ verbose: boolean;
63
+ commands?: unknown[];
64
+ }): string;
65
+ renderToolResultMessage(content: Output, progressMessages: ProgressMessage<ProgressData>[], options: {
66
+ style?: "condensed";
67
+ theme: string;
68
+ tools: Tool[];
69
+ verbose: boolean;
70
+ isTranscriptMode?: boolean;
71
+ isBriefOnly?: boolean;
72
+ input?: unknown;
73
+ }): string;
74
+ extractSearchText?(output: Output): string;
75
+ isResultTruncated?(output: Output): boolean;
76
+ getToolUseSummary?(input: Partial<Params>): string | null;
77
+ getActivityDescription?(input: Partial<Params>): string | null;
78
+ toAutoClassifierInput(params: Params): unknown;
79
+ userFacingName(input: Partial<Params>): string;
80
+ userFacingNameBackgroundColor?(input: Partial<Params>): string | undefined;
81
+ validateInput?(params: Params, context: ToolUseContext): Promise<ValidationResult>;
82
+ checkPermissions(params: Params, context: ToolUseContext): Promise<PermissionResult>;
83
+ getPath?(params: Params): string;
84
+ preparePermissionMatcher?(params: Params): Promise<(pattern: string) => boolean>;
85
+ prompt(options: {
86
+ getToolPermissionContext: () => Promise<ToolPermissionContext>;
87
+ tools: Tool[];
88
+ }): Promise<string>;
89
+ renderToolUseProgressMessage?(progressMessages: ProgressMessage<ProgressData>[], options: {
90
+ tools: Tool[];
91
+ verbose: boolean;
92
+ terminalSize?: {
93
+ columns: number;
94
+ rows: number;
95
+ };
96
+ inProgressToolCallCount?: number;
97
+ isTranscriptMode?: boolean;
98
+ }): string;
99
+ renderToolUseQueuedMessage?(): string;
100
+ renderToolUseRejectedMessage?(input: Params, options: {
101
+ columns: number;
102
+ messages: unknown[];
103
+ style?: "condensed";
104
+ theme: string;
105
+ tools: Tool[];
106
+ verbose: boolean;
107
+ progressMessages: ProgressMessage<ProgressData>[];
108
+ isTranscriptMode?: boolean;
109
+ }): string;
110
+ renderToolUseErrorMessage?(result: unknown, options: {
111
+ progressMessages: ProgressMessage<ProgressData>[];
112
+ tools: Tool[];
113
+ verbose: boolean;
114
+ isTranscriptMode?: boolean;
115
+ }): string;
116
+ renderGroupedToolUse?(toolUses: Array<{
117
+ param: unknown;
118
+ isResolved: boolean;
119
+ isError: boolean;
120
+ isInProgress: boolean;
121
+ progressMessages: ProgressMessage<ProgressData>[];
122
+ result?: {
123
+ param: unknown;
124
+ output: unknown;
125
+ };
126
+ }>, options: {
127
+ shouldAnimate: boolean;
128
+ tools: Tool[];
129
+ }): string | null;
130
+ }
131
+ export interface ToolDef<Params = unknown, Output = unknown, ProgressData = unknown> extends Omit<Tool<Params, Output, ProgressData>, "isEnabled" | "isConcurrencySafe" | "isReadOnly" | "isDestructive" | "checkPermissions" | "toAutoClassifierInput" | "userFacingName"> {
132
+ isEnabled?: () => boolean;
133
+ isConcurrencySafe?: (params: Params) => boolean;
134
+ isReadOnly?: (params: Params) => boolean;
135
+ isDestructive?: (params: Params) => boolean;
136
+ checkPermissions?: (params: Params, context: ToolUseContext) => Promise<PermissionResult>;
137
+ toAutoClassifierInput?: (params: Params) => unknown;
138
+ userFacingName?: (input: Partial<Params>) => string;
139
+ }
140
+ export interface ValidationResult {
141
+ result: boolean;
142
+ message?: string;
143
+ errorCode?: number;
144
+ }
145
+ export interface PermissionResult {
146
+ behavior: "allow" | "deny" | "ask";
147
+ updatedInput?: unknown;
148
+ message?: string;
149
+ }
150
+ export interface ToolPermissionContext {
151
+ mode: "default" | "bypass" | "ask";
152
+ additionalWorkingDirectories: Map<string, unknown>;
153
+ alwaysAllowRules: Record<string, unknown>;
154
+ alwaysDenyRules: Record<string, unknown>;
155
+ alwaysAskRules: Record<string, unknown>;
156
+ isBypassPermissionsModeAvailable: boolean;
157
+ shouldAvoidPermissionPrompts?: boolean;
158
+ awaitAutomatedChecksBeforeDialog?: boolean;
159
+ }
160
+ export interface ProgressMessage<ProgressData = unknown> {
161
+ id: string;
162
+ toolUseId: string;
163
+ data: ProgressData;
164
+ timestamp: number;
165
+ }
166
+ export interface ToolProgress<ProgressData = unknown> {
167
+ toolUseId: string;
168
+ data: ProgressData;
169
+ }
170
+ export type Tools = readonly Tool[];
171
+ export declare const TOOL_DEFAULTS: {
172
+ isEnabled: () => boolean;
173
+ isConcurrencySafe: () => boolean;
174
+ isReadOnly: () => boolean;
175
+ isDestructive: () => boolean;
176
+ checkPermissions: (_params: unknown, _ctx: ToolUseContext) => Promise<PermissionResult>;
177
+ toAutoClassifierInput: () => string;
178
+ userFacingName: (input: Partial<unknown>) => any;
179
+ prompt: () => Promise<string>;
180
+ };
181
+ export declare function buildTool<Params, Output, ProgressData>(def: ToolDef<Params, Output, ProgressData>): Tool<Params, Output, ProgressData>;
182
+ export declare function toDefinitions(tools: Tools): Array<{
183
+ name: string;
184
+ description: string;
185
+ parameters: object;
186
+ }>;
@@ -0,0 +1,29 @@
1
+ // types.ts — Tool types. Based on opencode/packages/llm/src/tool.ts + openclaude/src/Tool.ts
2
+ export const TOOL_DEFAULTS = {
3
+ isEnabled: () => true,
4
+ isConcurrencySafe: () => false,
5
+ isReadOnly: () => false,
6
+ isDestructive: () => false,
7
+ checkPermissions: async (_params, _ctx) => ({
8
+ behavior: "allow",
9
+ updatedInput: _params,
10
+ }),
11
+ toAutoClassifierInput: () => "",
12
+ userFacingName: (input) => input?.name ?? "tool",
13
+ prompt: async () => "Confirm?",
14
+ };
15
+ export function buildTool(def) {
16
+ return {
17
+ ...TOOL_DEFAULTS,
18
+ userFacingName: () => def.name,
19
+ ...def,
20
+ };
21
+ }
22
+ export function toDefinitions(tools) {
23
+ return tools.map((t) => ({
24
+ name: t.name,
25
+ description: t.description,
26
+ parameters: t.inputSchema,
27
+ }));
28
+ }
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAsK7F,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;IACrB,iBAAiB,EAAE,GAAG,EAAE,CAAC,KAAK;IAC9B,UAAU,EAAE,GAAG,EAAE,CAAC,KAAK;IACvB,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;IAC1B,gBAAgB,EAAE,KAAK,EAAE,OAAgB,EAAE,IAAoB,EAA6B,EAAE,CAAC,CAAC;QAC9F,QAAQ,EAAE,OAAO;QACjB,YAAY,EAAE,OAAO;KACtB,CAAC;IACF,qBAAqB,EAAE,GAAG,EAAE,CAAC,EAAE;IAC/B,cAAc,EAAE,CAAC,KAAuB,EAAE,EAAE,CAAE,KAAa,EAAE,IAAI,IAAI,MAAM;IAC3E,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU;CAC/B,CAAC;AAEF,MAAM,UAAU,SAAS,CACvB,GAA0C;IAE1C,OAAO;QACL,GAAG,aAAa;QAChB,cAAc,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI;QAC9B,GAAG,GAAG;KAC+B,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,UAAU,EAAE,CAAC,CAAC,WAAgC;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC"}
package/dist/ui.js CHANGED
@@ -1,21 +1,17 @@
1
- // ui.ts — camada de apresentação do CLI auton.
2
- // Cores/badges/spinner/tabela/logo/boxes. Tudo respeita NO_COLOR e pipe (isTTY).
3
- // Conteúdo do agente (payload de logs) nunca é colorido — só tags.
4
- import pc from "picocolors";
5
1
  import createSpinner from "ora";
6
- import logSymbols from "log-symbols";
7
2
  import stringWidth from "string-width";
8
3
  import boxen from "boxen";
4
+ import { C, SYM, BOX } from "./theme.js";
9
5
  export const isTTY = process.stdout.isTTY === true;
10
- // --- badges (log-symbols: glyphs exatos, fallback Windows) ---
11
- export const ok = (msg) => pc.green(`${logSymbols.success} ${msg}`);
12
- export const fail = (msg) => pc.red(`${logSymbols.error} ${msg}`);
13
- export const info = (msg) => pc.cyan(`${logSymbols.info} ${msg}`);
14
- export const dim = (msg) => pc.dim(msg);
15
- export const bold = (msg) => pc.bold(msg);
16
- export const url = (msg) => pc.cyan(msg);
6
+ // --- badges ---
7
+ export const ok = (msg) => C.green(`${SYM.ok} ${msg}`);
8
+ export const fail = (msg) => C.blood(`${SYM.fail} ${msg}`);
9
+ export const info = (msg) => C.gray(`${SYM.info} ${msg}`);
10
+ export const dim = (msg) => C.dim(msg);
11
+ export const bold = (msg) => C.bold(msg);
12
+ export const url = (msg) => C.cyan(msg);
17
13
  export function spinner(text) {
18
- const s = createSpinner({ text, color: "cyan" });
14
+ const s = createSpinner({ text, color: "red" });
19
15
  if (isTTY)
20
16
  s.start();
21
17
  return {
@@ -29,7 +25,7 @@ export function spinner(text) {
29
25
  },
30
26
  };
31
27
  }
32
- // --- logo pixel art "AUTON" (fonte ANSI Shadow, TTY) ---
28
+ // --- logo pixel art "AUTON" com gradiente blood red ---
33
29
  const FONT = {
34
30
  A: [
35
31
  " █████╗ ",
@@ -81,7 +77,15 @@ export function logo() {
81
77
  })
82
78
  .join(" ")
83
79
  .trimEnd());
84
- return pc.cyan(lines.join("\n"));
80
+ // Blood red gradient: bright → normal → dim
81
+ return [
82
+ C.crimson(lines[0]),
83
+ C.crimson(lines[1]),
84
+ C.blood(lines[2]),
85
+ C.blood(lines[3]),
86
+ C.dark(lines[4]),
87
+ C.dark(lines[5]),
88
+ ].join("\n");
85
89
  }
86
90
  // --- linha de log do agente: tag colorida, payload cru ---
87
91
  export function tagLine(line) {
@@ -90,43 +94,43 @@ export function tagLine(line) {
90
94
  return line;
91
95
  const [tag, rest] = [m[1], m[2]];
92
96
  const tagColor = tag.includes("error")
93
- ? pc.red
97
+ ? C.blood
94
98
  : tag.includes("info")
95
- ? pc.cyan
99
+ ? C.gray
96
100
  : tag.includes("runtime")
97
- ? pc.yellow
98
- : pc.dim;
101
+ ? C.yellow
102
+ : C.dim;
99
103
  return `${tagColor(tag)} ${rest}`;
100
104
  }
101
105
  // --- status badge colorido ---
102
106
  export function statusColor(s) {
103
107
  if (s === "running")
104
- return pc.green(s);
108
+ return C.green(s);
105
109
  if (s === "scheduled")
106
- return pc.cyan(s);
110
+ return C.gray(s);
107
111
  if (s === "exited")
108
- return pc.red(s);
109
- return pc.yellow(s);
112
+ return C.blood(s);
113
+ return C.yellow(s);
110
114
  }
111
- // --- tabela alinhada com header bold (string-width: cores não desalinham) ---
115
+ // --- tabela alinhada com header bold ---
112
116
  export function table(headers, rows) {
113
117
  const widths = headers.map((h, i) => Math.max(stringWidth(h), ...rows.map((r) => stringWidth(r[i] ?? ""))));
114
118
  const fmt = (cells) => cells
115
119
  .map((c, i) => c + " ".repeat(Math.max(0, widths[i] - stringWidth(c))))
116
120
  .join(" ")
117
121
  .trimEnd();
118
- const head = fmt(headers.map((h, i) => pc.bold(h.padEnd(widths[i]))));
122
+ const head = fmt(headers.map((h, i) => C.bold(h.padEnd(widths[i]))));
119
123
  return [head, ...rows.map(fmt)].join("\n");
120
124
  }
121
- // --- caixa emoldurada (boxen) ---
125
+ // --- caixa emoldurada (vermelho) ---
122
126
  export function box(title, lines) {
123
127
  return boxen(lines.join("\n"), {
124
128
  title,
125
129
  titleAlignment: "left",
126
- padding: 1,
127
- margin: { top: 1, bottom: 1 },
128
- borderStyle: "round",
129
- borderColor: "cyan",
130
+ padding: BOX.padding,
131
+ margin: BOX.margin,
132
+ borderStyle: BOX.borderStyle,
133
+ borderColor: BOX.borderColor,
130
134
  });
131
135
  }
132
136
  //# sourceMappingURL=ui.js.map
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,iFAAiF;AACjF,mEAAmE;AACnE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,aAAa,MAAM,KAAK,CAAC;AAChC,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AAEnD,gEAAgE;AAChE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;AACpF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,GAAW,EAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAQzD,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK;QAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO;QACL,IAAI;YACF,IAAI,KAAK;gBAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,CAAS;YACf,IAAI,KAAK;gBAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,IAAI,GAA6B;IACrC,CAAC,EAAE;QACD,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;KACX;IACD,CAAC,EAAE;QACD,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;KACZ;IACD,CAAC,EAAE;QACD,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;KACZ;IACD,CAAC,EAAE;QACD,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;KACZ;IACD,CAAC,EAAE;QACD,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,YAAY;KACb;CACF,CAAC;AAEF,MAAM,UAAU,IAAI;IAClB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAa,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CACjD,KAAK;SACF,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,OAAQ,EAAE,CAAC,GAAG,CAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,EAAE,CACb,CAAC;IACF,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,EAAE,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACpC,CAAC,CAAC,EAAE,CAAC,GAAG;QACR,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;YACpB,CAAC,CAAC,EAAE,CAAC,IAAI;YACT,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACvB,CAAC,CAAC,EAAE,CAAC,MAAM;gBACX,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;IACf,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,KAAK,CAAC,OAAiB,EAAE,IAAgB;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAClC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACtE,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,KAAe,EAAU,EAAE,CACtC,KAAK;SACF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,MAAM,CAAC,CAAC,CAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClF,IAAI,CAAC,IAAI,CAAC;SACV,OAAO,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,KAAe;IAChD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC7B,KAAK;QACL,cAAc,EAAE,MAAM;QACtB,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QAC7B,WAAW,EAAE,OAAO;QACpB,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type LogLevel = "trace" | "debug" | "info" | "warn" | "error";
2
+ export interface LogEntry {
3
+ timestamp: string;
4
+ level: LogLevel;
5
+ message: string;
6
+ context?: Record<string, unknown>;
7
+ }
8
+ export interface Logger {
9
+ trace: (message: string, context?: Record<string, unknown>) => void;
10
+ debug: (message: string, context?: Record<string, unknown>) => void;
11
+ info: (message: string, context?: Record<string, unknown>) => void;
12
+ warn: (message: string, context?: Record<string, unknown>) => void;
13
+ error: (message: string, context?: Record<string, unknown>) => void;
14
+ }
15
+ export declare function createLogger(verbose: boolean): Logger;
16
+ export declare function createUiLogger(verbose: boolean): Logger;
17
+ export declare function parseVerboseFlag(args: string[]): {
18
+ verbose: boolean;
19
+ remainingArgs: string[];
20
+ };
@@ -0,0 +1,75 @@
1
+ // verbose.ts — logger JSON lines com timestamp, level, message, context.
2
+ import { info, dim, fail } from "./ui.js";
3
+ const LEVEL_ORDER = ["trace", "debug", "info", "warn", "error"];
4
+ const MIN_LEVEL_INDEX = process.env.AUTON_VERBOSE === "1" ? 0 : 2; // trace/debug/info vs info/warn/error
5
+ function shouldLog(level) {
6
+ return LEVEL_ORDER.indexOf(level) >= MIN_LEVEL_INDEX;
7
+ }
8
+ function formatJson(entry) {
9
+ return JSON.stringify(entry);
10
+ }
11
+ function writeLine(line) {
12
+ console.error(line);
13
+ }
14
+ export function createLogger(verbose) {
15
+ const minIndex = verbose ? 0 : 2;
16
+ function log(level, message, context) {
17
+ if (LEVEL_ORDER.indexOf(level) < minIndex)
18
+ return;
19
+ const entry = {
20
+ timestamp: new Date().toISOString(),
21
+ level,
22
+ message,
23
+ context,
24
+ };
25
+ writeLine(formatJson(entry));
26
+ }
27
+ return {
28
+ trace: (msg, ctx) => log("trace", msg, ctx),
29
+ debug: (msg, ctx) => log("debug", msg, ctx),
30
+ info: (msg, ctx) => log("info", msg, ctx),
31
+ warn: (msg, ctx) => log("warn", msg, ctx),
32
+ error: (msg, ctx) => log("error", msg, ctx),
33
+ };
34
+ }
35
+ export function createUiLogger(verbose) {
36
+ const base = createLogger(verbose);
37
+ return {
38
+ trace: (msg, ctx) => {
39
+ base.trace(msg, ctx);
40
+ if (verbose)
41
+ console.error(dim(`[trace] ${msg}`), ctx ? dim(JSON.stringify(ctx)) : "");
42
+ },
43
+ debug: (msg, ctx) => {
44
+ base.debug(msg, ctx);
45
+ if (verbose)
46
+ console.error(dim(`[debug] ${msg}`), ctx ? dim(JSON.stringify(ctx)) : "");
47
+ },
48
+ info: (msg, ctx) => {
49
+ base.info(msg, ctx);
50
+ console.error(info(msg), ctx ? dim(JSON.stringify(ctx)) : "");
51
+ },
52
+ warn: (msg, ctx) => {
53
+ base.warn(msg, ctx);
54
+ console.error(dim(`⚠ ${msg}`), ctx ? dim(JSON.stringify(ctx)) : "");
55
+ },
56
+ error: (msg, ctx) => {
57
+ base.error(msg, ctx);
58
+ console.error(fail(msg), ctx ? dim(JSON.stringify(ctx)) : "");
59
+ },
60
+ };
61
+ }
62
+ export function parseVerboseFlag(args) {
63
+ const remainingArgs = [];
64
+ let verbose = process.env.AUTON_VERBOSE === "1";
65
+ for (const arg of args) {
66
+ if (arg === "--verbose" || arg === "-v") {
67
+ verbose = true;
68
+ }
69
+ else {
70
+ remainingArgs.push(arg);
71
+ }
72
+ }
73
+ return { verbose, remainingArgs };
74
+ }
75
+ //# sourceMappingURL=verbose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verbose.js","sourceRoot":"","sources":["../src/verbose.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autonsh/cli",
3
- "version": "0.17.2",
3
+ "version": "0.19.0",
4
4
  "description": "auton CLI. Run autonomous tasks in one command.",
5
5
  "type": "module",
6
6
  "files": [
@@ -13,6 +13,13 @@
13
13
  "dev": "tsx src/index.ts",
14
14
  "typecheck": "tsc --noEmit"
15
15
  },
16
+ "exports": {
17
+ ".": "./dist/index.js",
18
+ "./tools": "./dist/tools/index.js",
19
+ "./mcp": "./dist/mcp/index.js",
20
+ "./skills": "./dist/skills/index.js",
21
+ "./llm": "./dist/llm/index.js"
22
+ },
16
23
  "devDependencies": {
17
24
  "@types/node": "^20.10.0",
18
25
  "tsx": "^4.7.0",
@@ -22,9 +29,12 @@
22
29
  "@clack/prompts": "^1.7.0",
23
30
  "boxen": "^8.0.1",
24
31
  "cli-progress": "^3.12.0",
32
+ "handlebars": "^4.7.8",
25
33
  "log-symbols": "^7.0.1",
34
+ "minimatch": "^10.2.6",
26
35
  "ora": "^9.4.1",
27
36
  "picocolors": "^1.1.1",
28
- "string-width": "^8.2.2"
37
+ "string-width": "^8.2.2",
38
+ "zod": "^3.25.76"
29
39
  }
30
40
  }
@@ -2,8 +2,6 @@ name: api-json
2
2
  description: Endpoint HTTP customizado — retorna JSON/status/headers via task.done
3
3
  goal: "retorna JSON customizado"
4
4
  entry: agent.ts
5
- models:
6
- default: mock:local
7
5
  env:
8
6
  - OPENAI_API_KEY
9
7
  http: true
@@ -0,0 +1,39 @@
1
+ # Coding Agent — Engenheiro TypeScript Sênior
2
+
3
+ Você refatora, testa, migra e corrige código TypeScript.
4
+
5
+ ## Princípios Invioláveis
6
+ 1. **Entenda antes de mudar** — leia, trace dependências, entenda o fluxo
7
+ 2. **Mudanças atômicas** — um arquivo por vez, typecheck a cada passo
8
+ 3. **Tipos estritos** — `strict: true`, `noImplicitAny`, `exactOptionalPropertyTypes`
9
+ 4. **Testes obrigatórios** — unit + integration para lógica de negócio
10
+ 5. **Sem breaking changes** — API pública só com migração + depreciação
11
+ 6. **Performance consciente** — `const`, `readonly`, evite alocações
12
+ 7. **Documentação "por que"** — JSDoc em exports, comentários de decisão
13
+
14
+ ## Fluxo por Task
15
+ ```
16
+ PLAN → analise impacto, liste arquivos, defina testes
17
+ IMPLEMENT → edite um arquivo, tsc --noEmit, commit mental
18
+ TEST → vitest run, coverage > 80%
19
+ VERIFY → goal atendido? gaps? evidência
20
+ CHECKPOINT→ salve diff, testes, coverage
21
+ ```
22
+
23
+ ## Ferramentas
24
+ - `ctx.tools.read(file)` — ler
25
+ - `ctx.tools.write(file, content)` — escrever
26
+ - `ctx.tools.patch(file, old, new)` — editar cirúrgico
27
+ - `ctx.tools.exec(cmd)` — rodar tsc, vitest, eslint
28
+ - `ctx.tools.list(dir)` — explorar
29
+ - `ctx.storage` — KV persistente
30
+ - `ctx.work.add(type, title, payload)` — findings/artifacts
31
+
32
+ ## Resposta (JSON)
33
+ ```json
34
+ { "file": "src/auth.ts", "content": "...", "reason": "adicionar Zod schema" }
35
+ ```
36
+ ou finalização:
37
+ ```json
38
+ { "done": true, "summary": "Refatorado auth.ts + 12 testes + OpenAPI atualizado" }
39
+ ```
@@ -0,0 +1,83 @@
1
+ import { readdirSync, readFileSync, existsSync, writeFileSync } from "node:fs";
2
+ import { join, resolve } from "node:path";
3
+ import { agent, TASK_DONE_EVENT } from "@autonsh/runtime";
4
+
5
+ function readdirSyncSafe(dir: string): string[] {
6
+ try { return readdirSync(dir); } catch { return []; }
7
+ }
8
+
9
+ function readFileSafe(file: string): string {
10
+ try { return readFileSync(file, "utf8"); } catch { return ""; }
11
+ }
12
+
13
+ function writeFileSafe(file: string, content: string): void {
14
+ writeFileSync(file, content, "utf8");
15
+ }
16
+
17
+ export default agent(async (ctx) => {
18
+ const goal = ((ctx.input as { prompt?: string } | undefined)?.prompt ?? "").trim();
19
+ if (!goal) {
20
+ await ctx.events.emit(TASK_DONE_EVENT, { result: "goal vazio", evidence: {} });
21
+ return;
22
+ }
23
+
24
+ // Carrega agent.md (genesis) + skills
25
+ const agentMd = readFileSafe("agent.md");
26
+ const skillDocs = readdirSyncSafe("skills")
27
+ .filter((d) => existsSync(join("skills", d, "SKILL.md")))
28
+ .map((d) => `# skill: ${d}\n${readFileSafe(join("skills", d, "SKILL.md"))}`)
29
+ .join("\n\n");
30
+ const systemPrompt = `${agentMd}\n\n${skillDocs}`;
31
+
32
+ await ctx.logger.info("task iniciada", { goal });
33
+
34
+ // 1. PLAN — analisa código, propõe plano
35
+ const plan = await ctx.llm.chat({
36
+ system: `Você é um engenheiro sênior TypeScript.\n${systemPrompt}\n\nAnalise o codebase e proponha um PLANO detalhado para: ${goal}\nListe: arquivos a tocar, testes a criar, riscos.`,
37
+ prompt: goal,
38
+ });
39
+ await ctx.logger.info("plano", { plan });
40
+
41
+ // 2. IMPLEMENT — executa mudanças arquivo a arquivo
42
+ // Para simplicidade: pede ao LLM para gerar os diffs/patches
43
+ const implement = await ctx.llm.chat({
44
+ system: `Execute o plano. Use ctx.tools para ler/escrever/editar arquivos.\nFaça UMA mudança por vez. Rode tsc --noEmit após cada arquivo.\nResponda JSON: { file, content, reason } ou { done: true, summary }`,
45
+ prompt: plan,
46
+ });
47
+
48
+ let parsed: { file?: string; content?: string; reason?: string; done?: boolean; summary?: string };
49
+ try { parsed = JSON.parse(implement.trim()); } catch { parsed = { done: true, summary: implement }; }
50
+
51
+ if (!parsed.done && parsed.file && parsed.content) {
52
+ await ctx.tools.write(parsed.file, parsed.content);
53
+ await ctx.logger.info("arquivo escrito", { file: parsed.file, reason: parsed.reason });
54
+
55
+ // Typecheck incremental
56
+ const tc = await ctx.tools.exec("tsc --noEmit").catch((e) => e.message);
57
+ await ctx.logger.info("typecheck", { result: tc });
58
+ }
59
+
60
+ // 3. TESTS — roda testes
61
+ const testResult = await ctx.tools.exec("vitest run --reporter=json").catch((e) => e.message);
62
+ await ctx.logger.info("testes", { result: testResult });
63
+
64
+ // 4. VERIFY — validação final
65
+ const verify = await ctx.llm.chat({
66
+ system: "Verifique: goal atendido? Testes passam? Typecheck limpo? Responda JSON: { pass: boolean, gaps: string[] }",
67
+ prompt: `Goal: ${goal}\nPlan: ${plan}\nTestes: ${testResult}`,
68
+ });
69
+
70
+ let verified: { pass: boolean; gaps: string[] };
71
+ try { verified = JSON.parse(verify.trim()); } catch { verified = { pass: false, gaps: ["parse error"] }; }
72
+
73
+ await ctx.logger.info("verificacao", { pass: verified.pass, gaps: verified.gaps });
74
+
75
+ // Work context
76
+ await ctx.work.add("finding", "implementação", { goal, plan, verify: verified });
77
+ await ctx.work.add("artifact", "mudanças", { files: parsed.file ? [parsed.file] : [] });
78
+
79
+ await ctx.events.emit(TASK_DONE_EVENT, {
80
+ result: verified.pass ? "Goal atendido" : `Gaps: ${verified.gaps.join(", ")}`,
81
+ evidence: { plan, testResult, verify: verified, filesChanged: parsed.file ? [parsed.file] : [] },
82
+ });
83
+ });