@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.
- package/adapters/claude-code/agents/ork-master.md +2 -0
- package/adapters/claude-code/commands/master.md +8 -0
- package/adapters/claude-code/commands/ork.md +9 -0
- package/adapters/codex/skills/ork/SKILL.md +18 -3
- package/adapters/hermes/README.md +1 -0
- package/adapters/hermes/bin/ork-network-status.sh +10 -0
- package/adapters/hermes/hermes.plugin.json +1 -0
- package/adapters/hermes/hitl-ingress/__init__.py +2 -2
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +6 -5
- package/adapters/openclaw/README.md +24 -4
- package/adapters/openclaw/dist/hitl-ingress.js +2 -2
- package/adapters/openclaw/dist/index.js +46 -11
- package/adapters/openclaw/openclaw.plugin.json +5 -1
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +2 -2
- package/adapters/openclaw/src/index.ts +49 -11
- package/assets/orkmind_bridge.py +117 -9
- package/dist/adapters/claude-bg.js +39 -5
- package/dist/adapters/codex.js +4 -3
- package/dist/agents-md.js +1 -0
- package/dist/auditrun.js +5 -1
- package/dist/board.js +16 -14
- package/dist/branch-de-estado.js +66 -10
- package/dist/busca-semantica.js +52 -12
- package/dist/canarios-rm057.js +149 -0
- package/dist/canarios.js +2 -0
- package/dist/ci.js +8 -1
- package/dist/claims.js +39 -1
- package/dist/company-brain-context.js +158 -22
- package/dist/docs.js +48 -9
- package/dist/doctor-pulse-cron.js +194 -0
- package/dist/doctor-rede.js +149 -0
- package/dist/doctor.js +89 -9
- package/dist/entrega-pr.js +20 -8
- package/dist/esgotamentos.js +181 -0
- package/dist/experiencia.js +12 -2
- package/dist/fabrica-estado.js +14 -6
- package/dist/fabrica-publicar.js +6 -0
- package/dist/fechamento.js +20 -66
- package/dist/forja.js +31 -7
- package/dist/gates.js +5 -1
- package/dist/hitl-contract.js +59 -4
- package/dist/hitl-curto.js +11 -6
- package/dist/hitl-gates.js +5 -0
- package/dist/hitl-lote.js +5 -2
- package/dist/hitl-resumo.js +9 -0
- package/dist/hitl-tempo-parado.js +201 -0
- package/dist/hitl-texto-livre.js +5 -5
- package/dist/horario.js +27 -0
- package/dist/hosts.js +52 -10
- package/dist/impedimento.js +205 -0
- package/dist/index.js +391 -74
- package/dist/indice-vetorial.js +87 -10
- package/dist/indice.js +3 -1
- package/dist/init.js +17 -0
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +91 -8
- package/dist/intelligence-graph-contexto.js +215 -0
- package/dist/intelligence-graph-parsers.js +6 -4
- package/dist/leases.js +664 -87
- package/dist/ledger-stats.js +15 -1
- package/dist/ledger.js +3 -0
- package/dist/licoes.js +1 -0
- package/dist/maestro-runtime.js +4 -1
- package/dist/manifest.js +20 -1
- package/dist/master-nota.js +14 -5
- package/dist/master.js +129 -12
- package/dist/mcp-artifacts.js +34 -3
- package/dist/mcp-git.js +20 -3
- package/dist/mcp-grafo-worker.js +5 -3
- package/dist/mcp-grafo.js +50 -4
- package/dist/mcp-server.js +14 -1
- package/dist/memoria.js +48 -6
- package/dist/network-roadmap.js +191 -16
- package/dist/ocupacao.js +11 -3
- package/dist/orkmind.js +90 -5
- package/dist/orquestracao.js +12 -10
- package/dist/parado-no-condutor.js +188 -32
- package/dist/phase.js +68 -15
- package/dist/policies.js +52 -1
- package/dist/portfolio.js +4 -1
- package/dist/projeto-alvo.js +5 -1
- package/dist/prompts.js +36 -1
- package/dist/prova-ativacao.js +75 -6
- package/dist/pulse-delivery.js +34 -2
- package/dist/pulse.js +49 -3
- package/dist/ratelimit.js +20 -4
- package/dist/recall.js +3 -1
- package/dist/rede-adesao.js +399 -0
- package/dist/rede-forja.js +289 -0
- package/dist/rede-projetos.js +239 -0
- package/dist/rede-status.js +336 -0
- package/dist/rede.js +980 -0
- package/dist/retry.js +69 -2
- package/dist/roadmap-status.js +23 -3
- package/dist/runtime-profiles.js +22 -1
- package/dist/saida-segura.js +58 -0
- package/dist/session-watcher-claude.js +113 -23
- package/dist/sessoes-contas.js +187 -0
- package/dist/sessoes-inventario.js +6 -18
- package/dist/sessoes.js +83 -2
- package/dist/ship.js +85 -19
- package/dist/thread.js +192 -13
- package/dist/worktree.js +5 -2
- package/eval/fixtures/fx-pedido-colado/caso.json +20 -0
- package/package.json +7 -3
- package/references/definition-of-done.md +1 -1
- package/skills/README.md +1 -1
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/master-metrics/SKILL.md +8 -3
package/dist/index.js
CHANGED
|
@@ -42,6 +42,7 @@ exports.main = main;
|
|
|
42
42
|
const company_brain_cli_1 = require("./company-brain-cli");
|
|
43
43
|
const estado_thread_1 = require("./estado-thread");
|
|
44
44
|
const intelligence_graph_cli_1 = require("./intelligence-graph-cli");
|
|
45
|
+
const mcp_grafo_1 = require("./mcp-grafo");
|
|
45
46
|
const maestro_cli_1 = require("./maestro-cli");
|
|
46
47
|
const hitl_public_receipt_1 = require("./hitl-public-receipt");
|
|
47
48
|
const hitl_presentation_1 = require("./hitl-presentation");
|
|
@@ -106,6 +107,7 @@ const agents_md_1 = require("./agents-md");
|
|
|
106
107
|
const leases_1 = require("./leases");
|
|
107
108
|
const sessoes_inventario_1 = require("./sessoes-inventario");
|
|
108
109
|
const ledger_stats_1 = require("./ledger-stats");
|
|
110
|
+
const esgotamentos_1 = require("./esgotamentos");
|
|
109
111
|
const sessoes_adopt_1 = require("./sessoes-adopt");
|
|
110
112
|
const sessoes_1 = require("./sessoes");
|
|
111
113
|
const runtime_ambiente_1 = require("./runtime-ambiente");
|
|
@@ -145,9 +147,15 @@ const thread_1 = require("./thread");
|
|
|
145
147
|
const docs_1 = require("./docs");
|
|
146
148
|
const roadmap_reservas_1 = require("./roadmap-reservas");
|
|
147
149
|
const fabrica_estado_1 = require("./fabrica-estado");
|
|
150
|
+
const branch_de_estado_1 = require("./branch-de-estado");
|
|
148
151
|
const network_roadmap_1 = require("./network-roadmap");
|
|
149
152
|
const fabrica_publicar_1 = require("./fabrica-publicar");
|
|
150
153
|
const maquina_1 = require("./maquina");
|
|
154
|
+
const rede_1 = require("./rede");
|
|
155
|
+
const rede_adesao_1 = require("./rede-adesao");
|
|
156
|
+
const saida_segura_1 = require("./saida-segura");
|
|
157
|
+
const rede_forja_1 = require("./rede-forja");
|
|
158
|
+
const rede_status_1 = require("./rede-status");
|
|
151
159
|
const ledger_1 = require("./ledger");
|
|
152
160
|
const tokens_1 = require("./tokens");
|
|
153
161
|
const types_1 = require("./types");
|
|
@@ -244,6 +252,9 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
244
252
|
[--sem-login] do perfil (nunca copia credencial)
|
|
245
253
|
accounts remove <id> Desativa o perfil (diretorio e login ficam onde estao)
|
|
246
254
|
accounts check [<id>] Confere o login de cada perfil e marca o store
|
|
255
|
+
accounts esgotamentos [--desde 7d] [--json]
|
|
256
|
+
Despachos numa conta que outro projeto desta maquina viu esgotada
|
|
257
|
+
(RM-040), so leitura: conta opaca, perfil pelo id, sem diretorio
|
|
247
258
|
setup [<modo>] --reset Volta o modo (ou tudo) ao default
|
|
248
259
|
setup versionar Leva o setup que vale para orkastery.setup.json: por PR, vale em
|
|
249
260
|
todas as maquinas e passa a ser o arquivo editado (I-52)
|
|
@@ -252,6 +263,9 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
252
263
|
[--exige-runtime-diferente] o CHECK precisa de runtime que o GO nao usou
|
|
253
264
|
[--done "<criterio> :: <comando>"] criterio de pronto EXECUTAVEL (use ;; para varios)
|
|
254
265
|
[--slug S] [--assunto A] [--worktree auto|DIR] [--dry-run]
|
|
266
|
+
[--sem-worktree] cria sem worktree (na branch base, o ship barra a entrega com
|
|
267
|
+
push_direto_na_base: block, o padrão do ork init); com
|
|
268
|
+
worktree.por_thread: true, a worktree nasce sem flag
|
|
255
269
|
[--roadmap RM-NNN] reserva o item do roadmap antes de criar (I-47)
|
|
256
270
|
thread list [--todas] [--json] Threads NAO fechadas do projeto (--todas inclui as fechadas)
|
|
257
271
|
thread close <id> --motivo orfa|engano|superada --por Q --justificativa J
|
|
@@ -277,6 +291,8 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
277
291
|
efetivo vai ao ledger como fato verificavel)
|
|
278
292
|
[--canal C] [--correlacao ID] Canal de origem (sem ele, o que o host declara)
|
|
279
293
|
[--esperar [min]] Com a thread ja conduzida, espera a vez (sem: recusa na hora)
|
|
294
|
+
[--perfil ID] Conta do despacho (ork accounts list); inexistente, de outro
|
|
295
|
+
runtime, esgotado ou sem login recusa com motivo tipado
|
|
280
296
|
phase list <thread-id> Historico do ledger da thread
|
|
281
297
|
(mostra o modelo/esforco reais de cada fase)
|
|
282
298
|
ledger stats --desde 7d [--ate ISO] Telemetria economica do ledger (intervalo [desde,ate))
|
|
@@ -284,11 +300,13 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
284
300
|
ledger estimate <thread-id> --sem-ia H --ia-sem-ork H --por Q --metodo M --premissas P
|
|
285
301
|
[--incerteza I] Registra estimativas explicitas da fase PLAN
|
|
286
302
|
|
|
287
|
-
sessions [--all] [--global] [--json] Inventário Claude e Codex da conta
|
|
303
|
+
sessions [--all] [--global] [--json] Inventário Claude e Codex da conta do processo e de cada perfil
|
|
288
304
|
[--exigir-limpo] Sai != 0 com fonte inválida ou sessão sem thread
|
|
289
305
|
sessions adopt <id> [--json] Adota identidade real sem executar prompt
|
|
290
306
|
sessions event --tipo T --sessao ID Ingere JSON limitado no stdin; observa sem aprovar gates
|
|
291
307
|
sessions watch --thread T [--sessao ID] Observa somente a sessão selecionada; --once faz uma varredura
|
|
308
|
+
sessions limpar-fantasmas [--dry-run] Solta do ork (sessao_morta no ledger) a sessao sem pid e sem processo;
|
|
309
|
+
[--json] nunca toca no runtime (RM-056)
|
|
292
310
|
sessions logs <sessao> [--linhas N] Logs de uma sessao
|
|
293
311
|
sessions supersede <thread> <UUID> --fase F --runtime R Confirma encerramento de sessão superada
|
|
294
312
|
sessions request <thread> <UUID> --fase F --runtime R --pergunta P Abre pedido vinculado ao prompt nativo
|
|
@@ -383,6 +401,7 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
383
401
|
completo; --verificar confere contrato, bytes, determinismo e o incremental
|
|
384
402
|
contra a completa; precisa de typescript e micromark
|
|
385
403
|
grafo status [--json] Indices guardados, o do HEAD, os analisadores e o tamanho
|
|
404
|
+
grafo contexto <thread> [--json] Pacote da thread com evidencias e medida em bytes [--teto-bytes N]
|
|
386
405
|
grafo vizinhos <no> [--profundidade N] Vizinhanca de arquivo ou simbolo, com extrator e evidencia de cada aresta
|
|
387
406
|
[--sentido entrada|saida|ambos] [--tipo T,...] [--limite N] [--json]
|
|
388
407
|
grafo chamadores <simbolo> Quem chama (arestas calls que chegam) [--profundidade N] [--limite N] [--json]
|
|
@@ -395,7 +414,7 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
395
414
|
|
|
396
415
|
ship <thread-id> --para <branch> Merge --no-ff serializado por lease e push PROVADO
|
|
397
416
|
ship registrar-pr <thread-id>|--todas A entrega feita por PR vira ship_done: merge ship(<thread>) na base
|
|
398
|
-
[--remoto R] [--json] remota e CI verde no head do PR; depois, ork master --aceitar-omissao
|
|
417
|
+
[--remoto R] [--json] remota e CI verde no head do PR; depois, ork master <thread> --aceitar-omissao
|
|
399
418
|
[--repo <dono/nome> --pr <n>] PR mesclado em repositorio externo de ci.external_repositories
|
|
400
419
|
[--dry-run] Ensaio: as mesmas conferencias, sem gravar ship_done, fase nem fabrica
|
|
401
420
|
[--de <branch>] [--remoto origin] [--autorizar-push <quem>] [--sem-push] [--dry-run]
|
|
@@ -425,15 +444,19 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
425
444
|
master batch --aceitar <thread:assinatura,...> --por <humano>
|
|
426
445
|
master migrar --dry-run --por Q Inspeciona correções sem alterar originais
|
|
427
446
|
master digest <enviar|preview|responder> Digest semanal com recibos do host
|
|
428
|
-
master <thread-id> --score 0-5 --justificativa "<texto>"
|
|
429
|
-
[--classe C[,C]] [--resumo R] [--
|
|
447
|
+
master <thread-id> --score 0-5 --justificativa "<texto>" --por <seu-nome>
|
|
448
|
+
[--classe C[,C]] [--resumo R] [--refazer]
|
|
430
449
|
Fecha a thread: POSTMORTEM + MASTER log + score (so do terminal;
|
|
431
450
|
de processo de host e recusado com master.prova-de-canal)
|
|
432
451
|
master pedir <thread-id> [--formato telegram|terminal|json]
|
|
433
452
|
Pede a nota ao dono com codigo curto; ele responde pelo Telegram
|
|
434
453
|
(<codigo> <0 a 5> <porque>) e a nota vai ao ledger com o recibo (RM-048)
|
|
435
454
|
master [--todas] [--json] As entregas, com o indice derivado do ledger
|
|
436
|
-
master --aceitar-omissao
|
|
455
|
+
master <thread-id> --aceitar-omissao Aceita por omissao SO a entrega desta thread, com registro (ou --thread T)
|
|
456
|
+
[--dry-run] [--json] --dry-run lista o que seria fechado, sem gravar
|
|
457
|
+
master --aceitar-omissao [--dry-run] [--json]
|
|
458
|
+
Aceita TODAS as entregues por omissao, listando cada uma
|
|
459
|
+
(de processo de agente com mais de uma, avisa em stderr)
|
|
437
460
|
master classes As classes de falha fixas do POSTMORTEM
|
|
438
461
|
licoes [--json] O que volta no GOAL e no PLAN da proxima thread (POSTMORTEM e
|
|
439
462
|
MASTER) e as propostas de policy por recorrencia (I-55)
|
|
@@ -469,6 +492,14 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
469
492
|
depois de entrar, sai sozinho ao criar thread, despachar fase,
|
|
470
493
|
entregar e fechar, e a cada batida do pulse
|
|
471
494
|
fabrica sair Para de publicar daqui e tira o retrato desta maquina da branch
|
|
495
|
+
network status [--json] [--sem-remoto] A Orkastery Network desta pessoa: as maquinas, de qualquer diretorio,
|
|
496
|
+
com a fonte, as lacunas e o que nao foi lido (RM-053)
|
|
497
|
+
network entrar [--maquina NOME] Esta maquina entra na rede: repositorio privado <usuario>/orkastery-network
|
|
498
|
+
[--forja github|gitlab] [--repositorio [DONO/]NOME] na forja (criado se falta) e o primeiro retrato;
|
|
499
|
+
[--forcar] --forcar toma um nome que outra instalacao usa (fica no commit)
|
|
500
|
+
network publicar [--forcar] [--json] Grava o retrato desta maquina na casa da rede (push sem forca); depois de
|
|
501
|
+
entrar, sai sozinho na batida do pulse e nos eventos de thread
|
|
502
|
+
network sair Para de publicar daqui e tira o retrato desta maquina da casa
|
|
472
503
|
network roadmap [--projeto P] [--json] Roadmap, reservas e threads de cada maquina de cada projeto, de qualquer diretorio:
|
|
473
504
|
[--sem-remoto] fonte e hora de cada parte, lacuna tipada no que nao leu. P = caminho do clone,
|
|
474
505
|
github:dono/repo, gitlab:grupo/repo ou nome conhecido; sem clone, le a forja (RM-054)
|
|
@@ -514,7 +545,9 @@ Uso: ork [--projeto <nome|caminho>] <comando> [argumentos]
|
|
|
514
545
|
audit finding estado <id> <estado> Carimba o achado (aberto|adiado|resolvido|descartado)
|
|
515
546
|
|
|
516
547
|
thread new <nome> --from-finding <ID> Abre a thread a partir de um achado de auditoria
|
|
517
|
-
[--modo M] [--worktree auto] [--dry-run]
|
|
548
|
+
[--modo M] [--worktree auto] [--sem-worktree] [--dry-run]
|
|
549
|
+
(evidencia, claim e proposta viajam junto; a worktree segue
|
|
550
|
+
worktree.por_thread como no thread new)
|
|
518
551
|
|
|
519
552
|
Regimes de memoria: files (fallback honesto) e orkmind (bloco B6, base propria por tenant
|
|
520
553
|
declarada em memory.database_url_env pelo NOME da variavel de ambiente, sem fallback).
|
|
@@ -574,15 +607,23 @@ function comandoThread(args) {
|
|
|
574
607
|
return 2;
|
|
575
608
|
}
|
|
576
609
|
}
|
|
577
|
-
|
|
578
|
-
|
|
610
|
+
// P4 do ensaio da 0.5.0 (D2): a thread do achado segue a mesma regra de worktree do `thread new`.
|
|
611
|
+
let pedidoAchado;
|
|
612
|
+
try {
|
|
613
|
+
pedidoAchado = (0, thread_1.pedidoDeWorktree)({ worktree: args.opcoes.worktree, semWorktree: args.opcoes['sem-worktree'] }, carregado.manifesto.worktree.por_thread);
|
|
614
|
+
}
|
|
615
|
+
catch (e) {
|
|
616
|
+
console.error(e.message);
|
|
617
|
+
return 2;
|
|
618
|
+
}
|
|
579
619
|
const r = (0, auditrun_1.abrirThreadDoAchado)(carregado, doAchado, {
|
|
580
620
|
nome: args.posicionais[2],
|
|
581
621
|
modo: modoAchado ?? undefined,
|
|
582
622
|
slug: texto(args.opcoes.slug),
|
|
583
623
|
assunto: texto(args.opcoes.assunto),
|
|
584
|
-
criarWorktree:
|
|
585
|
-
worktree:
|
|
624
|
+
criarWorktree: pedidoAchado.criar,
|
|
625
|
+
worktree: pedidoAchado.dir,
|
|
626
|
+
origemDaWorktree: pedidoAchado.origem,
|
|
586
627
|
dryRun: args.opcoes['dry-run'] === true,
|
|
587
628
|
});
|
|
588
629
|
if (!r.ok) {
|
|
@@ -607,6 +648,13 @@ function comandoThread(args) {
|
|
|
607
648
|
console.log((0, thread_1.resumoDaThread)(r.thread));
|
|
608
649
|
console.log('');
|
|
609
650
|
console.log(` slug em 3 partes: ${(0, phase_1.descreverSlug)(r.thread.slug)}`);
|
|
651
|
+
const linhaDaWorktreeDoAchado = (0, thread_1.linhaDaWorktree)(r.worktreePor, gravadaDoAchado);
|
|
652
|
+
if (linhaDaWorktreeDoAchado)
|
|
653
|
+
console.log(linhaDaWorktreeDoAchado);
|
|
654
|
+
const avisoDaWorktreeDoAchado = r.worktreeFalharia ? (0, thread_1.avisoDeWorktreeQueFalharia)(r.worktreeFalharia)
|
|
655
|
+
: (0, thread_1.avisoDaWorktree)(pedidoAchado.origem, { thread: r.thread, gravada: gravadaDoAchado, worktreePor: r.worktreePor }, carregado.manifesto);
|
|
656
|
+
if (avisoDaWorktreeDoAchado)
|
|
657
|
+
console.error(avisoDaWorktreeDoAchado);
|
|
610
658
|
}
|
|
611
659
|
if (r.motivo === 'claims.unverifiable') {
|
|
612
660
|
console.log('');
|
|
@@ -673,16 +721,29 @@ function comandoThread(args) {
|
|
|
673
721
|
return { criterio, comando };
|
|
674
722
|
});
|
|
675
723
|
const dryRun = args.opcoes['dry-run'] === true;
|
|
676
|
-
|
|
677
|
-
//
|
|
678
|
-
//
|
|
679
|
-
|
|
724
|
+
// `--worktree auto` (ou `--worktree` sozinho) cria a worktree isolada da thread; um caminho reusa um
|
|
725
|
+
// diretorio que ja existe. P4 do ensaio da 0.5.0: sem flag, `worktree.por_thread: true` cria como o
|
|
726
|
+
// `--worktree auto`, e `--sem-worktree` cria sem ela. Uso invalido sai antes da reserva do roadmap.
|
|
727
|
+
let pedido;
|
|
728
|
+
try {
|
|
729
|
+
pedido = (0, thread_1.pedidoDeWorktree)({ worktree: args.opcoes.worktree, semWorktree: args.opcoes['sem-worktree'] }, carregado.manifesto.worktree.por_thread);
|
|
730
|
+
}
|
|
731
|
+
catch (e) {
|
|
732
|
+
console.error(e.message);
|
|
733
|
+
return 2;
|
|
734
|
+
}
|
|
680
735
|
const brutoCiclo = texto(args.opcoes.ciclo) ?? texto(args.opcoes.variante);
|
|
681
736
|
const variante = brutoCiclo ? (0, ciclos_1.parseVariante)(brutoCiclo) : null;
|
|
682
737
|
if (brutoCiclo && !variante) {
|
|
683
738
|
console.error(`variante de ciclo invalida: "${brutoCiclo}". Use uma de: ${Object.keys(ciclos_1.VARIANTES).join(', ')}`);
|
|
684
739
|
return 2;
|
|
685
740
|
}
|
|
741
|
+
// P4 do ensaio da 0.5.0 (D4, CHECK): a recusa do ciclo sai antes da reserva do roadmap, como os outros erros de
|
|
742
|
+
// uso; a do `novaThread` fica como defesa de quem o chama direto.
|
|
743
|
+
if (variante && (0, ciclos_1.definicaoDaVariante)(variante).exigeWorktree && pedido.origem === 'sem-worktree') {
|
|
744
|
+
console.error(`uso: o ciclo ${variante} exige worktree isolada: crie a thread sem --sem-worktree ou escolha outro ciclo`);
|
|
745
|
+
return 2;
|
|
746
|
+
}
|
|
686
747
|
const brutoFatias = texto(args.opcoes.fatias);
|
|
687
748
|
// I-47: `--roadmap RM-NNN` reserva o item ANTES de criar a thread. A reserva e o passo
|
|
688
749
|
// atomico entre maquinas (o primeiro push vence); a thread e local. Se a criacao falhar,
|
|
@@ -696,8 +757,9 @@ function comandoThread(args) {
|
|
|
696
757
|
modo,
|
|
697
758
|
slug: texto(args.opcoes.slug),
|
|
698
759
|
assunto: texto(args.opcoes.assunto),
|
|
699
|
-
worktree:
|
|
700
|
-
criarWorktree,
|
|
760
|
+
worktree: pedido.dir,
|
|
761
|
+
criarWorktree: pedido.criar,
|
|
762
|
+
origemDaWorktree: pedido.origem,
|
|
701
763
|
dryRun,
|
|
702
764
|
variante,
|
|
703
765
|
branch: texto(args.opcoes.branch),
|
|
@@ -731,6 +793,11 @@ function comandoThread(args) {
|
|
|
731
793
|
console.log((0, thread_1.resumoDaThread)(thread));
|
|
732
794
|
console.log('');
|
|
733
795
|
console.log(` slug em 3 partes: ${(0, phase_1.descreverSlug)(thread.slug)}`);
|
|
796
|
+
const linhaDaWorktreeNova = (0, thread_1.linhaDaWorktree)(criada.worktreePor, gravada, variante);
|
|
797
|
+
if (linhaDaWorktreeNova)
|
|
798
|
+
console.log(linhaDaWorktreeNova);
|
|
799
|
+
const avisoDaWorktreeNova = criada.worktreeFalharia ? (0, thread_1.avisoDeWorktreeQueFalharia)(criada.worktreeFalharia)
|
|
800
|
+
: (0, thread_1.avisoDaWorktree)(pedido.origem, criada, carregado.manifesto);
|
|
734
801
|
const avisoSemBase = (0, thread_1.avisoDeThreadSemBase)(thread, gravada);
|
|
735
802
|
if (gravada) {
|
|
736
803
|
console.log(` estado: .orkastery/threads/${thread.id}/thread.json`);
|
|
@@ -743,6 +810,8 @@ function comandoThread(args) {
|
|
|
743
810
|
console.log(`Proximo passo: ork phase run ${thread.id} ${thread.faseAtual} --prompt "<pedido>"`);
|
|
744
811
|
}
|
|
745
812
|
}
|
|
813
|
+
if (avisoDaWorktreeNova)
|
|
814
|
+
console.error(avisoDaWorktreeNova);
|
|
746
815
|
if (avisoSemBase)
|
|
747
816
|
console.error(avisoSemBase);
|
|
748
817
|
return 0;
|
|
@@ -980,7 +1049,20 @@ function comandoAccounts(args) {
|
|
|
980
1049
|
imprimir();
|
|
981
1050
|
return falhas > 0 ? 1 : 0;
|
|
982
1051
|
}
|
|
983
|
-
|
|
1052
|
+
if (sub === 'esgotamentos') {
|
|
1053
|
+
// RM-040 (B7): so leitura do registro de contas e dos ledgers dos projetos registrados.
|
|
1054
|
+
let relatorio;
|
|
1055
|
+
try {
|
|
1056
|
+
relatorio = (0, esgotamentos_1.relatorioDeEsgotamentos)({ desde: texto(args.opcoes.desde) ?? '7d' });
|
|
1057
|
+
}
|
|
1058
|
+
catch (e) {
|
|
1059
|
+
console.error(`${e.message} (use --desde 7d, 24h, 30m ou uma data ISO)`);
|
|
1060
|
+
return 2;
|
|
1061
|
+
}
|
|
1062
|
+
console.log(args.opcoes.json === true ? JSON.stringify(relatorio, null, 2) : (0, esgotamentos_1.textoDosEsgotamentos)(relatorio));
|
|
1063
|
+
return 0;
|
|
1064
|
+
}
|
|
1065
|
+
console.error(`subcomando desconhecido: accounts ${sub} (use list, add, remove, check ou esgotamentos)`);
|
|
984
1066
|
return 2;
|
|
985
1067
|
}
|
|
986
1068
|
function comandoSetup(args) {
|
|
@@ -1085,6 +1167,7 @@ function comandoPhase(args) {
|
|
|
1085
1167
|
runtime: texto(args.opcoes.runtime),
|
|
1086
1168
|
model: texto(args.opcoes.model),
|
|
1087
1169
|
effort: texto(args.opcoes.effort),
|
|
1170
|
+
perfil: texto(args.opcoes.perfil),
|
|
1088
1171
|
dryRun: args.opcoes['dry-run'] === true,
|
|
1089
1172
|
canal: conducao.canal,
|
|
1090
1173
|
...(conducao.correlacao ? { correlacao: conducao.correlacao } : {}),
|
|
@@ -1281,6 +1364,15 @@ function comandoSessions(args) {
|
|
|
1281
1364
|
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) : (0, sessoes_1.textoDoInventario)(r));
|
|
1282
1365
|
return !r.ok || (args.opcoes['exigir-limpo'] === true && r.semThread > 0) ? 1 : 0;
|
|
1283
1366
|
}
|
|
1367
|
+
if (sub === 'limpar-fantasmas') {
|
|
1368
|
+
if (!carregado) {
|
|
1369
|
+
console.error('ork sessions limpar-fantasmas precisa de um projeto (orkastery.yaml)');
|
|
1370
|
+
return 2;
|
|
1371
|
+
}
|
|
1372
|
+
const r = (0, sessoes_2.limparFantasmas)(raiz, { dryRun: args.opcoes['dry-run'] === true });
|
|
1373
|
+
console.log(args.opcoes.json === true ? JSON.stringify(r, null, 2) : (0, sessoes_2.textoDaLimpeza)(r));
|
|
1374
|
+
return r.ok ? 0 : 1;
|
|
1375
|
+
}
|
|
1284
1376
|
if (sub === 'hitl') {
|
|
1285
1377
|
return comandoSessionsHitl(args, carregado ? raiz : '');
|
|
1286
1378
|
}
|
|
@@ -1467,6 +1559,13 @@ function comandoClaims(args) {
|
|
|
1467
1559
|
console.log('');
|
|
1468
1560
|
console.log('AVISO: alegacao negativa sem comando de verificacao reprova em `ork verify`.');
|
|
1469
1561
|
}
|
|
1562
|
+
// RM-008 (B8): a conferencia local da policy claim_sem_prova_local avisa e segue.
|
|
1563
|
+
const linhasDePolicy = (0, policies_1.linhasDeAviso)(claim.avisosDePolicy ?? []);
|
|
1564
|
+
if (linhasDePolicy.length) {
|
|
1565
|
+
console.log('');
|
|
1566
|
+
for (const l of linhasDePolicy)
|
|
1567
|
+
console.log(l);
|
|
1568
|
+
}
|
|
1470
1569
|
// I-53 (RM-037, P6): o lint avisa aqui; a suite inteira e recusada no `ci prepare`.
|
|
1471
1570
|
for (const a of claim.lint ?? []) {
|
|
1472
1571
|
console.log('');
|
|
@@ -1545,6 +1644,11 @@ function comandoVerify(args) {
|
|
|
1545
1644
|
for (const c of b.comandos) {
|
|
1546
1645
|
console.log(` ${c.nome.padEnd(10)} ${c.ok ? 'passava' : `ja falhava (codigo ${c.code})`} ${c.comando}`);
|
|
1547
1646
|
}
|
|
1647
|
+
if (b.comandos.some((c) => !c.ok)) {
|
|
1648
|
+
// Ensaio de 03/10 (R7): "ja falhava" sem dizer onde ver a saida do comando.
|
|
1649
|
+
console.log(` saida de quem falhou: as ultimas linhas em ${(0, thread_1.caminhoThread)(carregado.raiz, id)}, campo baseline.comandos ` +
|
|
1650
|
+
`(resumo e trecho); o evento baseline_recorded esta em ork phase list ${id}`);
|
|
1651
|
+
}
|
|
1548
1652
|
if (b.comandos.length === 0) {
|
|
1549
1653
|
// Fatia 2 do ensaio da 0.5.0 (R5): a baseline foi gravada; o que falta e comando, nao baseline.
|
|
1550
1654
|
console.log(' (nenhum comando em verify: no manifesto: a baseline guarda so o commit, e o verify nao tem como separar regressao de divida)');
|
|
@@ -1968,6 +2072,9 @@ function comandoShip(args) {
|
|
|
1968
2072
|
console.error('uso: ork ship registrar-pr <thread-id> [--repo <dono/nome> --pr <n>] | --todas [--remoto R] [--json] [--dry-run]');
|
|
1969
2073
|
return 2;
|
|
1970
2074
|
}
|
|
2075
|
+
// RM-047: o `--remoto` da linha de comando so chega ao git como nome de remoto (ship.remoto-invalido).
|
|
2076
|
+
if (args.opcoes.remoto !== undefined)
|
|
2077
|
+
(0, branch_de_estado_1.exigirRemoto)(args.opcoes.remoto, 'ship');
|
|
1971
2078
|
// RM-037 (fatia 3, defeito 6): o `--dry-run` era ignorado, e o ensaio gravava o ship_done de verdade.
|
|
1972
2079
|
const dryRun = args.opcoes['dry-run'] === true;
|
|
1973
2080
|
const r = alvo && repo ? [(0, entrega_pr_1.registrarEntregaExternaPorPr)(carregado, alvo, { repositorio: repo, pr: Number(numeroDoPr), dryRun })]
|
|
@@ -1982,11 +2089,26 @@ function comandoShip(args) {
|
|
|
1982
2089
|
console.log('Nenhuma thread aberta com merge ship(<thread>) na base.');
|
|
1983
2090
|
for (const x of r)
|
|
1984
2091
|
console.log(` ${x.thread.padEnd(20)} ${x.acao.padEnd(13)} ${x.motivo}`);
|
|
2092
|
+
// RM-044 (A3): a pagina que o push da base vai reprovar em docs.paridade.merge, com o comando que corrige.
|
|
2093
|
+
// So aviso: nada e gravado e o codigo de saida nao muda.
|
|
2094
|
+
const pendentes = r.flatMap((x) => x.docsPendentes.map((d) => ({ thread: x.thread, ...d })));
|
|
2095
|
+
if (pendentes.length) {
|
|
2096
|
+
console.log('');
|
|
2097
|
+
console.log(`Aviso: ${pendentes.length} pagina(s) do roadmap com estado.codigo fora de "Mesclado" depois do merge; o push da base reprova em docs.paridade.merge:`);
|
|
2098
|
+
for (const d of pendentes) {
|
|
2099
|
+
console.log(` ${d.id} (${d.arquivo}): merge ${d.merge.slice(0, 7)} de ship(${d.thread}), estado.codigo "${d.codigo || 'vazio'}"`);
|
|
2100
|
+
console.log(` ${d.comando} (num PR de docs sobre a base atualizada)`);
|
|
2101
|
+
}
|
|
2102
|
+
}
|
|
1985
2103
|
const registradas = r.filter((x) => x.acao === 'registrou').length;
|
|
1986
2104
|
const registrariam = r.filter((x) => x.acao === 'registraria').length;
|
|
1987
2105
|
if (registradas) {
|
|
1988
2106
|
console.log('');
|
|
1989
|
-
|
|
2107
|
+
// RM-008 (03/10): o texto ensina a forma COM a thread. A forma sem thread fechava tambem as
|
|
2108
|
+
// entregues de outras frentes paralelas, e era ela que os condutores copiavam daqui.
|
|
2109
|
+
console.log(`${registradas} entrega(s) registrada(s). Fechar pelo MASTER so a(s) desta entrega (a nota humana sobrescreve):`);
|
|
2110
|
+
for (const x of r.filter((y) => y.acao === 'registrou'))
|
|
2111
|
+
console.log(` ork master ${x.thread} --aceitar-omissao`);
|
|
1990
2112
|
}
|
|
1991
2113
|
if (registrariam) {
|
|
1992
2114
|
console.log('');
|
|
@@ -2000,6 +2122,10 @@ function comandoShip(args) {
|
|
|
2000
2122
|
console.error('uso: ork ship <thread-id> --para <branch> [--de <branch>] [--dry-run]');
|
|
2001
2123
|
return 2;
|
|
2002
2124
|
}
|
|
2125
|
+
// RM-047: como no registrar-pr, o `--remoto` so chega ao git como nome de remoto (ship.remoto-invalido),
|
|
2126
|
+
// e `--remoto` sem valor nao vira `origin` em silencio.
|
|
2127
|
+
if (args.opcoes.remoto !== undefined)
|
|
2128
|
+
(0, branch_de_estado_1.exigirRemoto)(args.opcoes.remoto, 'ship');
|
|
2003
2129
|
const autorizar = args.opcoes['autorizar-push'];
|
|
2004
2130
|
const r = (0, ship_1.ship)(carregado, id, {
|
|
2005
2131
|
para,
|
|
@@ -2194,10 +2320,15 @@ function comandoCi(args) {
|
|
|
2194
2320
|
if (sub === 'status') {
|
|
2195
2321
|
const sha = texto(args.opcoes.sha) ?? args.posicionais[2] ?? (0, util_1.exec)('git', ['rev-parse', 'HEAD'], carregado.raiz).stdout.trim();
|
|
2196
2322
|
if (!/^[0-9a-f]{40}$/.test(sha)) {
|
|
2197
|
-
|
|
2323
|
+
// Ensaio de 03/10 (R4): `--sha HEAD` ou um sha curto respondiam so a linha de uso, sem dizer por que.
|
|
2324
|
+
console.error('erro: ci status: --sha exige o sha completo, de 40 caracteres hexadecimais minusculos ' +
|
|
2325
|
+
'(git rev-parse HEAD); o check e consultado no commit exato, nunca por ref nem prefixo');
|
|
2326
|
+
console.error('uso: ork ci status --sha <sha de 40 caracteres> [--remoto origin]');
|
|
2198
2327
|
return 2;
|
|
2199
2328
|
}
|
|
2200
|
-
|
|
2329
|
+
// RM-047: recusa o `--remoto` que nao e nome de remoto mesmo com o gate de CI desligado.
|
|
2330
|
+
const remoto = (0, branch_de_estado_1.exigirRemoto)(args.opcoes.remoto === undefined ? 'origin' : args.opcoes.remoto, 'ci');
|
|
2331
|
+
const result = (0, ci_1.consultarCi)(carregado, sha, remoto);
|
|
2201
2332
|
console.log(args.opcoes.json === true ? JSON.stringify(result, null, 2) : `${result.ok ? 'CI VERDE' : 'CI NÃO LIBEROU'}: ${result.detail}`);
|
|
2202
2333
|
return result.ok ? 0 : 1;
|
|
2203
2334
|
}
|
|
@@ -2324,7 +2455,11 @@ const CONTRATO_DO_BOARD = 'ork.board/v1';
|
|
|
2324
2455
|
function comandoFabrica(args) {
|
|
2325
2456
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
2326
2457
|
const sub = args.posicionais[1];
|
|
2458
|
+
// RM-047: o remoto vem do manifesto de quem fez o repositorio; fora do formato, recusa antes do git.
|
|
2459
|
+
// O `publicar` recusa dentro do try (publicarMaquina), para o silencioso deixar a recusa no log.
|
|
2327
2460
|
const remoto = texto(args.opcoes.remoto) ?? carregado.manifesto.fabrica.remoto;
|
|
2461
|
+
if (sub !== 'publicar')
|
|
2462
|
+
(0, branch_de_estado_1.exigirRemoto)(remoto, 'fabrica');
|
|
2328
2463
|
if (sub === 'publicar') {
|
|
2329
2464
|
const silencioso = args.opcoes.silencioso === true;
|
|
2330
2465
|
try {
|
|
@@ -2395,7 +2530,8 @@ function comandoFabrica(args) {
|
|
|
2395
2530
|
naoLido: [projeto_alvo_1.FORA_DA_CONSULTA.roadmap, projeto_alvo_1.FORA_DA_CONSULTA.reservas, ...(url === null ? [(0, projeto_alvo_1.semRemoto)(remoto)] : [])],
|
|
2396
2531
|
});
|
|
2397
2532
|
if (args.opcoes.json === true) {
|
|
2398
|
-
|
|
2533
|
+
// RM-053 (fatia 2): o mesmo JSON, com o invisivel do remoto escrito como \uXXXX.
|
|
2534
|
+
console.log((0, saida_segura_1.jsonSemInvisivel)({ ...painel, consulta }));
|
|
2399
2535
|
return 0;
|
|
2400
2536
|
}
|
|
2401
2537
|
console.log([...(0, projeto_alvo_1.linhasDaConsulta)(consulta), ''].join('\n'));
|
|
@@ -2404,6 +2540,94 @@ function comandoFabrica(args) {
|
|
|
2404
2540
|
: (0, fabrica_estado_1.textoDaFabrica)(painel, (0, maquina_1.nomeDaMaquina)()));
|
|
2405
2541
|
return 0;
|
|
2406
2542
|
}
|
|
2543
|
+
/**
|
|
2544
|
+
* RM-053: `ork network` e a Orkastery Network, as maquinas de uma pessoa em rede. Roda de qualquer
|
|
2545
|
+
* diretorio, com ou sem projeto: a rede e da pessoa, nao de um repositorio. O projeto do diretorio
|
|
2546
|
+
* atual, quando ha, so entra no retrato e na leitura da fabrica legada.
|
|
2547
|
+
*/
|
|
2548
|
+
function comandoNetwork(args) {
|
|
2549
|
+
const sub = args.posicionais[1];
|
|
2550
|
+
// RM-054: `network roadmap` tem o proprio --projeto e o proprio uso.
|
|
2551
|
+
if (sub === 'roadmap')
|
|
2552
|
+
return comandoNetworkRoadmap(args);
|
|
2553
|
+
const diretorio = process.cwd();
|
|
2554
|
+
const uso = 'uso: ork network [status] [--json] [--sem-remoto] | network entrar [--maquina NOME] [--forja github|gitlab] ' +
|
|
2555
|
+
'[--repositorio [DONO/]NOME] [--forcar] | network publicar [--forcar] [--json] | network sair | ' +
|
|
2556
|
+
'network roadmap [--projeto P] [--json] [--sem-remoto]';
|
|
2557
|
+
const forja = texto(args.opcoes.forja), repositorio = texto(args.opcoes.repositorio);
|
|
2558
|
+
if ((args.opcoes.forja !== undefined && !(0, rede_forja_1.ehNomeDeForja)(forja)) || args.opcoes.repositorio === true ||
|
|
2559
|
+
(repositorio !== undefined && !/^(?:[A-Za-z0-9][A-Za-z0-9._-]{0,99}\/)?[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(repositorio))) {
|
|
2560
|
+
console.error(uso);
|
|
2561
|
+
return 2;
|
|
2562
|
+
}
|
|
2563
|
+
if (sub === 'entrar') {
|
|
2564
|
+
const r = (0, rede_1.entrarNaRede)({ maquina: texto(args.opcoes.maquina), forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined, repositorio, diretorio,
|
|
2565
|
+
tomarNome: args.opcoes.forcar === true });
|
|
2566
|
+
console.log(`Rede: ${r.publicacao.maquina} entrou na Orkastery Network de ${r.casa.dono} (${r.casa.forja}: ${(0, rede_1.refDaCasa)(r.casa)}, ` +
|
|
2567
|
+
`privado${r.criado ? ', criado agora' : ''}).`);
|
|
2568
|
+
console.log(` Primeiro retrato publicado (${r.publicacao.commit?.slice(0, 7)}). Depois, esta maquina publica sozinha na batida do pulse`);
|
|
2569
|
+
if (r.publicacao.tomouNome)
|
|
2570
|
+
console.log(` Tomou o nome "${r.publicacao.maquina}" de outra instalacao; o commit registra.`);
|
|
2571
|
+
console.log(' e ao criar thread, despachar fase, entregar e fechar. De qualquer maquina desta pessoa: ork network status');
|
|
2572
|
+
for (const d of r.publicacao.descartados) {
|
|
2573
|
+
console.log(` AVISO: um projeto ficou fora do retrato: padrao "${d.padrao}" em ${d.campo} (valor omitido de proposito).`);
|
|
2574
|
+
}
|
|
2575
|
+
if (process.env.ORK_MAQUINA && process.env.ORK_MAQUINA.trim() !== r.publicacao.maquina) {
|
|
2576
|
+
console.log(` AVISO: ORK_MAQUINA=${process.env.ORK_MAQUINA} neste shell vence o nome gravado; alinhe os dois.`);
|
|
2577
|
+
}
|
|
2578
|
+
return 0;
|
|
2579
|
+
}
|
|
2580
|
+
if (sub === 'sair') {
|
|
2581
|
+
const r = (0, rede_1.sairDaRede)({ forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined, repositorio });
|
|
2582
|
+
console.log(`Rede: ${r.maquina} saiu; nada mais e publicado daqui.` + (r.commit
|
|
2583
|
+
? ` Retrato removido de ${r.casa} (${r.commit.slice(0, 7)}).`
|
|
2584
|
+
: r.alheio
|
|
2585
|
+
? ` O retrato "${r.maquina}" em ${r.casa} e de outra instalacao com o mesmo nome; nada foi removido.` +
|
|
2586
|
+
(r.mesmoHostname ? ' Ele tem o hostname desta maquina: se ~/.orkastery foi apagada, retome o nome com ork network entrar --forcar.' : '')
|
|
2587
|
+
: ` Nao havia retrato desta maquina${r.casa ? ` em ${r.casa}` : ' numa casa alcancavel'}.`));
|
|
2588
|
+
if ((0, maquina_1.lerConfigDaMaquina)()?.fabricaCompartilhada) {
|
|
2589
|
+
console.log(' A fabrica compartilhada dos projetos continua publicando daqui (ork/fabrica-estado); ork fabrica sair em cada um para parar.');
|
|
2590
|
+
}
|
|
2591
|
+
return 0;
|
|
2592
|
+
}
|
|
2593
|
+
if (sub === 'publicar') {
|
|
2594
|
+
if (args.opcoes.silencioso === true) {
|
|
2595
|
+
// O filho do evento de thread: quem disparou ja tomou a vez (teto de 14 min) e nao espera.
|
|
2596
|
+
try {
|
|
2597
|
+
(0, rede_adesao_1.registrarNaRede)({ ...(0, rede_1.publicarRede)({ diretorio }), origem: 'evento' });
|
|
2598
|
+
return 0;
|
|
2599
|
+
}
|
|
2600
|
+
catch (e) {
|
|
2601
|
+
(0, rede_adesao_1.registrarNaRede)({ acao: 'falhou', origem: 'evento', erro: e.message });
|
|
2602
|
+
return 1;
|
|
2603
|
+
}
|
|
2604
|
+
}
|
|
2605
|
+
const r = (0, rede_1.publicarRede)({ diretorio, forcar: args.opcoes.forcar === true, forja: (0, rede_forja_1.ehNomeDeForja)(forja) ? forja : undefined, repositorio });
|
|
2606
|
+
if (args.opcoes.json === true)
|
|
2607
|
+
console.log(JSON.stringify(r, null, 2));
|
|
2608
|
+
else
|
|
2609
|
+
console.log(r.acao === 'publicou'
|
|
2610
|
+
? `Rede: ${r.maquina} publicou o retrato em ${r.casa} (${r.commit?.slice(0, 7)}, ${r.tentativas} tentativa(s)).`
|
|
2611
|
+
: r.acao === 'ocupado'
|
|
2612
|
+
? 'Rede: outra publicacao desta maquina esta em andamento; tente de novo em instantes.'
|
|
2613
|
+
: `Rede: retrato de ${r.maquina} igual ao ultimo publicado em ${r.casa}; nada a enviar (use --forcar para publicar mesmo assim).`);
|
|
2614
|
+
if (args.opcoes.json !== true) {
|
|
2615
|
+
for (const d of r.descartados)
|
|
2616
|
+
console.log(` AVISO: um projeto ficou fora do retrato: padrao "${d.padrao}" em ${d.campo} (valor omitido de proposito).`);
|
|
2617
|
+
}
|
|
2618
|
+
return 0;
|
|
2619
|
+
}
|
|
2620
|
+
if (sub !== undefined && sub !== 'status') {
|
|
2621
|
+
console.error(`subcomando desconhecido: network ${sub}`);
|
|
2622
|
+
console.error(uso);
|
|
2623
|
+
return 2;
|
|
2624
|
+
}
|
|
2625
|
+
// RM-054 (fatia 3): o host sem cwd de projeto (RM-052, D3) nao faz do diretorio do gateway um projeto lido.
|
|
2626
|
+
const doHost = (process.env[projeto_alvo_1.ENV_PROJETO_EXPLICITO] ?? '').trim() === '1';
|
|
2627
|
+
const status = (0, rede_status_1.lerRede)({ semRemoto: args.opcoes['sem-remoto'] === true, diretorio: doHost ? null : diretorio });
|
|
2628
|
+
console.log(args.opcoes.json === true ? (0, rede_status_1.jsonDaRede)(status) : (0, rede_status_1.textoDaRede)(status));
|
|
2629
|
+
return 0;
|
|
2630
|
+
}
|
|
2407
2631
|
/**
|
|
2408
2632
|
* RM-052: `ork projetos` lista o registro desta maquina (`~/.orkastery/projetos.json`); `registrar`
|
|
2409
2633
|
* poe uma copia que ja existia antes do registro (init, thread new e fabrica entrar ja registram) e
|
|
@@ -2640,26 +2864,13 @@ function comandoMaster(args) {
|
|
|
2640
2864
|
console.error('master.fila-aposentada: a fila de ratificacao de score saiu na I-43. ' +
|
|
2641
2865
|
'Entregue e aceito, a menos que voce diga o contrario.\n' +
|
|
2642
2866
|
' ork master as entregas, com o indice ja derivado do ledger\n' +
|
|
2643
|
-
' ork master --aceitar-omissao aceita
|
|
2867
|
+
' ork master <id> --aceitar-omissao aceita so esta entrega, com indice e insumos no ledger\n' +
|
|
2868
|
+
' ork master --aceitar-omissao aceita todas as entregues (--dry-run mostra quais)\n' +
|
|
2644
2869
|
' ork master <id> --score <0-5> --justificativa "<por que>" --por <humano> para reclamar');
|
|
2645
2870
|
return 2;
|
|
2646
2871
|
}
|
|
2647
|
-
if (args.opcoes['aceitar-omissao']
|
|
2648
|
-
|
|
2649
|
-
if (args.opcoes.json === true) {
|
|
2650
|
-
console.log(JSON.stringify(aceitos, null, 2));
|
|
2651
|
-
return 0;
|
|
2652
|
-
}
|
|
2653
|
-
if (aceitos.length === 0) {
|
|
2654
|
-
console.log('Nenhuma entrega esperando decisao.');
|
|
2655
|
-
return 0;
|
|
2656
|
-
}
|
|
2657
|
-
console.log(`Aceitas por omissao: ${aceitos.length}. O indice e os insumos foram ao ledger.`);
|
|
2658
|
-
for (const a of aceitos)
|
|
2659
|
-
console.log(` ${a.thread.padEnd(20)} indice ${a.indice.valor}/${a.indice.base}`);
|
|
2660
|
-
console.log('');
|
|
2661
|
-
console.log('Discordou? A nota humana sobrescreve, e o registro da omissao permanece.');
|
|
2662
|
-
return 0;
|
|
2872
|
+
if (args.opcoes['aceitar-omissao'] !== undefined) {
|
|
2873
|
+
return comandoAceitarOmissao(args, carregado.raiz, primeiro);
|
|
2663
2874
|
}
|
|
2664
2875
|
if (primeiro === undefined) {
|
|
2665
2876
|
console.log(args.opcoes.json
|
|
@@ -2675,7 +2886,7 @@ function comandoMaster(args) {
|
|
|
2675
2886
|
const brutoScore = texto(args.opcoes.score);
|
|
2676
2887
|
const justificativa = texto(args.opcoes.justificativa) ?? texto(args.opcoes.porque);
|
|
2677
2888
|
if (brutoScore === undefined) {
|
|
2678
|
-
console.error('uso: ork master <thread-id> --score 0-5 --justificativa "<texto>"');
|
|
2889
|
+
console.error('uso: ork master <thread-id> --score 0-5 --justificativa "<texto>" --por <seu-nome>');
|
|
2679
2890
|
console.error(' o score do MASTER e humano, de 0 a 5, e a justificativa e obrigatoria.');
|
|
2680
2891
|
return 2;
|
|
2681
2892
|
}
|
|
@@ -2727,6 +2938,88 @@ function comandoMaster(args) {
|
|
|
2727
2938
|
console.log(`Proximo passo: ork board --all | entregas e indice: ork master`);
|
|
2728
2939
|
return 0;
|
|
2729
2940
|
}
|
|
2941
|
+
/**
|
|
2942
|
+
* RM-008 (03/10/2026): `ork master [<thread>] --aceitar-omissao [--thread T] [--dry-run] [--json]`.
|
|
2943
|
+
*
|
|
2944
|
+
* Tres vezes na madrugada de 03/10, um condutor rodou `ork master --aceitar-omissao` para fechar a
|
|
2945
|
+
* propria thread, e o comando fechou tambem as entregues de outras frentes (ork-rm057fatia3t,
|
|
2946
|
+
* ork-rm025modocon). A thread indicada (posicional, `--thread T` ou `--aceitar-omissao=T`) limita o
|
|
2947
|
+
* aceite a ela. Sem thread, o padrao continua o mesmo, por decisao registrada: drenar todas, agora
|
|
2948
|
+
* listando cada uma e avisando em stderr quando quem roda e processo de agente.
|
|
2949
|
+
*/
|
|
2950
|
+
function comandoAceitarOmissao(args, raiz, posicional) {
|
|
2951
|
+
const bruto = args.opcoes['aceitar-omissao'];
|
|
2952
|
+
const candidatos = [posicional, texto(args.opcoes.thread), typeof bruto === 'string' ? bruto : undefined]
|
|
2953
|
+
.filter((v) => typeof v === 'string' && v.trim() !== '').map((v) => v.trim());
|
|
2954
|
+
if (args.opcoes.thread === true || new Set(candidatos).size > 1) {
|
|
2955
|
+
console.error('uso: ork master <thread-id> --aceitar-omissao [--dry-run] [--json] (ou --thread <thread-id>, uma thread so)');
|
|
2956
|
+
return 2;
|
|
2957
|
+
}
|
|
2958
|
+
const alvo = candidatos[0];
|
|
2959
|
+
const dryRun = args.opcoes['dry-run'] === true;
|
|
2960
|
+
const json = args.opcoes.json === true;
|
|
2961
|
+
if (alvo) {
|
|
2962
|
+
const fora = (0, master_2.motivoForaDaOmissao)(raiz, alvo);
|
|
2963
|
+
if (fora) {
|
|
2964
|
+
if (json)
|
|
2965
|
+
console.log(JSON.stringify(dryRun ? { dryRun: true, fecharia: [], motivo: fora.motivo } : [], null, 2));
|
|
2966
|
+
else
|
|
2967
|
+
(fora.motivo === 'ja-fechada' ? console.log : console.error)(fora.texto);
|
|
2968
|
+
return fora.motivo === 'ja-fechada' ? 0 : 1;
|
|
2969
|
+
}
|
|
2970
|
+
}
|
|
2971
|
+
if (dryRun) {
|
|
2972
|
+
const fecharia = (0, master_2.entregasParaOmissao)(raiz, alvo).map((p) => ({ thread: p.thread.id, indice: (0, master_2.indiceDaThread)(raiz, p.thread.id) }));
|
|
2973
|
+
if (json) {
|
|
2974
|
+
console.log(JSON.stringify({ dryRun: true, fecharia }, null, 2));
|
|
2975
|
+
return 0;
|
|
2976
|
+
}
|
|
2977
|
+
console.log('Ensaio (--dry-run): nada foi gravado.');
|
|
2978
|
+
if (fecharia.length === 0) {
|
|
2979
|
+
console.log('Nenhuma entrega esperando decisao.');
|
|
2980
|
+
return 0;
|
|
2981
|
+
}
|
|
2982
|
+
console.log(`Fecharia por omissao: ${fecharia.length}.`);
|
|
2983
|
+
for (const f of fecharia)
|
|
2984
|
+
console.log(` ${f.thread.padEnd(20)} indice ${f.indice.valor}/${f.indice.base}`);
|
|
2985
|
+
avisoDeOmissaoSemAlvo(alvo, fecharia.length, true);
|
|
2986
|
+
return 0;
|
|
2987
|
+
}
|
|
2988
|
+
const aceitos = (0, master_2.aceitarPendentesPorOmissao)(raiz, { thread: alvo });
|
|
2989
|
+
avisoDeOmissaoSemAlvo(alvo, aceitos.length, false);
|
|
2990
|
+
if (json) {
|
|
2991
|
+
console.log(JSON.stringify(aceitos, null, 2));
|
|
2992
|
+
return 0;
|
|
2993
|
+
}
|
|
2994
|
+
if (aceitos.length === 0) {
|
|
2995
|
+
console.log('Nenhuma entrega esperando decisao.');
|
|
2996
|
+
return 0;
|
|
2997
|
+
}
|
|
2998
|
+
console.log(`Aceitas por omissao: ${aceitos.length}. O indice e os insumos foram ao ledger.`);
|
|
2999
|
+
for (const a of aceitos)
|
|
3000
|
+
console.log(` ${a.thread.padEnd(20)} indice ${a.indice.valor}/${a.indice.base}`);
|
|
3001
|
+
console.log('');
|
|
3002
|
+
console.log('Discordou? A nota humana sobrescreve, e o registro da omissao permanece.');
|
|
3003
|
+
return 0;
|
|
3004
|
+
}
|
|
3005
|
+
/**
|
|
3006
|
+
* O aviso do aceite SEM thread vindo de processo de agente que alcanca mais de uma entrega. A marca
|
|
3007
|
+
* e a mesma do `master.prova-de-canal` (ambiente do host ou do despacho). Vai para stderr: o stdout,
|
|
3008
|
+
* inclusive o `--json`, fica como era.
|
|
3009
|
+
*/
|
|
3010
|
+
function avisoDeOmissaoSemAlvo(alvo, quantas, ensaio) {
|
|
3011
|
+
if (alvo || quantas <= 1)
|
|
3012
|
+
return;
|
|
3013
|
+
const marca = (0, master_nota_1.marcaDeHost)(process.env);
|
|
3014
|
+
if (!marca)
|
|
3015
|
+
return;
|
|
3016
|
+
const propria = (process.env[runtime_ambiente_1.ENV_THREAD_DO_DESPACHO] ?? '').trim();
|
|
3017
|
+
console.error('');
|
|
3018
|
+
console.error(`aviso: master.omissao-sem-thread: processo de agente (${marca}) ${ensaio ? 'fecharia' : 'fechou'} ${quantas} threads, ` +
|
|
3019
|
+
'inclusive as de outras frentes paralelas.');
|
|
3020
|
+
console.error(` Para fechar so a sua: ork master ${propria || '<thread-id>'} --aceitar-omissao` +
|
|
3021
|
+
(ensaio ? '' : ' (a nota humana sobrescreve o aceite de quem nao era seu)'));
|
|
3022
|
+
}
|
|
2730
3023
|
/** I-55 (RM-008): `ork licoes` mostra o que volta no proximo GOAL e PLAN, e as propostas de policy. */
|
|
2731
3024
|
function comandoLicoes(args) {
|
|
2732
3025
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
@@ -2824,7 +3117,7 @@ function comandoRoadmap(args) {
|
|
|
2824
3117
|
* RM-054 (fatia 1): `ork network roadmap`, o roadmap da rede de qualquer diretorio. Pedido de projeto
|
|
2825
3118
|
* ambiguo ou desconhecido e resposta, nao erro: a recusa com os candidatos, e o codigo da RM-052.
|
|
2826
3119
|
*/
|
|
2827
|
-
function
|
|
3120
|
+
function comandoNetworkRoadmap(args) {
|
|
2828
3121
|
const pedido = texto(args.opcoes.projeto);
|
|
2829
3122
|
if (args.posicionais[1] !== 'roadmap' || args.posicionais.length > 2 || (args.opcoes.projeto !== undefined && !pedido)) {
|
|
2830
3123
|
console.error('uso: ork network roadmap [--projeto <caminho|github:dono/repo|gitlab:grupo/repo|nome>] [--json] [--sem-remoto]');
|
|
@@ -2981,6 +3274,19 @@ function exigirFaseCanonica(bruto) {
|
|
|
2981
3274
|
/**
|
|
2982
3275
|
* `ork adapter list|show|install <host>`: instalacao dos adaptadores de Camada 1 (bloco B4).
|
|
2983
3276
|
*/
|
|
3277
|
+
/**
|
|
3278
|
+
* O caminho real do `ork` em execução, quando o processo é este CLI (argv[1] resolve para este arquivo).
|
|
3279
|
+
* Importado por outro script, devolve undefined e o install volta à ordem antiga (PATH, catálogo).
|
|
3280
|
+
*/
|
|
3281
|
+
function orkEmExecucao() {
|
|
3282
|
+
try {
|
|
3283
|
+
const proprio = fs.realpathSync(__filename);
|
|
3284
|
+
return process.argv[1] && fs.realpathSync(process.argv[1]) === proprio ? proprio : undefined;
|
|
3285
|
+
}
|
|
3286
|
+
catch {
|
|
3287
|
+
return undefined;
|
|
3288
|
+
}
|
|
3289
|
+
}
|
|
2984
3290
|
function comandoAdapter(args) {
|
|
2985
3291
|
const sub = args.posicionais[1] ?? 'list';
|
|
2986
3292
|
if (sub === 'list') {
|
|
@@ -3014,6 +3320,8 @@ function comandoAdapter(args) {
|
|
|
3014
3320
|
dryRun: args.opcoes['dry-run'] === true,
|
|
3015
3321
|
force: args.opcoes.force === true || args.opcoes.forcar === true,
|
|
3016
3322
|
orkBin: texto(args.opcoes.ork),
|
|
3323
|
+
// Ensaio de 03/10: a extensão chama o ork que a instalou, não o primeiro do PATH.
|
|
3324
|
+
orkEmExecucao: orkEmExecucao(),
|
|
3017
3325
|
versao: VERSAO,
|
|
3018
3326
|
// I-43 (D5): a decisao por ARQUIVO, que e o que faz `--force` deixar de ser o
|
|
3019
3327
|
// unico caminho de saida. `;` separa varios, como o resto do CLI ja faz.
|
|
@@ -3650,7 +3958,20 @@ function comandoMemory(args) {
|
|
|
3650
3958
|
const config = (0, manifest_1.configDeEmbedding)(carregado.manifesto);
|
|
3651
3959
|
const driver = (0, orkmind_1.configDoManifesto)(carregado.manifesto);
|
|
3652
3960
|
const embedder = new orkmind_1.DriverCliOrkMind(driver);
|
|
3653
|
-
|
|
3961
|
+
// RM-038: o universo da busca inteiro, numa leitura; sem ele, nada e embedado (nunca um pedaco).
|
|
3962
|
+
let universo;
|
|
3963
|
+
try {
|
|
3964
|
+
universo = (0, indice_vetorial_1.universoDaBusca)(memoria, memoria.estado.tenant);
|
|
3965
|
+
}
|
|
3966
|
+
catch (erro) {
|
|
3967
|
+
const motivo = (0, indice_vetorial_1.codigoDaFalha)(erro);
|
|
3968
|
+
const detalhe = 'o universo da busca nao foi lido inteiro; nada foi embedado';
|
|
3969
|
+
if (args.opcoes.json === true)
|
|
3970
|
+
console.log(JSON.stringify({ motivo, detalhe }, null, 2));
|
|
3971
|
+
else
|
|
3972
|
+
console.error(`memory.index: ${motivo}; ${detalhe}`);
|
|
3973
|
+
return 1;
|
|
3974
|
+
}
|
|
3654
3975
|
const alvos = modelo === 'todos' ? ['primario', 'fallback'] : [modelo];
|
|
3655
3976
|
const resultados = alvos.map(alvo => (0, indice_vetorial_1.indexar)({ raiz: carregado.raiz, tenant: memoria.estado.tenant,
|
|
3656
3977
|
dsn: driver.dsn, config, alvo, universo, dryRun: args.opcoes['dry-run'] === true,
|
|
@@ -3663,7 +3984,7 @@ function comandoMemory(args) {
|
|
|
3663
3984
|
}
|
|
3664
3985
|
else {
|
|
3665
3986
|
for (const r of resultados)
|
|
3666
|
-
console.log(textoDoIndice(r));
|
|
3987
|
+
console.log((0, indice_vetorial_1.textoDoIndice)(r));
|
|
3667
3988
|
}
|
|
3668
3989
|
return resultados.some(r => !r.dryRun && r.motivo) ? 1 : 0;
|
|
3669
3990
|
}
|
|
@@ -3701,51 +4022,43 @@ function buscaPorTexto(args, carregado) {
|
|
|
3701
4022
|
const memoria = (0, memoria_1.abrirMemoria)(carregado);
|
|
3702
4023
|
const config = (0, manifest_1.configDeEmbedding)(carregado.manifesto);
|
|
3703
4024
|
let r;
|
|
4025
|
+
const vazio = { texto: frase, modo, origem: 'nenhum', modeloUsado: null, deterministico: false,
|
|
4026
|
+
resultados: [], listas: { vetor: [], fts: [] }, ftsForaDoUniverso: 0, coberturaDoIndice: null };
|
|
4027
|
+
let universo = null;
|
|
4028
|
+
let falhaDoUniverso = '';
|
|
4029
|
+
if (memoria.ativo) {
|
|
4030
|
+
try {
|
|
4031
|
+
universo = (0, indice_vetorial_1.universoDaBusca)(memoria, memoria.estado.tenant);
|
|
4032
|
+
}
|
|
4033
|
+
catch (erro) {
|
|
4034
|
+
falhaDoUniverso = (0, indice_vetorial_1.codigoDaFalha)(erro);
|
|
4035
|
+
}
|
|
4036
|
+
}
|
|
3704
4037
|
if (!memoria.ativo) {
|
|
3705
|
-
r = {
|
|
3706
|
-
|
|
4038
|
+
r = { ...vazio, motivo: memoria.estado.motivo, detalhe: `${memoria.estado.detalhe}; correcao: ${memoria.estado.correcao}` };
|
|
4039
|
+
}
|
|
4040
|
+
else if (!universo) {
|
|
4041
|
+
// RM-038: sem o universo inteiro nao ha busca; o motivo tipado sai, nunca um resultado parcial.
|
|
4042
|
+
r = { ...vazio, motivo: falhaDoUniverso, detalhe: 'o universo da busca nao foi lido inteiro; nada foi buscado' };
|
|
3707
4043
|
}
|
|
3708
4044
|
else {
|
|
3709
4045
|
const driver = (0, orkmind_1.configDoManifesto)(carregado.manifesto);
|
|
3710
4046
|
const transporte = new orkmind_1.DriverCliOrkMind(driver);
|
|
3711
4047
|
const fallback = memoria.estado.embeddings?.fallback;
|
|
3712
4048
|
r = (0, busca_semantica_1.buscarPorSignificado)({ raiz: carregado.raiz, tenant: memoria.estado.tenant, dsn: driver.dsn, config,
|
|
3713
|
-
universo
|
|
4049
|
+
universo, colecao: colecao,
|
|
3714
4050
|
texto: frase, modo, limite, timeoutMs: driver.timeoutMs,
|
|
3715
4051
|
chavePresente: memoria.estado.embeddings?.chavePresente === true,
|
|
3716
4052
|
fallbackUsavel: memoria.estado.embeddings?.sondado === true && fallback?.dependencias === true,
|
|
3717
4053
|
embeddar: (p, o) => transporte.embeddar(p, o), buscarTexto: (t, q) => transporte.buscarTexto(t, q) });
|
|
3718
4054
|
}
|
|
4055
|
+
const codigo = universo ? 0 : 1;
|
|
3719
4056
|
if (args.opcoes.json === true) {
|
|
3720
4057
|
console.log(JSON.stringify(r, null, 2));
|
|
3721
|
-
return
|
|
4058
|
+
return codigo;
|
|
3722
4059
|
}
|
|
3723
|
-
console.log(
|
|
3724
|
-
|
|
3725
|
-
console.log(` motivo: ${r.motivo}${r.detalhe ? `; ${r.detalhe}` : ''}`);
|
|
3726
|
-
console.log('');
|
|
3727
|
-
r.resultados.forEach((e, i) => {
|
|
3728
|
-
const sim = e.similaridade === null ? '' : ` similaridade ${e.similaridade}`;
|
|
3729
|
-
console.log(` ${i + 1}. [${e.collection}] ${e.id} score ${e.score} ${e.fontes.join('+')}${sim}`);
|
|
3730
|
-
console.log(` ${e.resumo}`);
|
|
3731
|
-
});
|
|
3732
|
-
console.log('');
|
|
3733
|
-
console.log(` ${r.resultados.length} resultado(s); busca por tag continua em ork memory search --tags`);
|
|
3734
|
-
return 0;
|
|
3735
|
-
}
|
|
3736
|
-
/** Texto de `ork memory index`: o que foi (ou seria) embedado e quanto custa estimado. */
|
|
3737
|
-
function textoDoIndice(r) {
|
|
3738
|
-
const custo = r.custoEstimadoUsd === null ? 'nao estimado' : `US$ ${r.custoEstimadoUsd.toFixed(8)}`;
|
|
3739
|
-
return [
|
|
3740
|
-
`Indice vetorial (${r.alvo}${r.dryRun ? ', --dry-run' : ''}): ${r.modelo ?? '(sem modelo)'}${r.dim ? ` / ${r.dim} dim` : ''}`,
|
|
3741
|
-
` universo do tenant ${r.universo} entrada(s); coerentes ${r.coerentes}`,
|
|
3742
|
-
` embedados ${r.embedados} (reescritos ${r.reescritos}); removidos ${r.removidos}`,
|
|
3743
|
-
` fora do indice ${r.recusados} recusada(s) por padrao de segredo, ${r.foraDoLimite} acima do limite`,
|
|
3744
|
-
...(r.truncados ? [` truncados ${r.truncados} acima do contexto do modelo local, embedados pelo comeco`] : []),
|
|
3745
|
-
` estimativa ${r.tokensEstimados} token(s), ${custo}; chamadas ao provider ${r.chamadasAoProvider}`,
|
|
3746
|
-
...(r.arquivo ? [` arquivo ${r.arquivo}`] : []),
|
|
3747
|
-
...(r.motivo ? [` motivo ${r.motivo}: ${r.detalhe}`] : r.detalhe ? [` ${r.detalhe}`] : []),
|
|
3748
|
-
].join('\n');
|
|
4060
|
+
console.log((0, busca_semantica_1.textoDaBuscaPorSignificado)(r));
|
|
4061
|
+
return codigo;
|
|
3749
4062
|
}
|
|
3750
4063
|
/**
|
|
3751
4064
|
* RM-052: `--projeto <nome|caminho>` e opcao GLOBAL. Sai do argv em qualquer posicao, antes de
|
|
@@ -3896,11 +4209,13 @@ function main(argvBruto) {
|
|
|
3896
4209
|
console.log((0, preflight_1.textoPreflight)(r));
|
|
3897
4210
|
return r.prontoPrimeiroBloco ? 0 : 1;
|
|
3898
4211
|
}
|
|
3899
|
-
|
|
4212
|
+
// RM-031: o check dos analisadores do grafo entra por aqui, a porta da familia do grafo (fronteira do KG1).
|
|
4213
|
+
const r = (0, doctor_1.doctor)((0, manifest_1.diretorioDoProjeto)(), nomesHerdados, () => (0, intelligence_graph_cli_1.checarAnalisadoresDoGrafo)(versao_1.VERSAO_DO_ORK));
|
|
3900
4214
|
console.log(r.texto);
|
|
3901
4215
|
return r.codigo;
|
|
3902
4216
|
}
|
|
3903
4217
|
case 'init': {
|
|
4218
|
+
(0, init_1.exigirRepositorioParaInit)(process.cwd());
|
|
3904
4219
|
const r = (0, init_1.init)(process.cwd(), {
|
|
3905
4220
|
force: args.opcoes.force === true,
|
|
3906
4221
|
nome: texto(args.opcoes.name) ?? texto(args.opcoes.nome),
|
|
@@ -4075,7 +4390,9 @@ function main(argvBruto) {
|
|
|
4075
4390
|
case 'grafo': {
|
|
4076
4391
|
// RM-031 KG3 (D7): o argv cru depois do comando; o parser do grafo e estrito.
|
|
4077
4392
|
const carregado = (0, manifest_1.exigirManifesto)();
|
|
4078
|
-
return (0, intelligence_graph_cli_1.executarGrafo)(argv.slice(argv.indexOf('grafo') + 1), { raiz: carregado.raiz, estado: (0, estado_thread_1.raizDoEstado)(carregado.raiz), repositorio: carregado.manifesto.project.name,
|
|
4393
|
+
return (0, intelligence_graph_cli_1.executarGrafo)(argv.slice(argv.indexOf('grafo') + 1), { raiz: carregado.raiz, estado: (0, estado_thread_1.raizDoEstado)(carregado.raiz), repositorio: carregado.manifesto.project.name, versao: versao_1.VERSAO_DO_ORK,
|
|
4394
|
+
contextoDaThread: (id) => (0, mcp_grafo_1.lerEntradaDaThread)(carregado.raiz, id),
|
|
4395
|
+
escrever: (texto) => console.log(texto) });
|
|
4079
4396
|
}
|
|
4080
4397
|
case 'ship':
|
|
4081
4398
|
return comandoShip(args);
|