@orkastery/cli 0.5.6 → 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 +37 -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/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-pista/hooks/ci.ts +9 -5
- 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/hooks/vigia.ts +1 -1
- 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 +2 -2
- package/adapters/openclaw/README.md +81 -9
- 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/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 +118 -4
- package/dist/adapters/codex-controller-worker.js +12 -5
- package/dist/adapters/codex-events.js +16 -4
- package/dist/adapters/codex.js +3 -1
- package/dist/atualizar-branch.js +245 -0
- package/dist/auditoria.js +13 -11
- package/dist/auditrun.js +51 -46
- package/dist/autorizacao-duravel.js +327 -0
- package/dist/board.js +94 -40
- package/dist/branch-de-estado.js +16 -8
- package/dist/busca-semantica.js +7 -5
- package/dist/catalogo.js +2 -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 +248 -45
- package/dist/ciclos.js +8 -6
- package/dist/claim-lint.js +12 -8
- package/dist/claims-conferir.js +47 -39
- package/dist/claims.js +10 -9
- package/dist/company-brain-client.js +10 -3
- package/dist/company-brain-migration.js +11 -5
- package/dist/conducao-batida.js +759 -0
- package/dist/conducao-sentinela.js +25 -8
- package/dist/conducao.js +84 -29
- package/dist/conhecimento-consulta.js +270 -0
- package/dist/conhecimento.js +111 -87
- 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 +81 -74
- package/dist/doctor-forja.js +345 -0
- package/dist/doctor-pulse-cron.js +113 -1
- package/dist/doctor.js +164 -6
- package/dist/dsn-da-memoria.js +417 -0
- package/dist/entrega-por-mod.js +503 -0
- package/dist/entrega-pr.js +143 -43
- package/dist/esgotamentos.js +13 -11
- package/dist/estado-thread.js +21 -18
- package/dist/evalrunner.js +35 -32
- package/dist/fabrica-batida.js +34 -21
- package/dist/fabrica-estado.js +13 -10
- package/dist/fix.js +21 -19
- 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 +123 -80
- package/dist/handoff.js +23 -13
- 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 +51 -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 +44 -1
- package/dist/hitl-sessions.js +62 -9
- package/dist/hitl-texto-livre.js +7 -4
- package/dist/hitl.js +34 -31
- package/dist/horario.js +16 -0
- package/dist/hosts.js +104 -134
- package/dist/index.js +848 -548
- package/dist/indice-vetorial.js +14 -12
- package/dist/init.js +11 -2
- package/dist/integracoes-locais.js +2 -0
- package/dist/intelligence-graph-cli.js +123 -69
- package/dist/intelligence-graph-query.js +37 -22
- package/dist/leases.js +19 -18
- package/dist/ledger-stats.js +17 -16
- package/dist/ledger.js +31 -1
- package/dist/licoes.js +12 -11
- package/dist/locale-accounts.js +220 -0
- package/dist/locale-adapter.js +291 -0
- package/dist/locale-ajuda.js +76 -4
- 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 +5 -0
- package/dist/locale-grafo.js +129 -0
- package/dist/locale-master.js +83 -0
- package/dist/locale-network.js +524 -0
- package/dist/locale-operacao-restante.js +931 -0
- package/dist/locale-projetos.js +100 -0
- package/dist/locale-prompts.js +194 -0
- package/dist/locale-pulse.js +140 -2
- package/dist/locale-reservas.js +87 -0
- package/dist/locale-retry.js +145 -6
- package/dist/locale-security-scan.js +69 -0
- package/dist/locale-setup.js +192 -0
- package/dist/locale-ship.js +169 -66
- package/dist/locale-thread.js +149 -5
- package/dist/locale-verify.js +80 -4
- package/dist/locale-worktree.js +246 -0
- package/dist/locale.js +553 -9
- package/dist/maestro-runtime.js +22 -3
- package/dist/manifest.js +287 -11
- package/dist/maquina-ociosa.js +211 -0
- package/dist/maquina.js +10 -5
- package/dist/master-nota-local.js +200 -0
- package/dist/master-nota.js +10 -2
- package/dist/master.js +118 -41
- package/dist/mcp-conhecimento.js +52 -0
- package/dist/mcp-experiencia.js +26 -5
- package/dist/mcp-install.js +73 -8
- package/dist/mcp-noctum.js +101 -0
- package/dist/mcp-server.js +82 -14
- package/dist/mcp-ship-transporte.js +977 -0
- package/dist/mcp-ship.js +68 -24
- package/dist/mcp-transportes.js +17 -0
- package/dist/memoria.js +63 -58
- package/dist/modos-migracao.js +8 -6
- package/dist/modos.js +17 -18
- package/dist/network-roadmap.js +85 -49
- package/dist/noctum-aceite.js +789 -0
- package/dist/noctum-arco.js +540 -33
- package/dist/noctum-capacidade.js +3 -3
- 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 +252 -16
- package/dist/noctum-execucao.js +95 -23
- package/dist/noctum-fechamento.js +405 -0
- package/dist/noctum-fila.js +43 -9
- 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 +3 -1
- package/dist/onboarding.js +16 -5
- package/dist/orkmind.js +39 -23
- package/dist/orquestracao.js +31 -35
- package/dist/parado-no-condutor.js +146 -124
- package/dist/phase.js +53 -27
- package/dist/policies.js +33 -0
- package/dist/postura-local.js +4 -3
- package/dist/procedencia.js +9 -14
- package/dist/projeto-alvo.js +59 -20
- package/dist/prompts.js +136 -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 +143 -27
- package/dist/pulse-resposta.js +368 -4
- package/dist/pulse.js +136 -3
- package/dist/ratelimit.js +12 -4
- package/dist/recall.js +14 -13
- package/dist/rede-adesao.js +13 -8
- package/dist/rede-forja.js +108 -24
- package/dist/rede-status.js +63 -45
- package/dist/rede.js +86 -46
- package/dist/retomada-checkpoint.js +101 -0
- package/dist/retry.js +228 -73
- package/dist/roadmap-reservas.js +32 -32
- package/dist/runtime-ambiente.js +5 -0
- package/dist/runtime-context.js +117 -43
- package/dist/runtime-escada.js +423 -0
- package/dist/runtime-profiles.js +103 -46
- 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 +19 -2
- package/dist/session-watcher-claude.js +74 -19
- package/dist/session-watcher.js +156 -10
- package/dist/sessoes-contas.js +9 -0
- package/dist/sessoes-inventario.js +1 -1
- package/dist/sessoes.js +25 -23
- package/dist/setup.js +59 -58
- package/dist/ship-publicar.js +263 -92
- package/dist/ship.js +160 -17
- package/dist/superficie.js +14 -11
- package/dist/thread-close.js +9 -9
- package/dist/thread.js +121 -18
- 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 +5 -2
- package/dist/varredura-acoes.js +507 -0
- package/dist/verify.js +472 -29
- package/dist/worktree-local.js +12 -10
- package/dist/worktree.js +81 -85
- 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/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/doctor.js
CHANGED
|
@@ -39,18 +39,23 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
39
39
|
};
|
|
40
40
|
})();
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.TETO_DO_DONO_DO_GIT = void 0;
|
|
42
|
+
exports.CONTRATO_DO_DOCTOR = exports.TETO_DO_DONO_DO_GIT = void 0;
|
|
43
|
+
exports.checarSeparacaoDaConducao = checarSeparacaoDaConducao;
|
|
43
44
|
exports.manifestoForaDoRepositorio = manifestoForaDoRepositorio;
|
|
44
45
|
exports.checarContas = checarContas;
|
|
45
46
|
exports.checarChaveDeEmbedding = checarChaveDeEmbedding;
|
|
47
|
+
exports.checarFonteDaDsn = checarFonteDaDsn;
|
|
48
|
+
exports.checarDsnNoAmbiente = checarDsnNoAmbiente;
|
|
46
49
|
exports.checarDonoDoGit = checarDonoDoGit;
|
|
47
50
|
exports.checarOnboarding = checarOnboarding;
|
|
48
51
|
exports.blocosDoRuntime = blocosDoRuntime;
|
|
49
52
|
exports.checarRuntimeClaude = checarRuntimeClaude;
|
|
50
53
|
exports.checarDespachoPeloCodex = checarDespachoPeloCodex;
|
|
54
|
+
exports.checarSecurityScan = checarSecurityScan;
|
|
51
55
|
exports.checar = checar;
|
|
52
56
|
exports.relatorio = relatorio;
|
|
53
57
|
exports.doctor = doctor;
|
|
58
|
+
exports.doctorJson = doctorJson;
|
|
54
59
|
const fs = __importStar(require("node:fs"));
|
|
55
60
|
const path = __importStar(require("node:path"));
|
|
56
61
|
const adapter = __importStar(require("./adapters/claude-bg"));
|
|
@@ -62,11 +67,16 @@ const onboarding_1 = require("./onboarding");
|
|
|
62
67
|
const ratelimit_1 = require("./ratelimit");
|
|
63
68
|
const slug_1 = require("./slug");
|
|
64
69
|
const horario_1 = require("./horario");
|
|
70
|
+
const executor_1 = require("./security-scan/executor");
|
|
71
|
+
const detect_1 = require("./security-scan/detect");
|
|
72
|
+
const tools_1 = require("./security-scan/tools");
|
|
73
|
+
const types_1 = require("./security-scan/types");
|
|
65
74
|
const util_1 = require("./util");
|
|
66
75
|
const sessoes_inventario_1 = require("./sessoes-inventario");
|
|
67
76
|
const estado_thread_1 = require("./estado-thread");
|
|
68
77
|
const project_state_1 = require("./project-state");
|
|
69
78
|
const runtime_ambiente_1 = require("./runtime-ambiente");
|
|
79
|
+
const dsn_da_memoria_1 = require("./dsn-da-memoria");
|
|
70
80
|
const runtime_profiles_1 = require("./runtime-profiles");
|
|
71
81
|
const preflight_1 = require("./preflight");
|
|
72
82
|
const setup_1 = require("./setup");
|
|
@@ -76,6 +86,41 @@ const worktree_local_1 = require("./worktree-local");
|
|
|
76
86
|
const maquina_1 = require("./maquina");
|
|
77
87
|
const doctor_rede_1 = require("./doctor-rede");
|
|
78
88
|
const locale_1 = require("./locale");
|
|
89
|
+
const real = (dir) => { try {
|
|
90
|
+
return fs.realpathSync(dir);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return path.resolve(dir);
|
|
94
|
+
} };
|
|
95
|
+
/**
|
|
96
|
+
* RM-064 T5: avisa quando o LLM que roda o doctor usa a mesma conta das fases vivas. Sessão de fase
|
|
97
|
+
* despachada pelo `ork` (com a identidade do despacho no ambiente) não é o condutor e não entra na comparação.
|
|
98
|
+
*/
|
|
99
|
+
function checarSeparacaoDaConducao(raiz, inventario, env = process.env) {
|
|
100
|
+
const runtime = env.CLAUDECODE ? 'claude-bg' : env.CODEX_THREAD_ID ? 'codex' : null;
|
|
101
|
+
if (!runtime || (0, runtime_ambiente_1.sessaoDespachada)(env))
|
|
102
|
+
return null;
|
|
103
|
+
const dirAtual = runtime === 'claude-bg' ? env.CLAUDE_CONFIG_DIR : env.CODEX_HOME;
|
|
104
|
+
let perfil = null;
|
|
105
|
+
try {
|
|
106
|
+
if (dirAtual) {
|
|
107
|
+
const p = (0, runtime_profiles_1.lerPerfisComContas)(raiz).perfis.find((x) => x.runtime === runtime &&
|
|
108
|
+
real(((0, runtime_profiles_1.perfilDeDespacho)(x).configDir ?? (0, runtime_profiles_1.perfilDeDespacho)(x).codexHome)) === real(dirAtual));
|
|
109
|
+
perfil = p?.id ?? null;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch { /* o check de contas relata o store inválido; aqui não inventamos perfil */ }
|
|
113
|
+
const fases = inventario.sessoes.filter((s) => s.viva && s.runtime === runtime && s.perfil === perfil && s.vinculos.length > 0)
|
|
114
|
+
.flatMap((s) => s.vinculos.map((v) => `${v.thread}:${v.fase}`));
|
|
115
|
+
const conta = perfil ?? (0, locale_1.msg)().doctor.contaDoAmbiente;
|
|
116
|
+
return {
|
|
117
|
+
nome: 'separacao da conducao',
|
|
118
|
+
nivel: fases.length ? 'warn' : 'ok',
|
|
119
|
+
detalhe: fases.length ? (0, locale_1.msg)().doctor.condutorCompartilha(runtime, conta, fases.slice(0, 3).join(', '))
|
|
120
|
+
: (0, locale_1.msg)().doctor.condutorSeparado(runtime, conta),
|
|
121
|
+
correcao: fases.length ? (0, locale_1.msg)().doctor.condutorCompartilhaCorrecao : undefined,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
79
124
|
/**
|
|
80
125
|
* Ensaio de 03/10/2026 (RM-049): o manifesto e achado subindo a partir do diretorio atual. Um
|
|
81
126
|
* `orkastery.yaml` de uma pasta acima do repositorio (um `ork init` rodado por engano no HOME) era
|
|
@@ -182,7 +227,8 @@ function checarChaveDeEmbedding(carregado, env = process.env) {
|
|
|
182
227
|
correcao: (0, locale_1.msg)().doctor.embeddingSemVariavelCorrecao };
|
|
183
228
|
}
|
|
184
229
|
const valor = (env[variavel] ?? '').trim();
|
|
185
|
-
|
|
230
|
+
// RM-069: a DSN da fonte declarada (a variavel ou o arquivo da pasta de segredos), pelo resolvedor unico.
|
|
231
|
+
const dsn = (0, dsn_da_memoria_1.resolverDsn)(carregado.manifesto.memory, { env }).dsn;
|
|
186
232
|
if (valor !== '' && !(0, orkmind_1.chaveDeEmbeddingAceita)(valor, dsn)) {
|
|
187
233
|
return { nome, nivel: 'fail', detalhe: (0, locale_1.msg)().doctor.embeddingRecusada(variavel), correcao: (0, locale_1.msg)().doctor.embeddingRecusadaCorrecao(variavel) };
|
|
188
234
|
}
|
|
@@ -191,6 +237,47 @@ function checarChaveDeEmbedding(carregado, env = process.env) {
|
|
|
191
237
|
}
|
|
192
238
|
return { nome, nivel: 'warn', detalhe: (0, locale_1.msg)().doctor.embeddingAusente(variavel), correcao: (0, locale_1.msg)().doctor.embeddingAusenteCorrecao(variavel) };
|
|
193
239
|
}
|
|
240
|
+
/**
|
|
241
|
+
* RM-069 (G5): de onde vem a DSN da memoria, a variavel pelo NOME ou o arquivo pelo rotulo com `~`, nunca o valor. So
|
|
242
|
+
* com `memory.mode: orkmind` e uma fonte declarada; a falha e aviso, porque memoria degradada nao bloqueia despacho.
|
|
243
|
+
*/
|
|
244
|
+
function checarFonteDaDsn(carregado, env = process.env) {
|
|
245
|
+
const memoria = carregado.manifesto.memory;
|
|
246
|
+
if (memoria.mode !== 'orkmind')
|
|
247
|
+
return null;
|
|
248
|
+
const r = (0, dsn_da_memoria_1.resolverDsn)(memoria, { env });
|
|
249
|
+
const nome = 'fonte da DSN';
|
|
250
|
+
if (r.fonte === 'nenhuma')
|
|
251
|
+
return null;
|
|
252
|
+
if (r.fonte === 'ambiente') {
|
|
253
|
+
return r.falha
|
|
254
|
+
? { nome, nivel: 'warn', detalhe: (0, locale_1.msg)().doctor.dsnVariavelAusente(r.rotulo), correcao: (0, locale_1.msg)().doctor.dsnVariavelAusenteCorrecao(r.rotulo) }
|
|
255
|
+
: { nome, nivel: 'ok', detalhe: (0, locale_1.msg)().doctor.dsnDaVariavel(r.rotulo) };
|
|
256
|
+
}
|
|
257
|
+
if (!r.falha)
|
|
258
|
+
return { nome, nivel: 'ok', detalhe: (0, locale_1.msg)().doctor.dsnDoArquivo(r.rotulo, r.permissao ?? '') };
|
|
259
|
+
return { nome, nivel: 'warn', detalhe: (0, locale_1.msg)().doctor.dsnArquivoFalhou(r.rotulo, r.falha, (0, locale_1.msg)().doctor.dsnCausa(r.causa ?? '', r.permissao ?? '')),
|
|
260
|
+
correcao: (0, locale_1.msg)().doctor.dsnArquivoCorrecao(r.falha, r.rotulo) };
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* RM-069 (G6, D8): a DSN no ambiente DESTE processo, pelo NOME da variavel, nunca o valor. Numa sessao despachada, as
|
|
264
|
+
* variaveis com a DSN do projeto e toda URL com senha: o agente as le com `env`. Fora dela, so com a fonte de arquivo
|
|
265
|
+
* lida, as variaveis que repetem a DSN do arquivo. Nos outros casos (fonte de ambiente fora do despacho), nenhum check.
|
|
266
|
+
*/
|
|
267
|
+
function checarDsnNoAmbiente(carregado, env = process.env) {
|
|
268
|
+
const despachada = (0, runtime_ambiente_1.sessaoDespachada)(env);
|
|
269
|
+
const r = (0, dsn_da_memoria_1.resolverDsn)(carregado.manifesto.memory, { env });
|
|
270
|
+
if (!despachada && !(r.fonte === 'arquivo' && r.dsn))
|
|
271
|
+
return null;
|
|
272
|
+
const nome = 'DSN no ambiente';
|
|
273
|
+
const doProjeto = r.dsn ? (0, dsn_da_memoria_1.variaveisComDsn)(env, r.dsn) : [];
|
|
274
|
+
const comSenha = despachada ? (0, dsn_da_memoria_1.variaveisComUrlComSenha)(env).filter((n) => !doProjeto.includes(n)) : [];
|
|
275
|
+
if (doProjeto.length === 0 && comSenha.length === 0) {
|
|
276
|
+
return { nome, nivel: 'ok', detalhe: despachada ? (0, locale_1.msg)().doctor.dsnSessaoLimpa : (0, locale_1.msg)().doctor.dsnProcessoLimpo };
|
|
277
|
+
}
|
|
278
|
+
return { nome, nivel: 'warn', detalhe: despachada ? (0, locale_1.msg)().doctor.dsnNaSessao(doProjeto, comSenha) : (0, locale_1.msg)().doctor.dsnNoProcesso(doProjeto),
|
|
279
|
+
correcao: (0, locale_1.msg)().doctor.dsnNoAmbienteCorrecao };
|
|
280
|
+
}
|
|
194
281
|
/** Acima disso a conferencia do dono do `.git` fica parcial (aviso), para o doctor nao pesar. */
|
|
195
282
|
exports.TETO_DO_DONO_DO_GIT = 200_000;
|
|
196
283
|
/**
|
|
@@ -407,12 +494,33 @@ function checarDespachoPeloCodex(carregado, codex, sonda) {
|
|
|
407
494
|
: undefined,
|
|
408
495
|
};
|
|
409
496
|
}
|
|
497
|
+
/**
|
|
498
|
+
* Check `security scan` (spec section 11): only when `verify.security_scan` is declared. `ok` with Docker (CLI and daemon);
|
|
499
|
+
* without it, `ok` only when every loop-category tool for the detected stacks has an acceptable native binary (pip-audit
|
|
500
|
+
* and govulncheck have none, so a Python or Go repo always lands on `warn`). Never `fail`: a missing scanner is the
|
|
501
|
+
* `unavailable` of the ship gate, not a broken machine. The probe is injectable so tests never touch a real Docker.
|
|
502
|
+
*/
|
|
503
|
+
function checarSecurityScan(carregado, probe = (0, executor_1.defaultProbe)()) {
|
|
504
|
+
if (!carregado || carregado.manifesto.verify.security_scan === undefined)
|
|
505
|
+
return null;
|
|
506
|
+
const nome = 'security scan';
|
|
507
|
+
const m = (0, locale_1.msg)().doctor;
|
|
508
|
+
const tools = (0, tools_1.toolsFor)((0, detect_1.detectStacks)(carregado.raiz).map(s => s.stack), (0, tools_1.loadTools)());
|
|
509
|
+
const faltando = tools.filter(t => types_1.LOOP_CATEGORIES.includes(t.category) && (0, executor_1.chooseExecutor)(t, probe).kind === 'unavailable');
|
|
510
|
+
if (probe.dockerCli() && probe.dockerDaemon())
|
|
511
|
+
return { nome, nivel: 'ok', detalhe: m.securityScanDocker };
|
|
512
|
+
if (faltando.length === 0)
|
|
513
|
+
return { nome, nivel: 'ok', detalhe: m.securityScanNativo };
|
|
514
|
+
const lista = faltando.map(t => `${t.category}/${t.name}`).join(', ');
|
|
515
|
+
const nativos = [...new Set(tools.filter(t => t.native && !t.install).map(t => t.native.bin))].join(', ');
|
|
516
|
+
return { nome, nivel: 'warn', detalhe: m.securityScanSemFerramenta(lista), correcao: m.securityScanCorrecao(nativos) };
|
|
517
|
+
}
|
|
410
518
|
/**
|
|
411
519
|
* Roda todos os checks a partir do diretorio informado. RM-031: `analisadores` e o check do grafo
|
|
412
520
|
* (`checarAnalisadoresDoGrafo` do CLI do grafo), que o `index.ts` passa: fora da familia do grafo so
|
|
413
521
|
* ele e o worker do MCP a abrem (fronteira do KG1), e o doctor nao a importa.
|
|
414
522
|
*/
|
|
415
|
-
function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), lerCrontab = doctor_pulse_cron_1.lerCrontabDoSistema, conferirAuthDoClaude = () => adapter.conferirAuth(null), analisadores) {
|
|
523
|
+
function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), lerCrontab = doctor_pulse_cron_1.lerCrontabDoSistema, conferirAuthDoClaude = () => adapter.conferirAuth(null), analisadores, forja) {
|
|
416
524
|
const checks = [];
|
|
417
525
|
const major = versaoNode();
|
|
418
526
|
checks.push({
|
|
@@ -450,6 +558,9 @@ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente
|
|
|
450
558
|
// Fatia 2 do ensaio da 0.5.0 (P1): o manifesto e lido antes dos runtimes, porque e o setup dos
|
|
451
559
|
// modos permitidos que diz se o `claude` e obrigatorio; a ordem das linhas do relatorio nao muda.
|
|
452
560
|
const carregado = (0, manifest_1.carregarManifesto)(dirInicial);
|
|
561
|
+
const scan = checarSecurityScan(carregado);
|
|
562
|
+
if (scan)
|
|
563
|
+
checks.push(scan);
|
|
453
564
|
const claude = adapter.disponivel();
|
|
454
565
|
const v = claude ? adapter.versao() : null;
|
|
455
566
|
checks.push(checarRuntimeClaude(carregado, claude, v, claude && !temPerfilAtivo(carregado, 'claude-bg') ? conferirAuthDoClaude() : null));
|
|
@@ -596,10 +707,19 @@ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente
|
|
|
596
707
|
detalhe: estado.pedido === 'orkmind' && estado.efetivo === 'files'
|
|
597
708
|
? (0, locale_1.msg)().doctor.regimeDegradado(estado.motivo, estado.detalhe)
|
|
598
709
|
: estado.efetivo === 'orkmind'
|
|
599
|
-
?
|
|
710
|
+
? estado.fonteDaDsn === 'arquivo'
|
|
711
|
+
? (0, locale_1.msg)().doctor.regimeOrkmindPorArquivo(estado.tenant, estado.arquivoDaDsn ?? '')
|
|
712
|
+
: (0, locale_1.msg)().doctor.regimeOrkmind(estado.tenant, estado.variavel)
|
|
600
713
|
: (0, locale_1.msg)().doctor.memoriaFiles,
|
|
601
714
|
correcao: estado.pedido === 'orkmind' && estado.efetivo === 'files' ? estado.correcao : undefined,
|
|
602
715
|
});
|
|
716
|
+
// RM-069: a fonte da DSN e a DSN no ambiente, so quando ha o que dizer (fonte declarada ou sessao despachada).
|
|
717
|
+
const fonteDaDsn = checarFonteDaDsn(context.loaded);
|
|
718
|
+
if (fonteDaDsn)
|
|
719
|
+
checks.push(fonteDaDsn);
|
|
720
|
+
const dsnNoAmbiente = checarDsnNoAmbiente(context.loaded);
|
|
721
|
+
if (dsnNoAmbiente)
|
|
722
|
+
checks.push(dsnNoAmbiente);
|
|
603
723
|
checks.push(checarChaveDeEmbedding(context.loaded));
|
|
604
724
|
// Bloco B3: a fila de rate limit e estado do mundo, nao detalhe interno. Uma fase
|
|
605
725
|
// esperando janela e uma fase que NAO esta rodando, e quem olha o doctor precisa
|
|
@@ -638,11 +758,22 @@ function checar(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente
|
|
|
638
758
|
const cronDoPulse = (0, doctor_pulse_cron_1.checarCronDoPulse)(path.join(dirEstadoProjeto, 'monitor'), (0, estado_thread_1.raizDoEstado)(carregado.raiz), lerCrontab);
|
|
639
759
|
if (cronDoPulse)
|
|
640
760
|
checks.push(cronDoPulse);
|
|
761
|
+
// RM-063 (fatia 3, H4): a falha do transporte do pulse (e o desvio para o outro host configurado) aparece aqui.
|
|
762
|
+
const transporte = (0, doctor_pulse_cron_1.checarTransporteDoPulse)(path.join(dirEstadoProjeto, 'monitor'));
|
|
763
|
+
if (transporte)
|
|
764
|
+
checks.push(transporte);
|
|
641
765
|
checks.push(checarContas(carregado.raiz));
|
|
642
766
|
// I-33 (D7): umask e permissoes do estado, na mesma regra do sensor (sem bits 0o022).
|
|
643
767
|
checks.push(...(0, preflight_1.sondasDeAmbiente)(carregado.raiz));
|
|
768
|
+
// A forja do remoto (identidade, alcance, TLS, CLI, login, servidor, escopo, projeto, capacidades): so com o
|
|
769
|
+
// manifesto valido, e so quando a entrada do CLI a passa, como os analisadores.
|
|
770
|
+
if (forja && carregado.erros.length === 0)
|
|
771
|
+
checks.push(...forja(carregado));
|
|
644
772
|
{
|
|
645
773
|
const inventario = (0, sessoes_inventario_1.inventariarSessoes)(carregado.raiz, { global: true, todas: true });
|
|
774
|
+
const separacao = checarSeparacaoDaConducao(carregado.raiz, inventario);
|
|
775
|
+
if (separacao)
|
|
776
|
+
checks.push(separacao);
|
|
646
777
|
// Fatia 2 do ensaio da 0.5.0 (P1): binario ausente e fonte ausente, dita no detalhe.
|
|
647
778
|
const ausentes = inventario.fontes.filter((f) => f.ausente).map((f) => f.origem);
|
|
648
779
|
checks.push({
|
|
@@ -692,8 +823,35 @@ function relatorio(checks) {
|
|
|
692
823
|
return linhas.join('\n');
|
|
693
824
|
}
|
|
694
825
|
/** Executa o doctor e devolve o codigo de saida (0 = pronto). */
|
|
695
|
-
function doctor(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), analisadores) {
|
|
696
|
-
const checks = checar(dirInicial, nomesHerdados, undefined, undefined, analisadores);
|
|
826
|
+
function doctor(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), analisadores, forja) {
|
|
827
|
+
const checks = checar(dirInicial, nomesHerdados, undefined, undefined, analisadores, forja);
|
|
697
828
|
const falhas = checks.filter((c) => c.nivel === 'fail').length;
|
|
698
829
|
return { texto: relatorio(checks), codigo: falhas > 0 ? 1 : 0 };
|
|
699
830
|
}
|
|
831
|
+
exports.CONTRATO_DO_DOCTOR = 'ork.doctor/v1';
|
|
832
|
+
function doctorJson(dirInicial = process.cwd(), nomesHerdados = (0, runtime_ambiente_1.nomesDeProviderAtivos)(), analisadores, lerCrontab = doctor_pulse_cron_1.lerCrontabDoSistema, forja) {
|
|
833
|
+
const checks = checar(dirInicial, nomesHerdados, lerCrontab, undefined, analisadores, forja);
|
|
834
|
+
const falhas = checks.filter((c) => c.nivel === 'fail').length;
|
|
835
|
+
const avisos = checks.filter((c) => c.nivel === 'warn').length;
|
|
836
|
+
let carregado = null;
|
|
837
|
+
try {
|
|
838
|
+
carregado = (0, manifest_1.carregarManifesto)(dirInicial);
|
|
839
|
+
}
|
|
840
|
+
catch {
|
|
841
|
+
carregado = null;
|
|
842
|
+
}
|
|
843
|
+
let batida = null;
|
|
844
|
+
if (carregado && !carregado.erros.length) {
|
|
845
|
+
const raiz = (0, estado_thread_1.raizDoEstado)(carregado.raiz);
|
|
846
|
+
try {
|
|
847
|
+
batida = (0, doctor_pulse_cron_1.batidaNoDoctor)(path.join(raiz, manifest_1.DIR_ESTADO, 'monitor'), raiz, { projeto: carregado.manifesto.project.name,
|
|
848
|
+
maquina: (0, maquina_1.nomeDaMaquina)(), ler: lerCrontab });
|
|
849
|
+
}
|
|
850
|
+
catch {
|
|
851
|
+
batida = null;
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
return { codigo: falhas > 0 ? 1 : 0, json: { contrato: exports.CONTRATO_DO_DOCTOR, consultadoEm: new Date().toISOString(),
|
|
855
|
+
veredito: falhas > 0 ? 'bloqueado' : 'pronto', falhas, avisos, projeto: carregado?.manifesto.project.name ?? null,
|
|
856
|
+
maquina: (0, maquina_1.nomeDaMaquina)(), checks, forja: forja ? 'medida' : 'nao-medida', batida } };
|
|
857
|
+
}
|