ai-maestro 1.0.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.
- package/CHANGELOG.md +11 -0
- package/LICENSE +15 -0
- package/README.md +727 -0
- package/bin/maestro.mjs +246 -0
- package/package.json +29 -0
- package/src/checkpoint.mjs +102 -0
- package/src/codex-diagnostics.mjs +682 -0
- package/src/codex-home-inspect.mjs +252 -0
- package/src/codex-home.mjs +258 -0
- package/src/commands.mjs +809 -0
- package/src/config.mjs +11 -0
- package/src/debug.mjs +164 -0
- package/src/encoding-guard.mjs +125 -0
- package/src/engines/ai-router-engine.mjs +37 -0
- package/src/engines/codex-engine.mjs +21 -0
- package/src/engines/engine.mjs +21 -0
- package/src/engines/registry.mjs +29 -0
- package/src/files.mjs +65 -0
- package/src/format.mjs +132 -0
- package/src/lock.mjs +439 -0
- package/src/memory-log.mjs +18 -0
- package/src/memory.mjs +1 -0
- package/src/orchestration/attempt-chain-runtime.mjs +627 -0
- package/src/orchestration/budget-manager.mjs +121 -0
- package/src/orchestration/capability-registry.mjs +108 -0
- package/src/orchestration/consolidator.mjs +772 -0
- package/src/orchestration/delegation-executor.mjs +262 -0
- package/src/orchestration/delegation-manager.mjs +116 -0
- package/src/orchestration/deployment-intent.mjs +36 -0
- package/src/orchestration/engine-history.mjs +110 -0
- package/src/orchestration/engine-policy.mjs +73 -0
- package/src/orchestration/engine-selector.mjs +187 -0
- package/src/orchestration/execution-context.mjs +45 -0
- package/src/orchestration/failure-classifier.mjs +136 -0
- package/src/orchestration/failure-evidence.mjs +237 -0
- package/src/orchestration/fallback-chain-lock.mjs +217 -0
- package/src/orchestration/fallback-chain-trail.mjs +218 -0
- package/src/orchestration/fallback-executor.mjs +146 -0
- package/src/orchestration/fallback-graph.mjs +106 -0
- package/src/orchestration/fallback-recommendation.mjs +73 -0
- package/src/orchestration/file-conflict-detector.mjs +126 -0
- package/src/orchestration/host-validation.mjs +241 -0
- package/src/orchestration/orchestration-loop.mjs +1971 -0
- package/src/orchestration/orchestration-runtime.mjs +1019 -0
- package/src/orchestration/orchestration-scheduler.mjs +135 -0
- package/src/orchestration/orchestration-trail.mjs +192 -0
- package/src/orchestration/preflight.mjs +212 -0
- package/src/orchestration/provider-health.mjs +566 -0
- package/src/orchestration/provider-router.mjs +352 -0
- package/src/orchestration/rc-check-adapters.mjs +817 -0
- package/src/orchestration/rc-check.mjs +544 -0
- package/src/orchestration/rc-policy.mjs +200 -0
- package/src/orchestration/runtime-gate.mjs +146 -0
- package/src/orchestration/sector-managers.mjs +215 -0
- package/src/orchestration/self-hosting-canary.mjs +231 -0
- package/src/orchestration/self-hosting-readiness.mjs +244 -0
- package/src/orchestration/spec-planner.mjs +877 -0
- package/src/orchestration/subtask-planner.mjs +176 -0
- package/src/orchestration/task-classifier.mjs +241 -0
- package/src/orchestration/verifier.mjs +1608 -0
- package/src/orchestration-commands.mjs +279 -0
- package/src/planner.mjs +38 -0
- package/src/project.mjs +1 -0
- package/src/run-diagnostics.mjs +641 -0
- package/src/runner.mjs +243 -0
- package/src/safety.mjs +116 -0
- package/src/schema.mjs +371 -0
- package/src/session-commands.mjs +521 -0
- package/src/shell.mjs +93 -0
- package/src/smart-planner.mjs +249 -0
- package/src/task-commands.mjs +1182 -0
- package/src/tasks.mjs +134 -0
- package/src/ui/commands.mjs +76 -0
- package/src/ui/events.mjs +45 -0
- package/src/ui/public/app.js +600 -0
- package/src/ui/public/index.html +88 -0
- package/src/ui/public/style.css +460 -0
- package/src/ui/server.mjs +112 -0
- package/src/ui/state.mjs +504 -0
- package/src/usage.mjs +178 -0
- package/src/workspace-diff.mjs +228 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
export const SMART_PLANNER_VERSION = 'smart-heuristic-v1';
|
|
2
|
+
|
|
3
|
+
export function stripAccents(text) {
|
|
4
|
+
return text.normalize('NFD').replace(/[̀-ͯ]/g, '');
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
const ANALYSIS_ONLY_PATTERN = /\b(analisar|entender estrutura|apontar melhorias|nao alterar|sem alterar|sem modificar)\b/;
|
|
8
|
+
const UI_APP_PATTERN = /\b(botao|botoes|button|click|clique|painel|interface|tela|app|frontend|arquivo|arquivos)\b/;
|
|
9
|
+
const BUGFIX_PATTERN = /\b(bug|erro|falha|quebrado|travando)\b|nao funciona/;
|
|
10
|
+
|
|
11
|
+
export function detectRequestKind(request) {
|
|
12
|
+
const text = stripAccents(String(request || '').toLowerCase());
|
|
13
|
+
if (ANALYSIS_ONLY_PATTERN.test(text)) {
|
|
14
|
+
return 'analysis-only';
|
|
15
|
+
}
|
|
16
|
+
if (UI_APP_PATTERN.test(text)) {
|
|
17
|
+
return 'ui-app';
|
|
18
|
+
}
|
|
19
|
+
if (BUGFIX_PATTERN.test(text)) {
|
|
20
|
+
return 'bugfix';
|
|
21
|
+
}
|
|
22
|
+
return 'default';
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function inferEngine(text) {
|
|
26
|
+
const lower = text.toLowerCase();
|
|
27
|
+
if (lower.includes('readme') || lower.includes('checkpoint') || lower.includes('handoff')) {
|
|
28
|
+
return 'memory';
|
|
29
|
+
}
|
|
30
|
+
if (lower.includes('arquitetura critica') || lower.includes('critical architecture') || lower.includes('final review')) {
|
|
31
|
+
return 'premium-review';
|
|
32
|
+
}
|
|
33
|
+
return 'codex9';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function buildUiAppTasks(request) {
|
|
37
|
+
return [
|
|
38
|
+
{
|
|
39
|
+
title: 'Mapear stack e estrutura real do app',
|
|
40
|
+
description: 'Identificar tecnologia usada, arquivos principais, ponto de entrada, scripts disponiveis e forma correta de rodar o app.',
|
|
41
|
+
priority: 'high',
|
|
42
|
+
files: [],
|
|
43
|
+
acceptance: ['Stack identificada', 'Arquivos principais listados', 'Comando de execucao identificado, se existir', 'Nenhuma alteracao de codigo feita nessa tarefa']
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
title: 'Localizar UI, botoes e handlers',
|
|
47
|
+
description: 'Encontrar arquivos responsaveis pela interface, botoes, eventos, callbacks, rotas ou bindings.',
|
|
48
|
+
priority: 'high',
|
|
49
|
+
files: [],
|
|
50
|
+
acceptance: ['Arquivos de UI identificados', 'Botoes existentes listados', 'Handlers/callbacks relacionados encontrados ou ausencia documentada']
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
title: 'Diagnosticar por que os botoes nao funcionam',
|
|
54
|
+
description: 'Investigar causas provaveis dos botoes quebrados, incluindo seletores, IDs, listeners, rotas, backend, APIs locais e erros de console/log.',
|
|
55
|
+
priority: 'high',
|
|
56
|
+
files: [],
|
|
57
|
+
acceptance: ['Causa provavel documentada', 'Arquivos afetados definidos', 'Plano de correcao objetivo']
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
title: 'Corrigir interacoes dos botoes',
|
|
61
|
+
description: 'Implementar correcoes nos eventos/callbacks/rotas dos botoes sem alterar .env e sem deploy.',
|
|
62
|
+
priority: 'high',
|
|
63
|
+
files: [],
|
|
64
|
+
acceptance: ['Botoes clicaveis', 'Cada botao dispara acao esperada', 'Erros tratados', 'Arquivos alterados listados']
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
title: 'Implementar ou corrigir painel de acesso a arquivos',
|
|
68
|
+
description: 'Criar ou corrigir area do app que lista arquivos baixados/disponiveis.',
|
|
69
|
+
priority: 'high',
|
|
70
|
+
files: [],
|
|
71
|
+
acceptance: ['Painel lista arquivos relevantes', 'Estado vazio tratado', 'Erros de leitura tratados']
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
title: 'Implementar abrir arquivo e abrir pasta',
|
|
75
|
+
description: 'Adicionar acoes seguras para abrir arquivo e/ou pasta no sistema, respeitando a stack do projeto.',
|
|
76
|
+
priority: 'high',
|
|
77
|
+
files: [],
|
|
78
|
+
acceptance: ['Abrir arquivo funciona quando suportado', 'Abrir pasta funciona quando suportado', 'Falha mostra mensagem clara']
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
title: 'Validar fluxo completo',
|
|
82
|
+
description: 'Executar testes manuais ou automatizados possiveis.',
|
|
83
|
+
priority: 'medium',
|
|
84
|
+
files: [],
|
|
85
|
+
acceptance: ['Comando de validacao executado', 'Fluxo principal testado', 'Falhas documentadas']
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
title: 'Atualizar memoria, handoff e resumo',
|
|
89
|
+
description: 'Registrar mudancas reais, arquivos alterados, validacoes e pendencias.',
|
|
90
|
+
priority: 'medium',
|
|
91
|
+
files: ['.memory/handoff.md', '.maestro/CHECKPOINT.md'],
|
|
92
|
+
acceptance: ['Handoff atualizado', 'Checkpoint atualizado', 'Proximos passos documentados']
|
|
93
|
+
}
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function buildAnalysisOnlyTasks(request) {
|
|
98
|
+
return [
|
|
99
|
+
{
|
|
100
|
+
title: 'Mapear estrutura do projeto',
|
|
101
|
+
description: 'Mapear a estrutura de pastas e arquivos do projeto sem alterar nenhum arquivo.',
|
|
102
|
+
priority: 'medium',
|
|
103
|
+
files: [],
|
|
104
|
+
acceptance: ['Estrutura de pastas documentada', 'Nao alterar codigo']
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
title: 'Identificar stack e comandos',
|
|
108
|
+
description: 'Identificar a stack tecnologica e os comandos disponiveis (build, test, run) sem alterar codigo.',
|
|
109
|
+
priority: 'medium',
|
|
110
|
+
files: [],
|
|
111
|
+
acceptance: ['Stack identificada', 'Comandos documentados', 'Nao alterar codigo']
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
title: 'Identificar pontos de entrada',
|
|
115
|
+
description: 'Identificar os pontos de entrada principais da aplicacao sem alterar codigo.',
|
|
116
|
+
priority: 'medium',
|
|
117
|
+
files: [],
|
|
118
|
+
acceptance: ['Pontos de entrada listados', 'Nao alterar codigo']
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
title: 'Listar riscos, problemas e melhorias',
|
|
122
|
+
description: 'Listar riscos, problemas e possiveis melhorias observados, sem implementar nenhuma mudanca.',
|
|
123
|
+
priority: 'medium',
|
|
124
|
+
files: [],
|
|
125
|
+
acceptance: ['Riscos e problemas listados', 'Melhorias sugeridas sem implementar', 'Nao alterar codigo']
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
title: 'Gerar relatorio sem alterar codigo',
|
|
129
|
+
description: 'Gerar um relatorio com os achados das tarefas anteriores sem alterar codigo.',
|
|
130
|
+
priority: 'medium',
|
|
131
|
+
files: [],
|
|
132
|
+
acceptance: ['Relatorio gerado', 'Nao alterar codigo']
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
title: 'Atualizar memoria e handoff',
|
|
136
|
+
description: 'Atualizar memoria e handoff com o resumo da analise, sem alterar codigo do projeto analisado.',
|
|
137
|
+
priority: 'low',
|
|
138
|
+
files: ['.memory/handoff.md'],
|
|
139
|
+
acceptance: ['Handoff atualizado', 'Memoria registrada', 'Nao alterar codigo']
|
|
140
|
+
}
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export function buildBugfixTasks(request) {
|
|
145
|
+
return [
|
|
146
|
+
{
|
|
147
|
+
title: 'Reproduzir ou entender bug',
|
|
148
|
+
description: 'Reproduzir o bug relatado ou, se nao for possivel reproduzir, documentar evidencias e hipoteses.',
|
|
149
|
+
priority: 'high',
|
|
150
|
+
files: [],
|
|
151
|
+
acceptance: ['Bug reproduzido ou hipotese documentada', 'Passos de reproducao registrados quando possivel']
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
title: 'Mapear arquivos relacionados',
|
|
155
|
+
description: 'Identificar os arquivos e componentes relacionados ao bug relatado.',
|
|
156
|
+
priority: 'high',
|
|
157
|
+
files: [],
|
|
158
|
+
acceptance: ['Arquivos relacionados identificados', 'Escopo do problema definido']
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
title: 'Corrigir causa provavel',
|
|
162
|
+
description: 'Implementar a correcao para a causa provavel do bug, sem alterar .env e sem deploy.',
|
|
163
|
+
priority: 'high',
|
|
164
|
+
files: [],
|
|
165
|
+
acceptance: ['Causa corrigida', 'Arquivos alterados listados', 'Sem alteracao em .env']
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
title: 'Validar correcao',
|
|
169
|
+
description: 'Executar validacoes que confirmem que o bug foi corrigido.',
|
|
170
|
+
priority: 'medium',
|
|
171
|
+
files: [],
|
|
172
|
+
acceptance: ['Comando de validacao executado', 'Bug nao reproduzido apos a correcao', 'Falhas documentadas se existirem']
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
title: 'Atualizar memoria',
|
|
176
|
+
description: 'Registrar a causa, a correcao e as validacoes no handoff e na memoria do projeto.',
|
|
177
|
+
priority: 'medium',
|
|
178
|
+
files: ['.memory/handoff.md'],
|
|
179
|
+
acceptance: ['Handoff atualizado', 'Memoria registrada']
|
|
180
|
+
}
|
|
181
|
+
];
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function buildDefaultTasks(request) {
|
|
185
|
+
return [
|
|
186
|
+
{
|
|
187
|
+
title: 'Definir escopo e criterios de aceite',
|
|
188
|
+
description: 'Definir o escopo do pedido e registrar criterios de aceite objetivos para a entrega.',
|
|
189
|
+
priority: 'high',
|
|
190
|
+
files: ['.maestro/PLAN.md'],
|
|
191
|
+
acceptance: ['Escopo resumido no plano', 'Criterios de aceite listados']
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
title: 'Mapear arquivos e estrutura necessaria',
|
|
195
|
+
description: 'Identificar arquivos existentes e estrutura necessaria antes de implementar a mudanca.',
|
|
196
|
+
priority: 'high',
|
|
197
|
+
files: [],
|
|
198
|
+
acceptance: ['Arquivos relevantes identificados', 'Mudanca limitada ao escopo']
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
title: 'Implementar funcionalidade principal',
|
|
202
|
+
description: 'Implementar a funcionalidade solicitada.',
|
|
203
|
+
priority: 'high',
|
|
204
|
+
files: [],
|
|
205
|
+
acceptance: ['Funcionalidade principal implementada', 'Sem alteracao em .env', 'Sem deploy']
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
title: 'Adicionar validacoes ou testes manuais',
|
|
209
|
+
description: 'Executar validacoes locais e registrar os comandos testados.',
|
|
210
|
+
priority: 'medium',
|
|
211
|
+
files: [],
|
|
212
|
+
acceptance: ['Comandos de validacao executados', 'Falhas documentadas se existirem']
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
title: 'Atualizar documentacao e memoria',
|
|
216
|
+
description: 'Atualizar README ou memoria do projeto quando a mudanca alterar uso, comandos ou decisoes.',
|
|
217
|
+
priority: 'medium',
|
|
218
|
+
files: ['README.md', '.memory/'],
|
|
219
|
+
acceptance: ['Documentacao atualizada quando necessario', 'Memoria registrada']
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
title: 'Revisao final de seguranca',
|
|
223
|
+
description: 'Revisar se a entrega respeita as restricoes do projeto e nao exige worker premium.',
|
|
224
|
+
priority: 'medium',
|
|
225
|
+
files: [],
|
|
226
|
+
acceptance: ['Sem comandos destrutivos', 'Sem Claude como padrao', 'Sem dependencia do AI-Router antigo']
|
|
227
|
+
}
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const BUILDERS = {
|
|
232
|
+
'analysis-only': buildAnalysisOnlyTasks,
|
|
233
|
+
'ui-app': buildUiAppTasks,
|
|
234
|
+
bugfix: buildBugfixTasks,
|
|
235
|
+
default: buildDefaultTasks
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
export function buildSmartTasks(request, context = {}) {
|
|
239
|
+
const kind = detectRequestKind(request);
|
|
240
|
+
const builder = BUILDERS[kind] || buildDefaultTasks;
|
|
241
|
+
const tasks = builder(request, context).map(task => ({
|
|
242
|
+
...task,
|
|
243
|
+
engine: inferEngine(task.title + ' ' + task.description),
|
|
244
|
+
requestKind: kind,
|
|
245
|
+
sourceRequest: request
|
|
246
|
+
}));
|
|
247
|
+
const plannerKind = kind === 'default' ? SMART_PLANNER_VERSION + ':fallback' : SMART_PLANNER_VERSION;
|
|
248
|
+
return { kind, plannerKind, tasks };
|
|
249
|
+
}
|