@orkastery/cli 0.6.0 → 0.6.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 (65) hide show
  1. package/adapters/openclaw/openclaw.plugin.json +1 -1
  2. package/adapters/openclaw/package.json +1 -1
  3. package/dist/adapters/claude-bg.js +6 -6
  4. package/dist/adapters/grok-events.js +227 -0
  5. package/dist/adapters/grok-mcp-servidor.js +612 -0
  6. package/dist/adapters/grok-mcp.js +178 -0
  7. package/dist/adapters/grok.js +686 -0
  8. package/dist/agendador-cpu.js +92 -0
  9. package/dist/branch-de-estado.js +7 -2
  10. package/dist/check-agil.js +48 -20
  11. package/dist/check-paralelo.js +73 -18
  12. package/dist/conducao.js +5 -0
  13. package/dist/docs.js +9 -16
  14. package/dist/doctor-forja.js +1 -3
  15. package/dist/doctor.js +1 -1
  16. package/dist/entrega-pr.js +10 -10
  17. package/dist/fabrica-estado.js +20 -11
  18. package/dist/horario.js +4 -1
  19. package/dist/index.js +20 -10
  20. package/dist/integracoes-locais.js +2 -0
  21. package/dist/locale-accounts.js +11 -3
  22. package/dist/locale-ajuda.js +10 -6
  23. package/dist/locale-forja.js +2 -4
  24. package/dist/locale-operacao-restante.js +2 -2
  25. package/dist/locale-retry.js +40 -2
  26. package/dist/locale-ship.js +10 -2
  27. package/dist/manifest.js +6 -1
  28. package/dist/mcp-install.js +22 -12
  29. package/dist/mcp-server.js +42 -16
  30. package/dist/merge-da-entrega.js +85 -0
  31. package/dist/network-roadmap.js +18 -14
  32. package/dist/noctum-aceite.js +154 -14
  33. package/dist/noctum-cli.js +69 -12
  34. package/dist/noctum-entrega.js +55 -7
  35. package/dist/noctum-envelope.js +1 -1
  36. package/dist/noctum-execucao.js +5 -1
  37. package/dist/noctum-fechamento.js +18 -7
  38. package/dist/noctum-fila.js +6 -1
  39. package/dist/noctum-guarda.js +81 -4
  40. package/dist/noctum-maquinas.js +5 -1
  41. package/dist/noctum-modo.js +35 -7
  42. package/dist/noctum-reconciliacao.js +4 -1
  43. package/dist/noctum-rede.js +102 -0
  44. package/dist/noctum-relatorio.js +44 -10
  45. package/dist/noctum-retomada-rede.js +71 -0
  46. package/dist/noctum-vigia.js +49 -9
  47. package/dist/parado-no-condutor.js +14 -15
  48. package/dist/phase.js +43 -15
  49. package/dist/postura-local.js +7 -3
  50. package/dist/preflight.js +2 -1
  51. package/dist/ratelimit.js +1 -0
  52. package/dist/retry.js +103 -10
  53. package/dist/runtime-context.js +165 -45
  54. package/dist/runtime-escada.js +7 -1
  55. package/dist/runtime-profiles.js +27 -17
  56. package/dist/runtimes.js +42 -5
  57. package/dist/security-scan/agil.js +18 -7
  58. package/dist/security-scan/executor.js +8 -0
  59. package/dist/session-watcher-grok.js +425 -0
  60. package/dist/session-watcher.js +19 -4
  61. package/dist/sessoes-contas.js +33 -5
  62. package/dist/setup.js +11 -11
  63. package/dist/varredura-acoes.js +8 -15
  64. package/dist/verify.js +26 -10
  65. package/package.json +2 -2
@@ -0,0 +1,178 @@
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.PRAZO_DA_PARTIDA_MS = exports.ESPERA_DO_SERVIDOR_MS = exports.ENV_DO_TOKEN_DO_SERVIDOR_GROK = exports.CAMINHO_DO_SERVIDOR_GROK = exports.ENDERECO_DO_SERVIDOR_GROK = exports.CONTRATO_DO_SERVIDOR_GROK = void 0;
37
+ exports.arquivosDoServidorGrok = arquivosDoServidorGrok;
38
+ exports.lerJsonPequeno = lerJsonPequeno;
39
+ exports.lerReciboServidorGrok = lerReciboServidorGrok;
40
+ exports.iniciarServidorDoGrok = iniciarServidorDoGrok;
41
+ /**
42
+ * RM-067 (F4c, thread ork-rm067f4cmcpd): o lançador do servidor MCP do `ork` da sessão filha do `grok`, fora do sandbox
43
+ * dele. O sandbox do `grok` vale para o processo inteiro e os filhos (G17 da RM-067): o servidor que o `grok` subia por
44
+ * stdio lia o estado, mas não gravava o ledger, os artefatos nem o git da worktree. Desde a F4c, o despacho sobe o servidor
45
+ * antes do `grok`, como processo do próprio `ork` (`grok-mcp-servidor.ts`), e o `grok` se conecta pela forma `url` do guia
46
+ * oficial (G16), com o token na variável do `bearer_token_env_var` (G5). Este módulo fica leve, sem o `mcp-server.ts`: o
47
+ * `grok.ts` o importa, e o servidor é outro arquivo, lançado por caminho como o supervisor do `codex-runner`, fora do ciclo
48
+ * de imports.
49
+ */
50
+ const fs = __importStar(require("node:fs"));
51
+ const path = __importStar(require("node:path"));
52
+ const node_crypto_1 = require("node:crypto");
53
+ const node_child_process_1 = require("node:child_process");
54
+ const codex_runner_1 = require("./codex-runner");
55
+ /** O contrato do pedido e do recibo do servidor. */
56
+ exports.CONTRATO_DO_SERVIDOR_GROK = 'ork.grok-mcp/v1';
57
+ /** D1: só o loopback, porta efêmera, e o caminho do Streamable HTTP. */
58
+ exports.ENDERECO_DO_SERVIDOR_GROK = '127.0.0.1';
59
+ exports.CAMINHO_DO_SERVIDOR_GROK = '/mcp';
60
+ /**
61
+ * D2 (GO-FIX 1, achado 1 da revisão): o token do despacho mora só no ambiente do servidor e no da sessão (o supervisor e o
62
+ * `grok`, com os filhos dele), nesta variável, que a config da worktree nomeia em `bearer_token_env_var` (G5). Num arquivo,
63
+ * a sessão `grok` de outra thread, que no `workspace` lê em qualquer lugar, acharia o token e a porta; o `environ` de outro
64
+ * processo ela não lê, porque o Landlock nega o ptrace, e a leitura do `/proc/<pid>/environ`, a quem não está num domínio
65
+ * aninhado ao dela. E, como a saída de uma ferramenta da sessão pode levar o token a um log, o servidor também confere que a
66
+ * conexão vem da árvore de processos do `grok` (GO-FIX 2, R1).
67
+ */
68
+ exports.ENV_DO_TOKEN_DO_SERVIDOR_GROK = 'ORK_GROK_MCP_TOKEN';
69
+ /** D6: quanto o despacho espera o recibo `pronto` do servidor. */
70
+ exports.ESPERA_DO_SERVIDOR_MS = 30_000;
71
+ /** D5: quanto o servidor espera o `.process.json` do supervisor; o pedido só o muda entre 1 s e 10 min. */
72
+ exports.PRAZO_DA_PARTIDA_MS = 60_000;
73
+ /** Os arquivos do servidor de um despacho, na pasta de sessões da thread, ao lado do log do supervisor. */
74
+ function arquivosDoServidorGrok(logPath) {
75
+ const base = logPath.replace(/\.grok\.jsonl$/, '');
76
+ return { reciboPath: `${base}.grok-mcp.json`, stderrPath: `${base}.grok-mcp.log` };
77
+ }
78
+ const LIMITE_DO_JSON_BYTES = 65536;
79
+ const LIMITE_DA_CAUSA = 300;
80
+ /** JSON pequeno de um arquivo comum, sem seguir link; ausente, grande ou ilegível vira `null`. */
81
+ function lerJsonPequeno(arquivo) {
82
+ let fd;
83
+ try {
84
+ fd = fs.openSync(arquivo, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW | fs.constants.O_NONBLOCK);
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ try {
90
+ const st = fs.fstatSync(fd);
91
+ if (!st.isFile() || st.size > LIMITE_DO_JSON_BYTES)
92
+ return null;
93
+ return JSON.parse(fs.readFileSync(fd, 'utf8'));
94
+ }
95
+ catch {
96
+ return null;
97
+ }
98
+ finally {
99
+ fs.closeSync(fd);
100
+ }
101
+ }
102
+ /** O recibo do servidor; outro contrato vira `null`. */
103
+ function lerReciboServidorGrok(arquivo) {
104
+ const recibo = lerJsonPequeno(arquivo);
105
+ return recibo?.schema === exports.CONTRATO_DO_SERVIDOR_GROK ? recibo : null;
106
+ }
107
+ /** A última linha do stderr do servidor, curta: o motivo de ele ter saído antes de ficar pronto. */
108
+ function causaDoStderr(arquivo) {
109
+ try {
110
+ const linhas = fs.readFileSync(arquivo, 'utf8').trim().split('\n');
111
+ const ultima = (linhas.at(-1) ?? '').trim().slice(0, LIMITE_DA_CAUSA);
112
+ return ultima ? ` (${ultima})` : '';
113
+ }
114
+ catch {
115
+ return '';
116
+ }
117
+ }
118
+ const pausa = new Int32Array(new SharedArrayBuffer(4));
119
+ /**
120
+ * D6: lança o servidor destacado, com o pedido por descritor anônimo e o token no ambiente, e espera o recibo `pronto`. O
121
+ * processo que morre antes, ou o prazo vencido, recusam com `runtime.unavailable`; no prazo vencido, o servidor é encerrado
122
+ * antes da recusa. O ambiente é o do filho do `grok` (o mesmo que o servidor stdio herdava), e o cwd é a worktree.
123
+ */
124
+ function iniciarServidorDoGrok(pedido, cwd, env, esperaMs = exports.ESPERA_DO_SERVIDOR_MS) {
125
+ fs.mkdirSync(path.dirname(pedido.logPath), { recursive: true });
126
+ const { reciboPath, stderrPath } = arquivosDoServidorGrok(pedido.logPath);
127
+ const completo = { schema: exports.CONTRATO_DO_SERVIDOR_GROK, ...pedido, reciboPath };
128
+ const token = (0, node_crypto_1.randomBytes)(32).toString('hex');
129
+ // FD anônimo, como no supervisor: o pedido não fica em argv nem num arquivo persistente; ele não tem segredo.
130
+ const tmp = `${reciboPath}.${(0, node_crypto_1.randomUUID)()}.launch`;
131
+ fs.writeFileSync(tmp, JSON.stringify(completo), { flag: 'wx', mode: 0o600 });
132
+ const entrada = fs.openSync(tmp, 'r');
133
+ fs.unlinkSync(tmp);
134
+ let pid;
135
+ try {
136
+ // `ax`: o log nasce com o despacho e nunca segue um link deixado no lugar dele.
137
+ const erro = fs.openSync(stderrPath, 'ax', 0o600);
138
+ try {
139
+ const filho = (0, node_child_process_1.spawn)(process.execPath, [path.join(__dirname, 'grok-mcp-servidor.js'), '--run'], {
140
+ cwd, env: { ...env, [exports.ENV_DO_TOKEN_DO_SERVIDOR_GROK]: token }, detached: true, stdio: [entrada, 'ignore', erro],
141
+ });
142
+ filho.on('error', () => { });
143
+ filho.unref();
144
+ pid = filho.pid;
145
+ }
146
+ finally {
147
+ fs.closeSync(erro);
148
+ }
149
+ }
150
+ finally {
151
+ fs.closeSync(entrada);
152
+ }
153
+ if (!pid)
154
+ throw new Error('runtime.unavailable: o servidor MCP do ork para o grok nao iniciou');
155
+ const processo = (0, codex_runner_1.identidadeProcesso)(pid);
156
+ const lancado = pid;
157
+ const encerrar = () => {
158
+ if (processo && (0, codex_runner_1.estadoProcesso)(processo) === 'vivo') {
159
+ try {
160
+ process.kill(lancado, 'SIGTERM');
161
+ }
162
+ catch { /* ja saiu */ }
163
+ }
164
+ };
165
+ const prazo = Date.now() + esperaMs;
166
+ for (;;) {
167
+ const recibo = lerReciboServidorGrok(reciboPath);
168
+ if (recibo?.estado === 'pronto' && processo && recibo.processo?.pid === lancado && recibo.processo.inicio === processo.inicio)
169
+ return { url: recibo.url, porta: recibo.porta, token, reciboPath, processo, encerrar };
170
+ if (!processo || (0, codex_runner_1.estadoProcesso)(processo) === 'ausente')
171
+ throw new Error(`runtime.unavailable: o servidor MCP do ork para o grok saiu antes de ficar pronto${causaDoStderr(stderrPath)}`);
172
+ if (Date.now() >= prazo) {
173
+ encerrar();
174
+ throw new Error('runtime.unavailable: o servidor MCP do ork para o grok nao ficou pronto no prazo');
175
+ }
176
+ Atomics.wait(pausa, 0, 0, 50);
177
+ }
178
+ }