@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
|
@@ -3,7 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CONTEXTO_FORA_DO_INDICE = exports.CONTEXTO_POR_ALVO = exports.CONTEXTO_TETO_PADRAO = exports.CONTEXTO_SCHEMA = void 0;
|
|
4
4
|
exports.sementesDaThread = sementesDaThread;
|
|
5
5
|
exports.pacoteDeContexto = pacoteDeContexto;
|
|
6
|
-
/**
|
|
6
|
+
/**
|
|
7
|
+
* KG5: composicao pura do contexto da thread. Sem E/S, relogio ou inferencia.
|
|
8
|
+
*
|
|
9
|
+
* KG5 fatia 5 (D5): quem chama passa a situacao das fontes na arvore (o CLI le os bytes); o grupo cuja
|
|
10
|
+
* origem ou alvo nao confere ganha `arvore: "modificada"`, e o que confere sai sem o campo. Sem a situacao,
|
|
11
|
+
* ou com a arvore limpa, o pacote e o de antes, byte a byte.
|
|
12
|
+
*/
|
|
7
13
|
const node_crypto_1 = require("node:crypto");
|
|
8
14
|
const intelligence_graph_contract_1 = require("./intelligence-graph-contract");
|
|
9
15
|
const intelligence_graph_query_1 = require("./intelligence-graph-query");
|
|
@@ -11,6 +17,7 @@ exports.CONTEXTO_SCHEMA = 'ork.thread-graph-context/v2';
|
|
|
11
17
|
exports.CONTEXTO_TETO_PADRAO = 32768;
|
|
12
18
|
exports.CONTEXTO_POR_ALVO = 8;
|
|
13
19
|
exports.CONTEXTO_FORA_DO_INDICE = 3;
|
|
20
|
+
const LIMITE_REJEICOES_SEGUNDO_SALTO = 8;
|
|
14
21
|
const hash = (texto) => (0, node_crypto_1.createHash)('sha256').update(texto).digest('hex');
|
|
15
22
|
/** Caminho relativo do repositorio, nunca caminho de maquina, URL ou estado privado. */
|
|
16
23
|
function caminhoPublico(bruto) {
|
|
@@ -63,8 +70,9 @@ function sementesDaThread(entrada, caminhosDoRepositorio = []) {
|
|
|
63
70
|
return [...mapa].sort(([a], [b]) => (0, intelligence_graph_contract_1.compararUtf8)(a, b))
|
|
64
71
|
.map(([arquivo, origens]) => ({ arquivo, origens: [...origens].sort(intelligence_graph_contract_1.compararUtf8) }));
|
|
65
72
|
}
|
|
73
|
+
const compararTipo = (a, b) => Number(a === 'cites') - Number(b === 'cites') || (0, intelligence_graph_contract_1.compararUtf8)(a, b);
|
|
66
74
|
/** O grafo recebido ja deve estar filtrado pela concessao de quem consulta. */
|
|
67
|
-
function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_TETO_PADRAO) {
|
|
75
|
+
function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_TETO_PADRAO, situacao = intelligence_graph_query_1.TUDO_IGUAL) {
|
|
68
76
|
if (!Number.isInteger(tetoBytes) || tetoBytes < 4096 || tetoBytes > 65536)
|
|
69
77
|
throw new intelligence_graph_query_1.ErroDeConsulta('grafo.contexto.teto-invalido', 'teto deve ser inteiro de 4096 a 65536 bytes');
|
|
70
78
|
const porId = new Map(grafo.nodes.map((n) => [n.node_id, n]));
|
|
@@ -86,6 +94,7 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
86
94
|
adj.get(de).add(para);
|
|
87
95
|
adj.get(para).add(de);
|
|
88
96
|
}
|
|
97
|
+
const vizinhos = new Set([...alvos].flatMap((p) => [...(adj.get(p) ?? [])]));
|
|
89
98
|
const dist = new Map(diff.filter((p) => arquivos.has(p)).map((p) => [p, 0]));
|
|
90
99
|
const fila = [...dist.keys()];
|
|
91
100
|
for (let i = 0; i < fila.length; i++)
|
|
@@ -98,18 +107,24 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
98
107
|
const extratores = [...indice.extratores].sort((a, b) => (0, intelligence_graph_contract_1.compararUtf8)((0, intelligence_graph_contract_1.canonico)(a), (0, intelligence_graph_contract_1.canonico)(b)));
|
|
99
108
|
const extratorIds = new Map(extratores.map((e, i) => [(0, intelligence_graph_contract_1.canonico)(e), i]));
|
|
100
109
|
const grupos = new Map();
|
|
101
|
-
let totalArestas = 0, estruturais = 0, evidenciasAuxiliares = 0;
|
|
110
|
+
let totalArestas = 0, arestasDiretas = 0, estruturais = 0, evidenciasAuxiliares = 0, auxiliaresDiretas = 0;
|
|
102
111
|
for (const a of grafo.edges) {
|
|
103
112
|
const de = porId.get(a.from), para = porId.get(a.to);
|
|
104
|
-
|
|
113
|
+
const direto = alvos.has(de.locator.path) || alvos.has(para.locator.path);
|
|
114
|
+
if (!direto && (de.locator.path === para.locator.path
|
|
115
|
+
|| (!vizinhos.has(de.locator.path) && !vizinhos.has(para.locator.path))))
|
|
105
116
|
continue;
|
|
106
117
|
totalArestas++;
|
|
118
|
+
if (direto)
|
|
119
|
+
arestasDiretas++;
|
|
107
120
|
if ((a.kind === 'declares' || a.kind === 'contains') && de.locator.path === para.locator.path && alvos.has(de.locator.path)) {
|
|
108
121
|
estruturais++;
|
|
109
122
|
continue;
|
|
110
123
|
}
|
|
111
124
|
const proprias = a.evidence.filter((e) => e.path === de.locator.path);
|
|
112
125
|
evidenciasAuxiliares += a.evidence.length - proprias.length;
|
|
126
|
+
if (direto)
|
|
127
|
+
auxiliaresDiretas += a.evidence.length - proprias.length;
|
|
113
128
|
// Sem evidencia no arquivo de origem, a aresta fica em omitidos.arestas.
|
|
114
129
|
if (!proprias.length)
|
|
115
130
|
continue;
|
|
@@ -117,6 +132,7 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
117
132
|
const chave = (0, intelligence_graph_contract_1.canonico)([a.kind, destino, de.locator.path]);
|
|
118
133
|
const grupo = grupos.get(chave) ?? { kind: a.kind, origem, destino, alvo: para.node_id, quantidade: 0,
|
|
119
134
|
evidencias: new Map(), entreArquivos: de.locator.path !== para.locator.path,
|
|
135
|
+
salto: direto ? 1 : 2,
|
|
120
136
|
distancia: Math.min(dist.get(de.locator.path) ?? Infinity, dist.get(para.locator.path) ?? Infinity) };
|
|
121
137
|
grupo.quantidade++;
|
|
122
138
|
for (const e of proprias) {
|
|
@@ -131,19 +147,19 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
131
147
|
grupos.set(chave, grupo);
|
|
132
148
|
}
|
|
133
149
|
// Entre arquivos > perto do diff > tipo > rotulos; empates independem da ordem do indice.
|
|
134
|
-
const ordenados = [...grupos.values()].sort((a, b) => Number(b.entreArquivos) - Number(a.entreArquivos)
|
|
150
|
+
const ordenados = [...grupos.values()].sort((a, b) => a.salto - b.salto || Number(b.entreArquivos) - Number(a.entreArquivos)
|
|
135
151
|
|| (a.distancia === b.distancia ? 0 : a.distancia < b.distancia ? -1 : 1)
|
|
136
|
-
|| (
|
|
152
|
+
|| compararTipo(a.kind, b.kind) || (0, intelligence_graph_contract_1.compararUtf8)(a.destino, b.destino) || (0, intelligence_graph_contract_1.compararUtf8)(a.origem, b.origem));
|
|
137
153
|
// Dentro da mesma prioridade, intercalar tipos impede calls de expulsar imports/references.
|
|
138
154
|
const rodadas = new Map();
|
|
139
155
|
const justos = ordenados.map((g) => {
|
|
140
|
-
const chave = JSON.stringify([g.alvo, g.entreArquivos, g.distancia, g.kind]);
|
|
156
|
+
const chave = JSON.stringify([g.salto, g.alvo, g.entreArquivos, g.distancia, g.kind]);
|
|
141
157
|
const rodada = rodadas.get(chave) ?? 0;
|
|
142
158
|
rodadas.set(chave, rodada + 1);
|
|
143
159
|
return { g, rodada };
|
|
144
|
-
}).sort((a, b) => Number(b.g.entreArquivos) - Number(a.g.entreArquivos)
|
|
160
|
+
}).sort((a, b) => a.g.salto - b.g.salto || Number(b.g.entreArquivos) - Number(a.g.entreArquivos)
|
|
145
161
|
|| (a.g.distancia === b.g.distancia ? 0 : a.g.distancia < b.g.distancia ? -1 : 1)
|
|
146
|
-
|| a.rodada - b.rodada || (
|
|
162
|
+
|| a.rodada - b.rodada || compararTipo(a.g.kind, b.g.kind)
|
|
147
163
|
|| (0, intelligence_graph_contract_1.compararUtf8)(a.g.destino, b.g.destino) || (0, intelligence_graph_contract_1.compararUtf8)(a.g.origem, b.g.origem)).map(({ g }) => g);
|
|
148
164
|
const normalizada = { ...entrada, diff, diffEstado: entrada.diffEstado ?? 'coletado-na-worktree',
|
|
149
165
|
claims: [...entrada.claims].sort((a, b) => (0, intelligence_graph_contract_1.compararUtf8)((0, intelligence_graph_contract_1.canonico)(a), (0, intelligence_graph_contract_1.canonico)(b))) };
|
|
@@ -151,10 +167,14 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
151
167
|
indice: { ...indice, extratores },
|
|
152
168
|
fontes: { goal: entrada.goal === null ? 'ausente' : hash(entrada.goal), plan: entrada.plan === null ? 'ausente' : hash(entrada.plan),
|
|
153
169
|
diff: normalizada.diffEstado },
|
|
154
|
-
consulta: { profundidade:
|
|
170
|
+
consulta: { profundidade: 2, sentido: 'ambos', por_alvo: exports.CONTEXTO_POR_ALVO, fora_do_indice: exports.CONTEXTO_FORA_DO_INDICE },
|
|
155
171
|
total_sementes: sementes.length, sementes_fora_do_indice: ausentes.length, total_arestas: totalArestas,
|
|
156
172
|
total_ligacoes: ordenados.length, resumidas: { estruturais }, parcial: intelligence_graph_query_1.AVISO_DE_PARCIALIDADE };
|
|
157
173
|
const selecionadas = [], ligacoes = [];
|
|
174
|
+
// D4 e D5: as evidencias do grupo estao no arquivo da origem; o alvo pesa como nas consultas por no.
|
|
175
|
+
const modificado = (a) => (a.modificada ??= situacao(a.origem.slice(5)) !== 'igual' || situacao(porId.get(a.alvo).locator.path) !== 'igual');
|
|
176
|
+
const totalDiretas = ordenados.filter((a) => a.salto === 1).length;
|
|
177
|
+
const totalSegundoSalto = ordenados.length - totalDiretas;
|
|
158
178
|
const montar = () => {
|
|
159
179
|
const caminhos = new Set(selecionadas.filter((s) => s.estado === 'indexado').map((s) => s.arquivo));
|
|
160
180
|
const rotulos = new Set([...caminhos].map((p) => `file ${p}`));
|
|
@@ -166,11 +186,15 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
166
186
|
}
|
|
167
187
|
const refs = new Map([...rotulos].sort(intelligence_graph_contract_1.compararUtf8).map((r, i) => [r, `n${i + 1}`]));
|
|
168
188
|
const fontes = grafo.snapshot.source_manifest.filter((m) => caminhos.has(m.path)).sort((a, b) => (0, intelligence_graph_contract_1.compararUtf8)(a.path, b.path));
|
|
169
|
-
const
|
|
189
|
+
const diretas = ligacoes.filter((a) => a.salto === 1);
|
|
190
|
+
const omitidos = { sementes: sementes.length - selecionadas.length, ligacoes: totalDiretas - diretas.length,
|
|
191
|
+
segundo_salto: totalSegundoSalto - (ligacoes.length - diretas.length),
|
|
170
192
|
arestas: totalArestas - estruturais - ligacoes.reduce((s, a) => s + a.quantidade, 0), evidencias_auxiliares: evidenciasAuxiliares };
|
|
171
|
-
const
|
|
193
|
+
const diretasOmitidas = arestasDiretas - estruturais - diretas.reduce((s, a) => s + a.quantidade, 0);
|
|
194
|
+
const cortado = omitidos.sementes > 0 || omitidos.ligacoes > 0 || diretasOmitidas > 0 || auxiliaresDiretas > 0;
|
|
172
195
|
const r = { ...fixo, sementes: selecionadas, nos: Object.fromEntries([...refs].map(([r, ref]) => [ref, r])),
|
|
173
196
|
arestas: ligacoes.map((a) => ({ kind: a.kind, from: refs.get(a.origem), to: refs.get(a.destino), quantidade: a.quantidade,
|
|
197
|
+
...(a.salto === 2 ? { salto: 2 } : {}), ...(modificado(a) ? { arvore: 'modificada' } : {}),
|
|
174
198
|
evidencias: [...a.evidencias].sort(([a], [b]) => (0, intelligence_graph_contract_1.compararUtf8)(a, b)).map(([, e]) => e) })),
|
|
175
199
|
truncado: cortado, omitidos, teto: { bytes: tetoBytes, cortado },
|
|
176
200
|
medida: { pacote_bytes: 0, leitura_crua_bytes: fontes.reduce((s, f) => s + f.size_bytes, 0),
|
|
@@ -197,19 +221,34 @@ function pacoteDeContexto(grafo, indice, entrada, tetoBytes = exports.CONTEXTO_T
|
|
|
197
221
|
for (const s of indexadas)
|
|
198
222
|
tentarSemente(s);
|
|
199
223
|
const porAlvo = new Map();
|
|
200
|
-
|
|
224
|
+
const tentarLigacao = (a) => {
|
|
201
225
|
if ((porAlvo.get(a.alvo) ?? 0) >= exports.CONTEXTO_POR_ALVO)
|
|
202
|
-
|
|
226
|
+
return 'por-alvo';
|
|
203
227
|
ligacoes.push(a);
|
|
204
228
|
const texto = montar();
|
|
205
229
|
if (Buffer.byteLength(texto) <= tetoBytes) {
|
|
206
230
|
melhor = texto;
|
|
207
231
|
porAlvo.set(a.alvo, (porAlvo.get(a.alvo) ?? 0) + 1);
|
|
232
|
+
return 'incluida';
|
|
208
233
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
234
|
+
ligacoes.pop(); // Um hub grande nao impede uma ligacao menor e relevante de entrar.
|
|
235
|
+
return 'sem-espaco';
|
|
236
|
+
};
|
|
237
|
+
for (const a of justos)
|
|
238
|
+
if (a.salto === 1)
|
|
239
|
+
tentarLigacao(a);
|
|
212
240
|
for (const s of ausentes.slice(0, exports.CONTEXTO_FORA_DO_INDICE))
|
|
213
241
|
tentarSemente(s);
|
|
242
|
+
// Expande somente pontes que sobreviveram ao corte direto; a fronteira fica fixa nesta rodada.
|
|
243
|
+
const pontes = new Set(ligacoes.flatMap((a) => [a.origem.slice(5), porId.get(a.alvo).locator.path]));
|
|
244
|
+
let rejeicoes = 0;
|
|
245
|
+
for (const a of justos)
|
|
246
|
+
if (a.salto === 2 && (pontes.has(a.origem.slice(5)) || pontes.has(porId.get(a.alvo).locator.path))) {
|
|
247
|
+
const resultado = tentarLigacao(a);
|
|
248
|
+
if (resultado === 'incluida')
|
|
249
|
+
rejeicoes = 0;
|
|
250
|
+
else if (resultado === 'sem-espaco' && ++rejeicoes >= LIMITE_REJEICOES_SEGUNDO_SALTO)
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
214
253
|
return melhor;
|
|
215
254
|
}
|
|
@@ -29,7 +29,7 @@ exports.GRAFO_LIMITES = Object.freeze({
|
|
|
29
29
|
extratores: 32, diagnosticos: 100_000, caminho: 1024, fragmento: 512, paginas: 100_000,
|
|
30
30
|
});
|
|
31
31
|
exports.TIPOS_DE_NO = ['file', 'symbol', 'section', 'artifact'];
|
|
32
|
-
exports.TIPOS_DE_ARESTA = ['contains', 'declares', 'imports', 'calls', 'references', 'derived_from'];
|
|
32
|
+
exports.TIPOS_DE_ARESTA = ['contains', 'declares', 'imports', 'calls', 'references', 'derived_from', 'cites'];
|
|
33
33
|
/** D4: so metodo deterministico sustenta aresta. Embedding, similaridade e inferencia ficam fora. */
|
|
34
34
|
exports.METODOS_DE_EXTRACAO = ['ast', 'structured', 'explicit-link', 'text-location'];
|
|
35
35
|
exports.CLASSE_DE_CONFIANCA = 'EXTRACTED';
|
|
@@ -45,6 +45,7 @@ exports.MATRIZ_DE_ARESTAS = Object.freeze({
|
|
|
45
45
|
imports: { file: ['file', 'symbol'], symbol: ['file', 'symbol'], section: nenhum, artifact: nenhum },
|
|
46
46
|
calls: { file: nenhum, symbol: ['symbol'], section: nenhum, artifact: nenhum },
|
|
47
47
|
references: { file: exports.TIPOS_DE_NO, symbol: exports.TIPOS_DE_NO, section: exports.TIPOS_DE_NO, artifact: exports.TIPOS_DE_NO },
|
|
48
|
+
cites: { file: ['file'], symbol: nenhum, section: ['file'], artifact: nenhum },
|
|
48
49
|
derived_from: { file: nenhum, symbol: nenhum, section: nenhum, artifact: ['file', 'section', 'artifact'] },
|
|
49
50
|
});
|
|
50
51
|
const inteiro = zod_1.z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TETO_DE_LINHAS_DE_TABELA = exports.TOKENS_SEM_MENCAO = exports.CHAVES_DO_FRONTMATTER = exports.PADRAO_DE_ID = void 0;
|
|
4
4
|
exports.slugDeTexto = slugDeTexto;
|
|
5
|
+
exports.caminhoDaCitacao = caminhoDaCitacao;
|
|
5
6
|
exports.estruturarMarkdown = estruturarMarkdown;
|
|
6
7
|
exports.extrairMarkdown = extrairMarkdown;
|
|
7
8
|
exports.ligarMarkdown = ligarMarkdown;
|
|
@@ -191,9 +192,10 @@ function estruturar(fonte, aceitaFragmento, analisar, referencia) {
|
|
|
191
192
|
comDelimitador = true;
|
|
192
193
|
}
|
|
193
194
|
if (linhasDeTabela > exports.TETO_DE_LINHAS_DE_TABELA) {
|
|
194
|
-
return { fonte, secoes: [], links: [], textoDeMencao: [], frontmatter, frontmatterInvalido, tabelaGrande: true };
|
|
195
|
+
return { fonte, secoes: [], links: [], citacoes: [], textoDeMencao: [], frontmatter, frontmatterInvalido, tabelaGrande: true };
|
|
195
196
|
}
|
|
196
197
|
const secoes = [], links = [], semMencao = [];
|
|
198
|
+
const citacoes = [];
|
|
197
199
|
const slug = contadorDeSlugs(), abertos = [];
|
|
198
200
|
// B5: referencia de caractere pelo decodificador do micromark (as entidades do HTML5); a crua fica.
|
|
199
201
|
const decodificada = (i, f) => referencia(corpo.slice(i + 1, f - 1)) ?? corpo.slice(i, f);
|
|
@@ -239,6 +241,10 @@ function estruturar(fonte, aceitaFragmento, analisar, referencia) {
|
|
|
239
241
|
semMencao.push([e.inicio, e.fim]);
|
|
240
242
|
}
|
|
241
243
|
// Titulo, lido em paralelo: o texto dele junta dado, codigo, escape e entidade.
|
|
244
|
+
if (e.tipo === 'codeTextData' && !emExcesso)
|
|
245
|
+
citacoes.push({
|
|
246
|
+
destino: corpo.slice(e.inicio, e.fim), inicio: no(e.inicio), fim: no(e.fim),
|
|
247
|
+
});
|
|
242
248
|
if (e.tipo === 'atxHeading' || e.tipo === 'setextHeading')
|
|
243
249
|
titulo = { inicio: no(e.inicio), fim: no(e.fim), partes: [], noTexto: 0, foraDoTexto: 0, noCodigo: 0 };
|
|
244
250
|
else if (titulo) {
|
|
@@ -304,7 +310,7 @@ function estruturar(fonte, aceitaFragmento, analisar, referencia) {
|
|
|
304
310
|
}
|
|
305
311
|
}
|
|
306
312
|
const textoDeMencao = linhasDe(apagarTrechos(corpo, semMencao)).map((l) => ({ inicio: no(l.inicio), texto: l.texto }));
|
|
307
|
-
return { fonte, secoes: secoes.sort((a, b) => a.inicio - b.inicio), links, textoDeMencao, frontmatter, frontmatterInvalido, tabelaGrande: false };
|
|
313
|
+
return { fonte, secoes: secoes.sort((a, b) => a.inicio - b.inicio), links, citacoes, textoDeMencao, frontmatter, frontmatterInvalido, tabelaGrande: false };
|
|
308
314
|
}
|
|
309
315
|
/** Caminho relativo a raiz a partir do arquivo do link; `null` se sair do repositorio. */
|
|
310
316
|
function resolverCaminho(base, destino) {
|
|
@@ -323,6 +329,23 @@ function resolverCaminho(base, destino) {
|
|
|
323
329
|
}
|
|
324
330
|
return r.join('/');
|
|
325
331
|
}
|
|
332
|
+
/** Citacao nao e resolucao de runtime: so caminho literal dentro do manifesto. */
|
|
333
|
+
function caminhoDaCitacao(base, literal, modulo = false) {
|
|
334
|
+
if (!literal || /[\s\\:#?%\u0000-\u001f\u007f]/u.test(literal) || literal.startsWith('/') || literal.startsWith('~'))
|
|
335
|
+
return null;
|
|
336
|
+
if (literal.split('/').some((p) => p === '.git' || p === '.orkastery'))
|
|
337
|
+
return null;
|
|
338
|
+
// Argumento sem prefixo de caminho e nome de pacote, nao candidato local.
|
|
339
|
+
if (modulo && !/^\.{1,2}\//.test(literal))
|
|
340
|
+
return null;
|
|
341
|
+
// Palavras e diretorios nao sao citacoes de arquivo. Modulos podem omitir extensao.
|
|
342
|
+
if (!modulo && (!literal.includes('/') || !/\.(?:[cm]?[jt]s|[jt]sx|json|md|markdown|ya?ml|toml|py|rs|go|c|h|css|html|svg|png|jpe?g|gif|webp|pdf|txt|sh|sql)$/i.test(literal)))
|
|
343
|
+
return null;
|
|
344
|
+
if (['', '.', '..'].includes(literal.split('/').at(-1)))
|
|
345
|
+
return null;
|
|
346
|
+
const caminho = literal.startsWith('./') || literal.startsWith('../') ? resolverCaminho(base, literal) : literal;
|
|
347
|
+
return caminho || null;
|
|
348
|
+
}
|
|
326
349
|
const decodificar = (t) => {
|
|
327
350
|
try {
|
|
328
351
|
return decodeURIComponent(t);
|
|
@@ -339,7 +362,7 @@ function estruturarMarkdown(fonte, e) {
|
|
|
339
362
|
mencoes.push({ inicio: l.inicio + m.index, id: m[0] });
|
|
340
363
|
const d = s.frontmatter?.dados;
|
|
341
364
|
return {
|
|
342
|
-
path: fonte.path, secoes: s.secoes, links: s.links, mencoes,
|
|
365
|
+
path: fonte.path, secoes: s.secoes, links: s.links, citacoes: s.citacoes, mencoes,
|
|
343
366
|
frontmatter: s.frontmatter && d
|
|
344
367
|
? { id: typeof d.id === 'string' ? d.id : null, tipo: typeof d.tipo === 'string' && d.tipo !== '', valores: s.frontmatter.valores }
|
|
345
368
|
: null,
|
|
@@ -414,6 +437,13 @@ function ligarMarkdown(e) {
|
|
|
414
437
|
};
|
|
415
438
|
for (const s of estruturas) {
|
|
416
439
|
const path = s.path, arquivo = { kind: 'file', path, fragment: null };
|
|
440
|
+
const citar = (alvo, k, metodo) => {
|
|
441
|
+
if (alvo === null || alvo === path || !arquivos.has(alvo))
|
|
442
|
+
return false;
|
|
443
|
+
aresta('cites', secaoEm(s, arquivo, k.inicio), { kind: 'file', path: alvo, fragment: null }, e.extratorMd, metodo, { path, inicio: k.inicio, fim: k.fim });
|
|
444
|
+
return true;
|
|
445
|
+
};
|
|
446
|
+
const linksReferenciados = [];
|
|
417
447
|
for (const x of s.secoes) {
|
|
418
448
|
if (x.slug === null) {
|
|
419
449
|
lacuna('secao-recusada', path, x.inicio, null);
|
|
@@ -438,7 +468,15 @@ function ligarMarkdown(e) {
|
|
|
438
468
|
lacuna('link-invalido', path, k.inicio, destino);
|
|
439
469
|
continue;
|
|
440
470
|
}
|
|
441
|
-
const
|
|
471
|
+
const relativo = caminhoDecodificado === '' ? path : resolverCaminho(path, caminhoDecodificado);
|
|
472
|
+
// Links seguem o diretorio do documento; a citacao tambem admite caminho desde a raiz.
|
|
473
|
+
const literal = caminhoDaCitacao(path, caminhoDecodificado);
|
|
474
|
+
// Uma referencia ao arquivo ou a uma secao ja representa esta ocorrencia do link.
|
|
475
|
+
if (relativo === null || !arquivos.has(relativo)) {
|
|
476
|
+
if (citar(literal, k, 'explicit-link'))
|
|
477
|
+
linksReferenciados.push(k);
|
|
478
|
+
}
|
|
479
|
+
const alvo = relativo;
|
|
442
480
|
if (alvo === null) {
|
|
443
481
|
lacuna('link-fora-do-repositorio', path, k.inicio, destino);
|
|
444
482
|
continue;
|
|
@@ -450,6 +488,7 @@ function ligarMarkdown(e) {
|
|
|
450
488
|
const secoesDoAlvo = slugs.get(alvo);
|
|
451
489
|
if (ancora && secoesDoAlvo?.has(ancora)) {
|
|
452
490
|
aresta('references', origem, { kind: 'section', path: alvo, fragment: ancora }, e.extratorMd, 'explicit-link', t);
|
|
491
|
+
linksReferenciados.push(k);
|
|
453
492
|
continue;
|
|
454
493
|
}
|
|
455
494
|
// P6: ancora que nao bate fica declarada; o link ainda prova a referencia ao arquivo.
|
|
@@ -458,6 +497,19 @@ function ligarMarkdown(e) {
|
|
|
458
497
|
if (alvo === path)
|
|
459
498
|
continue;
|
|
460
499
|
aresta('references', origem, { kind: 'file', path: alvo, fragment: null }, e.extratorMd, 'explicit-link', t);
|
|
500
|
+
linksReferenciados.push(k);
|
|
501
|
+
}
|
|
502
|
+
// Codigo inline no rotulo pertence a mesma ocorrencia do link ja resolvido.
|
|
503
|
+
// Varredura por spans preserva citacoes independentes, inclusive na mesma linha.
|
|
504
|
+
linksReferenciados.sort((a, b) => a.inicio - b.inicio || b.fim - a.fim);
|
|
505
|
+
let link = 0;
|
|
506
|
+
for (const k of s.citacoes) {
|
|
507
|
+
while (link < linksReferenciados.length && linksReferenciados[link].fim <= k.inicio)
|
|
508
|
+
link++;
|
|
509
|
+
const l = linksReferenciados[link];
|
|
510
|
+
if (l && l.inicio <= k.inicio && k.fim <= l.fim)
|
|
511
|
+
continue;
|
|
512
|
+
citar(caminhoDaCitacao(path, k.destino), k, 'text-location');
|
|
461
513
|
}
|
|
462
514
|
const artefato = s.frontmatter && s.frontmatter.id !== null ? artefatos.get(s.frontmatter.id) : undefined;
|
|
463
515
|
if (artefato && artefato.path === path && s.frontmatter) {
|
|
@@ -3,9 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.OPCOES_TS_DESCRITAS = void 0;
|
|
4
4
|
exports.casaSonda = casaSonda;
|
|
5
5
|
exports.extrairTypeScript = extrairTypeScript;
|
|
6
|
+
const intelligence_graph_extract_md_1 = require("./intelligence-graph-extract-md");
|
|
6
7
|
/** Extensoes que o extrator TS le; as do `extensaoDe` do KG2. */
|
|
7
8
|
const EXTENSOES_DO_PROGRAMA = ['.cjs', '.cts', '.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'];
|
|
8
9
|
const DECLARACOES_TS = ['.d.ts', '.d.mts', '.d.cts'];
|
|
10
|
+
/** KG5: candidatos literais; dist -> src e uma convencao de citacao, nunca prova de import. */
|
|
11
|
+
function candidatosDaCitacao(base) {
|
|
12
|
+
const formas = (p) => {
|
|
13
|
+
const semJs = p.replace(/\.(?:[cm]?js|jsx)$/, '');
|
|
14
|
+
if (semJs !== p)
|
|
15
|
+
return [semJs + '.ts', semJs + '.tsx', semJs + '.mts', semJs + '.cts'];
|
|
16
|
+
if (/\.[^/]+$/.test(p))
|
|
17
|
+
return [];
|
|
18
|
+
return EXTENSOES_DO_PROGRAMA.flatMap((ext) => [p + ext, p + '/index' + ext]);
|
|
19
|
+
};
|
|
20
|
+
const grupos = [[base], formas(base)];
|
|
21
|
+
const fonte = base.replace(/(^|\/)dist\//, '$1src/');
|
|
22
|
+
if (fonte !== base)
|
|
23
|
+
grupos.push([fonte], formas(fonte));
|
|
24
|
+
return grupos;
|
|
25
|
+
}
|
|
9
26
|
/** A base sem a extensao (o TypeScript troca `.js` por `.ts`, e `.d.ts` conta inteira). */
|
|
10
27
|
function semExtensao(base) {
|
|
11
28
|
const nome = base.slice(base.lastIndexOf('/') + 1);
|
|
@@ -283,12 +300,19 @@ function extrairTypeScript(e, ts) {
|
|
|
283
300
|
/** Fonte TypeScript, que o compilador transforma; JavaScript roda como esta. */
|
|
284
301
|
const compiladoEm = (arquivo) => !EXTENSOES_JS.includes(extensao(arquivo));
|
|
285
302
|
/** Chaves de todos os imports dentro de um no. */
|
|
286
|
-
function especificadoresEm(raiz) {
|
|
303
|
+
function especificadoresEm(raiz, literais) {
|
|
287
304
|
const r = [], compilado = compiladoEm(raiz.getSourceFile().fileName);
|
|
288
305
|
const coletar = (n) => {
|
|
289
306
|
const chave = chaveDoImport(n, compilado);
|
|
290
|
-
if (chave !== null)
|
|
307
|
+
if (chave !== null) {
|
|
291
308
|
r.push(chave);
|
|
309
|
+
const esp = ts.isImportDeclaration(n) || ts.isExportDeclaration(n) ? n.moduleSpecifier
|
|
310
|
+
: ts.isImportEqualsDeclaration(n) && ts.isExternalModuleReference(n.moduleReference) ? n.moduleReference.expression
|
|
311
|
+
: ts.isImportTypeNode(n) && ts.isLiteralTypeNode(n.argument) ? n.argument.literal
|
|
312
|
+
: ts.isCallExpression(n) ? n.arguments[0] : undefined;
|
|
313
|
+
if (esp)
|
|
314
|
+
literais?.set(esp, chave);
|
|
315
|
+
}
|
|
292
316
|
ts.forEachChild(n, coletar);
|
|
293
317
|
};
|
|
294
318
|
coletar(raiz);
|
|
@@ -597,13 +621,15 @@ function extrairTypeScript(e, ts) {
|
|
|
597
621
|
const divergentesGlobais = new Set();
|
|
598
622
|
// KG4 (D3): por fonte, os caminhos a que as referencias de modulo resolvem e as bases das relativas.
|
|
599
623
|
const dependenciasDe = new Map(), sondasDe = new Map();
|
|
624
|
+
const citacoesDe = new Map();
|
|
600
625
|
for (const fonte of e.fontes) {
|
|
601
626
|
const sf = programa.getSourceFile(absoluto(fonte.path));
|
|
602
627
|
if (!sf || sf.fileName !== absoluto(fonte.path))
|
|
603
628
|
continue;
|
|
604
629
|
const ext = extensao(fonte.path), mapa = new Map();
|
|
605
630
|
const dependencias = new Set(), sondas = new Set();
|
|
606
|
-
|
|
631
|
+
const literaisDeModulo = new Map();
|
|
632
|
+
for (const chave of especificadoresEm(sf, literaisDeModulo)) {
|
|
607
633
|
if (mapa.has(chave))
|
|
608
634
|
continue;
|
|
609
635
|
const esp = especificadorDaChave(chave), doCompilador = resolver(esp, fonte.path);
|
|
@@ -632,6 +658,46 @@ function extrairTypeScript(e, ts) {
|
|
|
632
658
|
if (divergente)
|
|
633
659
|
divergentesGlobais.add(`${fonte.path}\u0000${chave}`);
|
|
634
660
|
}
|
|
661
|
+
// Strings so em testes/scripts. Comentarios, interpolacoes e concatenacoes nao sao avaliados.
|
|
662
|
+
const citacoes = [];
|
|
663
|
+
if (/(?:^|\/)(?:tests?|__tests__|scripts?)\/|\.(?:test|spec)\.[cm]?[jt]sx?$/.test(fonte.path)) {
|
|
664
|
+
const citar = (literal, n, modulo = false) => {
|
|
665
|
+
const base = (0, intelligence_graph_extract_md_1.caminhoDaCitacao)(fonte.path, literal, modulo);
|
|
666
|
+
if (base === null)
|
|
667
|
+
return;
|
|
668
|
+
const grupos = candidatosDaCitacao(base);
|
|
669
|
+
// Inclui ausentes e diretorios: a troca para arquivo invalida a unidade incremental.
|
|
670
|
+
// So arquivos presentes podem virar alvo; diretorios conservam apenas a sonda.
|
|
671
|
+
for (const grupo of grupos)
|
|
672
|
+
for (const p of grupo)
|
|
673
|
+
sondas.add(p);
|
|
674
|
+
for (const grupo of grupos) {
|
|
675
|
+
const presentes = grupo.filter((p) => arquivos.has(p));
|
|
676
|
+
if (!presentes.length)
|
|
677
|
+
continue;
|
|
678
|
+
if (presentes.length === 1 && presentes[0] !== fonte.path) {
|
|
679
|
+
dependencias.add(presentes[0]);
|
|
680
|
+
citacoes.push({ alvo: presentes[0], trecho: { path: fonte.path, inicio: n.getStart(sf), fim: n.getEnd() } });
|
|
681
|
+
}
|
|
682
|
+
break; // Ambiguidade nao autoriza escolher uma fonte nem tentar outro grupo.
|
|
683
|
+
}
|
|
684
|
+
};
|
|
685
|
+
const literais = (n) => {
|
|
686
|
+
if (ts.isStringLiteral(n) || ts.isNoSubstitutionTemplateLiteral(n)) {
|
|
687
|
+
const chave = literaisDeModulo.get(n);
|
|
688
|
+
// O resolver de import ja provou esta ocorrencia; outra string igual ainda pode citar.
|
|
689
|
+
if (chave !== undefined && mapa.get(chave)?.alvo != null)
|
|
690
|
+
return;
|
|
691
|
+
citar(n.text, n, chave !== undefined);
|
|
692
|
+
// Codigo citado por fixture: so argumentos literais de require/import dentro da string.
|
|
693
|
+
for (const m of n.text.matchAll(/\b(?:require|import)\s*\(\s*(['"])([^'"\r\n]+)\1\s*\)/g))
|
|
694
|
+
citar(m[2], n, true);
|
|
695
|
+
}
|
|
696
|
+
ts.forEachChild(n, literais);
|
|
697
|
+
};
|
|
698
|
+
literais(sf);
|
|
699
|
+
}
|
|
700
|
+
citacoesDe.set(fonte.path, citacoes);
|
|
635
701
|
// O que o TypeScript coleta e a varredura nao ve (tipo importado no JSDoc) tambem liga o checker a outro arquivo.
|
|
636
702
|
for (const nome of nomesDeModulo(sf)) {
|
|
637
703
|
sondar(baseDaSonda(fonte.path, nome), sondas);
|
|
@@ -739,6 +805,8 @@ function extrairTypeScript(e, ts) {
|
|
|
739
805
|
const aresta = (kind, from, to, t) => {
|
|
740
806
|
saida.arestas.push({ kind, from, to, extrator: e.extrator, metodo: 'ast', trecho: t });
|
|
741
807
|
};
|
|
808
|
+
for (const c of citacoesDe.get(fonte.path) ?? [])
|
|
809
|
+
aresta('cites', arquivo, { kind: 'file', path: c.alvo, fragment: null }, c.trecho);
|
|
742
810
|
const lacuna = (categoria, n, detalhe = null) => {
|
|
743
811
|
saida.lacunas.push({ categoria, path: fonte.path, inicio: n ? n.getStart(sf) : null, detalhe });
|
|
744
812
|
};
|