ilse-design 0.3.0-beta.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 (190) hide show
  1. package/README.md +187 -0
  2. package/dist/agent/executor.d.ts +20 -0
  3. package/dist/agent/executor.d.ts.map +1 -0
  4. package/dist/agent/executor.js +130 -0
  5. package/dist/agent/executor.js.map +1 -0
  6. package/dist/ai/provider.d.ts +45 -0
  7. package/dist/ai/provider.d.ts.map +1 -0
  8. package/dist/ai/provider.js +374 -0
  9. package/dist/ai/provider.js.map +1 -0
  10. package/dist/analysis/classify-element.d.ts +23 -0
  11. package/dist/analysis/classify-element.d.ts.map +1 -0
  12. package/dist/analysis/classify-element.js +79 -0
  13. package/dist/analysis/classify-element.js.map +1 -0
  14. package/dist/analysis/compare-family.d.ts +22 -0
  15. package/dist/analysis/compare-family.d.ts.map +1 -0
  16. package/dist/analysis/compare-family.js +82 -0
  17. package/dist/analysis/compare-family.js.map +1 -0
  18. package/dist/analysis/profile-component.d.ts +32 -0
  19. package/dist/analysis/profile-component.d.ts.map +1 -0
  20. package/dist/analysis/profile-component.js +119 -0
  21. package/dist/analysis/profile-component.js.map +1 -0
  22. package/dist/bridge/augment.d.ts +20 -0
  23. package/dist/bridge/augment.d.ts.map +1 -0
  24. package/dist/bridge/augment.js +110 -0
  25. package/dist/bridge/augment.js.map +1 -0
  26. package/dist/bridge/store.d.ts +17 -0
  27. package/dist/bridge/store.d.ts.map +1 -0
  28. package/dist/bridge/store.js +70 -0
  29. package/dist/bridge/store.js.map +1 -0
  30. package/dist/bridge/ws-server.d.ts +12 -0
  31. package/dist/bridge/ws-server.d.ts.map +1 -0
  32. package/dist/bridge/ws-server.js +136 -0
  33. package/dist/bridge/ws-server.js.map +1 -0
  34. package/dist/cli/check.d.ts +8 -0
  35. package/dist/cli/check.d.ts.map +1 -0
  36. package/dist/cli/check.js +303 -0
  37. package/dist/cli/check.js.map +1 -0
  38. package/dist/cli/default.d.ts +2 -0
  39. package/dist/cli/default.d.ts.map +1 -0
  40. package/dist/cli/default.js +166 -0
  41. package/dist/cli/default.js.map +1 -0
  42. package/dist/cli/extract.d.ts +5 -0
  43. package/dist/cli/extract.d.ts.map +1 -0
  44. package/dist/cli/extract.js +62 -0
  45. package/dist/cli/extract.js.map +1 -0
  46. package/dist/cli/index.d.ts +3 -0
  47. package/dist/cli/index.d.ts.map +1 -0
  48. package/dist/cli/index.js +111 -0
  49. package/dist/cli/index.js.map +1 -0
  50. package/dist/cli/init.d.ts +5 -0
  51. package/dist/cli/init.d.ts.map +1 -0
  52. package/dist/cli/init.js +190 -0
  53. package/dist/cli/init.js.map +1 -0
  54. package/dist/cli/insight.d.ts +5 -0
  55. package/dist/cli/insight.d.ts.map +1 -0
  56. package/dist/cli/insight.js +141 -0
  57. package/dist/cli/insight.js.map +1 -0
  58. package/dist/cli/listen.d.ts +10 -0
  59. package/dist/cli/listen.d.ts.map +1 -0
  60. package/dist/cli/listen.js +94 -0
  61. package/dist/cli/listen.js.map +1 -0
  62. package/dist/cli/login.d.ts +15 -0
  63. package/dist/cli/login.d.ts.map +1 -0
  64. package/dist/cli/login.js +302 -0
  65. package/dist/cli/login.js.map +1 -0
  66. package/dist/config/limits.d.ts +13 -0
  67. package/dist/config/limits.d.ts.map +1 -0
  68. package/dist/config/limits.js +26 -0
  69. package/dist/config/limits.js.map +1 -0
  70. package/dist/config/mcp-register.d.ts +5 -0
  71. package/dist/config/mcp-register.d.ts.map +1 -0
  72. package/dist/config/mcp-register.js +50 -0
  73. package/dist/config/mcp-register.js.map +1 -0
  74. package/dist/config/preferences.d.ts +22 -0
  75. package/dist/config/preferences.d.ts.map +1 -0
  76. package/dist/config/preferences.js +159 -0
  77. package/dist/config/preferences.js.map +1 -0
  78. package/dist/config/user-config.d.ts +10 -0
  79. package/dist/config/user-config.d.ts.map +1 -0
  80. package/dist/config/user-config.js +32 -0
  81. package/dist/config/user-config.js.map +1 -0
  82. package/dist/constants.d.ts +11 -0
  83. package/dist/constants.d.ts.map +1 -0
  84. package/dist/constants.js +49 -0
  85. package/dist/constants.js.map +1 -0
  86. package/dist/extraction/find-inconsistencies.d.ts +17 -0
  87. package/dist/extraction/find-inconsistencies.d.ts.map +1 -0
  88. package/dist/extraction/find-inconsistencies.js +93 -0
  89. package/dist/extraction/find-inconsistencies.js.map +1 -0
  90. package/dist/extraction/find-patterns.d.ts +20 -0
  91. package/dist/extraction/find-patterns.d.ts.map +1 -0
  92. package/dist/extraction/find-patterns.js +179 -0
  93. package/dist/extraction/find-patterns.js.map +1 -0
  94. package/dist/extraction/index-tokens.d.ts +16 -0
  95. package/dist/extraction/index-tokens.d.ts.map +1 -0
  96. package/dist/extraction/index-tokens.js +103 -0
  97. package/dist/extraction/index-tokens.js.map +1 -0
  98. package/dist/fixer/autofix.d.ts +11 -0
  99. package/dist/fixer/autofix.d.ts.map +1 -0
  100. package/dist/fixer/autofix.js +202 -0
  101. package/dist/fixer/autofix.js.map +1 -0
  102. package/dist/mcp/server.d.ts +3 -0
  103. package/dist/mcp/server.d.ts.map +1 -0
  104. package/dist/mcp/server.js +271 -0
  105. package/dist/mcp/server.js.map +1 -0
  106. package/dist/parsers/repo.d.ts +22 -0
  107. package/dist/parsers/repo.d.ts.map +1 -0
  108. package/dist/parsers/repo.js +165 -0
  109. package/dist/parsers/repo.js.map +1 -0
  110. package/dist/parsers/snapshot.d.ts +15 -0
  111. package/dist/parsers/snapshot.d.ts.map +1 -0
  112. package/dist/parsers/snapshot.js +136 -0
  113. package/dist/parsers/snapshot.js.map +1 -0
  114. package/dist/parsers/tokens.d.ts +10 -0
  115. package/dist/parsers/tokens.d.ts.map +1 -0
  116. package/dist/parsers/tokens.js +119 -0
  117. package/dist/parsers/tokens.js.map +1 -0
  118. package/dist/react/annotator.d.ts +64 -0
  119. package/dist/react/annotator.d.ts.map +1 -0
  120. package/dist/react/annotator.js +279 -0
  121. package/dist/react/annotator.js.map +1 -0
  122. package/dist/react/area-selector.d.ts +14 -0
  123. package/dist/react/area-selector.d.ts.map +1 -0
  124. package/dist/react/area-selector.js +76 -0
  125. package/dist/react/area-selector.js.map +1 -0
  126. package/dist/react/freeze.d.ts +5 -0
  127. package/dist/react/freeze.d.ts.map +1 -0
  128. package/dist/react/freeze.js +109 -0
  129. package/dist/react/freeze.js.map +1 -0
  130. package/dist/react/image-input.d.ts +14 -0
  131. package/dist/react/image-input.d.ts.map +1 -0
  132. package/dist/react/image-input.js +100 -0
  133. package/dist/react/image-input.js.map +1 -0
  134. package/dist/react/index.d.ts +6 -0
  135. package/dist/react/index.d.ts.map +1 -0
  136. package/dist/react/index.js +13 -0
  137. package/dist/react/index.js.map +1 -0
  138. package/dist/react/toolbar.d.ts +2 -0
  139. package/dist/react/toolbar.d.ts.map +1 -0
  140. package/dist/react/toolbar.js +755 -0
  141. package/dist/react/toolbar.js.map +1 -0
  142. package/dist/react/ws-client.d.ts +8 -0
  143. package/dist/react/ws-client.d.ts.map +1 -0
  144. package/dist/react/ws-client.js +71 -0
  145. package/dist/react/ws-client.js.map +1 -0
  146. package/dist/reporters/coverage.d.ts +6 -0
  147. package/dist/reporters/coverage.d.ts.map +1 -0
  148. package/dist/reporters/coverage.js +74 -0
  149. package/dist/reporters/coverage.js.map +1 -0
  150. package/dist/reporters/ds-report.d.ts +8 -0
  151. package/dist/reporters/ds-report.d.ts.map +1 -0
  152. package/dist/reporters/ds-report.js +66 -0
  153. package/dist/reporters/ds-report.js.map +1 -0
  154. package/dist/reporters/terminal.d.ts +43 -0
  155. package/dist/reporters/terminal.d.ts.map +1 -0
  156. package/dist/reporters/terminal.js +361 -0
  157. package/dist/reporters/terminal.js.map +1 -0
  158. package/dist/setup/framework-detect.d.ts +8 -0
  159. package/dist/setup/framework-detect.d.ts.map +1 -0
  160. package/dist/setup/framework-detect.js +109 -0
  161. package/dist/setup/framework-detect.js.map +1 -0
  162. package/dist/setup/inject-component.d.ts +12 -0
  163. package/dist/setup/inject-component.d.ts.map +1 -0
  164. package/dist/setup/inject-component.js +98 -0
  165. package/dist/setup/inject-component.js.map +1 -0
  166. package/dist/types.d.ts +170 -0
  167. package/dist/types.d.ts.map +1 -0
  168. package/dist/types.js +5 -0
  169. package/dist/types.js.map +1 -0
  170. package/dist/utils/ast.d.ts +18 -0
  171. package/dist/utils/ast.d.ts.map +1 -0
  172. package/dist/utils/ast.js +57 -0
  173. package/dist/utils/ast.js.map +1 -0
  174. package/dist/utils/files.d.ts +6 -0
  175. package/dist/utils/files.d.ts.map +1 -0
  176. package/dist/utils/files.js +25 -0
  177. package/dist/utils/files.js.map +1 -0
  178. package/dist/utils/suggest.d.ts +37 -0
  179. package/dist/utils/suggest.d.ts.map +1 -0
  180. package/dist/utils/suggest.js +158 -0
  181. package/dist/utils/suggest.js.map +1 -0
  182. package/dist/validators/coverage.d.ts +24 -0
  183. package/dist/validators/coverage.d.ts.map +1 -0
  184. package/dist/validators/coverage.js +156 -0
  185. package/dist/validators/coverage.js.map +1 -0
  186. package/dist/validators/static.d.ts +14 -0
  187. package/dist/validators/static.d.ts.map +1 -0
  188. package/dist/validators/static.js +398 -0
  189. package/dist/validators/static.js.map +1 -0
  190. package/package.json +64 -0
package/README.md ADDED
@@ -0,0 +1,187 @@
1
+ # Ilse
2
+
3
+ **Olho do designer dentro do agente de código.**
4
+
5
+ Aponte o que está errado na UI. Seu agente corrige.
6
+
7
+ ```bash
8
+ npm install @iversondantas/ilse@beta
9
+ ```
10
+
11
+ ```tsx
12
+ // app/layout.tsx
13
+ import { Ilse } from "@iversondantas/ilse/react";
14
+
15
+ export default function Layout({ children }) {
16
+ return (
17
+ <html>
18
+ <body>
19
+ {children}
20
+ <Ilse />
21
+ </body>
22
+ </html>
23
+ );
24
+ }
25
+ ```
26
+
27
+ Em dev, aparece uma toolbar flutuante. Em prod, desaparece automaticamente.
28
+
29
+ ---
30
+
31
+ ## Setup completo (3 passos)
32
+
33
+ ### 1. Instalar
34
+
35
+ ```bash
36
+ npm install @iversondantas/ilse@beta --legacy-peer-deps
37
+ ```
38
+
39
+ ### 2. Adicionar o componente no layout
40
+
41
+ **Next.js (App Router):**
42
+ ```tsx
43
+ // app/layout.tsx
44
+ import { Ilse } from "@iversondantas/ilse/react";
45
+
46
+ export default function RootLayout({ children }) {
47
+ return (
48
+ <html>
49
+ <body>
50
+ {children}
51
+ <Ilse />
52
+ </body>
53
+ </html>
54
+ );
55
+ }
56
+ ```
57
+
58
+ **Vite / CRA / Remix / Astro:**
59
+ ```tsx
60
+ // App.tsx ou equivalente
61
+ import { Ilse } from "@iversondantas/ilse/react";
62
+
63
+ function App() {
64
+ return (
65
+ <>
66
+ <MyApp />
67
+ <Ilse />
68
+ </>
69
+ );
70
+ }
71
+ ```
72
+
73
+ ### 3. Conectar ao seu agente (opcional)
74
+
75
+ Para o Claude Code corrigir automaticamente:
76
+ ```bash
77
+ npx @iversondantas/ilse@beta setup
78
+ ```
79
+
80
+ Isso registra o MCP server no Claude Code. Reinicie o Claude Code.
81
+
82
+ Para outros agentes (Cursor, VS Code, Codex, ChatGPT): funciona via clipboard automaticamente. Sem setup.
83
+
84
+ ---
85
+
86
+ ## Como usar
87
+
88
+ 1. Rode seu projeto (`npm run dev`)
89
+ 2. Abre no browser — você verá uma toolbar pixelada no canto
90
+ 3. Clica no toolbar → escolhe modo (elemento, texto, área)
91
+ 4. Clica no que está errado na UI
92
+ 5. Escreve o que precisa mudar ("botão torto", "cor errada")
93
+ 6. Clica enviar
94
+
95
+ **Se o MCP está conectado:** a anotação vai direto pro seu agente.
96
+ **Se não está:** copia automático pro clipboard. Cola no chat do agente (Cmd+V).
97
+
98
+ No Claude Code:
99
+ ```
100
+ /ilse
101
+ ```
102
+ Uma palavra. O agente lê todas as anotações pendentes, corrige cada uma, e marca como resolvido.
103
+
104
+ ---
105
+
106
+ ## O que a Ilse captura
107
+
108
+ Quando você anota um elemento, o agente recebe:
109
+
110
+ - **Seletor CSS** (`button.cta-primary`)
111
+ - **Nome do componente React** (via React fiber)
112
+ - **Componente stack** (hierarquia)
113
+ - **Grep pattern** (pra encontrar no código)
114
+ - **Full DOM path**
115
+ - **Styles relevantes** (filtrados por intent — se você disse "cor errada", só manda cores)
116
+ - **Parent context** (flex, gap, layout)
117
+ - **Viewport, URL, DPR** (contexto da página)
118
+ - **Imagem de referência** (se colar com Cmd+V no textarea)
119
+
120
+ O agente não precisa adivinhar — tem tudo que precisa pra agir.
121
+
122
+ ---
123
+
124
+ ## Features
125
+
126
+ - **3 modos de captura** — click em elemento, seleção de texto, arrastar área
127
+ - **Imagem de referência** — Cole screenshot do Figma direto no textarea (Cmd+V)
128
+ - **Animation pause** — Congela animações pra anotar tooltips, toasts, dropdowns
129
+ - **Envio individual ou batch** — anota várias, envia de uma vez
130
+ - **Smart augmentation** — filtra styles por intent (layout, cor, spacing, tipografia)
131
+ - **Fallback inteligente** — MCP → clipboard → modal
132
+ - **Análise estática** (bônus) — `ilse check` detecta tokens hardcoded, a11y, consistência
133
+
134
+ ---
135
+
136
+ ## CLI
137
+
138
+ A Ilse também tem CLI pra análise estática:
139
+
140
+ ```bash
141
+ npx @iversondantas/ilse@beta init # setup interativo
142
+ npx @iversondantas/ilse@beta check # análise estática
143
+ npx @iversondantas/ilse@beta listen # debug mode (WS server)
144
+ ```
145
+
146
+ ---
147
+
148
+ ## Filosofia
149
+
150
+ IA liberou designers do gargalo de execução, mas craft ainda exige esforço humano.
151
+
152
+ A Ilse existe para potencializar o uso de IA no craft. Não é craft vs. IA — pelo contrário. O designer aponta o que o olho vê. O agente faz o que a mão faria.
153
+
154
+ > "Design é uma ferramenta para melhorar a humanidade." — Ilse Crawford
155
+
156
+ ---
157
+
158
+ ## Compatibilidade
159
+
160
+ | Framework | Status |
161
+ |---|---|
162
+ | Next.js 13+ | ✓ |
163
+ | Vite + React | ✓ |
164
+ | Create React App | ✓ |
165
+ | Remix | ✓ |
166
+ | Astro + React | ✓ |
167
+
168
+ | Agente | Integração |
169
+ |---|---|
170
+ | Claude Code | MCP nativo + skill `/ilse` |
171
+ | Cursor | MCP |
172
+ | VS Code (Copilot/Continue) | MCP |
173
+ | Codex, ChatGPT, Gemini | Clipboard automático |
174
+
175
+ ---
176
+
177
+ ## Status
178
+
179
+ Beta público. `0.2.0-beta.x` — em desenvolvimento ativo.
180
+
181
+ Quer reportar bug ou sugerir feature? Abre uma issue: github.com/idantas/ilse
182
+
183
+ ---
184
+
185
+ ## License
186
+
187
+ MIT
@@ -0,0 +1,20 @@
1
+ import type { Annotation } from '../types.js';
2
+ export type AgentKind = 'claude' | 'codex' | 'cursor-agent' | 'gemini' | 'none';
3
+ export interface AgentDetection {
4
+ kind: AgentKind;
5
+ command?: string;
6
+ path?: string;
7
+ }
8
+ export declare function detectAgent(): AgentDetection;
9
+ export interface ExecutionResult {
10
+ ok: boolean;
11
+ summary: string;
12
+ rawOutput?: string;
13
+ error?: string;
14
+ durationMs: number;
15
+ }
16
+ export declare function executeAnnotation(annotation: Annotation, agent: AgentDetection, options?: {
17
+ cwd?: string;
18
+ timeoutMs?: number;
19
+ }): Promise<ExecutionResult>;
20
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/agent/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAqBD,wBAAgB,WAAW,IAAI,cAAc,CAM5C;AA0BD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACjD,OAAO,CAAC,eAAe,CAAC,CAmE1B"}
@@ -0,0 +1,130 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { existsSync } from 'node:fs';
3
+ import { augmentAnnotation } from '../bridge/augment.js';
4
+ // ── Agent detection ─────────────────────────────────────────────────────────
5
+ const AGENT_CANDIDATES = [
6
+ { kind: 'claude', command: 'claude' },
7
+ { kind: 'codex', command: 'codex' },
8
+ { kind: 'cursor-agent', command: 'cursor-agent' },
9
+ { kind: 'gemini', command: 'gemini' },
10
+ ];
11
+ function which(command) {
12
+ const paths = (process.env.PATH ?? '').split(':');
13
+ for (const dir of paths) {
14
+ if (!dir)
15
+ continue;
16
+ const full = `${dir}/${command}`;
17
+ if (existsSync(full))
18
+ return full;
19
+ }
20
+ return null;
21
+ }
22
+ export function detectAgent() {
23
+ for (const { kind, command } of AGENT_CANDIDATES) {
24
+ const path = which(command);
25
+ if (path)
26
+ return { kind, command, path };
27
+ }
28
+ return { kind: 'none' };
29
+ }
30
+ // ── Prompt formatting ───────────────────────────────────────────────────────
31
+ function buildPrompt(annotation) {
32
+ const augmented = augmentAnnotation(annotation);
33
+ return [
34
+ 'Você recebeu uma anotação visual do designer via Ilse (visual feedback tool).',
35
+ '',
36
+ 'Contexto do elemento:',
37
+ augmented.context,
38
+ '',
39
+ 'INSTRUÇÕES:',
40
+ '1. Analise se o problema está na DEFINIÇÃO do componente ou na INSTÂNCIA específica',
41
+ '2. Se é um problema de estilo padrão, corrija no componente base',
42
+ '3. Se é específico dessa instância, corrija só no uso',
43
+ '4. Se o mesmo problema pode existir em outras ocorrências, procure com o grep pattern e corrija todas',
44
+ '5. Seja cirúrgico — edite apenas o necessário',
45
+ '',
46
+ 'Após aplicar as mudanças, responda em UMA linha (máximo 15 palavras) o que você mudou.',
47
+ 'Exemplo: "Ajustei align-items do Button em components/Button.tsx"',
48
+ ].join('\n');
49
+ }
50
+ export async function executeAnnotation(annotation, agent, options = {}) {
51
+ if (agent.kind === 'none' || !agent.command) {
52
+ return { ok: false, summary: '', error: 'Nenhum agente CLI detectado', durationMs: 0 };
53
+ }
54
+ const start = Date.now();
55
+ const prompt = buildPrompt(annotation);
56
+ const cwd = options.cwd ?? process.cwd();
57
+ const timeout = options.timeoutMs ?? 180_000;
58
+ // Build args per agent
59
+ const args = buildArgs(agent.kind, prompt);
60
+ return new Promise((resolve) => {
61
+ let stdout = '';
62
+ let stderr = '';
63
+ let timedOut = false;
64
+ const proc = spawn(agent.command, args, {
65
+ cwd,
66
+ env: process.env,
67
+ stdio: ['ignore', 'pipe', 'pipe'],
68
+ });
69
+ const timer = setTimeout(() => {
70
+ timedOut = true;
71
+ proc.kill('SIGTERM');
72
+ }, timeout);
73
+ proc.stdout?.on('data', (chunk) => { stdout += chunk.toString(); });
74
+ proc.stderr?.on('data', (chunk) => { stderr += chunk.toString(); });
75
+ proc.on('close', (code) => {
76
+ clearTimeout(timer);
77
+ const durationMs = Date.now() - start;
78
+ if (timedOut) {
79
+ resolve({ ok: false, summary: '', error: `Timeout (${timeout}ms)`, durationMs });
80
+ return;
81
+ }
82
+ if (code !== 0) {
83
+ resolve({
84
+ ok: false,
85
+ summary: '',
86
+ error: stderr.trim() || `Exit code ${code}`,
87
+ rawOutput: stdout,
88
+ durationMs,
89
+ });
90
+ return;
91
+ }
92
+ // Extract summary: last non-empty line of stdout (agent's final response)
93
+ const summary = extractSummary(stdout);
94
+ resolve({ ok: true, summary, rawOutput: stdout, durationMs });
95
+ });
96
+ proc.on('error', (err) => {
97
+ clearTimeout(timer);
98
+ resolve({
99
+ ok: false,
100
+ summary: '',
101
+ error: err.message,
102
+ durationMs: Date.now() - start,
103
+ });
104
+ });
105
+ });
106
+ }
107
+ function buildArgs(kind, prompt) {
108
+ switch (kind) {
109
+ case 'claude':
110
+ return ['-p', prompt, '--dangerously-skip-permissions'];
111
+ case 'codex':
112
+ return ['exec', prompt];
113
+ case 'cursor-agent':
114
+ return ['-p', prompt];
115
+ case 'gemini':
116
+ return ['-p', prompt];
117
+ default:
118
+ return [];
119
+ }
120
+ }
121
+ function extractSummary(stdout) {
122
+ const lines = stdout.trim().split('\n').filter(l => l.trim().length > 0);
123
+ if (lines.length === 0)
124
+ return 'Corrigido';
125
+ // Last line is usually the final response
126
+ const last = lines[lines.length - 1].trim();
127
+ // Strip markdown if present
128
+ return last.replace(/^[*•\-#>]+\s*/, '').slice(0, 200);
129
+ }
130
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/agent/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import OpenAI from 'openai';
2
+ import type { AIConfig, AIAnalysisRequest, AIAnalysisResponse, Result } from '../types.js';
3
+ /**
4
+ * Create an OpenRouter client based on AI config.
5
+ * Priority: project config → global ~/.ilserc → env var
6
+ */
7
+ export declare function createClient(config: AIConfig): OpenAI;
8
+ /**
9
+ * Analyze code with AI via OpenRouter.
10
+ */
11
+ export declare function analyzeWithAI(request: AIAnalysisRequest, config: AIConfig): Promise<Result<AIAnalysisResponse>>;
12
+ /**
13
+ * Enrich static violations with AI-generated contextual suggestions.
14
+ */
15
+ export declare function enrichSuggestions(violations: Array<{
16
+ file: string;
17
+ line: number;
18
+ context: string;
19
+ type: string;
20
+ }>, projectStack: {
21
+ dependencies: string[];
22
+ uiComponents: string[];
23
+ }, config: AIConfig): Promise<Result<string[]>>;
24
+ /**
25
+ * Generate contextual aria-labels and alt texts based on code context.
26
+ */
27
+ export declare function enrichLabels(contexts: Array<{
28
+ file: string;
29
+ line: number;
30
+ code: string;
31
+ }>, config: AIConfig): Promise<Result<string[]>>;
32
+ /**
33
+ * Element roles for semantic classification.
34
+ */
35
+ export type AIElementRole = 'button' | 'backdrop' | 'link' | 'toggle' | 'container' | 'unknown';
36
+ /**
37
+ * Classify elements that static heuristics couldn't resolve.
38
+ * Lightweight call — small prompt, minimal context. Runs on free model.
39
+ */
40
+ export declare function classifyElements(contexts: Array<{
41
+ file: string;
42
+ line: number;
43
+ code: string;
44
+ }>, config: AIConfig): Promise<Result<AIElementRole[]>>;
45
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/ai/provider.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAO5B,OAAO,KAAK,EACV,QAAQ,EACR,iBAAiB,EACjB,kBAAkB,EAIlB,MAAM,EACP,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAuBrD;AA4ID;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAiCrC;AA8BD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAChF,YAAY,EAAE;IAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,EAChE,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CA2C3B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7D,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAkD3B;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AAmBhG;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAC7D,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CA4ClC"}