@orkastery/cli 0.5.1 → 0.5.3

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 (110) hide show
  1. package/adapters/claude-code/agents/ork-master.md +2 -0
  2. package/adapters/claude-code/commands/master.md +8 -0
  3. package/adapters/claude-code/commands/ork.md +9 -0
  4. package/adapters/codex/skills/ork/SKILL.md +18 -3
  5. package/adapters/hermes/README.md +1 -0
  6. package/adapters/hermes/bin/ork-network-status.sh +10 -0
  7. package/adapters/hermes/hermes.plugin.json +1 -0
  8. package/adapters/hermes/hitl-ingress/__init__.py +2 -2
  9. package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +6 -5
  10. package/adapters/openclaw/README.md +24 -4
  11. package/adapters/openclaw/dist/hitl-ingress.js +2 -2
  12. package/adapters/openclaw/dist/index.js +46 -11
  13. package/adapters/openclaw/openclaw.plugin.json +5 -1
  14. package/adapters/openclaw/package.json +2 -2
  15. package/adapters/openclaw/src/hitl-ingress.ts +2 -2
  16. package/adapters/openclaw/src/index.ts +49 -11
  17. package/assets/orkmind_bridge.py +117 -9
  18. package/dist/adapters/claude-bg.js +39 -5
  19. package/dist/adapters/codex.js +4 -3
  20. package/dist/agents-md.js +1 -0
  21. package/dist/auditrun.js +5 -1
  22. package/dist/board.js +16 -14
  23. package/dist/branch-de-estado.js +66 -10
  24. package/dist/busca-semantica.js +52 -12
  25. package/dist/canarios-rm057.js +149 -0
  26. package/dist/canarios.js +2 -0
  27. package/dist/ci.js +8 -1
  28. package/dist/claims.js +39 -1
  29. package/dist/company-brain-context.js +158 -22
  30. package/dist/docs.js +48 -9
  31. package/dist/doctor-pulse-cron.js +194 -0
  32. package/dist/doctor-rede.js +149 -0
  33. package/dist/doctor.js +89 -9
  34. package/dist/entrega-pr.js +20 -8
  35. package/dist/esgotamentos.js +181 -0
  36. package/dist/experiencia.js +12 -2
  37. package/dist/fabrica-estado.js +14 -6
  38. package/dist/fabrica-publicar.js +6 -0
  39. package/dist/fechamento.js +20 -66
  40. package/dist/forja.js +31 -7
  41. package/dist/gates.js +5 -1
  42. package/dist/hitl-contract.js +59 -4
  43. package/dist/hitl-curto.js +11 -6
  44. package/dist/hitl-gates.js +5 -0
  45. package/dist/hitl-lote.js +5 -2
  46. package/dist/hitl-resumo.js +9 -0
  47. package/dist/hitl-tempo-parado.js +201 -0
  48. package/dist/hitl-texto-livre.js +5 -5
  49. package/dist/horario.js +27 -0
  50. package/dist/hosts.js +52 -10
  51. package/dist/impedimento.js +205 -0
  52. package/dist/index.js +391 -74
  53. package/dist/indice-vetorial.js +87 -10
  54. package/dist/indice.js +3 -1
  55. package/dist/init.js +17 -0
  56. package/dist/integracoes-locais.js +2 -0
  57. package/dist/intelligence-graph-cli.js +91 -8
  58. package/dist/intelligence-graph-contexto.js +215 -0
  59. package/dist/intelligence-graph-parsers.js +6 -4
  60. package/dist/leases.js +664 -87
  61. package/dist/ledger-stats.js +15 -1
  62. package/dist/ledger.js +3 -0
  63. package/dist/licoes.js +1 -0
  64. package/dist/maestro-runtime.js +4 -1
  65. package/dist/manifest.js +20 -1
  66. package/dist/master-nota.js +14 -5
  67. package/dist/master.js +129 -12
  68. package/dist/mcp-artifacts.js +34 -3
  69. package/dist/mcp-git.js +20 -3
  70. package/dist/mcp-grafo-worker.js +5 -3
  71. package/dist/mcp-grafo.js +50 -4
  72. package/dist/mcp-server.js +14 -1
  73. package/dist/memoria.js +48 -6
  74. package/dist/network-roadmap.js +191 -16
  75. package/dist/ocupacao.js +11 -3
  76. package/dist/orkmind.js +90 -5
  77. package/dist/orquestracao.js +12 -10
  78. package/dist/parado-no-condutor.js +188 -32
  79. package/dist/phase.js +68 -15
  80. package/dist/policies.js +52 -1
  81. package/dist/portfolio.js +4 -1
  82. package/dist/projeto-alvo.js +5 -1
  83. package/dist/prompts.js +36 -1
  84. package/dist/prova-ativacao.js +75 -6
  85. package/dist/pulse-delivery.js +34 -2
  86. package/dist/pulse.js +49 -3
  87. package/dist/ratelimit.js +20 -4
  88. package/dist/recall.js +3 -1
  89. package/dist/rede-adesao.js +399 -0
  90. package/dist/rede-forja.js +289 -0
  91. package/dist/rede-projetos.js +239 -0
  92. package/dist/rede-status.js +336 -0
  93. package/dist/rede.js +980 -0
  94. package/dist/retry.js +69 -2
  95. package/dist/roadmap-status.js +23 -3
  96. package/dist/runtime-profiles.js +22 -1
  97. package/dist/saida-segura.js +58 -0
  98. package/dist/session-watcher-claude.js +113 -23
  99. package/dist/sessoes-contas.js +187 -0
  100. package/dist/sessoes-inventario.js +6 -18
  101. package/dist/sessoes.js +83 -2
  102. package/dist/ship.js +85 -19
  103. package/dist/thread.js +192 -13
  104. package/dist/worktree.js +5 -2
  105. package/eval/fixtures/fx-pedido-colado/caso.json +20 -0
  106. package/package.json +7 -3
  107. package/references/definition-of-done.md +1 -1
  108. package/skills/README.md +1 -1
  109. package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
  110. package/skills/phases/master-metrics/SKILL.md +8 -3
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.MOTIVOS_DE_IMPEDIMENTO_DO_DONO = void 0;
37
+ exports.ehImpedimentoDoDono = ehImpedimentoDoDono;
38
+ exports.ehEsperaDoDono = ehEsperaDoDono;
39
+ exports.classificarImpedimento = classificarImpedimento;
40
+ exports.impedimentoResolvido = impedimentoResolvido;
41
+ exports.correcaoDoImpedimento = correcaoDoImpedimento;
42
+ exports.registrarImpedimentoDoDono = registrarImpedimentoDoDono;
43
+ exports.impedimentoDoEvento = impedimentoDoEvento;
44
+ exports.pedidoCurtoDoImpedimento = pedidoCurtoDoImpedimento;
45
+ /**
46
+ * RM-055: impedimento que so o dono resolve vira HITL.
47
+ *
48
+ * Em 29/09/2026 tres despachos `claude --bg` morreram com "Workspace not trusted. Run `claude` in
49
+ * <worktree> once and accept the trust prompt". O ledger guardou so `phase_dispatch_failed`, as threads
50
+ * ficaram `aberta` e o board, a fabrica e o pulse disseram "espera voce: -". O dono descobriu horas
51
+ * depois, perguntando.
52
+ *
53
+ * Aqui a saida do runtime vira motivo tipado. O motivo que so o dono resolve (aceitar a confianca do
54
+ * diretorio, aceitar termos novos do CLI) abre a pausa do dono com o que trava, o comando exato que ele
55
+ * roda e o que o `ork` faz depois: `ork retry run <thread>` re-despacha a MESMA fase com o MESMO prompt
56
+ * gravado, sem o dono reescrever o pedido. Login ausente e cota esgotada continuam na rotacao de conta
57
+ * (I-33): la quem resolve primeiro e o orquestrador, trocando de perfil. Motivo desconhecido continua
58
+ * generico (`runtime.unavailable`).
59
+ */
60
+ const fs = __importStar(require("node:fs"));
61
+ const os = __importStar(require("node:os"));
62
+ const path = __importStar(require("node:path"));
63
+ const gates_1 = require("./gates");
64
+ const hitl_curto_1 = require("./hitl-curto");
65
+ exports.MOTIVOS_DE_IMPEDIMENTO_DO_DONO = Object.freeze([
66
+ 'runtime.workspace-untrusted', 'runtime.consent-pending',
67
+ ]);
68
+ function ehImpedimentoDoDono(motivo) {
69
+ return typeof motivo === 'string' && exports.MOTIVOS_DE_IMPEDIMENTO_DO_DONO.includes(motivo);
70
+ }
71
+ /**
72
+ * Um evento do ledger que espera o dono: a escalada `human.pending` ou o impedimento tipado do despacho.
73
+ * E a mesma regra para o monitor, a ocupacao de vaga, a fabrica e o pulse.
74
+ */
75
+ function ehEsperaDoDono(e, tipoGateBloqueado = 'gate_blocked') {
76
+ return e.tipo === tipoGateBloqueado && (e.motivo === 'human.pending' || ehImpedimentoDoDono(e.motivo));
77
+ }
78
+ /** Aspas de shell so quando o caminho precisa. */
79
+ function citar(caminho) {
80
+ return /^[A-Za-z0-9_./:@+-]+$/.test(caminho) ? caminho : `'${caminho.replace(/'/g, `'\\''`)}'`;
81
+ }
82
+ const FRASES_DE_CONFIANCA = [
83
+ /workspace not trusted/i,
84
+ /accept the trust (?:prompt|dialog)/i,
85
+ /not inside a trusted directory/i,
86
+ /(?:folder|directory|workspace) (?:is )?not trusted/i,
87
+ ];
88
+ const FRASES_DE_CONSENTIMENTO = [
89
+ /accept (?:the )?(?:updated |new )?(?:terms|consumer terms|privacy policy|usage policy)/i,
90
+ /(?:terms|policy) (?:have|has) (?:been )?updated[^\n]*accept/i,
91
+ /consent (?:is )?required/i,
92
+ ];
93
+ function trechoDa(texto, regra) {
94
+ const linha = texto.split(/\r?\n/).find(l => regra.test(l)) ?? texto;
95
+ return linha.replace(/\s+/g, ' ').trim().slice(0, 240);
96
+ }
97
+ function binarioDo(runtime) {
98
+ return runtime === 'codex' ? 'codex' : 'claude';
99
+ }
100
+ /**
101
+ * Le a saida do runtime (stderr e o erro do adapter) e devolve o impedimento do dono, ou null.
102
+ * Null quer dizer "nao e do dono": o despacho segue no caminho de antes.
103
+ */
104
+ function classificarImpedimento(saida, ctx) {
105
+ const texto = saida ?? '';
106
+ const bin = binarioDo(ctx.runtime);
107
+ const depois = `depois, \`ork retry run ${ctx.thread}\` re-despacha ${ctx.fase} com o mesmo prompt gravado`;
108
+ const confianca = FRASES_DE_CONFIANCA.find(r => r.test(texto));
109
+ if (confianca) {
110
+ return {
111
+ motivo: 'runtime.workspace-untrusted',
112
+ trava: `o ${bin} não confia no diretório da worktree e recusou o despacho de ${ctx.fase}`,
113
+ comando: `cd ${citar(ctx.cwd)} && ${bin}`,
114
+ depois: `aceite a confiança no diretório e saia; ${depois}`,
115
+ trecho: trechoDa(texto, confianca),
116
+ };
117
+ }
118
+ const consentimento = FRASES_DE_CONSENTIMENTO.find(r => r.test(texto));
119
+ if (consentimento) {
120
+ return {
121
+ motivo: 'runtime.consent-pending',
122
+ trava: `o ${bin} espera você aceitar termos novos e recusou o despacho de ${ctx.fase}`,
123
+ comando: bin,
124
+ depois: `aceite os termos e saia; ${depois}`,
125
+ trecho: trechoDa(texto, consentimento),
126
+ };
127
+ }
128
+ return null;
129
+ }
130
+ /**
131
+ * O impedimento ja foi resolvido? So o de confianca do diretorio tem prova local: o `claude` grava
132
+ * `hasTrustDialogAccepted` por projeto no `.claude.json` da conta (o do perfil, com `CLAUDE_CONFIG_DIR`),
133
+ * e a confianca de um diretorio vale para os de baixo. `null` e "nao sei": o retry despacha e o runtime
134
+ * decide; se recusar de novo, a mesma pausa volta.
135
+ */
136
+ function impedimentoResolvido(motivo, ctx) {
137
+ if (motivo !== 'runtime.workspace-untrusted' || ctx.runtime !== 'claude-bg')
138
+ return null;
139
+ // A conta do processo segue o `CLAUDE_CONFIG_DIR` do ambiente, como o proprio `claude`.
140
+ const configDir = ctx.configDir ?? (ctx.home ? null : process.env.CLAUDE_CONFIG_DIR) ?? null;
141
+ const arquivo = configDir ? path.join(configDir, '.claude.json') : path.join(ctx.home ?? os.homedir(), '.claude.json');
142
+ let projetos;
143
+ try {
144
+ const dados = JSON.parse(fs.readFileSync(arquivo, 'utf8'));
145
+ if (!dados || typeof dados.projects !== 'object' || dados.projects === null)
146
+ return null;
147
+ projetos = dados.projects;
148
+ }
149
+ catch {
150
+ return null;
151
+ }
152
+ for (let dir = path.resolve(ctx.cwd);; dir = path.dirname(dir)) {
153
+ if (projetos[dir]?.hasTrustDialogAccepted === true)
154
+ return true;
155
+ if (path.dirname(dir) === dir)
156
+ return false;
157
+ }
158
+ }
159
+ /** A frase de correcao que vai ao gate e ao monitor: o comando e o que vem depois. */
160
+ function correcaoDoImpedimento(i) {
161
+ return `rode \`${i.comando}\`; ${i.depois}`;
162
+ }
163
+ /**
164
+ * RM-055: classifica a saida de um despacho recusado e, quando so o dono resolve, grava o `gate_blocked`
165
+ * tipado que o monitor, a fabrica, o board e o pulse leem como espera do dono. Devolve null quando o
166
+ * motivo nao e do dono (o chamador segue no caminho de antes). Tambem usado pelo redespacho do retry.
167
+ */
168
+ function registrarImpedimentoDoDono(dir, thread, d) {
169
+ const impedimento = classificarImpedimento(d.saida, { thread: thread.id, fase: d.fase, runtime: d.runtime, cwd: d.cwd });
170
+ if (!impedimento)
171
+ return null;
172
+ (0, gates_1.registrarGateBloqueado)(dir, thread.id, { gate: 'phase.dispatch', motivo: impedimento.motivo, modo: thread.modo,
173
+ detalhe: impedimento.trava, correcao: correcaoDoImpedimento(impedimento), fase: d.fase, slug: d.slug,
174
+ runtime: d.runtime, cwd: d.cwd, origem: d.origem, promptPath: d.promptPath, promptSha256: d.promptSha256,
175
+ impedimento: { motivo: impedimento.motivo, comando: impedimento.comando, depois: impedimento.depois, trecho: impedimento.trecho },
176
+ ...(d.perfil ? { perfil: d.perfil } : {}), pausaQualquerModo: true,
177
+ evidencia: 'stderr real do runtime adapter no despacho, nao relato do agente' });
178
+ return impedimento;
179
+ }
180
+ /** O impedimento gravado no `gate_blocked`, lido de volta com tipos; null quando o evento nao o traz. */
181
+ function impedimentoDoEvento(e) {
182
+ const i = e.impedimento;
183
+ if (!i || typeof i.comando !== 'string' || typeof i.depois !== 'string')
184
+ return null;
185
+ return { comando: i.comando, depois: i.depois, trecho: typeof i.trecho === 'string' ? i.trecho : '' };
186
+ }
187
+ /**
188
+ * RM-055 (b): o pedido do impedimento no contrato curto da RM-048 (`ork.hitl-curto/v1`): o que trava,
189
+ * desde quando, o comando exato que o dono roda e o que o ork faz depois. A recomendada e o re-despacho
190
+ * do mesmo prompt; as outras dizem o custo de nao fazer nada e de trocar o runtime do bloco.
191
+ */
192
+ function pedidoCurtoDoImpedimento(d, quando) {
193
+ const retry = `ork retry run ${d.thread}`;
194
+ return (0, hitl_curto_1.montarPedidoCurto)({
195
+ thread: d.thread, fase: d.fase, desde: d.desdeEm,
196
+ pergunta: `Você roda \`${d.impedimento.comando}\` no terminal para destravar o despacho?`,
197
+ corpo: [`${d.motivo}: ${d.detalhe}`, `Depois: ${d.impedimento.depois}.`],
198
+ alternativas: [
199
+ { chave: 'a', texto: 'Rodei o comando', consequencia: `\`${retry}\` re-despacha ${d.fase ?? 'a fase'} com o mesmo prompt gravado`,
200
+ recomendada: { porque: 'nada rodou ainda; o pedido volta igual, sem você reescrever nada' } },
201
+ { chave: 'b', texto: 'Trocar o runtime do bloco', consequencia: 'ork setup <modo> --bloco N --runtime <outro>, e depois o mesmo retry' },
202
+ { chave: 'c', texto: 'Deixar parada', consequencia: 'nada é despachado; a thread segue esperando você' },
203
+ ],
204
+ }, { quando, responder: { tipo: 'terminal', comando: retry } });
205
+ }