@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.
Files changed (146) hide show
  1. package/adapters/README.md +11 -0
  2. package/adapters/claude-code/.claude-plugin/plugin.json +3 -1
  3. package/adapters/claude-code/README.md +11 -2
  4. package/adapters/claude-code/agents/ork-check.md +1 -1
  5. package/adapters/claude-code/agents/ork-go.md +2 -2
  6. package/adapters/claude-code/agents/ork-goal.md +1 -1
  7. package/adapters/claude-code/agents/ork-master.md +1 -1
  8. package/adapters/claude-code/agents/ork-plan.md +1 -1
  9. package/adapters/claude-code/agents/ork-ship.md +1 -1
  10. package/adapters/claude-code/commands/master.md +11 -8
  11. package/adapters/claude-code/commands/onboarding.md +3 -2
  12. package/adapters/claude-code/commands/ork.md +8 -0
  13. package/adapters/claude-code/commands/ship.md +2 -2
  14. package/adapters/codex/skills/ork/SKILL.md +12 -1
  15. package/adapters/hermes/README.md +3 -0
  16. package/adapters/hermes/bin/ork-abrir-thread.sh +17 -2
  17. package/adapters/hermes/bin/ork-brain.sh +3 -0
  18. package/adapters/hermes/bin/ork-maestro.sh +4 -1
  19. package/adapters/hermes/bin/ork-network-roadmap.sh +11 -0
  20. package/adapters/hermes/bin/ork-roadmap-status.sh +9 -0
  21. package/adapters/hermes/hermes.plugin.json +2 -0
  22. package/adapters/hermes/hitl-ingress/__init__.py +36 -3
  23. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +19 -20
  24. package/adapters/openclaw/README.md +45 -2
  25. package/adapters/openclaw/dist/hitl-ingress.js +37 -3
  26. package/adapters/openclaw/dist/index.js +93 -21
  27. package/adapters/openclaw/openclaw.plugin.json +10 -1
  28. package/adapters/openclaw/package.json +2 -2
  29. package/adapters/openclaw/src/hitl-ingress.ts +32 -3
  30. package/adapters/openclaw/src/index.ts +109 -21
  31. package/assets/docs/padroes/documentacao-de-produto.md +2 -2
  32. package/assets/docs/padroes/roadmap-de-produto.md +1 -1
  33. package/assets/docs/produto/_modelo-feature.md +2 -0
  34. package/assets/orkmind_bridge.py +214 -1
  35. package/dist/adapters/claude-bg.js +24 -7
  36. package/dist/auditrun.js +1 -1
  37. package/dist/board.js +74 -0
  38. package/dist/branch-de-estado.js +5 -4
  39. package/dist/busca-semantica.js +161 -0
  40. package/dist/ci.js +141 -10
  41. package/dist/claim-lint.js +3 -1
  42. package/dist/company-brain-cli.js +27 -2
  43. package/dist/company-brain-context.js +132 -0
  44. package/dist/company-brain-dossie.js +376 -0
  45. package/dist/company-brain-mcp.js +4 -1
  46. package/dist/conducao.js +71 -18
  47. package/dist/decisao-autonoma.js +42 -0
  48. package/dist/docs.js +135 -25
  49. package/dist/doctor.js +242 -32
  50. package/dist/entrega-pr.js +116 -5
  51. package/dist/experiencia-instalacao.js +256 -0
  52. package/dist/experiencia.js +72 -0
  53. package/dist/fabrica-estado.js +63 -12
  54. package/dist/fechamento.js +105 -0
  55. package/dist/fix.js +3 -3
  56. package/dist/forja.js +435 -0
  57. package/dist/gates.js +9 -1
  58. package/dist/hitl-classificacao.js +11 -1
  59. package/dist/hitl-contract.js +50 -7
  60. package/dist/hitl-curto.js +158 -0
  61. package/dist/hitl-gates.js +67 -1
  62. package/dist/hitl-lote.js +30 -15
  63. package/dist/hitl-presentation.js +10 -7
  64. package/dist/hitl-resumo.js +57 -13
  65. package/dist/hitl-texto-livre.js +150 -0
  66. package/dist/hosts.js +92 -3
  67. package/dist/index.js +637 -45
  68. package/dist/indice-vetorial.js +317 -0
  69. package/dist/init.js +24 -5
  70. package/dist/integracoes-locais.js +3 -1
  71. package/dist/intelligence-benchmark-contract.js +570 -0
  72. package/dist/intelligence-graph-cli.js +584 -0
  73. package/dist/intelligence-graph-contract.js +636 -0
  74. package/dist/intelligence-graph-extract-md.js +487 -0
  75. package/dist/intelligence-graph-extract-ts.js +980 -0
  76. package/dist/intelligence-graph-extract.js +546 -0
  77. package/dist/intelligence-graph-index.js +693 -0
  78. package/dist/intelligence-graph-parsers.js +327 -0
  79. package/dist/intelligence-graph-query.js +344 -0
  80. package/dist/intelligence-graph-repo.js +197 -0
  81. package/dist/leases.js +100 -0
  82. package/dist/ledger.js +23 -0
  83. package/dist/licoes.js +5 -4
  84. package/dist/liveness.js +2 -1
  85. package/dist/maestro-cli.js +10 -1
  86. package/dist/maestro-contract.js +5 -1
  87. package/dist/maestro-discovery.js +16 -2
  88. package/dist/maestro-runtime.js +3 -0
  89. package/dist/maestro-snapshot.js +6 -2
  90. package/dist/manifest.js +166 -5
  91. package/dist/master-batch.js +3 -2
  92. package/dist/master-digest.js +2 -2
  93. package/dist/master-nota.js +203 -0
  94. package/dist/master.js +4 -0
  95. package/dist/mcp-artifacts.js +2 -0
  96. package/dist/mcp-experiencia.js +164 -0
  97. package/dist/mcp-git.js +64 -12
  98. package/dist/mcp-grafo-worker.js +91 -0
  99. package/dist/mcp-grafo.js +233 -0
  100. package/dist/mcp-install.js +5 -2
  101. package/dist/mcp-maestro.js +3 -2
  102. package/dist/mcp-server.js +93 -5
  103. package/dist/mcp-ship.js +2 -0
  104. package/dist/mcp-verify.js +3 -1
  105. package/dist/memoria.js +147 -1
  106. package/dist/network-roadmap.js +907 -0
  107. package/dist/ocupacao.js +43 -3
  108. package/dist/onboarding.js +122 -11
  109. package/dist/orkmind.js +165 -9
  110. package/dist/orquestracao.js +2 -1
  111. package/dist/parado-no-condutor.js +933 -0
  112. package/dist/phase.js +166 -13
  113. package/dist/policies.js +29 -2
  114. package/dist/projeto-alvo.js +551 -0
  115. package/dist/prompts.js +1 -1
  116. package/dist/prova-ativacao.js +345 -0
  117. package/dist/pulse-consentimento.js +4 -2
  118. package/dist/pulse-delivery.js +32 -6
  119. package/dist/pulse-resposta.js +674 -49
  120. package/dist/pulse.js +74 -3
  121. package/dist/retry.js +51 -8
  122. package/dist/roadmap-reservas.js +262 -20
  123. package/dist/roadmap-status.js +348 -0
  124. package/dist/runtime-context.js +5 -1
  125. package/dist/sessoes-inventario.js +7 -1
  126. package/dist/sessoes.js +4 -1
  127. package/dist/ship.js +25 -1
  128. package/dist/thread-close.js +3 -0
  129. package/dist/thread.js +21 -2
  130. package/dist/util.js +71 -4
  131. package/dist/verify.js +6 -5
  132. package/dist/worktree.js +29 -6
  133. package/eval/casos/onboarding.json +1 -1
  134. package/eval/casos/orchestration-experience-pt-br.json +48 -0
  135. package/eval/casos/orchestration-experience.json +48 -0
  136. package/package.json +1 -1
  137. package/schemas/code-artifact-graph.v1.schema.json +581 -0
  138. package/schemas/graph-benchmark.v1.schema.json +2240 -0
  139. package/schemas/maestro-snapshot.schema.json +23 -0
  140. package/skills/README.md +7 -5
  141. package/skills/core/onboarding/SKILL.md +10 -2
  142. package/skills/core/orchestration-experience/SKILL.md +113 -0
  143. package/skills/core/orchestration-experience-pt-br/SKILL.md +112 -0
  144. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  145. package/skills/phases/go-implementation/SKILL.md +2 -0
  146. 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() : 'desconhecido';
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.slice(0, 8)} de ${(0, horario_1.formatarDataHoraRotulada)(r.baseline.gravadaEm)}` : '(nao gravada: falha nao pode ser chamada de regressao)'}`);
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 contagem = git('rev-list', '--count', 'HEAD', '--not', ...conhecidas, shaBase);
218
- const proprios = contagem.ok && /^\d+$/.test(contagem.stdout.trim()) ? Number(contagem.stdout.trim()) : null;
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', detalhe, correcao: `reaplique so os commits da thread sobre a base nova: ${onto}` };
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}`);
@@ -29,7 +29,7 @@
29
29
  "assercoes": [
30
30
  {
31
31
  "tipo": "contem",
32
- "valor": "Valores secretos ficam em",
32
+ "valor": "Valores secretos ficam no ambiente do",
33
33
  "porque": "Âncora operacional fora da tabela, removê-la precisa reprovar o corpus."
34
34
  },
35
35
  {
@@ -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.4.3",
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",