@payconductor/houndsman 0.12.0 → 0.14.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.
Files changed (119) hide show
  1. package/README.md +23 -2
  2. package/package.json +1 -1
  3. package/src/cli/commands/compare-command.ts +112 -0
  4. package/src/cli/commands/context-command.ts +1 -0
  5. package/src/cli/commands/doctor-command.ts +22 -0
  6. package/src/cli/commands/findings-command.ts +11 -1
  7. package/src/cli/commands/hunt-command.ts +479 -0
  8. package/src/cli/commands/review-command.ts +58 -2
  9. package/src/cli/commands/status-command.ts +3 -2
  10. package/src/cli/help.ts +20 -3
  11. package/src/cli/index.ts +20 -3
  12. package/src/cli/progress.ts +50 -0
  13. package/src/core/ai/ai-client.ts +38 -2
  14. package/src/core/ai/ai-sdk-model-provider.ts +39 -0
  15. package/src/core/ai/features/brief-enricher.ts +1 -1
  16. package/src/core/ai/features/business-analyzer.ts +61 -0
  17. package/src/core/ai/features/business-summarizer.ts +44 -0
  18. package/src/core/ai/index.ts +14 -1
  19. package/src/core/ai/prompts/brief.ts +33 -7
  20. package/src/core/ai/prompts/business.ts +76 -0
  21. package/src/core/ai/provider-capabilities.ts +12 -0
  22. package/src/core/ai/schemas.ts +70 -2
  23. package/src/core/ai/types.ts +2 -0
  24. package/src/core/ai/usage-recorder.ts +53 -1
  25. package/src/core/brief.ts +246 -12
  26. package/src/core/builtins.ts +108 -0
  27. package/src/core/business-summary.ts +583 -0
  28. package/src/core/commands/compare.ts +233 -0
  29. package/src/core/commands/context.ts +6 -2
  30. package/src/core/commands/findings.ts +38 -30
  31. package/src/core/commands/review.ts +6 -0
  32. package/src/core/commands/scaffold.ts +38 -0
  33. package/src/core/commands/status.ts +9 -4
  34. package/src/core/compare.ts +243 -0
  35. package/src/core/concurrency.ts +30 -0
  36. package/src/core/config.ts +57 -1
  37. package/src/core/defaults.ts +63 -2
  38. package/src/core/domain/budget.ts +62 -4
  39. package/src/core/domain/classification.ts +12 -2
  40. package/src/core/engine/carryover.ts +4 -0
  41. package/src/core/engine/finalize-pipeline.ts +347 -0
  42. package/src/core/engine/prepare-pipeline.ts +1294 -0
  43. package/src/core/engine/review-context.ts +51 -0
  44. package/src/core/engine/review-options.ts +47 -0
  45. package/src/core/engine/review-scope.ts +106 -26
  46. package/src/core/engine/review-session.ts +18 -16
  47. package/src/core/engine/review-workspace.ts +14 -0
  48. package/src/core/engine/run-artifacts.ts +196 -0
  49. package/src/core/engine/run-format.ts +4 -0
  50. package/src/core/env.ts +14 -0
  51. package/src/core/findings-state.ts +13 -1
  52. package/src/core/github-review.ts +5 -2
  53. package/src/core/hunt/hunt-runner.ts +418 -0
  54. package/src/core/hunt/index.ts +61 -0
  55. package/src/core/hunt/maki-install.ts +331 -0
  56. package/src/core/hunt/maki-intent-prompt.ts +50 -0
  57. package/src/core/hunt/maki-model.ts +101 -0
  58. package/src/core/hunt/maki-prompt.ts +83 -0
  59. package/src/core/hunt/maki-release.ts +104 -0
  60. package/src/core/hunt/maki-runner.ts +276 -0
  61. package/src/core/hunt/pool.ts +8 -0
  62. package/src/core/logging/index.ts +7 -0
  63. package/src/core/logging/logger.ts +19 -0
  64. package/src/core/logging/progress.ts +366 -0
  65. package/src/core/orchestrator.ts +33 -1180
  66. package/src/core/paths.ts +6 -3
  67. package/src/core/pr-context.ts +2 -4
  68. package/src/core/prepare-report.ts +61 -0
  69. package/src/core/project-config.ts +46 -1
  70. package/src/core/propagation.ts +127 -0
  71. package/src/core/registry-check.ts +60 -21
  72. package/src/core/renderers/manifest-writer.ts +13 -0
  73. package/src/core/renderers/resume-renderer.ts +151 -11
  74. package/src/core/report-builder.ts +108 -278
  75. package/src/core/storage/file/file-storage.ts +7 -3
  76. package/src/core/storage/sqlite/mappers.ts +10 -0
  77. package/src/core/storage/sqlite/schema.ts +104 -23
  78. package/src/core/storage/sqlite/sqlite-storage.ts +22 -9
  79. package/src/core/storage/types.ts +17 -4
  80. package/src/core/storage/work-area.ts +59 -1
  81. package/src/core/types.ts +31 -0
  82. package/src/core/watchdog-registry.ts +21 -3
  83. package/src/index.ts +78 -4
  84. package/src/server/client/ArtifactsPanel.tsx +4 -2
  85. package/src/server/client/FindingCard.tsx +21 -1
  86. package/src/server/client/RunsSection.tsx +5 -0
  87. package/src/server/client/utils/constants.ts +21 -11
  88. package/src/server/client/utils/markdown.ts +1 -1
  89. package/src/server/client/utils/types.ts +14 -2
  90. package/src/server/run-repository.ts +35 -14
  91. package/src/server/styles.css +2 -0
  92. package/src/skill/OUTPUT-FORMAT.md +36 -10
  93. package/src/skill/README.md +30 -14
  94. package/src/skill/SETUP.md +22 -1
  95. package/src/skill/SKILL.md +17 -4
  96. package/src/skill/example-resume.md +43 -0
  97. package/src/skill/hunt.md +181 -58
  98. package/src/tests/__snapshots__/baseline.test.ts.snap +206 -178
  99. package/src/tests/ai-core.test.ts +84 -1
  100. package/src/tests/ai-features.test.ts +95 -4
  101. package/src/tests/baseline.test.ts +29 -121
  102. package/src/tests/brief-scope.test.ts +250 -0
  103. package/src/tests/business-summary.test.ts +258 -0
  104. package/src/tests/cli.test.ts +1 -0
  105. package/src/tests/compare.test.ts +233 -0
  106. package/src/tests/fixtures/fake-model-provider.ts +2 -1
  107. package/src/tests/hunt-cli.test.ts +185 -0
  108. package/src/tests/hunt-install.test.ts +153 -0
  109. package/src/tests/hunt-maki.test.ts +525 -0
  110. package/src/tests/markdown.test.ts +3 -3
  111. package/src/tests/progress.test.ts +145 -0
  112. package/src/tests/propagation.test.ts +119 -0
  113. package/src/tests/review-resume.test.ts +60 -1
  114. package/src/tests/review-scope.test.ts +90 -19
  115. package/src/tests/review-scripts.test.ts +106 -218
  116. package/src/tests/server.test.ts +7 -4
  117. package/src/tests/storage.test.ts +194 -9
  118. package/src/core/renderers/report-renderer.ts +0 -66
  119. package/src/skill/example-review.md +0 -66
@@ -1,66 +0,0 @@
1
- /**
2
- * Renderização do relatório (biblioteca) — superfície OO sobre `report-builder`.
3
- *
4
- * O texto continua nas funções puras; a classe fixa o resolver de nomes e evita
5
- * repetir a lista de argumentos no orquestrador.
6
- */
7
-
8
- import type { JevCandidate } from "../jev";
9
- import {
10
- type ContextSummary,
11
- type DomainReport,
12
- type MergedFinding,
13
- renderDomainReport,
14
- renderReport,
15
- type WatchdogNameResolver,
16
- type WatchdogReport,
17
- } from "../report-builder";
18
-
19
- /** Renderiza o relatório consolidado e os relatórios por domínio. */
20
- export class ReportRenderer {
21
- private readonly nameOf: WatchdogNameResolver;
22
-
23
- constructor(nameOf: WatchdogNameResolver) {
24
- this.nameOf = nameOf;
25
- }
26
-
27
- /** Relatório consolidado (`review.md`). */
28
- render(
29
- branch: string,
30
- reports: WatchdogReport[],
31
- merged: MergedFinding[],
32
- coverage: { classified?: Record<string, string[]> },
33
- context?: ContextSummary | null,
34
- candidates?: JevCandidate[],
35
- domains: readonly DomainReport[] = [],
36
- ): string {
37
- return renderReport(
38
- branch,
39
- reports,
40
- merged,
41
- coverage,
42
- context,
43
- candidates,
44
- this.nameOf,
45
- domains,
46
- );
47
- }
48
-
49
- /** Relatório isolado de um watchdog (`review.<id>.md`). */
50
- renderDomain(
51
- branch: string,
52
- report: WatchdogReport,
53
- merged: MergedFinding[],
54
- expectedFiles: number,
55
- context?: ContextSummary | null,
56
- ): string {
57
- return renderDomainReport(
58
- branch,
59
- report,
60
- merged,
61
- expectedFiles,
62
- context,
63
- this.nameOf,
64
- );
65
- }
66
- }
@@ -1,66 +0,0 @@
1
- # PR Review — feature/add-webhook-retry
2
-
3
- **Data:** 2026-04-20
4
- **Watchdogs ativos:** api-contracts, backend-architecture, payments-integrations, acquirer-integrations
5
- **Achados:** 2 bloqueantes · 1 atenção · 1 sugestões · 1 nit
6
-
7
- ## Contexto da PR
8
- **PR:** #482 Adicionar retry de webhooks — https://github.com/org/repo/pull/482
9
- **Branch:** `feature/add-webhook-retry` → `main`
10
- **Objetivo:** Tornar o envio de webhooks resiliente a falhas temporárias do destinatário.
11
- **Motivação:** Webhooks com falha exigiam reenvio manual e causavam perda de eventos em integradores.
12
- **Resumo das alterações:**
13
- - Nova fila de retry para webhooks que falharam.
14
- - Novo endpoint interno para reprocessar eventos manualmente.
15
- - Registro de tentativas no handler de envio.
16
-
17
- ## Relatórios por domínio
18
-
19
- | Watchdog | Achados | Revisados | Relatório |
20
- |---|---|---|---|
21
- | Arquitetura Backend | 2 | 3/3 | [`review.backend-architecture.md`](review.backend-architecture.md) |
22
- | Pagamentos & Integrações | 1 | 4/4 | [`review.payments-integrations.md`](review.payments-integrations.md) |
23
- | Acquirer Integrations | 2 | 3/4 | [`review.acquirer-integrations.md`](review.acquirer-integrations.md) |
24
-
25
- ## Cobertura
26
-
27
- | Watchdog | Arquivos revisados | Findings |
28
- |---|---|---|
29
- | API & Contratos | 2 | 0 |
30
- | Arquitetura Backend | 3 | 2 |
31
- | Pagamentos & Integrações | 4 | 1 |
32
- | Acquirer Integrations | 3/4 (faltam 1) | 2 |
33
-
34
- ## Conclusão
35
-
36
- **Status:** ❌ Mudanças Necessárias
37
- **Resumo:** 2 violações bloqueantes, 1 ponto de atenção, 1 sugestão e 1 nit.
38
-
39
- ## ❌ blocking
40
-
41
- - **Webhook handler sem verifySignature** — `server/src/services/integrations/acquirer/webhook/handle-charge-event.ts:15` · _Acquirer Integrations, Pagamentos & Integrações_
42
- Payload processado antes de validar a assinatura do provider.
43
- **Ação:** Validar `verifyWebhookSignature(payload, signature, secret)` antes de qualquer efeito.
44
- **Evidência:** `const event = JSON.parse(body)`
45
-
46
- - **Promise não aguardada** — `server/src/services/webhook/webhook-retry-service.ts:92` · _Pagamentos & Integrações_
47
- `updateWebhookStatus(id, 'failed')` sem `await` — status pode não persistir antes do retorno.
48
- **Ação:** Adicionar `await`.
49
-
50
- ## ⚠️ attention
51
-
52
- - **Retry sem backoff** — `server/src/services/webhook/webhook-retry-service.ts:55` · _Acquirer Integrations_
53
- Retry com intervalo fixo de 1s.
54
- **Ação:** Usar exponential backoff com jitter.
55
-
56
- ## 💡 suggestion
57
-
58
- - **Complexidade** — `server/src/services/webhook/webhook-retry-service.ts:45-78` · _Arquitetura Backend_
59
- `retryWithBackoff` com 6 níveis de indentação.
60
- **Ação:** Extrair `calculateBackoffDelay(attempt, config)` e usar early returns.
61
-
62
- ## 🔎 nit
63
-
64
- - **Ordem de membros** — `server/src/services/webhook/webhook-retry-service.ts:12` · _Arquitetura Backend_
65
- Campo privado declarado antes do construtor público.
66
- **Ação:** Reordenar membros (públicos primeiro).