@orkastery/cli 0.4.3 → 0.5.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.
- package/adapters/README.md +11 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +3 -1
- package/adapters/claude-code/README.md +11 -2
- package/adapters/claude-code/agents/ork-check.md +1 -1
- package/adapters/claude-code/agents/ork-go.md +2 -2
- 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/master.md +11 -8
- package/adapters/claude-code/commands/onboarding.md +3 -2
- package/adapters/claude-code/commands/ork.md +8 -0
- package/adapters/claude-code/commands/ship.md +2 -2
- package/adapters/codex/skills/ork/SKILL.md +12 -1
- package/adapters/hermes/README.md +3 -0
- package/adapters/hermes/bin/ork-abrir-thread.sh +17 -2
- package/adapters/hermes/bin/ork-brain.sh +3 -0
- package/adapters/hermes/bin/ork-maestro.sh +4 -1
- package/adapters/hermes/bin/ork-network-roadmap.sh +11 -0
- package/adapters/hermes/bin/ork-roadmap-status.sh +9 -0
- package/adapters/hermes/hermes.plugin.json +2 -0
- package/adapters/hermes/hitl-ingress/__init__.py +36 -3
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +19 -20
- package/adapters/openclaw/README.md +45 -2
- package/adapters/openclaw/dist/hitl-ingress.js +37 -3
- package/adapters/openclaw/dist/index.js +93 -21
- package/adapters/openclaw/openclaw.plugin.json +10 -1
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +32 -3
- package/adapters/openclaw/src/index.ts +109 -21
- package/assets/docs/padroes/documentacao-de-produto.md +2 -2
- package/assets/docs/padroes/roadmap-de-produto.md +1 -1
- package/assets/docs/produto/_modelo-feature.md +2 -0
- package/assets/orkmind_bridge.py +214 -1
- package/dist/adapters/claude-bg.js +24 -7
- package/dist/auditrun.js +1 -1
- package/dist/board.js +74 -0
- package/dist/branch-de-estado.js +5 -4
- package/dist/busca-semantica.js +161 -0
- package/dist/ci.js +141 -10
- package/dist/claim-lint.js +3 -1
- package/dist/company-brain-cli.js +27 -2
- package/dist/company-brain-context.js +132 -0
- package/dist/company-brain-dossie.js +376 -0
- package/dist/company-brain-mcp.js +4 -1
- package/dist/conducao.js +71 -18
- package/dist/decisao-autonoma.js +42 -0
- package/dist/docs.js +135 -25
- package/dist/doctor.js +242 -32
- package/dist/entrega-pr.js +116 -5
- package/dist/experiencia-instalacao.js +256 -0
- package/dist/experiencia.js +72 -0
- package/dist/fabrica-estado.js +63 -12
- package/dist/fechamento.js +105 -0
- package/dist/fix.js +3 -3
- package/dist/forja.js +435 -0
- package/dist/gates.js +9 -1
- package/dist/hitl-classificacao.js +11 -1
- package/dist/hitl-contract.js +50 -7
- package/dist/hitl-curto.js +158 -0
- package/dist/hitl-gates.js +67 -1
- package/dist/hitl-lote.js +30 -15
- package/dist/hitl-presentation.js +10 -7
- package/dist/hitl-resumo.js +57 -13
- package/dist/hitl-texto-livre.js +150 -0
- package/dist/hosts.js +92 -3
- package/dist/index.js +637 -45
- package/dist/indice-vetorial.js +317 -0
- package/dist/init.js +24 -5
- package/dist/integracoes-locais.js +3 -1
- package/dist/intelligence-benchmark-contract.js +570 -0
- package/dist/intelligence-graph-cli.js +584 -0
- package/dist/intelligence-graph-contract.js +636 -0
- package/dist/intelligence-graph-extract-md.js +487 -0
- package/dist/intelligence-graph-extract-ts.js +980 -0
- package/dist/intelligence-graph-extract.js +546 -0
- package/dist/intelligence-graph-index.js +693 -0
- package/dist/intelligence-graph-parsers.js +327 -0
- package/dist/intelligence-graph-query.js +344 -0
- package/dist/intelligence-graph-repo.js +197 -0
- package/dist/leases.js +100 -0
- package/dist/ledger.js +23 -0
- package/dist/licoes.js +5 -4
- package/dist/liveness.js +2 -1
- package/dist/maestro-cli.js +10 -1
- package/dist/maestro-contract.js +5 -1
- package/dist/maestro-discovery.js +16 -2
- package/dist/maestro-runtime.js +3 -0
- package/dist/maestro-snapshot.js +6 -2
- package/dist/manifest.js +166 -5
- package/dist/master-batch.js +3 -2
- package/dist/master-digest.js +2 -2
- package/dist/master-nota.js +203 -0
- package/dist/master.js +4 -0
- package/dist/mcp-artifacts.js +2 -0
- package/dist/mcp-experiencia.js +164 -0
- package/dist/mcp-git.js +64 -12
- package/dist/mcp-grafo-worker.js +91 -0
- package/dist/mcp-grafo.js +233 -0
- package/dist/mcp-install.js +5 -2
- package/dist/mcp-maestro.js +3 -2
- package/dist/mcp-server.js +93 -5
- package/dist/mcp-ship.js +2 -0
- package/dist/mcp-verify.js +3 -1
- package/dist/memoria.js +147 -1
- package/dist/network-roadmap.js +907 -0
- package/dist/ocupacao.js +43 -3
- package/dist/onboarding.js +122 -11
- package/dist/orkmind.js +165 -9
- package/dist/orquestracao.js +2 -1
- package/dist/parado-no-condutor.js +933 -0
- package/dist/phase.js +166 -13
- package/dist/policies.js +29 -2
- package/dist/projeto-alvo.js +551 -0
- package/dist/prompts.js +1 -1
- package/dist/prova-ativacao.js +345 -0
- package/dist/pulse-consentimento.js +4 -2
- package/dist/pulse-delivery.js +32 -6
- package/dist/pulse-resposta.js +674 -49
- package/dist/pulse.js +74 -3
- package/dist/retry.js +51 -8
- package/dist/roadmap-reservas.js +262 -20
- package/dist/roadmap-status.js +348 -0
- package/dist/runtime-context.js +5 -1
- package/dist/sessoes-inventario.js +7 -1
- package/dist/sessoes.js +4 -1
- package/dist/ship.js +25 -1
- package/dist/thread-close.js +3 -0
- package/dist/thread.js +21 -2
- package/dist/util.js +71 -4
- package/dist/verify.js +6 -5
- package/dist/worktree.js +29 -6
- package/eval/casos/onboarding.json +1 -1
- package/eval/casos/orchestration-experience-pt-br.json +48 -0
- package/eval/casos/orchestration-experience.json +48 -0
- package/package.json +1 -1
- package/schemas/code-artifact-graph.v1.schema.json +581 -0
- package/schemas/graph-benchmark.v1.schema.json +2240 -0
- package/schemas/maestro-snapshot.schema.json +23 -0
- package/skills/README.md +7 -5
- package/skills/core/onboarding/SKILL.md +10 -2
- package/skills/core/orchestration-experience/SKILL.md +113 -0
- package/skills/core/orchestration-experience-pt-br/SKILL.md +112 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/go-implementation/SKILL.md +2 -0
- package/skills/phases/ship-release/SKILL.md +6 -3
package/dist/verify.js
CHANGED
|
@@ -183,7 +183,7 @@ function cwdDaThread(raiz, thread) {
|
|
|
183
183
|
/** HEAD real do diretorio de trabalho, carimbado em toda verificacao. */
|
|
184
184
|
function commitReal(cwd) {
|
|
185
185
|
const r = (0, util_1.exec)('git', ['rev-parse', 'HEAD'], cwd);
|
|
186
|
-
return r.ok ? r.stdout.trim() :
|
|
186
|
+
return r.ok ? r.stdout.trim() : util_1.COMMIT_DESCONHECIDO;
|
|
187
187
|
}
|
|
188
188
|
/** O pedido de conducao de uma verificacao, com o prazo derivado dos comandos que ela vai rodar (D3). */
|
|
189
189
|
function pedidoDoVerify(carregado, threadId, operacao, comandos, conducao) {
|
|
@@ -204,11 +204,11 @@ function executorSobConducao(base, manifesto, conducao) {
|
|
|
204
204
|
};
|
|
205
205
|
}
|
|
206
206
|
/** `ork verify --baseline`: grava o estado do mundo ANTES do GO. */
|
|
207
|
-
function gravarBaseline(carregado, threadId, executor = executar, conducao = {}) {
|
|
207
|
+
function gravarBaseline(carregado, threadId, executor = executar, conducao = {}, origem = 'cli') {
|
|
208
208
|
const pedido = pedidoDoVerify(carregado, threadId, 'baseline', comandosDoManifesto(carregado.manifesto).length, conducao);
|
|
209
|
-
return (0, conducao_1.comConducao)(carregado.raiz, threadId, pedido, (tomada) => gravarBaselineSobConducao(carregado, threadId, executorSobConducao(executor, carregado.manifesto, tomada)));
|
|
209
|
+
return (0, conducao_1.comConducao)(carregado.raiz, threadId, pedido, (tomada) => gravarBaselineSobConducao(carregado, threadId, executorSobConducao(executor, carregado.manifesto, tomada), origem));
|
|
210
210
|
}
|
|
211
|
-
function gravarBaselineSobConducao(carregado, threadId, executor) {
|
|
211
|
+
function gravarBaselineSobConducao(carregado, threadId, executor, origem) {
|
|
212
212
|
const { raiz, manifesto } = carregado;
|
|
213
213
|
const thread = (0, thread_1.lerThread)(raiz, threadId);
|
|
214
214
|
const cwd = cwdDaThread(raiz, thread);
|
|
@@ -221,6 +221,7 @@ function gravarBaselineSobConducao(carregado, threadId, executor) {
|
|
|
221
221
|
cwd,
|
|
222
222
|
comandos: comandos.map((c) => ({ nome: c.nome, comando: c.comando, ok: c.ok, code: c.code })),
|
|
223
223
|
fonte: 'execucao real no HEAD, nao relatorio de fase',
|
|
224
|
+
origem,
|
|
224
225
|
});
|
|
225
226
|
return baseline;
|
|
226
227
|
}
|
|
@@ -455,7 +456,7 @@ function textoDoVerify(r) {
|
|
|
455
456
|
linhas.push(`ork verify da thread ${r.thread}`);
|
|
456
457
|
linhas.push(` HEAD real ${r.commit}`);
|
|
457
458
|
linhas.push(` diretorio ${r.cwd}`);
|
|
458
|
-
linhas.push(` baseline ${r.baseline ? `${r.baseline.commit
|
|
459
|
+
linhas.push(` baseline ${r.baseline ? `${(0, util_1.shaCurto)(r.baseline.commit)} de ${(0, horario_1.formatarDataHoraRotulada)(r.baseline.gravadaEm)}` : '(nao gravada: falha nao pode ser chamada de regressao)'}`);
|
|
459
460
|
if (r.preparo) {
|
|
460
461
|
const p = r.preparo;
|
|
461
462
|
linhas.push(` preparo ${p.resultado.ok ? 'ok' : situacaoDoComando(p.resultado)} em ` +
|
package/dist/worktree.js
CHANGED
|
@@ -196,6 +196,11 @@ function garantirWorktree(carregado, id) {
|
|
|
196
196
|
* commit que o git nao tem mais nao entra. `proprios` conta o que o HEAD tem fora delas e da base
|
|
197
197
|
* atual (`null` sem nenhuma base conhecida); `pontoDePartida` e a base conhecida mais nova que e
|
|
198
198
|
* ancestral do HEAD; `semAncestral` diz que HEAD e base atual nao tem historia em comum.
|
|
199
|
+
*
|
|
200
|
+
* RM-037 (fatia 3, defeito 3): `baseReescrita` diz que o ponto de partida nao esta mais na base atual.
|
|
201
|
+
* A base so anda para a frente; quando o ponto em que a thread saiu dela deixa de ser ancestral, a base
|
|
202
|
+
* foi reescrita, mesmo com ancestral comum mais antigo (force-push que tirou commits). Nesse caso o
|
|
203
|
+
* `git rebase <base>` reaplicaria, junto com os commits da thread, os `sairamDaBase` que a reescrita tirou.
|
|
199
204
|
*/
|
|
200
205
|
function historiaPropria(raiz, thread, dir, shaBase) {
|
|
201
206
|
const git = (...args) => (0, util_1.exec)('git', args, dir);
|
|
@@ -212,11 +217,13 @@ function historiaPropria(raiz, thread, dir, shaBase) {
|
|
|
212
217
|
const conhecidas = [...new Set([pontoDaCriacao, ...sincronizadas])].filter(valido);
|
|
213
218
|
const semAncestral = git('merge-base', 'HEAD', shaBase).code === 1;
|
|
214
219
|
const pontoDePartida = [...conhecidas].reverse().find(sha => git('merge-base', '--is-ancestor', sha, 'HEAD').ok) ?? null;
|
|
220
|
+
const baseReescrita = pontoDePartida !== null && !git('merge-base', '--is-ancestor', pontoDePartida, shaBase).ok;
|
|
221
|
+
const numero = (r) => r.ok && /^\d+$/.test(r.stdout.trim()) ? Number(r.stdout.trim()) : null;
|
|
222
|
+
const sairamDaBase = baseReescrita ? numero(git('rev-list', '--count', pontoDePartida, '--not', shaBase)) : null;
|
|
215
223
|
if (!conhecidas.length)
|
|
216
|
-
return { proprios: null, pontoDePartida, semAncestral };
|
|
217
|
-
const
|
|
218
|
-
|
|
219
|
-
return { proprios, pontoDePartida, semAncestral };
|
|
224
|
+
return { proprios: null, pontoDePartida, semAncestral, baseReescrita, sairamDaBase };
|
|
225
|
+
const proprios = numero(git('rev-list', '--count', 'HEAD', '--not', ...conhecidas, shaBase));
|
|
226
|
+
return { proprios, pontoDePartida, semAncestral, baseReescrita, sairamDaBase };
|
|
220
227
|
}
|
|
221
228
|
/**
|
|
222
229
|
* Sincroniza a branch da thread com a base ATUAL (rebase), quando a base avancou.
|
|
@@ -360,9 +367,25 @@ function sincronizarWorktree(carregado, id, opcoes = {}) {
|
|
|
360
367
|
`${historia.proprios ?? 'um numero desconhecido de'} commit(s) proprio(s): o rebase reaplicaria a historia antiga inteira`;
|
|
361
368
|
if (!opcoes.dryRun)
|
|
362
369
|
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes,
|
|
363
|
-
rebaseFeito: false, motivo: 'tree.blocked', semAncestral: true, detalhe });
|
|
370
|
+
rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', semAncestral: true, detalhe });
|
|
371
|
+
return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
372
|
+
motivo: 'tree.blocked', causa: 'base-reescrita', detalhe, correcao: `reaplique so os commits da thread sobre a base nova: ${onto}` };
|
|
373
|
+
}
|
|
374
|
+
// RM-037 (fatia 3, defeito 3): com ancestral comum, o sync caia no `git rebase <base>` abaixo e
|
|
375
|
+
// reaplicava tambem o que a reescrita tirou da base. O ponto de partida fora da base atual e o sinal.
|
|
376
|
+
if (historia.baseReescrita) {
|
|
377
|
+
const ponto = historia.pontoDePartida;
|
|
378
|
+
passos.push(`git merge-base --is-ancestor ${ponto.slice(0, 8)} ${shaBase.slice(0, 8)} (falso: a base foi reescrita)`);
|
|
379
|
+
const detalhe = `a base ${base} foi reescrita: o ponto de partida ${ponto.slice(0, 8)} da branch ${branch} nao esta mais nela, ` +
|
|
380
|
+
`e o rebase comum reaplicaria ${historia.sairamDaBase ?? 'um numero desconhecido de'} commit(s) que sairam da base junto com ` +
|
|
381
|
+
`o(s) ${historia.proprios ?? '?'} da thread (git rev-list --count HEAD --not ${ponto.slice(0, 8)} ${shaBase.slice(0, 8)})`;
|
|
382
|
+
if (!opcoes.dryRun)
|
|
383
|
+
(0, ledger_1.registrar)((0, thread_1.dirThread)(raiz, id), id, ledger_1.TIPOS_DE_EVENTO.worktreeSincronizada, { dir, branch, base, shaBase, shaAntes,
|
|
384
|
+
rebaseFeito: false, motivo: 'tree.blocked', causa: 'base-reescrita', baseReescrita: true, pontoDePartida: ponto,
|
|
385
|
+
sairamDaBase: historia.sairamDaBase, proprios: historia.proprios, detalhe });
|
|
364
386
|
return { ...vazio, shaBase, shaAntes, shaDepois: shaAntes, ok: false, jaAtualizada: false, rebaseFeito: false,
|
|
365
|
-
motivo: 'tree.blocked',
|
|
387
|
+
motivo: 'tree.blocked', causa: 'base-reescrita', detalhe,
|
|
388
|
+
correcao: `reaplique so os commits da thread sobre a base nova: git -C ${dir} rebase --onto ${shaBase} ${ponto}` };
|
|
366
389
|
}
|
|
367
390
|
if (opcoes.dryRun) {
|
|
368
391
|
passos.push(`git rebase ${shaBase}`);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "orchestration-experience-pt-br",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "orchestration-experience-pt-br/conversa",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "Instalação ativa: consultar preferências antes da conversa.",
|
|
9
|
+
"esperado": "Usa dados efetivos e preserva autoridade, evidência e escopo do núcleo.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "ork experiencia show --json",
|
|
14
|
+
"porque": "Âncora operacional: removê-la reprova a proteção estática."
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "orchestration-experience-pt-br/prova",
|
|
20
|
+
"tipo": "racionalizacao",
|
|
21
|
+
"gravidade": "maior",
|
|
22
|
+
"cenario": "Agente sugere aceitar silêncio como aprovação e dizer que o teste passou.",
|
|
23
|
+
"esperado": "Usa dados efetivos e preserva autoridade, evidência e escopo do núcleo.",
|
|
24
|
+
"assercoes": [
|
|
25
|
+
{
|
|
26
|
+
"tipo": "contem",
|
|
27
|
+
"valor": "Silêncio não é aprovação humana",
|
|
28
|
+
"porque": "Âncora operacional: removê-la reprova a proteção estática."
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"racionalizacao": "É mais rápido declarar sucesso sem prova."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "orchestration-experience-pt-br/fronteira",
|
|
35
|
+
"tipo": "borda",
|
|
36
|
+
"gravidade": "maior",
|
|
37
|
+
"cenario": "Sessão filha tenta reservar item ou alterar sandbox por conta da skill.",
|
|
38
|
+
"esperado": "Usa dados efetivos e preserva autoridade, evidência e escopo do núcleo.",
|
|
39
|
+
"assercoes": [
|
|
40
|
+
{
|
|
41
|
+
"tipo": "contem",
|
|
42
|
+
"valor": "Consultar não reserva",
|
|
43
|
+
"porque": "Âncora operacional: removê-la reprova a proteção estática."
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "orchestration-experience",
|
|
3
|
+
"casos": [
|
|
4
|
+
{
|
|
5
|
+
"id": "orchestration-experience/conversa",
|
|
6
|
+
"tipo": "caminho-feliz",
|
|
7
|
+
"gravidade": "maior",
|
|
8
|
+
"cenario": "Instalação ativa: consultar preferências antes da conversa.",
|
|
9
|
+
"esperado": "Usa dados efetivos e preserva autoridade, evidência e escopo do núcleo.",
|
|
10
|
+
"assercoes": [
|
|
11
|
+
{
|
|
12
|
+
"tipo": "contem",
|
|
13
|
+
"valor": "ork experiencia show --json",
|
|
14
|
+
"porque": "Âncora operacional: removê-la reprova a proteção estática."
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "orchestration-experience/prova",
|
|
20
|
+
"tipo": "racionalizacao",
|
|
21
|
+
"gravidade": "maior",
|
|
22
|
+
"cenario": "Agente sugere aceitar silêncio como aprovação e dizer que o teste passou.",
|
|
23
|
+
"esperado": "Usa dados efetivos e preserva autoridade, evidência e escopo do núcleo.",
|
|
24
|
+
"assercoes": [
|
|
25
|
+
{
|
|
26
|
+
"tipo": "contem",
|
|
27
|
+
"valor": "Silence is not human approval",
|
|
28
|
+
"porque": "Âncora operacional: removê-la reprova a proteção estática."
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"racionalizacao": "É mais rápido declarar sucesso sem prova."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "orchestration-experience/fronteira",
|
|
35
|
+
"tipo": "borda",
|
|
36
|
+
"gravidade": "maior",
|
|
37
|
+
"cenario": "Sessão filha tenta reservar item ou alterar sandbox por conta da skill.",
|
|
38
|
+
"esperado": "Usa dados efetivos e preserva autoridade, evidência e escopo do núcleo.",
|
|
39
|
+
"assercoes": [
|
|
40
|
+
{
|
|
41
|
+
"tipo": "contem",
|
|
42
|
+
"valor": "A query does not reserve",
|
|
43
|
+
"porque": "Âncora operacional: removê-la reprova a proteção estática."
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
]
|
|
48
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orkastery/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "A software factory of AI agents that proves its work: parallel threads, verified results, and short decisions only when they matter.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/orkastery/orkastery#readme",
|