@orkastery/cli 0.5.3 → 0.5.6
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/README.md +158 -0
- package/adapters/claude-code/mods/autoridade.json +56 -0
- package/adapters/claude-code/mods/ork-clima/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-clima/hooks/contas.ts +283 -0
- package/adapters/claude-code/mods/ork-clima/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-clima/hooks/previsao.ts +393 -0
- package/adapters/claude-code/mods/ork-clima/hooks/register.ts +205 -0
- package/adapters/claude-code/mods/ork-clima/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-clima/types/index.d.ts +80 -0
- package/adapters/claude-code/mods/ork-freio/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-freio/hooks/carga.ts +160 -0
- package/adapters/claude-code/mods/ork-freio/hooks/conferencia.ts +309 -0
- package/adapters/claude-code/mods/ork-freio/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-freio/hooks/lote.ts +270 -0
- package/adapters/claude-code/mods/ork-freio/hooks/register.ts +285 -0
- package/adapters/claude-code/mods/ork-freio/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-freio/types/index.d.ts +127 -0
- package/adapters/claude-code/mods/ork-mesa/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/cartoes.tsx +246 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/decidir.ts +110 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/fila.ts +253 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/obvia.ts +98 -0
- package/adapters/claude-code/mods/ork-mesa/hooks/register.tsx +493 -0
- package/adapters/claude-code/mods/ork-mesa/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mesa/types/index.d.ts +131 -0
- package/adapters/claude-code/mods/ork-pista/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-pista/hooks/acoes.ts +71 -0
- package/adapters/claude-code/mods/ork-pista/hooks/ci.ts +117 -0
- package/adapters/claude-code/mods/ork-pista/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-pista/hooks/pista.tsx +356 -0
- package/adapters/claude-code/mods/ork-pista/hooks/register.tsx +439 -0
- package/adapters/claude-code/mods/ork-pista/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-pista/types/index.d.ts +85 -0
- package/adapters/claude-code/mods/ork-ponte/.claude-plugin/plugin.json +13 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/faixa.tsx +57 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/guarda.ts +410 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/mostrado.ts +55 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/nucleo.ts +157 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/papel.ts +42 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/register.ts +331 -0
- package/adapters/claude-code/mods/ork-ponte/hooks/vigia.ts +76 -0
- package/adapters/claude-code/mods/ork-ponte/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ponte/types/index.d.ts +178 -0
- package/adapters/claude-code/mods/ork-portao/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-portao/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-portao/hooks/lease.ts +201 -0
- package/adapters/claude-code/mods/ork-portao/hooks/plano.ts +304 -0
- package/adapters/claude-code/mods/ork-portao/hooks/register.ts +339 -0
- package/adapters/claude-code/mods/ork-portao/hooks/verify.ts +152 -0
- package/adapters/claude-code/mods/ork-portao/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-portao/types/index.d.ts +60 -0
- package/adapters/claude-code/mods/ork-radar/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-radar/hooks/colisao.ts +420 -0
- package/adapters/claude-code/mods/ork-radar/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-radar/hooks/mapa.tsx +322 -0
- package/adapters/claude-code/mods/ork-radar/hooks/register.tsx +470 -0
- package/adapters/claude-code/mods/ork-radar/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-radar/types/index.d.ts +72 -0
- package/adapters/claude-code/mods/ork-sentinela/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/alertas.ts +85 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/despacho.ts +156 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/register.ts +511 -0
- package/adapters/claude-code/mods/ork-sentinela/hooks/vigia.ts +186 -0
- package/adapters/claude-code/mods/ork-sentinela/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-sentinela/types/index.d.ts +65 -0
- package/adapters/claude-code/mods/ork-torre/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-torre/hooks/agenda.ts +60 -0
- package/adapters/claude-code/mods/ork-torre/hooks/detalhe.tsx +236 -0
- package/adapters/claude-code/mods/ork-torre/hooks/frases.ts +42 -0
- package/adapters/claude-code/mods/ork-torre/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-torre/hooks/painel.tsx +344 -0
- package/adapters/claude-code/mods/ork-torre/hooks/rede.ts +97 -0
- package/adapters/claude-code/mods/ork-torre/hooks/register.tsx +437 -0
- package/adapters/claude-code/mods/ork-torre/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-torre/types/index.d.ts +108 -0
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +1 -1
- package/adapters/openclaw/README.md +2 -1
- package/adapters/openclaw/openclaw.plugin.json +1 -1
- package/adapters/openclaw/package.json +1 -1
- package/assets/docs-en/markdownlint-cli2.jsonc +22 -0
- package/assets/docs-en/padroes/documentacao-de-produto.md +135 -0
- package/assets/docs-en/padroes/roadmap-de-produto.md +100 -0
- package/assets/docs-en/produto/README.md +14 -0
- package/assets/docs-en/produto/_modelo-feature.md +62 -0
- package/assets/docs-en/roadmap/README.md +14 -0
- package/assets/docs-en/roadmap/_modelo-item.md +75 -0
- package/dist/adapters/claude-bg.js +77 -13
- package/dist/adapters/codex.js +10 -1
- package/dist/agents-md.js +24 -15
- package/dist/auditrun.js +17 -2
- package/dist/board.js +4 -3
- package/dist/branch-de-estado.js +23 -1
- package/dist/catalogo.js +33 -0
- package/dist/ci.js +13 -7
- package/dist/claims-conferir.js +342 -0
- package/dist/claims.js +3 -1
- package/dist/company-brain-client.js +36 -1
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +36 -1
- package/dist/conducao-sentinela.js +388 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +122 -30
- package/dist/conhecimento.js +490 -0
- package/dist/docs.js +22 -8
- package/dist/doctor-pulse-cron.js +182 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +115 -111
- package/dist/entrega-pr.js +22 -21
- package/dist/escopo-escrita.js +10 -1
- package/dist/estado-thread.js +23 -1
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +310 -0
- package/dist/fabrica-estado.js +38 -8
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +3 -2
- package/dist/forja.js +1 -1
- package/dist/gates.js +3 -28
- package/dist/handoff.js +10 -6
- package/dist/hitl-local-receipt.js +2 -0
- package/dist/hitl-resumo.js +29 -3
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl.js +29 -33
- package/dist/horario.js +14 -7
- package/dist/hosts.js +52 -1
- package/dist/impedimento.js +108 -14
- package/dist/index.js +623 -521
- package/dist/indice.js +7 -1
- package/dist/init.js +43 -47
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +92 -21
- package/dist/intelligence-graph-contexto.js +56 -17
- package/dist/intelligence-graph-contract.js +2 -1
- package/dist/intelligence-graph-extract-md.js +56 -4
- package/dist/intelligence-graph-extract-ts.js +71 -3
- package/dist/intelligence-graph-query.js +66 -19
- package/dist/ledger.js +15 -1
- package/dist/liveness.js +6 -3
- package/dist/locale-ajuda.js +761 -0
- package/dist/locale-gerados.js +160 -0
- package/dist/locale-master.js +99 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-pulse.js +211 -0
- package/dist/locale-retry.js +385 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-ship.js +494 -0
- package/dist/locale-thread.js +277 -0
- package/dist/locale-verify.js +125 -0
- package/dist/locale.js +714 -0
- package/dist/manifest.js +129 -3
- package/dist/maquina.js +23 -4
- package/dist/master-digest.js +6 -1
- package/dist/master-nota.js +4 -6
- package/dist/master.js +21 -24
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-server.js +8 -2
- package/dist/mcp-ship.js +3 -1
- package/dist/mcp-verify.js +6 -1
- package/dist/modos.js +3 -6
- package/dist/network-roadmap.js +5 -2
- package/dist/noctum-arco.js +911 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-envelope.js +810 -0
- package/dist/noctum-execucao.js +304 -0
- package/dist/noctum-fila.js +280 -0
- package/dist/ocupacao.js +29 -2
- package/dist/onboarding.js +40 -21
- package/dist/orkmind.js +9 -2
- package/dist/orquestracao.js +13 -12
- package/dist/parado-no-condutor.js +34 -9
- package/dist/phase.js +94 -39
- package/dist/policies.js +4 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +234 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +225 -0
- package/dist/projeto-alvo.js +127 -4
- package/dist/prompts.js +6 -2
- package/dist/pulse-delivery.js +13 -2
- package/dist/pulse.js +52 -19
- package/dist/ratelimit.js +4 -2
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-status.js +3 -2
- package/dist/retry.js +232 -148
- package/dist/roadmap-reservas.js +20 -3
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-context.js +181 -3
- package/dist/runtimes.js +2 -1
- package/dist/session-events.js +7 -3
- package/dist/session-watcher-claude.js +7 -1
- package/dist/session-watcher.js +185 -33
- package/dist/sessoes-contas.js +1 -1
- package/dist/ship-publicar.js +800 -0
- package/dist/ship.js +84 -81
- package/dist/steal.js +77 -0
- package/dist/thread-close.js +3 -2
- package/dist/thread.js +153 -82
- package/dist/util.js +8 -1
- package/dist/verify.js +141 -52
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +165 -0
- package/dist/worktree.js +20 -0
- package/dist/yaml.js +27 -8
- package/package.json +1 -1
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
package/dist/agents-md.js
CHANGED
|
@@ -39,42 +39,51 @@ exports.atualizarAgentsMd = atualizarAgentsMd;
|
|
|
39
39
|
/** Bloco de instrucoes do Orkastery em AGENTS.md, preservando todo texto humano. */
|
|
40
40
|
const fs = __importStar(require("node:fs"));
|
|
41
41
|
const path = __importStar(require("node:path"));
|
|
42
|
+
const locale_1 = require("./locale");
|
|
42
43
|
const util_1 = require("./util");
|
|
43
44
|
exports.INICIO_AGENTS_ORK = '<!-- orkastery:begin -->';
|
|
44
45
|
exports.FIM_AGENTS_ORK = '<!-- orkastery:end -->';
|
|
45
46
|
function seguro(valor) {
|
|
46
47
|
return valor.replace(/[\r\n\0`]+/g, ' ').trim();
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
+
/**
|
|
50
|
+
* O bloco do `ork init` no `AGENTS.md`. RM-061 (F3a, D1 e D2): o texto sai na lingua pedida, pela familia `gerados`
|
|
51
|
+
* do catalogo; os marcadores, o titulo e as verificacoes do manifesto sao os mesmos nas duas linguas. Sem locale,
|
|
52
|
+
* pt-BR: so o `ork init` passa a lingua do dono.
|
|
53
|
+
*/
|
|
54
|
+
function blocoAgentsMd(manifesto, locale = locale_1.LOCALE_PADRAO) {
|
|
55
|
+
const t = (0, locale_1.msg)(locale).gerados.agents;
|
|
49
56
|
const comandos = Object.entries(manifesto.verify)
|
|
50
57
|
.filter((item) => typeof item[1] === 'string' && item[1].trim() !== '')
|
|
51
58
|
.map(([nome, comando]) => `- ${seguro(nome)}: \`${seguro(comando)}\``);
|
|
59
|
+
const modos = manifesto.conduction.allowed_modes.map(m => `#${m[0].toUpperCase()}${m.slice(1)}`).join(', ');
|
|
52
60
|
return `${exports.INICIO_AGENTS_ORK}
|
|
53
61
|
## Orkastery
|
|
54
62
|
|
|
55
|
-
|
|
63
|
+
${t.projeto(seguro(manifesto.project.name), seguro(manifesto.project.abbrev), seguro(manifesto.worktree.base_branch))}
|
|
56
64
|
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
${comandos.length ? `\
|
|
65
|
-
|
|
65
|
+
- ${t.comece}
|
|
66
|
+
- ${t.ciclo}
|
|
67
|
+
- ${t.modo(modos)}
|
|
68
|
+
- ${t.worktree}
|
|
69
|
+
- ${t.fases}
|
|
70
|
+
- ${t.claims}
|
|
71
|
+
- ${t.master}
|
|
72
|
+
${comandos.length ? `\n${t.verificacoes}\n\n${comandos.join('\n')}\n` : ''}
|
|
73
|
+
${t.rodape}
|
|
66
74
|
${exports.FIM_AGENTS_ORK}`;
|
|
67
75
|
}
|
|
68
|
-
/** Cria ou substitui somente o bloco delimitado. Marcadores ambiguos recusam sem escrita. */
|
|
69
|
-
function atualizarAgentsMd(raiz, manifesto) {
|
|
76
|
+
/** Cria ou substitui somente o bloco delimitado, no `locale` pedido. Marcadores ambiguos recusam sem escrita. */
|
|
77
|
+
function atualizarAgentsMd(raiz, manifesto, locale = locale_1.LOCALE_PADRAO) {
|
|
70
78
|
const caminho = path.join(raiz, 'AGENTS.md');
|
|
71
79
|
const anterior = fs.existsSync(caminho) ? fs.readFileSync(caminho, 'utf8') : '';
|
|
72
80
|
const inicios = anterior.split(exports.INICIO_AGENTS_ORK).length - 1;
|
|
73
81
|
const fins = anterior.split(exports.FIM_AGENTS_ORK).length - 1;
|
|
74
82
|
if (inicios !== fins || inicios > 1 || (inicios === 1 && anterior.indexOf(exports.INICIO_AGENTS_ORK) > anterior.indexOf(exports.FIM_AGENTS_ORK))) {
|
|
75
|
-
|
|
83
|
+
// RM-061 (F3a): a recusa sai no locale do comando, remontada pela entrada do CLI (D14 da F2a).
|
|
84
|
+
throw new locale_1.ErroDoCatalogo((m) => m.gerados.agents.marcadoresAmbiguos);
|
|
76
85
|
}
|
|
77
|
-
const bloco = blocoAgentsMd(manifesto);
|
|
86
|
+
const bloco = blocoAgentsMd(manifesto, locale);
|
|
78
87
|
const proximo = inicios === 1
|
|
79
88
|
? anterior.slice(0, anterior.indexOf(exports.INICIO_AGENTS_ORK)) + bloco + anterior.slice(anterior.indexOf(exports.FIM_AGENTS_ORK) + exports.FIM_AGENTS_ORK.length)
|
|
80
89
|
: anterior === '' ? bloco + '\n' : anterior + (anterior.endsWith('\n') ? '\n' : '\n\n') + bloco + '\n';
|
package/dist/auditrun.js
CHANGED
|
@@ -51,6 +51,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
51
51
|
exports.PACK_DA_SUPERFICIE = exports.VERSAO_DA_RODADA = void 0;
|
|
52
52
|
exports.dirAuditorias = dirAuditorias;
|
|
53
53
|
exports.dirRodada = dirRodada;
|
|
54
|
+
exports.exigirIdDeRodada = exigirIdDeRodada;
|
|
54
55
|
exports.caminhoRodada = caminhoRodada;
|
|
55
56
|
exports.listarRodadas = listarRodadas;
|
|
56
57
|
exports.lerRodada = lerRodada;
|
|
@@ -76,6 +77,7 @@ const adapter = __importStar(require("./adapters/claude-bg"));
|
|
|
76
77
|
const auditoria_1 = require("./auditoria");
|
|
77
78
|
const phase_1 = require("./phase");
|
|
78
79
|
const policies_1 = require("./policies");
|
|
80
|
+
const projeto_alvo_1 = require("./projeto-alvo");
|
|
79
81
|
const manifest_1 = require("./manifest");
|
|
80
82
|
const ledger_1 = require("./ledger");
|
|
81
83
|
const divida_1 = require("./divida");
|
|
@@ -93,7 +95,17 @@ function dirAuditorias(raiz) {
|
|
|
93
95
|
}
|
|
94
96
|
/** Diretorio de uma rodada. */
|
|
95
97
|
function dirRodada(raiz, id) {
|
|
96
|
-
return path.join(dirAuditorias(raiz), id);
|
|
98
|
+
return path.join(dirAuditorias(raiz), exigirIdDeRodada(id));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* RM-047 (fronteira de confiança): o id da rodada vira nome de pasta e de relatório, e o `run.json` que o
|
|
102
|
+
* traz pode ter vindo do clone. Um segmento só, como o que `novoIdDeRodada` gera, sem `/` nem `..`.
|
|
103
|
+
*/
|
|
104
|
+
function exigirIdDeRodada(id) {
|
|
105
|
+
if (typeof id !== 'string' || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(id) || id.includes('..')) {
|
|
106
|
+
throw new Error(`audit.rodada-invalida: id de rodada ${JSON.stringify(String(id)).slice(0, 60)} não é um nome simples`);
|
|
107
|
+
}
|
|
108
|
+
return id;
|
|
97
109
|
}
|
|
98
110
|
/** Caminho do `run.json` da rodada. */
|
|
99
111
|
function caminhoRodada(raiz, id) {
|
|
@@ -372,6 +384,9 @@ function rodarAuditoria(carregado, pack, opcoes = {}) {
|
|
|
372
384
|
cwd: raiz,
|
|
373
385
|
model: base.custo.model,
|
|
374
386
|
effort,
|
|
387
|
+
// RM-052 (fatia 2, D2, aviso A1 do CHECK): a sessao da auditoria roda na raiz do projeto e le o
|
|
388
|
+
// projeto pelo proprio cwd; o `ORK_PROJETO` e o modo host de quem chamou (ou do daemon) nao a seguem.
|
|
389
|
+
ambienteExtra: { ...projeto_alvo_1.AMBIENTE_SEM_PROJETO_HERDADO },
|
|
375
390
|
});
|
|
376
391
|
if (!resultado.ok || !resultado.sessionId) {
|
|
377
392
|
const rodada = {
|
|
@@ -724,7 +739,7 @@ function relatorioDaRodada(carregado, rodadaId, opcoes = {}) {
|
|
|
724
739
|
(0, util_1.gravar)(caminho, texto);
|
|
725
740
|
let publicado = null;
|
|
726
741
|
if (opcoes.publicar) {
|
|
727
|
-
publicado = path.join(raiz, 'docs', 'audit', `${rodada.id}.md`);
|
|
742
|
+
publicado = path.join(raiz, 'docs', 'audit', `${exigirIdDeRodada(rodada.id)}.md`);
|
|
728
743
|
(0, util_1.gravar)(publicado, texto);
|
|
729
744
|
}
|
|
730
745
|
rodada.status = 'relatada';
|
package/dist/board.js
CHANGED
|
@@ -71,6 +71,7 @@ const util_1 = require("./util");
|
|
|
71
71
|
const sessoes_adopt_1 = require("./sessoes-adopt");
|
|
72
72
|
const horario_1 = require("./horario");
|
|
73
73
|
const conducao_1 = require("./conducao");
|
|
74
|
+
const locale_1 = require("./locale");
|
|
74
75
|
const conducao_texto_1 = require("./conducao-texto");
|
|
75
76
|
/**
|
|
76
77
|
* Perfis detectados no projeto.
|
|
@@ -316,8 +317,8 @@ function planejar(carregado, opcoes = {}) {
|
|
|
316
317
|
situacao: 'espera',
|
|
317
318
|
motivo: 'vaga.stale',
|
|
318
319
|
detalhe: oc.detalhe,
|
|
319
|
-
|
|
320
|
-
|
|
320
|
+
// RM-061 (F2b, G2): o pulse mostra esta correcao nas acoes automaticas e a remonta no locale.
|
|
321
|
+
correcao: (0, locale_1.textoDoCatalogo)((m) => m.pulse.vagaStaleCorrecao(t.id, t.faseAtual)),
|
|
321
322
|
leases: meus,
|
|
322
323
|
});
|
|
323
324
|
continue;
|
|
@@ -347,7 +348,7 @@ function planejar(carregado, opcoes = {}) {
|
|
|
347
348
|
situacao: 'espera',
|
|
348
349
|
motivo: 'concurrency.limite',
|
|
349
350
|
detalhe: `a maquina ja tem ${ocupadas} thread(s) em andamento, o limite e ${max}`,
|
|
350
|
-
correcao:
|
|
351
|
+
correcao: (0, locale_1.textoDoCatalogo)((m) => m.pulse.limiteCorrecao),
|
|
351
352
|
leases: [],
|
|
352
353
|
});
|
|
353
354
|
continue;
|
package/dist/branch-de-estado.js
CHANGED
|
@@ -33,11 +33,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.refRemota = exports.remotoValido = exports.REMOTO_DO_GIT = void 0;
|
|
36
|
+
exports.refRemota = exports.shaValido = exports.remotoValido = exports.REMOTO_DO_GIT = void 0;
|
|
37
37
|
exports.git = git;
|
|
38
38
|
exports.exigirGit = exigirGit;
|
|
39
39
|
exports.remotoRedigido = remotoRedigido;
|
|
40
40
|
exports.exigirRemoto = exigirRemoto;
|
|
41
|
+
exports.branchValida = branchValida;
|
|
41
42
|
exports.pontaLocal = pontaLocal;
|
|
42
43
|
exports.buscarBranch = buscarBranch;
|
|
43
44
|
exports.jsonsDaPonta = jsonsDaPonta;
|
|
@@ -107,6 +108,27 @@ function exigirRemoto(remoto, prefixo) {
|
|
|
107
108
|
'(letras, dígitos, ".", "_", "-" e "/" entre partes, cada parte começando por letra ou dígito, sem URL); nada foi passado ao git. ' +
|
|
108
109
|
'Corrija fabrica.remoto no orkastery.yaml ou --remoto (padrão: origin).');
|
|
109
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* RM-047 (fronteira de confiança): nome de branch que pode ir ao git como argumento. O valor vem do
|
|
113
|
+
* `worktree.base_branch` do manifesto, do campo `para` do ledger ou do frontmatter, e todos podem ser
|
|
114
|
+
* do clone: um nome que começa com `-` viraria opção do git (`--output=<arquivo>` grava arquivo).
|
|
115
|
+
* A regra é a do `git check-ref-format --branch`, então nenhum nome que o git aceite é recusado.
|
|
116
|
+
*/
|
|
117
|
+
function branchValida(branch) {
|
|
118
|
+
if (typeof branch !== 'string' || branch.length === 0 || branch.length > 255)
|
|
119
|
+
return false;
|
|
120
|
+
if (branch.startsWith('-') || branch === '@' || branch.includes('..') || branch.includes('@{'))
|
|
121
|
+
return false;
|
|
122
|
+
// eslint-disable-next-line no-control-regex
|
|
123
|
+
if (/[\x00-\x20\x7f~^:?*[\\]/.test(branch))
|
|
124
|
+
return false;
|
|
125
|
+
if (branch.startsWith('/') || branch.endsWith('/') || branch.includes('//') || branch.endsWith('.'))
|
|
126
|
+
return false;
|
|
127
|
+
return branch.split('/').every((parte) => !parte.startsWith('.') && !parte.endsWith('.lock'));
|
|
128
|
+
}
|
|
129
|
+
/** Sha hexadecimal (abreviado ou inteiro, SHA-1 ou SHA-256): o único formato de commit lido do ledger que vai ao git. */
|
|
130
|
+
const shaValido = (sha) => typeof sha === 'string' && /^[0-9a-f]{7,64}$/i.test(sha);
|
|
131
|
+
exports.shaValido = shaValido;
|
|
110
132
|
const refRemota = (remoto, branch) => `refs/remotes/${remoto}/${branch}`;
|
|
111
133
|
exports.refRemota = refRemota;
|
|
112
134
|
/** A ultima copia lida da branch nesta maquina, sem rede. `null` quando nunca foi lida. */
|
package/dist/catalogo.js
CHANGED
|
@@ -45,6 +45,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
45
45
|
exports.BUCKETS = void 0;
|
|
46
46
|
exports.raizDoCatalogo = raizDoCatalogo;
|
|
47
47
|
exports.exigirCatalogo = exigirCatalogo;
|
|
48
|
+
exports.catalogoDoPacote = catalogoDoPacote;
|
|
49
|
+
exports.exigirCatalogoDoPacote = exigirCatalogoDoPacote;
|
|
48
50
|
exports.cliDoCatalogo = cliDoCatalogo;
|
|
49
51
|
exports.skillsDoCatalogo = skillsDoCatalogo;
|
|
50
52
|
exports.referenciasDoCatalogo = referenciasDoCatalogo;
|
|
@@ -83,6 +85,37 @@ function exigirCatalogo(inicial) {
|
|
|
83
85
|
}
|
|
84
86
|
return raiz;
|
|
85
87
|
}
|
|
88
|
+
/** A raiz do catálogo do pacote que está rodando: subindo a partir do próprio código, nunca do cwd. */
|
|
89
|
+
function catalogoDoPacote() {
|
|
90
|
+
return subirProcurando(__dirname);
|
|
91
|
+
}
|
|
92
|
+
function real(p) {
|
|
93
|
+
try {
|
|
94
|
+
return fs.realpathSync(p);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return path.resolve(p);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* RM-047 (P4): o catálogo que o `ork eval` executa. O eval roda os canários, os hooks e o `core/dist`
|
|
102
|
+
* do catálogo, então ele só vale o do pacote que está rodando. Um diretório com `skills/`,
|
|
103
|
+
* `references/` e `eval/` achado a partir do cwd (um clone qualquer) que não seja o próprio pacote é
|
|
104
|
+
* recusado com `eval.catalogo-alheio`, com o comando que roda o eval daquele checkout de propósito.
|
|
105
|
+
*/
|
|
106
|
+
function exigirCatalogoDoPacote(inicial) {
|
|
107
|
+
const pacote = catalogoDoPacote();
|
|
108
|
+
if (!pacote) {
|
|
109
|
+
throw new Error('catalogo do Orkastery nao encontrado (esperado um diretorio com skills/, references/ e eval/)');
|
|
110
|
+
}
|
|
111
|
+
const doCwd = subirProcurando(inicial);
|
|
112
|
+
if (doCwd && real(doCwd) !== real(pacote)) {
|
|
113
|
+
throw new Error(`eval.catalogo-alheio: ${doCwd} tem skills/, references/ e eval/, mas nao e o pacote deste ork ` +
|
|
114
|
+
`(${pacote}). O eval executa os canarios, os hooks e o core/dist do catalogo, e so roda o do proprio pacote. ` +
|
|
115
|
+
`Para avaliar aquele checkout de proposito, rode o ork dele: node ${path.join(doCwd, 'core', 'dist', 'index.js')} eval`);
|
|
116
|
+
}
|
|
117
|
+
return pacote;
|
|
118
|
+
}
|
|
86
119
|
/** Os buckets do catalogo, na ordem em que o README os apresenta. */
|
|
87
120
|
exports.BUCKETS = [
|
|
88
121
|
'core',
|
package/dist/ci.js
CHANGED
|
@@ -40,6 +40,7 @@ exports.consultarCi = consultarCi;
|
|
|
40
40
|
exports.consultarCiDoRepositorio = consultarCiDoRepositorio;
|
|
41
41
|
exports.executarCi = executarCi;
|
|
42
42
|
exports.arquivoDoBundle = arquivoDoBundle;
|
|
43
|
+
exports.comandosDoBundle = comandosDoBundle;
|
|
43
44
|
exports.lintDoBundle = lintDoBundle;
|
|
44
45
|
exports.destinoDoBundle = destinoDoBundle;
|
|
45
46
|
exports.prepararBundleCi = prepararBundleCi;
|
|
@@ -50,6 +51,7 @@ exports.executarBundleCi = executarBundleCi;
|
|
|
50
51
|
const branch_de_estado_1 = require("./branch-de-estado");
|
|
51
52
|
const util_1 = require("./util");
|
|
52
53
|
const worktree_1 = require("./worktree");
|
|
54
|
+
const procedencia_1 = require("./procedencia");
|
|
53
55
|
const verify_1 = require("./verify");
|
|
54
56
|
const verify_2 = require("./verify");
|
|
55
57
|
const claims_1 = require("./claims");
|
|
@@ -59,6 +61,7 @@ const claim_lint_1 = require("./claim-lint");
|
|
|
59
61
|
const integracoes_locais_1 = require("./integracoes-locais");
|
|
60
62
|
const ledger_1 = require("./ledger");
|
|
61
63
|
const thread_1 = require("./thread");
|
|
64
|
+
const locale_1 = require("./locale");
|
|
62
65
|
const MARCADORES_DE_HOST = [
|
|
63
66
|
/(^|[\s;&|])\/home\//,
|
|
64
67
|
/(^|[\s;&|])localhost(?=[:/\s;&|]|$)/,
|
|
@@ -138,12 +141,12 @@ function consultarCi(carregado, sha, remoto = 'origin', executor = executorPadra
|
|
|
138
141
|
const { ci } = carregado.manifesto;
|
|
139
142
|
const context = ci.context || 'ork-verify';
|
|
140
143
|
if (!ci.required_for_ship)
|
|
141
|
-
return { schema: 'ork.ci-status/v1', required: false, ok: true, provider: 'github', repository: null, sha, context, state: 'disabled', url: null, detail:
|
|
144
|
+
return { schema: 'ork.ci-status/v1', required: false, ok: true, provider: 'github', repository: null, sha, context, state: 'disabled', url: null, detail: (0, locale_1.textoDoCatalogo)((m) => m.ship.ciNaoExigidoDetalhe) };
|
|
142
145
|
// RM-047: o `--remoto` do `ork ci status` vem da linha de comando; so nome de remoto chega ao git.
|
|
143
146
|
const remote = (0, util_1.exec)('git', ['remote', 'get-url', '--', (0, branch_de_estado_1.exigirRemoto)(remoto, 'ci')], carregado.raiz);
|
|
144
147
|
const repository = remote.ok ? repositorioGitHub(remote.stdout) : null;
|
|
145
148
|
if (!repository)
|
|
146
|
-
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository: null, sha, context, state: 'unavailable', url: null, detail:
|
|
149
|
+
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository: null, sha, context, state: 'unavailable', url: null, detail: (0, locale_1.textoDoCatalogo)((m) => m.ship.ciRemotoNaoGithub(remoto)) };
|
|
147
150
|
return consultarCiDoRepositorio(repository, sha, context, executor);
|
|
148
151
|
}
|
|
149
152
|
/**
|
|
@@ -153,23 +156,23 @@ function consultarCi(carregado, sha, remoto = 'origin', executor = executorPadra
|
|
|
153
156
|
function consultarCiDoRepositorio(repository, sha, context, executor = executorPadrao) {
|
|
154
157
|
const result = executor({ repository, sha, context });
|
|
155
158
|
if (!result.ok)
|
|
156
|
-
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository, sha, context, state: 'unavailable', url: null, detail: (result.stderr || result.stdout ||
|
|
159
|
+
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository, sha, context, state: 'unavailable', url: null, detail: (result.stderr || result.stdout || (0, locale_1.textoDoCatalogo)((m) => m.ship.ciConsultaFalhou)).trim().slice(0, 400) };
|
|
157
160
|
let payload;
|
|
158
161
|
try {
|
|
159
162
|
payload = JSON.parse(result.stdout);
|
|
160
163
|
}
|
|
161
164
|
catch {
|
|
162
|
-
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository, sha, context, state: 'unavailable', url: null, detail:
|
|
165
|
+
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository, sha, context, state: 'unavailable', url: null, detail: (0, locale_1.textoDoCatalogo)((m) => m.ship.ciRespostaInvalida) };
|
|
163
166
|
}
|
|
164
167
|
const checks = (payload.check_runs ?? []).filter((check) => check.name === context);
|
|
165
168
|
if (!checks.length)
|
|
166
|
-
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository, sha, context, state: 'missing', url: null, detail:
|
|
169
|
+
return { schema: 'ork.ci-status/v1', required: true, ok: false, provider: 'github', repository, sha, context, state: 'missing', url: null, detail: (0, locale_1.textoDoCatalogo)((m) => m.ship.ciSemCheck(context)) };
|
|
167
170
|
const check = checks.at(-1);
|
|
168
171
|
const status = check.status ?? 'unknown';
|
|
169
172
|
const conclusion = check.conclusion ?? '';
|
|
170
173
|
const url = check.html_url ?? '';
|
|
171
174
|
const state = status !== 'completed' ? 'pending' : conclusion === 'success' ? 'success' : 'failure';
|
|
172
|
-
return { schema: 'ork.ci-status/v1', required: true, ok: state === 'success', provider: 'github', repository, sha, context, state, url: url || null, detail: state === 'success' ?
|
|
175
|
+
return { schema: 'ork.ci-status/v1', required: true, ok: state === 'success', provider: 'github', repository, sha, context, state, url: url || null, detail: (0, locale_1.textoDoCatalogo)((m) => state === 'success' ? m.ship.ciVerde : m.ship.ciEstado(context, String(status), conclusion)) };
|
|
173
176
|
}
|
|
174
177
|
function executarCi(carregado, threadId) {
|
|
175
178
|
const verify = (0, verify_1.verificar)(carregado, threadId);
|
|
@@ -202,6 +205,7 @@ function arquivoDoBundle(threadId) {
|
|
|
202
205
|
throw new Error(`ci.bundle: "${threadId}" nao e id de thread`);
|
|
203
206
|
return `${threadId}.json`;
|
|
204
207
|
}
|
|
208
|
+
/** Os comandos que o bundle leva ao runner; o `ork ship publicar` confere os do bundle no HEAD contra estes. */
|
|
205
209
|
function comandosDoBundle(carregado) {
|
|
206
210
|
return carregado.manifesto.ci.command
|
|
207
211
|
? [{ name: 'ci', command: carregado.manifesto.ci.command }]
|
|
@@ -233,7 +237,9 @@ function lintDoBundle(claims) {
|
|
|
233
237
|
*/
|
|
234
238
|
function destinoDoBundle(carregado, threadId) {
|
|
235
239
|
const worktree = (0, thread_1.lerThread)(carregado.raiz, threadId).worktree;
|
|
236
|
-
|
|
240
|
+
// RM-047 (P2): o bundle so e gravado na worktree registrada; outro diretorio do thread.json cai na raiz.
|
|
241
|
+
return worktree && fs.existsSync(worktree) && (0, procedencia_1.cwdLocalOuNulo)(carregado.raiz, threadId, worktree, 'thread') !== null
|
|
242
|
+
? worktree : carregado.raiz;
|
|
237
243
|
}
|
|
238
244
|
function prepararBundleCi(carregado, threadId, opcoes = {}) {
|
|
239
245
|
const commands = comandosDoBundle(carregado);
|