@orkastery/cli 0.5.3 → 0.6.0
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/README.md +18 -0
- package/adapters/claude-code/.claude-plugin/plugin.json +1 -0
- package/adapters/claude-code/README.md +195 -5
- package/adapters/claude-code/agents/ork-check.md +1 -0
- package/adapters/claude-code/agents/ork-go.md +1 -0
- package/adapters/claude-code/agents/ork-goal.md +1 -0
- package/adapters/claude-code/agents/ork-master.md +1 -0
- package/adapters/claude-code/agents/ork-plan.md +1 -0
- package/adapters/claude-code/agents/ork-ship.md +1 -0
- package/adapters/claude-code/hooks/hooks.json +2 -1
- package/adapters/claude-code/hooks/ork-guard.js +15 -1
- package/adapters/claude-code/hooks/ork-resposta.js +91 -0
- package/adapters/claude-code/hooks/ork-sensor.js +18 -2
- package/adapters/claude-code/hooks/quota-signal.js +14 -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-mensageiro/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/caixa.ts +215 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/painel.tsx +165 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/recepcao.ts +256 -0
- package/adapters/claude-code/mods/ork-mensageiro/hooks/register.tsx +481 -0
- package/adapters/claude-code/mods/ork-mensageiro/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-mensageiro/types/index.d.ts +85 -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 +121 -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-ritual/.claude-plugin/plugin.json +14 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/hooks.json +3 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/nota.ts +88 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/register.tsx +494 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/replay.tsx +271 -0
- package/adapters/claude-code/mods/ork-ritual/hooks/ritual.ts +218 -0
- package/adapters/claude-code/mods/ork-ritual/orkastery-mod.json +5 -0
- package/adapters/claude-code/mods/ork-ritual/types/index.d.ts +106 -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/codex/skills/ork/SKILL.md +2 -0
- package/adapters/hermes/README.md +64 -1
- package/adapters/hermes/bin/ork-conhecimento-colecoes.sh +14 -0
- package/adapters/hermes/bin/ork-conhecimento-listar.sh +15 -0
- package/adapters/hermes/bin/ork-conhecimento-mostrar.sh +16 -0
- package/adapters/hermes/bin/ork-conhecimento-verificar.sh +15 -0
- package/adapters/hermes/bin/ork-vigia-batida.py +127 -0
- package/adapters/hermes/hermes.plugin.json +4 -0
- package/adapters/hermes/hitl-ingress/__init__.py +101 -8
- package/adapters/hermes/skills/orkastery-devmaster/SKILL.md +3 -3
- package/adapters/openclaw/README.md +83 -10
- package/adapters/openclaw/bin/ork-vigia-batida.js +86 -0
- package/adapters/openclaw/dist/hitl-ingress.js +106 -9
- package/adapters/openclaw/dist/index.js +86 -0
- package/adapters/openclaw/openclaw.plugin.json +34 -4
- package/adapters/openclaw/package.json +2 -2
- package/adapters/openclaw/src/hitl-ingress.ts +103 -9
- package/adapters/openclaw/src/index.ts +94 -0
- package/assets/adapters-en/claude-code/README.md +403 -0
- package/assets/adapters-en/claude-code/agents/ork-check.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-go.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-goal.md +34 -0
- package/assets/adapters-en/claude-code/agents/ork-master.md +35 -0
- package/assets/adapters-en/claude-code/agents/ork-plan.md +33 -0
- package/assets/adapters-en/claude-code/agents/ork-ship.md +33 -0
- package/assets/adapters-en/claude-code/commands/check.md +46 -0
- package/assets/adapters-en/claude-code/commands/go.md +46 -0
- package/assets/adapters-en/claude-code/commands/goal.md +55 -0
- package/assets/adapters-en/claude-code/commands/master.md +54 -0
- package/assets/adapters-en/claude-code/commands/onboarding.md +22 -0
- package/assets/adapters-en/claude-code/commands/ork.md +126 -0
- package/assets/adapters-en/claude-code/commands/plan.md +47 -0
- package/assets/adapters-en/claude-code/commands/ship.md +45 -0
- package/assets/adapters-en/codex/skills/ork/SKILL.md +85 -0
- package/assets/adapters-en/hermes/README.md +273 -0
- package/assets/adapters-en/hermes/skills/orkastery-devmaster/SKILL.md +169 -0
- 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/assets/references-en/README.md +25 -0
- package/assets/references-en/code-review-axes.md +82 -0
- package/assets/references-en/definition-of-done.md +74 -0
- package/assets/references-en/performance-checklist.md +53 -0
- package/assets/references-en/security-checklist.md +101 -0
- package/assets/references-en/testing-patterns.md +51 -0
- package/assets/security-scan/defaults/.golangci.yml +2 -0
- package/assets/security-scan/defaults/eslint.config.mjs +11 -0
- package/assets/security-scan/defaults/gitleaks.toml +3 -0
- package/assets/security-scan/defaults/ruff.toml +1 -0
- package/assets/security-scan/tools-agil.json +87 -0
- package/assets/security-scan/tools.json +625 -0
- package/assets/skills-en/core/onboarding/SKILL.md +58 -0
- package/assets/skills-en/core/orkastery-bootstrap/SKILL.md +119 -0
- package/assets/skills-en/core/thread-state/SKILL.md +88 -0
- package/assets/skills-en/governance/decision-triage/SKILL.md +65 -0
- package/assets/skills-en/governance/narrative-guardian/SKILL.md +66 -0
- package/assets/skills-en/governance/roadmap-keeper/SKILL.md +60 -0
- package/assets/skills-en/governance/scope-check-capability-map/SKILL.md +71 -0
- package/assets/skills-en/observability/thread-tracing/SKILL.md +63 -0
- package/assets/skills-en/phases/check-quality/SKILL.md +103 -0
- package/assets/skills-en/phases/go-implementation/SKILL.md +78 -0
- package/assets/skills-en/phases/goal-definition/SKILL.md +69 -0
- package/assets/skills-en/phases/master-metrics/SKILL.md +72 -0
- package/assets/skills-en/phases/plan-specification/SKILL.md +67 -0
- package/assets/skills-en/phases/security-remediation/SKILL.md +70 -0
- package/assets/skills-en/phases/ship-release/SKILL.md +71 -0
- package/assets/skills-en/reviewers/code-reviewer/SKILL.md +61 -0
- package/assets/skills-en/reviewers/security-auditor/SKILL.md +93 -0
- package/assets/skills-en/reviewers/test-engineer/SKILL.md +66 -0
- package/assets/skills-en/reviewers/web-performance-auditor/SKILL.md +63 -0
- package/dist/adapters/claude-bg.js +193 -15
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +13 -2
- package/dist/agents-md.js +24 -15
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +68 -48
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +98 -43
- package/dist/branch-de-estado.js +39 -9
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +35 -1
- package/dist/changelog-reconciliacao.js +290 -0
- package/dist/check-agil.js +500 -0
- package/dist/check-modo.js +41 -0
- package/dist/check-paralelo.js +183 -0
- package/dist/ci.js +255 -46
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +350 -0
- package/dist/claims.js +13 -10
- package/dist/company-brain-client.js +45 -3
- package/dist/company-brain-journal.js +2 -1
- package/dist/company-brain-migration.js +47 -6
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +405 -0
- package/dist/conducao-texto.js +12 -18
- package/dist/conducao.js +206 -59
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +514 -0
- package/dist/conta-esgotada.js +127 -0
- package/dist/dado-privado.js +816 -0
- package/dist/decisao-autonoma.js +5 -4
- package/dist/demo.js +14 -12
- package/dist/dependencias-da-worktree.js +25 -0
- package/dist/divida.js +38 -36
- package/dist/docs.js +103 -82
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +294 -27
- package/dist/doctor-rede.js +18 -17
- package/dist/doctor.js +278 -116
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +158 -57
- package/dist/escopo-escrita.js +10 -1
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +42 -17
- package/dist/evalrunner.js +35 -32
- package/dist/experiencia-instalacao.js +45 -25
- package/dist/fabrica-batida.js +323 -0
- package/dist/fabrica-estado.js +49 -16
- package/dist/fabrica-publicar.js +3 -1
- package/dist/fila-pesada.js +444 -0
- package/dist/fix.js +24 -21
- package/dist/forja/adaptador.js +6 -0
- package/dist/forja/ambiente-de-ci.js +27 -0
- package/dist/forja/api.js +256 -0
- package/dist/forja/cache.js +89 -0
- package/dist/forja/cli.js +60 -0
- package/dist/forja/contrato.js +9 -0
- package/dist/forja/endereco.js +43 -0
- package/dist/forja/estado.js +22 -0
- package/dist/forja/executor.js +73 -0
- package/dist/forja/github/ci.js +95 -0
- package/dist/forja/github/dono-da-rede.js +18 -0
- package/dist/forja/github/metadados.js +15 -0
- package/dist/forja/github/pedidos.js +200 -0
- package/dist/forja/gitlab/ci.js +141 -0
- package/dist/forja/gitlab/consultas.js +59 -0
- package/dist/forja/gitlab/dono-da-rede.js +43 -0
- package/dist/forja/gitlab/metadados.js +15 -0
- package/dist/forja/gitlab/pedidos-abertos.js +158 -0
- package/dist/forja/gitlab/pedidos.js +141 -0
- package/dist/forja/produtor.js +32 -0
- package/dist/forja/registro.js +31 -0
- package/dist/forja/resolver.js +121 -0
- package/dist/forja/texto.js +13 -0
- package/dist/forja/versao.js +71 -0
- package/dist/forja.js +124 -81
- package/dist/gates.js +3 -28
- package/dist/handoff.js +33 -19
- package/dist/hitl-contract.js +46 -43
- package/dist/hitl-curto.js +37 -25
- package/dist/hitl-gates.js +13 -11
- package/dist/hitl-local-receipt.js +53 -0
- package/dist/hitl-local.js +11 -2
- package/dist/hitl-lock.js +5 -11
- package/dist/hitl-public-receipt.js +11 -0
- package/dist/hitl-resumo.js +72 -3
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-tempo-parado.js +4 -4
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +63 -64
- package/dist/horario.js +30 -7
- package/dist/hosts.js +155 -134
- package/dist/impedimento.js +108 -14
- package/dist/index.js +1421 -1019
- package/dist/indice-vetorial.js +14 -12
- package/dist/indice.js +7 -1
- package/dist/init.js +54 -49
- package/dist/instabilidade.js +144 -0
- package/dist/integracoes-locais.js +4 -0
- package/dist/intelligence-graph-cli.js +213 -88
- 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 +96 -34
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +46 -2
- package/dist/licoes.js +12 -11
- package/dist/liveness.js +6 -3
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +833 -0
- package/dist/locale-audit.js +199 -0
- package/dist/locale-claims.js +213 -0
- package/dist/locale-conducao.js +138 -0
- package/dist/locale-conhecimento.js +181 -0
- package/dist/locale-decisao.js +205 -0
- package/dist/locale-docs.js +230 -0
- package/dist/locale-estado.js +101 -0
- package/dist/locale-forja.js +290 -0
- package/dist/locale-gerados.js +165 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +182 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-onboarding.js +92 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-phase.js +151 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +349 -0
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +524 -0
- package/dist/locale-roadmap.js +102 -0
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +597 -0
- package/dist/locale-thread.js +421 -0
- package/dist/locale-verify.js +201 -0
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +1258 -0
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +415 -13
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +31 -7
- package/dist/master-digest.js +6 -1
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +14 -8
- package/dist/master.js +139 -65
- package/dist/mcp-artifacts.js +11 -2
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-git.js +23 -6
- package/dist/mcp-grafo.js +7 -4
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +90 -16
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +71 -25
- package/dist/mcp-transportes.js +17 -0
- package/dist/mcp-verify.js +6 -1
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +20 -24
- package/dist/network-roadmap.js +90 -51
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +1418 -0
- package/dist/noctum-capacidade.js +141 -0
- package/dist/noctum-changelog.js +399 -0
- package/dist/noctum-cli.js +482 -0
- package/dist/noctum-coordenacao.js +1225 -0
- package/dist/noctum-entrega.js +1169 -0
- package/dist/noctum-envelope.js +1046 -0
- package/dist/noctum-execucao.js +376 -0
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +314 -0
- package/dist/noctum-guarda.js +256 -0
- package/dist/noctum-integracao.js +507 -0
- package/dist/noctum-maquinas.js +383 -0
- package/dist/noctum-medicao.js +450 -0
- package/dist/noctum-modo.js +362 -0
- package/dist/noctum-pergunta-canal.js +96 -0
- package/dist/noctum-pergunta.js +115 -0
- package/dist/noctum-provas.js +838 -0
- package/dist/noctum-reconciliacao.js +591 -0
- package/dist/noctum-registro.js +215 -0
- package/dist/noctum-relatorio.js +827 -0
- package/dist/noctum-resposta.js +207 -0
- package/dist/noctum-sessoes-em-voo.js +93 -0
- package/dist/noctum-supervisao.js +649 -0
- package/dist/noctum-terminal.js +459 -0
- package/dist/noctum-transporte.js +655 -0
- package/dist/noctum-vigia.js +639 -0
- package/dist/ocupacao.js +32 -3
- package/dist/onboarding.js +56 -26
- package/dist/orkmind.js +48 -25
- package/dist/orquestracao.js +44 -47
- package/dist/parado-no-condutor.js +174 -127
- package/dist/phase.js +144 -63
- package/dist/policies.js +37 -4
- package/dist/portfolio.js +4 -2
- package/dist/postura-local.js +235 -0
- package/dist/preflight.js +11 -10
- package/dist/procedencia.js +220 -0
- package/dist/projeto-alvo.js +186 -24
- package/dist/prompts.js +140 -42
- package/dist/prova-minima.js +5 -6
- package/dist/pulse-cadencia.js +5 -4
- package/dist/pulse-consentimento.js +53 -1
- package/dist/pulse-delivery.js +151 -24
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +188 -22
- package/dist/ratelimit.js +16 -6
- package/dist/recall.js +14 -13
- package/dist/redacao-saida.js +63 -0
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +66 -47
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +451 -212
- package/dist/roadmap-reservas.js +45 -28
- package/dist/roadmap-status.js +129 -33
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +284 -32
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- package/dist/runtimes.js +2 -1
- package/dist/saida-segura.js +3 -2
- package/dist/security-scan/agil.js +355 -0
- package/dist/security-scan/cli.js +76 -0
- package/dist/security-scan/compare.js +149 -0
- package/dist/security-scan/config.js +93 -0
- package/dist/security-scan/detect.js +97 -0
- package/dist/security-scan/executor.js +188 -0
- package/dist/security-scan/guard.js +180 -0
- package/dist/security-scan/imagem-de-lint.js +96 -0
- package/dist/security-scan/normalize/actionlint.js +12 -0
- package/dist/security-scan/normalize/eslint.js +12 -0
- package/dist/security-scan/normalize/gitleaks.js +13 -0
- package/dist/security-scan/normalize/golangci-lint.js +13 -0
- package/dist/security-scan/normalize/govulncheck.js +36 -0
- package/dist/security-scan/normalize/index.js +25 -0
- package/dist/security-scan/normalize/npm-audit.js +30 -0
- package/dist/security-scan/normalize/osv-scanner.js +32 -0
- package/dist/security-scan/normalize/oxlint.js +51 -0
- package/dist/security-scan/normalize/pip-audit.js +16 -0
- package/dist/security-scan/normalize/ruff.js +12 -0
- package/dist/security-scan/normalize/semgrep.js +20 -0
- package/dist/security-scan/normalize/trivy.js +33 -0
- package/dist/security-scan/normalize/util.js +204 -0
- package/dist/security-scan/normalize/zizmor.js +19 -0
- package/dist/security-scan/report.js +156 -0
- package/dist/security-scan/run.js +448 -0
- package/dist/security-scan/tools.js +62 -0
- package/dist/security-scan/trabalhador.js +74 -0
- package/dist/security-scan/types.js +15 -0
- package/dist/session-events.js +26 -5
- package/dist/session-watcher-claude.js +81 -20
- package/dist/session-watcher.js +340 -42
- package/dist/sessoes-contas.js +10 -1
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +971 -0
- package/dist/ship.js +243 -97
- package/dist/steal.js +77 -0
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +12 -11
- package/dist/thread.js +274 -100
- package/dist/tokens.js +15 -11
- package/dist/trabalho-thread.js +297 -0
- package/dist/transporte-do-canal.js +189 -0
- package/dist/types.js +12 -1
- package/dist/util.js +13 -3
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +608 -76
- package/dist/vida-da-thread.js +254 -0
- package/dist/worktree-local.js +167 -0
- package/dist/worktree.js +99 -83
- package/dist/yaml.js +27 -8
- package/eval/casos/check-quality.json +77 -0
- package/eval/casos/security-auditor.json +148 -0
- package/eval/casos/security-remediation.json +161 -0
- package/eval/fixtures/security-scan/README.md +8 -0
- package/eval/fixtures/security-scan/go/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/go/Dockerfile +4 -0
- package/eval/fixtures/security-scan/go/README.md +4 -0
- package/eval/fixtures/security-scan/go/config.go +4 -0
- package/eval/fixtures/security-scan/go/go.mod +5 -0
- package/eval/fixtures/security-scan/go/go.sum +2 -0
- package/eval/fixtures/security-scan/go/main.go +31 -0
- package/eval/fixtures/security-scan/js/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/js/Dockerfile +3 -0
- package/eval/fixtures/security-scan/js/README.md +4 -0
- package/eval/fixtures/security-scan/js/package-lock.json +844 -0
- package/eval/fixtures/security-scan/js/package.json +10 -0
- package/eval/fixtures/security-scan/js/src/config.js +4 -0
- package/eval/fixtures/security-scan/js/src/server.js +17 -0
- package/eval/fixtures/security-scan/js/src/util.ts +4 -0
- package/eval/fixtures/security-scan/js/tsconfig.json +4 -0
- package/eval/fixtures/security-scan/python/.github/workflows/ci.yml +12 -0
- package/eval/fixtures/security-scan/python/Dockerfile +3 -0
- package/eval/fixtures/security-scan/python/README.md +4 -0
- package/eval/fixtures/security-scan/python/app/__init__.py +0 -0
- package/eval/fixtures/security-scan/python/app/config.py +2 -0
- package/eval/fixtures/security-scan/python/app/main.py +19 -0
- package/eval/fixtures/security-scan/python/requirements.txt +1 -0
- package/package.json +9 -4
- package/references/security-checklist.md +3 -3
- package/schemas/code-artifact-graph.v1.schema.json +2 -1
- package/skills/README.md +1 -0
- package/skills/core/orkastery-bootstrap/SKILL.md +2 -2
- package/skills/phases/check-quality/SKILL.md +16 -0
- package/skills/phases/go-implementation/SKILL.md +6 -0
- package/skills/phases/security-remediation/SKILL.md +70 -0
- package/skills/reviewers/security-auditor/SKILL.md +25 -0
package/dist/evalrunner.js
CHANGED
|
@@ -68,6 +68,7 @@ const path = __importStar(require("node:path"));
|
|
|
68
68
|
const canarios_1 = require("./canarios");
|
|
69
69
|
const catalogo_1 = require("./catalogo");
|
|
70
70
|
const util_1 = require("./util");
|
|
71
|
+
const locale_1 = require("./locale");
|
|
71
72
|
/** Os tres tipos que toda skill precisa cobrir. Menos que isso e cobertura de fachada. */
|
|
72
73
|
exports.TIPOS_DE_CASO = ['caminho-feliz', 'racionalizacao', 'borda'];
|
|
73
74
|
/** Minimo de casos por skill, para o corpus nao virar uma linha por skill. */
|
|
@@ -147,7 +148,7 @@ function lerCasos(catalogo) {
|
|
|
147
148
|
try {
|
|
148
149
|
const lido = JSON.parse(fs.readFileSync(caminho, 'utf8'));
|
|
149
150
|
if (!lido.skill || !Array.isArray(lido.casos)) {
|
|
150
|
-
falhas.push({ codigo: 'fixture-invalida', detalhe:
|
|
151
|
+
falhas.push({ codigo: 'fixture-invalida', detalhe: (0, locale_1.msg)().operacao.restante.eval.fixtureFormato(nome) });
|
|
151
152
|
continue;
|
|
152
153
|
}
|
|
153
154
|
arquivos.push(lido);
|
|
@@ -160,6 +161,7 @@ function lerCasos(catalogo) {
|
|
|
160
161
|
}
|
|
161
162
|
function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
162
163
|
const falhas = [];
|
|
164
|
+
const m = (0, locale_1.msg)().operacao.restante.eval;
|
|
163
165
|
const skill = arquivo.skill;
|
|
164
166
|
const tabelaDeDesculpas = intervaloDaTabelaDeDesculpas(textoDaSkill);
|
|
165
167
|
let assercoes = 0;
|
|
@@ -167,17 +169,17 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
167
169
|
falhas.push({
|
|
168
170
|
codigo: 'cobertura-minima',
|
|
169
171
|
skill,
|
|
170
|
-
detalhe:
|
|
172
|
+
detalhe: m.casosMinimos(arquivo.casos.length, exports.MINIMO_DE_CASOS),
|
|
171
173
|
});
|
|
172
174
|
}
|
|
173
175
|
for (const tipo of exports.TIPOS_DE_CASO) {
|
|
174
176
|
if (!arquivo.casos.some((c) => c.tipo === tipo)) {
|
|
175
|
-
falhas.push({ codigo: 'tipo-faltando', skill, detalhe:
|
|
177
|
+
falhas.push({ codigo: 'tipo-faltando', skill, detalhe: m.tipoFaltando(tipo) });
|
|
176
178
|
}
|
|
177
179
|
}
|
|
178
180
|
for (const caso of arquivo.casos) {
|
|
179
181
|
if (vistos.has(caso.id)) {
|
|
180
|
-
falhas.push({ codigo: 'id-duplicado', skill, caso: caso.id, detalhe:
|
|
182
|
+
falhas.push({ codigo: 'id-duplicado', skill, caso: caso.id, detalhe: m.idRepetido });
|
|
181
183
|
}
|
|
182
184
|
vistos.add(caso.id);
|
|
183
185
|
if (!caso.id.startsWith(`${skill}/`)) {
|
|
@@ -185,7 +187,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
185
187
|
codigo: 'id-sem-prefixo',
|
|
186
188
|
skill,
|
|
187
189
|
caso: caso.id,
|
|
188
|
-
detalhe:
|
|
190
|
+
detalhe: m.idPrefixo(skill),
|
|
189
191
|
});
|
|
190
192
|
}
|
|
191
193
|
if (caso.tipo === 'racionalizacao' && !(caso.racionalizacao ?? '').trim()) {
|
|
@@ -193,7 +195,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
193
195
|
codigo: 'racionalizacao-sem-desculpa',
|
|
194
196
|
skill,
|
|
195
197
|
caso: caso.id,
|
|
196
|
-
detalhe:
|
|
198
|
+
detalhe: m.racionalizacao,
|
|
197
199
|
});
|
|
198
200
|
}
|
|
199
201
|
let ancoraForaDaTabela = false;
|
|
@@ -204,7 +206,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
204
206
|
codigo: 'assercao-sem-porque',
|
|
205
207
|
skill,
|
|
206
208
|
caso: caso.id,
|
|
207
|
-
detalhe:
|
|
209
|
+
detalhe: m.assercaoPorque(a.valor),
|
|
208
210
|
});
|
|
209
211
|
}
|
|
210
212
|
let posicoes;
|
|
@@ -216,7 +218,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
216
218
|
codigo: 'padrao-invalido',
|
|
217
219
|
skill,
|
|
218
220
|
caso: caso.id,
|
|
219
|
-
detalhe:
|
|
221
|
+
detalhe: m.padraoInvalido(a.valor, e.message),
|
|
220
222
|
});
|
|
221
223
|
continue;
|
|
222
224
|
}
|
|
@@ -226,7 +228,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
226
228
|
codigo: 'assercao',
|
|
227
229
|
skill,
|
|
228
230
|
caso: caso.id,
|
|
229
|
-
detalhe:
|
|
231
|
+
detalhe: m.deveriaAusente(a.valor, posicoes.length),
|
|
230
232
|
});
|
|
231
233
|
}
|
|
232
234
|
continue;
|
|
@@ -236,7 +238,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
236
238
|
codigo: 'assercao',
|
|
237
239
|
skill,
|
|
238
240
|
caso: caso.id,
|
|
239
|
-
detalhe:
|
|
241
|
+
detalhe: m.naoExiste(a.valor, skill, a.porque),
|
|
240
242
|
});
|
|
241
243
|
continue;
|
|
242
244
|
}
|
|
@@ -250,7 +252,7 @@ function avaliarSkill(arquivo, textoDaSkill, vistos) {
|
|
|
250
252
|
codigo: 'ancora-fora-da-tabela',
|
|
251
253
|
skill,
|
|
252
254
|
caso: caso.id,
|
|
253
|
-
detalhe:
|
|
255
|
+
detalhe: m.ancora,
|
|
254
256
|
});
|
|
255
257
|
}
|
|
256
258
|
}
|
|
@@ -274,14 +276,15 @@ function rodarCanarios(catalogo, filtro) {
|
|
|
274
276
|
const dir = dirDeFixtures(catalogo);
|
|
275
277
|
const resultados = [];
|
|
276
278
|
const falhas = [];
|
|
279
|
+
const m = (0, locale_1.msg)().operacao.restante.eval;
|
|
277
280
|
const temGit = (0, canarios_1.gitDisponivel)();
|
|
278
281
|
const nomes = fs.existsSync(dir) ? fs.readdirSync(dir).sort() : [];
|
|
279
282
|
if (filtro && filtro.length === 0) {
|
|
280
|
-
falhas.push({ codigo: 'fixture-invalida', detalhe:
|
|
283
|
+
falhas.push({ codigo: 'fixture-invalida', detalhe: m.filtroVazio });
|
|
281
284
|
}
|
|
282
285
|
for (const id of new Set(filtro ?? [])) {
|
|
283
286
|
if (!nomes.includes(id) || !(0, canarios_1.canarioPorId)(id)) {
|
|
284
|
-
falhas.push({ codigo: 'canario-sem-executor', caso: id, detalhe:
|
|
287
|
+
falhas.push({ codigo: 'canario-sem-executor', caso: id, detalhe: m.canarioAusente(id) });
|
|
285
288
|
}
|
|
286
289
|
}
|
|
287
290
|
for (const nome of nomes) {
|
|
@@ -291,7 +294,7 @@ function rodarCanarios(catalogo, filtro) {
|
|
|
291
294
|
continue;
|
|
292
295
|
const caminho = path.join(dir, nome, 'caso.json');
|
|
293
296
|
if (!fs.existsSync(caminho)) {
|
|
294
|
-
falhas.push({ codigo: 'fixture-invalida', detalhe:
|
|
297
|
+
falhas.push({ codigo: 'fixture-invalida', detalhe: m.casoAusente(nome) });
|
|
295
298
|
continue;
|
|
296
299
|
}
|
|
297
300
|
let fixture;
|
|
@@ -304,13 +307,13 @@ function rodarCanarios(catalogo, filtro) {
|
|
|
304
307
|
}
|
|
305
308
|
const canario = (0, canarios_1.canarioPorId)(fixture.id ?? nome);
|
|
306
309
|
if (fixture.id !== nome) {
|
|
307
|
-
falhas.push({ codigo: 'fixture-invalida', caso: nome, detalhe:
|
|
310
|
+
falhas.push({ codigo: 'fixture-invalida', caso: nome, detalhe: m.fixtureDiverge });
|
|
308
311
|
continue;
|
|
309
312
|
}
|
|
310
313
|
if (!canario) {
|
|
311
314
|
falhas.push({
|
|
312
315
|
codigo: 'canario-sem-executor',
|
|
313
|
-
detalhe:
|
|
316
|
+
detalhe: m.semExecutor(nome, fixture.id ?? nome),
|
|
314
317
|
});
|
|
315
318
|
continue;
|
|
316
319
|
}
|
|
@@ -320,7 +323,7 @@ function rodarCanarios(catalogo, filtro) {
|
|
|
320
323
|
sobre: canario.sobre,
|
|
321
324
|
estado: 'unavailable',
|
|
322
325
|
divergencias: [],
|
|
323
|
-
motivo:
|
|
326
|
+
motivo: m.semGit,
|
|
324
327
|
observado: {},
|
|
325
328
|
});
|
|
326
329
|
continue;
|
|
@@ -340,7 +343,7 @@ function rodarCanarios(catalogo, filtro) {
|
|
|
340
343
|
falhas.push({
|
|
341
344
|
codigo: 'canario',
|
|
342
345
|
caso: `${canario.id}/${d.chave}`,
|
|
343
|
-
detalhe:
|
|
346
|
+
detalhe: m.divergencia(JSON.stringify(d.esperado), JSON.stringify(d.observado)),
|
|
344
347
|
});
|
|
345
348
|
}
|
|
346
349
|
}
|
|
@@ -364,7 +367,7 @@ function rodarCanarios(catalogo, filtro) {
|
|
|
364
367
|
falhas.push({
|
|
365
368
|
codigo: 'fixture-invalida',
|
|
366
369
|
caso: c.id,
|
|
367
|
-
detalhe:
|
|
370
|
+
detalhe: m.canarioSemFixture(c.id),
|
|
368
371
|
});
|
|
369
372
|
}
|
|
370
373
|
}
|
|
@@ -398,7 +401,7 @@ function rodarEval(opcoes) {
|
|
|
398
401
|
falhas.push({
|
|
399
402
|
codigo: 'skill-sem-eval',
|
|
400
403
|
skill: skill.nome,
|
|
401
|
-
detalhe:
|
|
404
|
+
detalhe: (0, locale_1.msg)().operacao.restante.eval.skillSemEval(skill.nome),
|
|
402
405
|
});
|
|
403
406
|
}
|
|
404
407
|
}
|
|
@@ -410,7 +413,7 @@ function rodarEval(opcoes) {
|
|
|
410
413
|
falhas.push({
|
|
411
414
|
codigo: 'eval-sem-skill',
|
|
412
415
|
skill: arquivo.skill,
|
|
413
|
-
detalhe:
|
|
416
|
+
detalhe: (0, locale_1.msg)().operacao.restante.eval.evalSemSkill,
|
|
414
417
|
});
|
|
415
418
|
continue;
|
|
416
419
|
}
|
|
@@ -435,23 +438,24 @@ function rodarEval(opcoes) {
|
|
|
435
438
|
}
|
|
436
439
|
/** Texto de `ork eval`. */
|
|
437
440
|
function textoDoEval(r) {
|
|
441
|
+
const m = (0, locale_1.msg)().operacao.restante.eval;
|
|
438
442
|
const linhas = [];
|
|
439
|
-
linhas.push(
|
|
443
|
+
linhas.push(m.titulo(r.catalogo));
|
|
440
444
|
linhas.push('');
|
|
441
445
|
if (r.canarios.length > 0) {
|
|
442
|
-
linhas.push(
|
|
446
|
+
linhas.push(m.canarios);
|
|
443
447
|
linhas.push('');
|
|
444
|
-
linhas.push((0, util_1.tabela)([
|
|
448
|
+
linhas.push((0, util_1.tabela)([...m.colunasCanarios], r.canarios.map((c) => [c.id, m.estados[c.estado] ?? c.estado, c.estado === 'passou' ? c.sobre : c.motivo || c.sobre])));
|
|
445
449
|
linhas.push('');
|
|
446
450
|
}
|
|
447
451
|
if (r.skills.length > 0) {
|
|
448
|
-
linhas.push(
|
|
452
|
+
linhas.push(m.skills);
|
|
449
453
|
linhas.push('');
|
|
450
|
-
linhas.push((0, util_1.tabela)([
|
|
454
|
+
linhas.push((0, util_1.tabela)([...m.colunasSkills], r.skills.map((s) => [s.skill, String(s.casos), String(s.assercoes), String(s.falhas)])));
|
|
451
455
|
linhas.push('');
|
|
452
456
|
}
|
|
453
457
|
if (r.falhas.length > 0) {
|
|
454
|
-
linhas.push(
|
|
458
|
+
linhas.push(m.falhas);
|
|
455
459
|
for (const f of r.falhas) {
|
|
456
460
|
const onde = [f.skill, f.caso].filter(Boolean).join(' :: ');
|
|
457
461
|
linhas.push(` [${f.codigo}] ${onde}`);
|
|
@@ -461,10 +465,9 @@ function textoDoEval(r) {
|
|
|
461
465
|
}
|
|
462
466
|
const passaram = r.canarios.filter((c) => c.estado === 'passou').length;
|
|
463
467
|
const indisponiveis = r.canarios.filter((c) => c.estado === 'unavailable').length;
|
|
464
|
-
linhas.push(
|
|
465
|
-
|
|
466
|
-
linhas.push(
|
|
467
|
-
linhas.push(
|
|
468
|
-
linhas.push(r.ok ? 'VEREDITO: verde' : 'VEREDITO: vermelho');
|
|
468
|
+
linhas.push(m.resumoCanarios(passaram, r.canarios.length, indisponiveis));
|
|
469
|
+
linhas.push(m.resumoSkills(r.skills.length, r.totalDeCasos, r.totalDeAssercoes, r.falhas.length));
|
|
470
|
+
linhas.push(m.metade);
|
|
471
|
+
linhas.push(m.veredito(r.ok));
|
|
469
472
|
return linhas.join('\n');
|
|
470
473
|
}
|
|
@@ -41,10 +41,14 @@ exports.aplicarExperiencia = aplicarExperiencia;
|
|
|
41
41
|
const fs = __importStar(require("node:fs"));
|
|
42
42
|
const path = __importStar(require("node:path"));
|
|
43
43
|
const node_crypto_1 = require("node:crypto");
|
|
44
|
+
const locale_1 = require("./locale");
|
|
44
45
|
exports.INICIO_EXPERIENCIA = '<!-- orkastery:experiencia:begin -->';
|
|
45
46
|
exports.FIM_EXPERIENCIA = '<!-- orkastery:experiencia:end -->';
|
|
46
47
|
const CONTRATO = 'ork.experiencia-install/v1';
|
|
47
|
-
|
|
48
|
+
/** RM-061 (F3a, D8): as linguas em que o bloco e escrito e, sem recibo, reconhecido. */
|
|
49
|
+
const LOCALES_DO_BLOCO = ['pt-BR', 'en'];
|
|
50
|
+
/** Marca do diretorio no molde da linha: o texto antes e depois dela reconhece a linha em cada lingua. */
|
|
51
|
+
const MARCA_DO_DIRETORIO = '{{diretorio}}';
|
|
48
52
|
const conflito = () => { throw Error('experiencia.bloco.conflict: bloco ou recibo alterado/duplicado; preserve os arquivos e revise a instalação'); };
|
|
49
53
|
/** Recusa symlinks e hardlinks em qualquer componente antes da leitura/escrita. */
|
|
50
54
|
function caminhoSeguro(projeto, arquivo) {
|
|
@@ -83,18 +87,35 @@ function decodificar(s) {
|
|
|
83
87
|
return b;
|
|
84
88
|
}
|
|
85
89
|
const eolDe = (b) => b.includes('\r\n') ? '\r\n' : '\n';
|
|
86
|
-
/**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
/**
|
|
91
|
+
* O caminho vai relativo ao projeto: o arquivo de instruções costuma ser versionado. RM-061 (F3a, D1 e D2): o texto
|
|
92
|
+
* sai na língua pedida, pela família `gerados` do catálogo; os marcadores são os mesmos nas duas línguas.
|
|
93
|
+
*/
|
|
94
|
+
function nucleoDoBloco(skill, eol, locale) {
|
|
95
|
+
const t = (0, locale_1.msg)(locale).gerados.experiencia;
|
|
96
|
+
return Buffer.from([exports.INICIO_EXPERIENCIA, `## ${t.titulo}`, t.consulte, t.diretorio(JSON.stringify(skill)), t.preferencias,
|
|
93
97
|
exports.FIM_EXPERIENCIA, ''].join(eol));
|
|
94
98
|
}
|
|
99
|
+
/** O diretório escrito na linha do bloco de uma língua, ou null se a linha não é a dessa língua. */
|
|
100
|
+
function diretorioDaLinha(linha, locale) {
|
|
101
|
+
const molde = (0, locale_1.msg)(locale).gerados.experiencia.diretorio(MARCA_DO_DIRETORIO);
|
|
102
|
+
const corte = molde.indexOf(MARCA_DO_DIRETORIO);
|
|
103
|
+
const antes = molde.slice(0, corte), depois = molde.slice(corte + MARCA_DO_DIRETORIO.length);
|
|
104
|
+
if (linha.length < antes.length + depois.length || !linha.startsWith(antes) || !linha.endsWith(depois))
|
|
105
|
+
return null;
|
|
106
|
+
let skill;
|
|
107
|
+
try {
|
|
108
|
+
skill = JSON.parse(linha.slice(antes.length, linha.length - depois.length));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
return typeof skill === 'string' && !/[\r\n`]/.test(skill) ? skill : null;
|
|
114
|
+
}
|
|
95
115
|
/**
|
|
96
116
|
* Bloco sem recibo (clone novo, `.orkastery/` apagado) só é adotado quando é exatamente o texto
|
|
97
|
-
* que esta versão ou a anterior geram, com qualquer diretório
|
|
117
|
+
* que esta versão ou a anterior geram, com qualquer diretório e em qualquer das duas línguas (RM-061,
|
|
118
|
+
* F3a, D8); qualquer outra edição é conflito.
|
|
98
119
|
*/
|
|
99
120
|
function reconhecerBloco(antes) {
|
|
100
121
|
if (contar(antes, exports.INICIO_EXPERIENCIA) !== 1 || contar(antes, exports.FIM_EXPERIENCIA) !== 1)
|
|
@@ -108,18 +129,14 @@ function reconhecerBloco(antes) {
|
|
|
108
129
|
fim += eol.length;
|
|
109
130
|
const texto = antes.subarray(inicio, fim);
|
|
110
131
|
const linha = texto.toString('utf8').split(eol)[3] ?? '';
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
if (typeof skill !== 'string' || /[\r\n`]/.test(skill))
|
|
120
|
-
return null;
|
|
121
|
-
const esperado = nucleoDoBloco(skill, eol);
|
|
122
|
-
if (!texto.equals(esperado) && !texto.equals(esperado.subarray(0, esperado.length - eol.length)))
|
|
132
|
+
const reconhecido = LOCALES_DO_BLOCO.some((locale) => {
|
|
133
|
+
const skill = diretorioDaLinha(linha, locale);
|
|
134
|
+
if (skill === null)
|
|
135
|
+
return false;
|
|
136
|
+
const esperado = nucleoDoBloco(skill, eol, locale);
|
|
137
|
+
return texto.equals(esperado) || texto.equals(esperado.subarray(0, esperado.length - eol.length));
|
|
138
|
+
});
|
|
139
|
+
if (!reconhecido)
|
|
123
140
|
return null;
|
|
124
141
|
// Uma linha em branco antes do bloco é o separador que a instalação põe depois de uma linha.
|
|
125
142
|
const sep = Buffer.from(eol);
|
|
@@ -144,8 +161,11 @@ function removerBloco(antes, bloco) {
|
|
|
144
161
|
const juncao = prefixo.length && prefixo.at(-1) !== 10 && sufixo.length ? Buffer.from(bloco.eol) : Buffer.alloc(0);
|
|
145
162
|
return Buffer.concat([prefixo, juncao, sufixo]);
|
|
146
163
|
}
|
|
147
|
-
/**
|
|
148
|
-
|
|
164
|
+
/**
|
|
165
|
+
* Planejamento puro em relação ao disco: dry-run e preflight usam o mesmo contrato. O bloco sai no `locale` pedido
|
|
166
|
+
* (RM-061, F3a), pt-BR por omissão: só o `ork adapter install` passa a língua do dono (D2).
|
|
167
|
+
*/
|
|
168
|
+
function planejarExperiencia(projeto, host, skill, locale = locale_1.LOCALE_PADRAO) {
|
|
149
169
|
projeto = fs.realpathSync(path.resolve(projeto));
|
|
150
170
|
if (!['claude-code', 'codex'].includes(host))
|
|
151
171
|
throw Error('experiencia.host.unsupported');
|
|
@@ -189,7 +209,7 @@ function planejarExperiencia(projeto, host, skill) {
|
|
|
189
209
|
let separador, nucleo, anterior;
|
|
190
210
|
if (antes && bloco) {
|
|
191
211
|
// Atualização no lugar: o que está antes e depois do bloco, inclusive edição externa, fica.
|
|
192
|
-
nucleo = nucleoDoBloco(skill, bloco.eol);
|
|
212
|
+
nucleo = nucleoDoBloco(skill, bloco.eol, locale);
|
|
193
213
|
separador = bloco.separador;
|
|
194
214
|
depois = Buffer.concat([antes.subarray(0, bloco.inicio), nucleo, antes.subarray(bloco.fim)]);
|
|
195
215
|
// Adotado sem recibo: se só havia o bloco, o arquivo conta como criado pelo pacote.
|
|
@@ -198,7 +218,7 @@ function planejarExperiencia(projeto, host, skill) {
|
|
|
198
218
|
}
|
|
199
219
|
else {
|
|
200
220
|
const base = antes ?? Buffer.alloc(0), eol = eolDe(base);
|
|
201
|
-
nucleo = nucleoDoBloco(skill, eol);
|
|
221
|
+
nucleo = nucleoDoBloco(skill, eol, locale);
|
|
202
222
|
separador = Buffer.from(base.length ? (base.at(-1) === 10 ? eol : eol + eol) : '');
|
|
203
223
|
depois = Buffer.concat([base, separador, nucleo]);
|
|
204
224
|
anterior = antes?.toString('base64') ?? null;
|