@orkastery/cli 0.6.0 → 0.6.2
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/adapters/claude-code/agents/ork-check.md +1 -1
- package/adapters/claude-code/agents/ork-go.md +1 -1
- package/adapters/claude-code/agents/ork-goal.md +1 -1
- package/adapters/claude-code/agents/ork-master.md +1 -1
- package/adapters/claude-code/agents/ork-plan.md +1 -1
- package/adapters/claude-code/agents/ork-ship.md +1 -1
- package/adapters/claude-code/commands/ork.md +1 -1
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +2 -0
- package/adapters/codex/skills/ork/SKILL.md +1 -1
- package/adapters/openclaw/openclaw.plugin.json +1 -1
- package/adapters/openclaw/package.json +1 -1
- package/assets/adapters-en/claude-code/agents/ork-check.md +1 -1
- package/assets/adapters-en/claude-code/agents/ork-go.md +1 -1
- package/assets/adapters-en/claude-code/agents/ork-goal.md +1 -1
- package/assets/adapters-en/claude-code/agents/ork-master.md +1 -1
- package/assets/adapters-en/claude-code/agents/ork-plan.md +1 -1
- package/assets/adapters-en/claude-code/agents/ork-ship.md +1 -1
- package/assets/adapters-en/claude-code/commands/ork.md +1 -1
- package/assets/adapters-en/codex/skills/ork/SKILL.md +1 -1
- package/assets/orkmind_fixture.py +4 -1
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +1 -1
- package/assets/skills-en/phases/check-quality/SKILL.md +1 -1
- package/assets/skills-en/phases/go-implementation/SKILL.md +1 -1
- package/dist/adapters/claude-bg.js +9 -7
- package/dist/adapters/grok-events.js +227 -0
- package/dist/adapters/grok-mcp-servidor.js +622 -0
- package/dist/adapters/grok-mcp.js +178 -0
- package/dist/adapters/grok.js +686 -0
- package/dist/agendador-cpu.js +92 -0
- package/dist/branch-de-estado.js +7 -2
- package/dist/changelog-check.js +217 -0
- package/dist/check-agil.js +289 -25
- package/dist/check-paralelo.js +73 -18
- package/dist/ci.js +3 -2
- package/dist/claim-lint.js +29 -0
- package/dist/claims.js +4 -0
- package/dist/conducao.js +5 -0
- package/dist/docs.js +16 -16
- package/dist/doctor-forja.js +1 -3
- package/dist/doctor.js +1 -1
- package/dist/entrega-pr.js +10 -10
- package/dist/fabrica-estado.js +20 -11
- package/dist/fila-pesada.js +121 -11
- package/dist/hitl-classificacao.js +1 -0
- package/dist/horario.js +4 -1
- package/dist/index.js +63 -35
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +27 -9
- package/dist/locale-accounts.js +11 -3
- package/dist/locale-ajuda.js +10 -6
- package/dist/locale-claims.js +16 -2
- package/dist/locale-forja.js +2 -4
- package/dist/locale-grafo.js +56 -1
- package/dist/locale-maestro.js +38 -0
- package/dist/locale-network.js +8 -6
- package/dist/locale-onboarding.js +14 -0
- package/dist/locale-operacao-restante.js +2 -2
- package/dist/locale-preflight.js +80 -0
- package/dist/locale-projetos.js +6 -0
- package/dist/locale-prompts.js +8 -8
- package/dist/locale-pulse.js +4 -0
- package/dist/locale-retry.js +56 -2
- package/dist/locale-security-scan.js +35 -1
- package/dist/locale-ship.js +10 -2
- package/dist/locale-verify.js +15 -0
- package/dist/locale.js +24 -7
- package/dist/maestro-cli.js +12 -17
- package/dist/manifest.js +6 -1
- package/dist/mcp-install.js +24 -13
- package/dist/mcp-server.js +62 -33
- package/dist/mcp-verify-async.js +353 -0
- package/dist/mcp-verify-worker.js +17 -0
- package/dist/mcp-verify.js +10 -1
- package/dist/merge-da-entrega.js +85 -0
- package/dist/network-roadmap.js +18 -14
- package/dist/noctum-aceite.js +154 -14
- package/dist/noctum-cli.js +69 -12
- package/dist/noctum-entrega.js +55 -7
- package/dist/noctum-envelope.js +1 -1
- package/dist/noctum-execucao.js +5 -1
- package/dist/noctum-fechamento.js +18 -7
- package/dist/noctum-fila.js +6 -1
- package/dist/noctum-guarda.js +81 -4
- package/dist/noctum-maquinas.js +5 -1
- package/dist/noctum-modo.js +35 -7
- package/dist/noctum-reconciliacao.js +4 -1
- package/dist/noctum-rede.js +102 -0
- package/dist/noctum-relatorio.js +44 -10
- package/dist/noctum-retomada-rede.js +71 -0
- package/dist/noctum-vigia.js +49 -9
- package/dist/parado-no-condutor.js +14 -15
- package/dist/pedido-conducao.js +51 -0
- package/dist/phase.js +43 -15
- package/dist/postura-local.js +7 -3
- package/dist/preflight.js +27 -27
- package/dist/prompts.js +4 -2
- package/dist/pulse.js +4 -2
- package/dist/ratelimit.js +1 -0
- package/dist/rede.js +24 -12
- package/dist/retry.js +115 -10
- package/dist/runtime-context.js +165 -45
- package/dist/runtime-escada.js +7 -1
- package/dist/runtime-profiles.js +27 -17
- package/dist/runtimes.js +42 -5
- package/dist/security-scan/agil.js +18 -7
- package/dist/security-scan/cli.js +2 -2
- package/dist/security-scan/executor.js +8 -0
- package/dist/security-scan/report.js +1 -1
- package/dist/session-watcher-grok.js +425 -0
- package/dist/session-watcher.js +52 -11
- package/dist/sessoes-contas.js +33 -5
- package/dist/setup.js +11 -11
- package/dist/varredura-acoes.js +8 -15
- package/dist/verify.js +191 -43
- package/package.json +2 -2
- package/skills/core/orkastery-bootstrap/SKILL.md +1 -1
- package/skills/phases/check-quality/SKILL.md +1 -1
- package/skills/phases/go-implementation/SKILL.md +1 -1
package/dist/sessoes-contas.js
CHANGED
|
@@ -33,6 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.RUNTIMES_DAS_SESSOES = void 0;
|
|
36
37
|
exports.pidVivo = pidVivo;
|
|
37
38
|
exports.ehFantasma = ehFantasma;
|
|
38
39
|
exports.encerradaNaLista = encerradaNaLista;
|
|
@@ -49,6 +50,10 @@ exports.sessoesVivasPorPerfil = sessoesVivasPorPerfil;
|
|
|
49
50
|
* perfil do store, sem repetir diretorio, e cada sessao volta com o id do perfil dela (nunca o
|
|
50
51
|
* diretorio nem nada de dentro dele).
|
|
51
52
|
*
|
|
53
|
+
* RM-067 (F4): o `grok` entra com a pasta `sessions/` que o proprio runtime grava em cada casa (`GROK_HOME`), lida so
|
|
54
|
+
* pelos nomes e pelo mtime do `updates.jsonl`. A conta do processo dele so entra quando essa pasta existe: maquina sem o
|
|
55
|
+
* `grok` nao ganha fonte nova.
|
|
56
|
+
*
|
|
52
57
|
* Fantasma (D5): sessao claude-bg com estado nao terminal sem pid, ou com pid sem processo. O
|
|
53
58
|
* `claude agents` guarda o registro, mas nao ha quem trabalhe: ela nao ocupa vaga, e
|
|
54
59
|
* `ork sessions limpar-fantasmas` solta o vinculo do `ork` sem tocar no runtime.
|
|
@@ -57,6 +62,7 @@ const fs = __importStar(require("node:fs"));
|
|
|
57
62
|
const path = __importStar(require("node:path"));
|
|
58
63
|
const claude_bg_1 = require("./adapters/claude-bg");
|
|
59
64
|
const codex_1 = require("./adapters/codex");
|
|
65
|
+
const grok_1 = require("./adapters/grok");
|
|
60
66
|
const runtime_profiles_1 = require("./runtime-profiles");
|
|
61
67
|
const TERMINAIS = ['done', 'completed', 'exited', 'stopped', 'failed'];
|
|
62
68
|
const estadoDe = (s) => String(s.state ?? s.status ?? '').trim().toLowerCase();
|
|
@@ -108,17 +114,26 @@ function contasDeSessoes(raiz, env = process.env) {
|
|
|
108
114
|
try {
|
|
109
115
|
for (const p of (0, runtime_profiles_1.lerPerfis)(raiz).perfis) {
|
|
110
116
|
const d = (0, runtime_profiles_1.perfilDeDespacho)(p);
|
|
111
|
-
|
|
117
|
+
if (exports.RUNTIMES_DAS_SESSOES.includes(d.runtime))
|
|
118
|
+
incluir(d.runtime, d, (0, runtime_profiles_1.diretorioDoPerfil)(d));
|
|
112
119
|
}
|
|
113
120
|
}
|
|
114
121
|
catch (e) {
|
|
115
122
|
fontes.push({ origem: 'perfis de conta (ork accounts)', ok: false, detalhe: e.message });
|
|
116
123
|
}
|
|
117
124
|
}
|
|
118
|
-
for (const runtime of runtime_profiles_1.
|
|
125
|
+
for (const runtime of runtime_profiles_1.RUNTIMES_COM_INVENTARIO)
|
|
119
126
|
incluir(runtime, null, (0, runtime_profiles_1.diretorioImplicito)(runtime, env));
|
|
127
|
+
const casaGrok = (0, runtime_profiles_1.diretorioImplicito)('grok', env);
|
|
128
|
+
if (fs.existsSync(path.join(casaGrok, 'sessions')))
|
|
129
|
+
incluir('grok', null, casaGrok);
|
|
120
130
|
return { contas, fontes };
|
|
121
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* RM-067 (F4): os runtimes cujas sessoes o `ork sessions` lista por conta. O grok entra aqui, e nao em
|
|
134
|
+
* `RUNTIMES_COM_INVENTARIO`, que tambem diz os runtimes de assinatura do #Noctum (a medicao dele segue sem o grok).
|
|
135
|
+
*/
|
|
136
|
+
exports.RUNTIMES_DAS_SESSOES = [...runtime_profiles_1.RUNTIMES_COM_INVENTARIO, 'grok'];
|
|
122
137
|
const rotulo = (c) => c.perfil ? `perfil ${c.perfil.id}` : 'conta do processo';
|
|
123
138
|
/**
|
|
124
139
|
* D4: as sessoes de todas as contas. Consulta que falha vira fonte `ok: false`, nunca "zero
|
|
@@ -154,7 +169,7 @@ function consultarContas(raiz, opcoes = {}) {
|
|
|
154
169
|
sessoes.push({ ...s, runtime: 'claude-bg', perfil, fantasma, viva: !fantasma && !TERMINAIS.includes(estadoDe(s)) });
|
|
155
170
|
}
|
|
156
171
|
}
|
|
157
|
-
else {
|
|
172
|
+
else if (conta.runtime === 'codex') {
|
|
158
173
|
const r = (0, codex_1.consultarRollouts)(opcoes.todas, conta.dir);
|
|
159
174
|
// A conta do processo segue com o caminho de antes; a do perfil vai pelo id, nunca pela pasta.
|
|
160
175
|
fontes.push(...(conta.perfil ? r.resultadosFontes.map(f => ({ ...f,
|
|
@@ -164,6 +179,17 @@ function consultarContas(raiz, opcoes = {}) {
|
|
|
164
179
|
sessoes.push({ ...s, runtime: 'codex', perfil, fantasma: false, viva: estadoDe(s) !== 'completed' && recente });
|
|
165
180
|
}
|
|
166
181
|
}
|
|
182
|
+
else if (conta.runtime === 'grok') {
|
|
183
|
+
// RM-067 (F4): a pasta da sessao que o runtime grava; viva e a escrita recente no updates.jsonl, como no codex.
|
|
184
|
+
const r = (0, grok_1.consultarSessoesGrok)(conta.dir);
|
|
185
|
+
const origem = `grok sessions (${rotulo(conta)})`;
|
|
186
|
+
fontes.push(r.ausente ? { origem, ok: true, ausente: true, detalhe: 'nenhuma sessao grok nesta conta ainda' }
|
|
187
|
+
: { origem, ok: r.ok, detalhe: r.detalhe });
|
|
188
|
+
for (const s of r.sessoes) {
|
|
189
|
+
const recente = typeof s.atividadeEm === 'number' && agoraMs - s.atividadeEm <= janelaMs;
|
|
190
|
+
sessoes.push({ ...s, runtime: 'grok', perfil, fantasma: false, viva: recente });
|
|
191
|
+
}
|
|
192
|
+
}
|
|
167
193
|
}
|
|
168
194
|
return { sessoes, fontes, contas: base.contas };
|
|
169
195
|
}
|
|
@@ -176,10 +202,12 @@ function consultarContas(raiz, opcoes = {}) {
|
|
|
176
202
|
function estadosNasContas(raiz, opcoes = {}) {
|
|
177
203
|
const r = consultarContas(raiz, opcoes);
|
|
178
204
|
const claude = r.fontes.filter(f => f.origem.startsWith('claude agents'));
|
|
179
|
-
if (claude.length > 0 && !claude.some(f => f.ok) && !r.sessoes.some(s => s.runtime === 'codex'))
|
|
205
|
+
if (claude.length > 0 && !claude.some(f => f.ok) && !r.sessoes.some(s => s.runtime === 'codex' || s.runtime === 'grok'))
|
|
180
206
|
return null;
|
|
207
|
+
// RM-067 (F4): a sessao grok sem escrita recente fica `idle`; o runtime nao grava estado terminal que o ork leia sem o conteudo.
|
|
181
208
|
return new Map(r.sessoes.map(s => [s.sessionId,
|
|
182
|
-
s.fantasma ? 'fantasma' : s.runtime === 'codex' ? (s.viva ? 'working' : estadoDe(s))
|
|
209
|
+
s.fantasma ? 'fantasma' : s.runtime === 'codex' ? (s.viva ? 'working' : estadoDe(s))
|
|
210
|
+
: s.runtime === 'grok' ? (s.viva ? 'working' : 'idle') : estadoDe(s)]));
|
|
183
211
|
}
|
|
184
212
|
/**
|
|
185
213
|
* RM-056 (D3): sessoes vivas de cada perfil do runtime nesta maquina, a carga do rodizio por
|
package/dist/setup.js
CHANGED
|
@@ -118,8 +118,9 @@ function validarFallback(lista, principal) {
|
|
|
118
118
|
const m = ENTRADA_DE_FALLBACK.exec(item.trim());
|
|
119
119
|
if (!m)
|
|
120
120
|
throw new Error((0, locale_1.msg)().setup.fallbackInvalido(item));
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
// RM-067 (F4b, G9): desde a F4 todo runtime do registro e de bloco; a recusa lista os que o fallback aceita.
|
|
122
|
+
if (!(0, runtimes_1.runtimeDeBloco)(m[1]))
|
|
123
|
+
throw new Error((0, locale_1.msg)().setup.fallbackDesconhecido(m[1], runtimes_1.RUNTIMES_DE_BLOCO.join(', ')));
|
|
123
124
|
if (vistos.has(m[1]))
|
|
124
125
|
throw new Error((0, locale_1.msg)().setup.fallbackRepetido(m[1]));
|
|
125
126
|
vistos.add(m[1]);
|
|
@@ -134,7 +135,7 @@ function normalizarFallback(valor, principal) {
|
|
|
134
135
|
const saida = [];
|
|
135
136
|
for (const item of valor) {
|
|
136
137
|
const m = typeof item === 'string' ? ENTRADA_DE_FALLBACK.exec(item) : null;
|
|
137
|
-
if (!m || !(0, runtimes_1.
|
|
138
|
+
if (!m || !(0, runtimes_1.runtimeDeBloco)(m[1]) || vistos.has(m[1]))
|
|
138
139
|
continue;
|
|
139
140
|
vistos.add(m[1]);
|
|
140
141
|
saida.push(item);
|
|
@@ -177,7 +178,7 @@ function validarConfigComLimites(config) {
|
|
|
177
178
|
if (!Object.hasOwn(config, 'limites'))
|
|
178
179
|
return;
|
|
179
180
|
validarLimitesDeBloco(config.limites);
|
|
180
|
-
if (typeof config.runtime !== 'string' || !(0, runtimes_1.
|
|
181
|
+
if (typeof config.runtime !== 'string' || !(0, runtimes_1.runtimeDeBloco)(config.runtime) ||
|
|
181
182
|
typeof config.model !== 'string' || config.model.trim() === '' ||
|
|
182
183
|
typeof config.effort !== 'string' || config.effort.trim() === '') {
|
|
183
184
|
throw new Error((0, locale_1.msg)().setup.blocoComLimites);
|
|
@@ -288,7 +289,7 @@ function lerSetup(raiz) {
|
|
|
288
289
|
if (doArquivo[i] === undefined)
|
|
289
290
|
return blocoPadraoDoModo(modo);
|
|
290
291
|
const b = doArquivo[i];
|
|
291
|
-
const runtime = typeof b.runtime === 'string' && (0, runtimes_1.
|
|
292
|
+
const runtime = typeof b.runtime === 'string' && (0, runtimes_1.runtimeDeBloco)(b.runtime)
|
|
292
293
|
? b.runtime
|
|
293
294
|
: doModo.runtime;
|
|
294
295
|
return {
|
|
@@ -529,11 +530,9 @@ function editarBloco(raiz, modo, bloco, edicao, por = 'owner') {
|
|
|
529
530
|
erro: (0, locale_1.msg)().setup.blocoInexistente(bloco, def.tag, def.blocos.length),
|
|
530
531
|
};
|
|
531
532
|
}
|
|
532
|
-
if (edicao.runtime !== undefined && !(0, runtimes_1.
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
erro: (0, locale_1.msg)().setup.runtimeDesconhecido(edicao.runtime, runtimes_1.ORDEM_DOS_RUNTIMES.join(', ')),
|
|
536
|
-
};
|
|
533
|
+
if (edicao.runtime !== undefined && !(0, runtimes_1.runtimeDeBloco)(edicao.runtime)) {
|
|
534
|
+
// RM-067 (F4b, G9): a recusa lista os runtimes que o bloco aceita, o grok entre eles desde a F4.
|
|
535
|
+
return { ...base, erro: (0, locale_1.msg)().setup.runtimeDesconhecido(edicao.runtime, runtimes_1.RUNTIMES_DE_BLOCO.join(', ')) };
|
|
537
536
|
}
|
|
538
537
|
const atual = setup.modos[modo].blocos[bloco - 1];
|
|
539
538
|
if (edicao.runtime !== undefined && edicao.runtime !== atual.runtime && !edicao.model?.trim())
|
|
@@ -646,7 +645,8 @@ function textoDoSetup(raiz, modo) {
|
|
|
646
645
|
saida.push(m.fallback(modo));
|
|
647
646
|
const padrao = blocoPadraoDoModo(modo);
|
|
648
647
|
saida.push(m.resetar(modo, `${padrao.runtime}/${padrao.model}/${padrao.effort}`));
|
|
649
|
-
|
|
648
|
+
// RM-067 (F4b, G9): a tela lista os runtimes de bloco, os que o `--runtime` e o `--fallback` do setup aceitam.
|
|
649
|
+
saida.push(m.runtimes(runtimes_1.RUNTIMES_DE_BLOCO.join(', ')));
|
|
650
650
|
saida.push('');
|
|
651
651
|
saida.push(linhaDaOrigemDoSetup(raiz));
|
|
652
652
|
return saida.join('\n');
|
package/dist/varredura-acoes.js
CHANGED
|
@@ -69,6 +69,7 @@ const path = __importStar(require("node:path"));
|
|
|
69
69
|
const autorizacao_duravel_1 = require("./autorizacao-duravel");
|
|
70
70
|
const conducao_1 = require("./conducao");
|
|
71
71
|
const entrega_pr_1 = require("./entrega-pr");
|
|
72
|
+
const merge_da_entrega_1 = require("./merge-da-entrega");
|
|
72
73
|
const estado_thread_1 = require("./estado-thread");
|
|
73
74
|
const ledger_1 = require("./ledger");
|
|
74
75
|
const locale_1 = require("./locale");
|
|
@@ -181,21 +182,13 @@ function commitsDepois(raiz, t, sha) {
|
|
|
181
182
|
* novo de cada thread, com o head do PR (o segundo pai) e o instante do commit. E a mesma busca do `ork ship
|
|
182
183
|
* registrar-pr` (`mergeDaEntrega`).
|
|
183
184
|
*/
|
|
184
|
-
function mergesDaBase(raiz, remoto, base) {
|
|
185
|
+
function mergesDaBase(raiz, remoto, base, threads) {
|
|
185
186
|
const mapa = new Map();
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const [sha, pais, em, assunto] = linha.split('\t');
|
|
192
|
-
const m = /^ship\(([A-Za-z0-9._-]+)\)/.exec(assunto ?? '');
|
|
193
|
-
if (!m || !sha || !SHA.test(sha) || mapa.has(m[1]))
|
|
194
|
-
continue;
|
|
195
|
-
const segundo = (pais ?? '').split(' ')[1] ?? null;
|
|
196
|
-
const ms = Date.parse(em ?? '');
|
|
197
|
-
mapa.set(m[1], { mergeSha: sha, headSha: segundo && SHA.test(segundo) ? segundo : null,
|
|
198
|
-
em: Number.isFinite(ms) ? new Date(ms).toISOString() : null });
|
|
187
|
+
const reconhecidos = (0, merge_da_entrega_1.mergesDasEntregasNaBase)(raiz, `refs/remotes/${remoto}/${base}`, base, threads.map((t) => ({ thread: t.id, branch: (0, merge_da_entrega_1.branchRegistradaDaEntrega)(raiz, t.id) ?? (0, worktree_1.branchDaWorktree)(t) })));
|
|
188
|
+
for (const t of threads) {
|
|
189
|
+
const merge = reconhecidos.get(t.id)?.[0];
|
|
190
|
+
if (merge)
|
|
191
|
+
mapa.set(t.id, merge);
|
|
199
192
|
}
|
|
200
193
|
return mapa;
|
|
201
194
|
}
|
|
@@ -229,7 +222,7 @@ function pendentesDeRegistrar(carregado, threads, quando, vivas) {
|
|
|
229
222
|
const remoto = manifesto.fabrica.remoto, base = manifesto.worktree.base_branch;
|
|
230
223
|
const saida = [];
|
|
231
224
|
const abertas = threads.filter((t) => t.status !== 'fechada' && (0, worktree_1.branchDaWorktree)(t).startsWith('ork/'));
|
|
232
|
-
const merges = abertas.length ? mergesDaBase(raiz, remoto, base)
|
|
225
|
+
const merges = abertas.length ? mergesDaBase(raiz, remoto, base, abertas)
|
|
233
226
|
: new Map();
|
|
234
227
|
for (const t of abertas) {
|
|
235
228
|
const merge = merges.get(t.id);
|