@wiati/dfe-agent 0.1.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 (65) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +196 -0
  3. package/dist/agent.md +48 -0
  4. package/dist/bin/dfe-agent.d.ts +2 -0
  5. package/dist/bin/dfe-agent.d.ts.map +1 -0
  6. package/dist/bin/dfe-agent.js +19 -0
  7. package/dist/bin/dfe-agent.js.map +1 -0
  8. package/dist/cli.d.ts +25 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +105 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/install.d.ts +23 -0
  13. package/dist/commands/install.d.ts.map +1 -0
  14. package/dist/commands/install.js +74 -0
  15. package/dist/commands/install.js.map +1 -0
  16. package/dist/commands/query.d.ts +14 -0
  17. package/dist/commands/query.d.ts.map +1 -0
  18. package/dist/commands/query.js +18 -0
  19. package/dist/commands/query.js.map +1 -0
  20. package/dist/commands/status.d.ts +10 -0
  21. package/dist/commands/status.d.ts.map +1 -0
  22. package/dist/commands/status.js +58 -0
  23. package/dist/commands/status.js.map +1 -0
  24. package/dist/commands/update.d.ts +26 -0
  25. package/dist/commands/update.d.ts.map +1 -0
  26. package/dist/commands/update.js +144 -0
  27. package/dist/commands/update.js.map +1 -0
  28. package/dist/index.d.ts +6 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +8 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/query/cache.d.ts +38 -0
  33. package/dist/query/cache.d.ts.map +1 -0
  34. package/dist/query/cache.js +80 -0
  35. package/dist/query/cache.js.map +1 -0
  36. package/dist/query/constants.d.ts +20 -0
  37. package/dist/query/constants.d.ts.map +1 -0
  38. package/dist/query/constants.js +20 -0
  39. package/dist/query/constants.js.map +1 -0
  40. package/dist/query/contextBuilder.d.ts +40 -0
  41. package/dist/query/contextBuilder.d.ts.map +1 -0
  42. package/dist/query/contextBuilder.js +54 -0
  43. package/dist/query/contextBuilder.js.map +1 -0
  44. package/dist/query/embedder.d.ts +30 -0
  45. package/dist/query/embedder.d.ts.map +1 -0
  46. package/dist/query/embedder.js +69 -0
  47. package/dist/query/embedder.js.map +1 -0
  48. package/dist/query/ftsSearch.d.ts +28 -0
  49. package/dist/query/ftsSearch.d.ts.map +1 -0
  50. package/dist/query/ftsSearch.js +48 -0
  51. package/dist/query/ftsSearch.js.map +1 -0
  52. package/dist/query/hybrid.d.ts +31 -0
  53. package/dist/query/hybrid.d.ts.map +1 -0
  54. package/dist/query/hybrid.js +67 -0
  55. package/dist/query/hybrid.js.map +1 -0
  56. package/dist/query/index.d.ts +45 -0
  57. package/dist/query/index.d.ts.map +1 -0
  58. package/dist/query/index.js +153 -0
  59. package/dist/query/index.js.map +1 -0
  60. package/dist/query/vectorSearch.d.ts +32 -0
  61. package/dist/query/vectorSearch.d.ts.map +1 -0
  62. package/dist/query/vectorSearch.js +54 -0
  63. package/dist/query/vectorSearch.js.map +1 -0
  64. package/dist/skill/dfe-fiscal/SKILL.md +140 -0
  65. package/package.json +59 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,20 @@
1
+ # Changelog
2
+
3
+ Todas as mudancas notaveis neste projeto sao documentadas aqui.
4
+
5
+ ## 0.1.0 — 2026-XX-XX (Sprint 14 MVP, em desenvolvimento)
6
+
7
+ ### Added
8
+ - Pacote npm `@dfe-agent/dfe-agent` com agent + skill + CLI Node
9
+ - Subcommands `install`, `update`, `query`, `status`
10
+ - Base RAG via GitHub Releases (download obrigatorio no primeiro `update`; sem seed bundled para manter npm tarball <50MB)
11
+ - Query engine Node port de `src/query/query_engine.py` com paridade validada
12
+ - Sync bidirecional `agent.md` + `SKILL.md` com drift detection no CI
13
+ - Workflow GitHub Actions `publish-base.yml` para publicar `dfe.db.gz` em cada release
14
+ - Workflow GitHub Actions `publish-npm.yml` para publicar no npm em tag `packages-v*.*.*`
15
+
16
+ ### Known limitations (Sprint 14)
17
+ - Ambiente de desenvolvimento historico tinha issue pre-existente com Node v22.21.1 + `sharp`/`better-sqlite3` nativos (Sprint 13). **Resolvido em 2026-08-26** via upgrade para Node 24.19.0 LTS.
18
+ - `npx dfe-agent install` NAO e' automatico no postinstall (decisao D8 opt-in).
19
+ - Collector/indexer continuam em Python — Sprint 15+ pode portar para Node.
20
+ - **Sem seed bundled** (decisao revisada: `storage/dfe.db` gzipado = 61MB, excede target <30MB). Primeiro `update` exige rede; em rede off, retorna exit 3 com mensagem clara. Follow-up Sprint 15+: gerar seed mini (<5MB) com subconjunto de docs.
package/README.md ADDED
@@ -0,0 +1,196 @@
1
+ # @dfe-agent/dfe-agent
2
+
3
+ > **Status: MVP em desenvolvimento (Sprint 14)** — publicacao inicial prevista apos Fase F.
4
+
5
+ Agente opencode + base RAG com documentacao fiscal eletronica oficial brasileira (NF-e, NFC-e, CT-e, MDF-e, SPED). Para outros projetos opencode que querem responder perguntas sobre DFes sem clonar o DFe-Agent inteiro.
6
+
7
+ ## What is this?
8
+
9
+ `@dfe-agent/dfe-agent` e' o agente `dfe-agent` empacotado como pacote npm. Ele expoe:
10
+
11
+ - **Agent definition** (`dist/agent.md`) — system prompt que orienta o LLM a:
12
+ - usar a skill `dfe-fiscal`
13
+ - consultar a base RAG local via `dfe-agent query`
14
+ - citar fontes em todas as respostas
15
+ - recusar responder quando nao ha' chunks relevantes (`Nao encontrei base para responder`)
16
+
17
+ - **Skill definition** (`dist/skill/dfe-fiscal/SKILL.md`) — workflow canonico de:
18
+ - invocar `dfe-agent update` para manter base atualizada
19
+ - usar modos `semantic` / `fts` / `hybrid`
20
+ - aplicar guarda de `NO_EVIDENCE_MESSAGE`
21
+
22
+ - **CLI Node** (`dist/bin/dfe-agent.js`) — 4 subcommands:
23
+ - `install` — copia agent + skill para `.opencode/` do projeto consumidor
24
+ - `update` — baixa base RAG do GitHub Releases do DFe-Agent
25
+ - `query "<pergunta>"` — busca semantica/FTS5/hibrida, retorna JSON
26
+ - `status` — info da base instalada (path, mtime, doc count, schema)
27
+
28
+ - **Base RAG pre-buildada** — gerada no CI do DFe-Agent (Python pipeline) e distribuida via GitHub Releases como `dfe.db.gz` + `dfe.db.gz.sha256`. Tamanho: ~30MB gzipped.
29
+
30
+ ## Install
31
+
32
+ ```bash
33
+ npm install @dfe-agent/dfe-agent
34
+ npx dfe-agent install # copia agent + skill para .opencode/ (opt-in, nao automatico)
35
+ npx dfe-agent update # baixa base RAG (~30MB)
36
+ ```
37
+
38
+ > **Por que `install` e' opt-in?** Decisao D8: evita sobrescrever `.opencode/agent/dfe-agent.md` custom do usuario sem aviso. Para auto-setup, use `npx dfe-agent install --auto-setup`.
39
+
40
+ ## Quick start
41
+
42
+ ### Via opencode TUI (integrado)
43
+
44
+ ```bash
45
+ # apos install + update:
46
+ opencode run
47
+ # no TUI: Tab -> selecione @dfe-agent -> faca pergunta em linguagem natural
48
+ ```
49
+
50
+ O agent invocara' a skill `dfe-fiscal`, que rodara' `dfe-agent query "<pergunta>"`, formatara' a resposta em linguagem natural e adicionara' o bloco `Fontes:` no final.
51
+
52
+ ### Via CLI direto (sem TUI)
53
+
54
+ ```bash
55
+ npx dfe-agent query "O que e a NF-e?"
56
+ # {
57
+ # "answer": "A Nota Fiscal eletronica (NF-e) e' um documento...",
58
+ # "sources": [
59
+ # { "url": "https://www.nfe.fazenda.gov.br/...", "title": "NT 2019.001", "score": 0.87 }
60
+ # ]
61
+ # }
62
+ ```
63
+
64
+ Modos opt-in:
65
+
66
+ | Flag | Algoritmo | Quando usar |
67
+ |---|---|---|
68
+ | (nenhuma) | Vector search (sqlite-vec) | Default; perguntas genericas |
69
+ | `--mode=fts` | FTS5 BM25 | Termos literais (numero NT, codigo) |
70
+ | `--mode=hybrid` | RRF k=60 (vector + FTS5) | Maioria dos casos (gate Sprint 2) |
71
+
72
+ ## Updating the base
73
+
74
+ ```bash
75
+ npx dfe-agent update
76
+ ```
77
+
78
+ Fluxo:
79
+
80
+ 1. `GET https://api.github.com/repos/dfe-agent/DFe-Agent/releases/latest`
81
+ 2. Localiza assets `dfe.db.gz` + `dfe.db.gz.sha256`
82
+ 3. Download + verifica SHA-256 (gate B.3)
83
+ 4. Extrai atomicamente para `~/.dfe-agent/dfe.db`
84
+ 5. Valida `PRAGMA user_version >= 6` (gate schema)
85
+ 6. Fallback: sem seed bundled (decisao Sprint 14 final); retorna exit 3 com mensagem clara se GitHub inacessivel. Follow-up Sprint 15+ pode adicionar seed mini.
86
+
87
+ ## Custom base path
88
+
89
+ ```bash
90
+ DFE_AGENT_BASE_DIR=/custom/path npx dfe-agent update
91
+ DFE_AGENT_BASE_DIR=/custom/path npx dfe-agent query "..."
92
+ ```
93
+
94
+ Util para:
95
+
96
+ - CI em sandbox (sem $HOME gravavel)
97
+ - Per-project base (multiplas bases em maquinas compartilhadas)
98
+ - Testes isolados
99
+
100
+ ## Troubleshooting
101
+
102
+ | Erro | Causa | Solucao |
103
+ |---|---|---|
104
+ | `no dfe.db.gz asset` | Release do DFe-Agent ainda nao publicado | Aguarde primeiro release `v*.*.*` |
105
+ | `SHA mismatch` | Base corrompida no download | Rode `npx dfe-agent update` novamente |
106
+ | `PRAGMA user_version < 6` | Base antiga de versao pre-Sprint 5 | `rm ~/.dfe-agent/dfe.db && npx dfe-agent update` |
107
+ | `@xenova/transformers` falha ao carregar | Node v22.21.1 com sharp natives quebrados (Sprint 13) | Use Node 22.9 LTS ou 20.x |
108
+ | `better-sqlite3` falha ao compilar | Toolchain MSVC ausente | `npm rebuild better-sqlite3` com Visual Studio Build Tools |
109
+ | Query retorna `Nao encontrei base para responder` para pergunta valida | Base sem docs sobre o tema ou score baixo | `npx dfe-agent status` -> verifique `baseDocCount`; se baixo, `npx dfe-agent update` |
110
+
111
+ ## Development
112
+
113
+ A fonte canonica deste agent vive no **DFe-Agent repo**:
114
+
115
+ - `.opencode/agent/dfe-agent.md`
116
+ - `.opencode/skills/dfe-fiscal/SKILL.md`
117
+
118
+ Para distribuir atualizacoes:
119
+
120
+ 1. Edite a fonte canonica no DFe-Agent root.
121
+ 2. Rode `npm run sync` em `packages/dfe-agent/` para copiar para `dist/`.
122
+ 3. CI roda `npm run drift-check` para garantir consistencia (gate B.1).
123
+
124
+ Drift detectado em CI = PR bloqueado.
125
+
126
+ ## Como o pacote funciona (arquitetura)
127
+
128
+ ```
129
+ DFe-Agent root (CI em cada release v*.*.*)
130
+
131
+ ├── python -m src.collector --once # varre portais oficiais
132
+ ├── python -m src.indexer.ingest # gera embeddings
133
+ ├── gzip storage/dfe.db > dfe.db.gz # ~30MB
134
+ └── upload asset em GitHub Release
135
+
136
+
137
+ npx dfe-agent update (consumer)
138
+ ├── download dfe.db.gz + sha256
139
+ ├── verify SHA-256
140
+ ├── extract to ~/.dfe-agent/dfe.db (atomic)
141
+ └── PRAGMA user_version >= 6 (gate schema)
142
+
143
+
144
+ npx dfe-agent query "<pergunta>" (consumer)
145
+ ├── encode(query) via @xenova/transformers (ONNX)
146
+ ├── sqlite-vec MATCH em vec_chunks
147
+ ├── opcional: FTS5 BM25 MATCH em fts_chunks
148
+ ├── opcional: RRF k=60 fusion
149
+ └── retorna {answer, sources[]}
150
+ ```
151
+
152
+ ## Layout
153
+
154
+ ```
155
+ packages/dfe-agent/
156
+ ├── package.json
157
+ ├── tsconfig.json
158
+ ├── .gitignore
159
+ ├── README.md
160
+ ├── CHANGELOG.md
161
+ ├── src/ # TypeScript source
162
+ │ ├── index.ts # entry point (VERSION, reexports)
163
+ │ ├── cli.ts # CLI parser (parseArgs + 4 subcommands)
164
+ │ ├── commands/
165
+ │ │ ├── install.ts # copia agent + skill para .opencode/
166
+ │ │ ├── update.ts # download + SHA verify + atomic extract
167
+ │ │ ├── query.ts # delega para queryEngine.search()
168
+ │ │ └── status.ts # info da base
169
+ │ ├── query/ # query engine Node (port Py)
170
+ │ │ ├── index.ts # orchestrator + NO_EVIDENCE_MESSAGE
171
+ │ │ ├── embedder.ts # @xenova/transformers + LRU 128
172
+ │ │ ├── vectorSearch.ts # sqlite-vec MATCH
173
+ │ │ ├── ftsSearch.ts # FTS5 BM25
174
+ │ │ ├── hybrid.ts # RRF k=60
175
+ │ │ ├── cache.ts # SQLite query cache
176
+ │ │ └── contextBuilder.ts # {answer, sources}
177
+ │ └── bin/
178
+ │ └── dfe-agent.ts # bin shim (shebang)
179
+ ├── scripts/ # sync + drift-check
180
+ │ ├── sync-assets.ts
181
+ │ └── drift-check.ts
182
+ ├── dist/ # build output (gitignored)
183
+ ├── tests/ # node --test suites
184
+ │ ├── scaffold.test.ts
185
+ │ ├── sync-assets.test.ts
186
+ │ ├── drift-check.test.ts
187
+ │ ├── cli/skeleton.test.ts
188
+ │ ├── query/{embedder,ftsSearch,hybrid,cache,orchestrator}.test.ts
189
+ │ └── e2e/
190
+ # NOTA: src/seed/ removido em Sprint 14 final (61MB gzip > target 30MB);
191
+ # `update` retorna exit 3 com mensagem clara em rede off sem seed.
192
+ ```
193
+
194
+ ## License
195
+
196
+ MIT
package/dist/agent.md ADDED
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: dfe-agent
3
+ model: PROVIDER/MiniMax-M3
4
+ ---
5
+
6
+ # DFe-Agent
7
+
8
+ Voce e o agente principal do projeto DFe-Agent. Sua funcao e responder perguntas sobre documentacao fiscal eletronica oficial (NF-e, NFC-e, CT-e, MDF-e, SPED) e legislacao fiscal eletronica oficial fundamentada em notas tecnicas e atos dos orgaos publicos habilitados, com fonte unica na base RAG local.
9
+
10
+ ## Fluxo obrigatorio antes de responder
11
+
12
+ 1. SEMPRE invoque a skill `dfe-fiscal` antes de qualquer resposta.
13
+ 2. Use o `QueryEngine` da skill `dfe-fiscal` para buscar chunks relevantes.
14
+ 3. Avalie se ha evidencia suficiente via `has_sufficient_evidence`.
15
+
16
+ ## Regra absoluta: nunca inventar informacao
17
+
18
+ Se `has_sufficient_evidence` retornar `False`, responda literalmente:
19
+
20
+ > Nao encontrei base para responder
21
+
22
+ Nunca afirme algo sem citar fonte presente na base RAG.
23
+
24
+ ## Formato de toda resposta
25
+
26
+ A resposta SEMPRE termina com bloco `Fontes:` listando `URL - Titulo do documento` para cada fonte citada.
27
+
28
+ Exemplo de fechamento obrigatorio:
29
+
30
+ ```
31
+ Fontes:
32
+ - https://www.nfe.fazenda.gov.br/docs/nt_2019_001.pdf - Nota Tecnica 2019.001 NF-e
33
+ - https://sped.gov.br/noticias/nt_2026_001 - Nota Tecnica SPED 2026.001
34
+ ```
35
+
36
+ ## Guardrails
37
+
38
+ - NUNCA inventar informacao
39
+ - SEMPRE citar fonte presente na base RAG
40
+ - NUNCA emitir documento fiscal (fora de escopo)
41
+ - NUNCA substituir contador ou emitir opiniao legal/contabil
42
+
43
+ > **Sprint 11 D.4**: a regra "SEMPRE executar varredura antes de responder"
44
+ > foi REMOVIDA deste agente (contradizia o gate `dev/pre_tool_use.py`
45
+ > do agente implementador). O fluxo canonico de varredura + consulta
46
+ > esta documentado na skill `.opencode/skills/dfe-fiscal/SKILL.md`
47
+ > (Passo 2 do workflow) e deve ser aplicado manualmente quando
48
+ > necessario, NAO como regra automatica pre-resposta.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ //# sourceMappingURL=dfe-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dfe-agent.d.ts","sourceRoot":"","sources":["../../src/bin/dfe-agent.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // dfe-agent binario — entry point executado via `npx dfe-agent`.
4
+ //
5
+ // Em dev (`packages/dfe-agent/`), usa tsx para carregar src/cli.ts direto.
6
+ // Em producao (instalado via npm), tsc compila src/cli.ts -> dist/cli.js,
7
+ // e este shim apenas re-exporta. O `package.json > bin` aponta para
8
+ // dist/bin/dfe-agent.js, mas como src/cli.ts ja tem o guard `if
9
+ // (import.meta.url === ...)`, ele se executa quando invocado via tsx.
10
+ //
11
+ // Em producao, o build copia src/cli.ts para dist/cli.js e empacota.
12
+ import("../cli.js")
13
+ .then((m) => m.runCli(process.argv.slice(2)))
14
+ .then((code) => process.exit(code))
15
+ .catch((err) => {
16
+ console.error(`[dfe-agent] erro fatal: ${err.message}`);
17
+ process.exit(1);
18
+ });
19
+ //# sourceMappingURL=dfe-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dfe-agent.js","sourceRoot":"","sources":["../../src/bin/dfe-agent.ts"],"names":[],"mappings":";;AACA,iEAAiE;AACjE,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,oEAAoE;AACpE,gEAAgE;AAChE,sEAAsE;AACtE,EAAE;AACF,qEAAqE;AAErE,MAAM,CAAC,WAAW,CAAC;KAChB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;KAC5C,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * cli.ts — entry point CLI para @dfe-agent/dfe-agent.
3
+ *
4
+ * Subcommands:
5
+ * install copia agent + skill para .opencode/ do projeto
6
+ * update baixa base RAG do GitHub Releases
7
+ * query busca semantica / FTS5 / hibrida na base
8
+ * status info da base instalada (path, mtime, doc count)
9
+ *
10
+ * Exit codes:
11
+ * 0 sucesso (incluindo NO_EVIDENCE_MESSAGE em `query`)
12
+ * 1 erro generico / I/O
13
+ * 2 argumentos invalidos
14
+ * 3 base ausente / SHA mismatch em `update`
15
+ *
16
+ * @see PLAN_SPRINT14.md Task C.1
17
+ */
18
+ export interface CliOptions {
19
+ autoSetup?: boolean;
20
+ json?: boolean;
21
+ mode?: string;
22
+ question?: string;
23
+ }
24
+ export declare function runCli(argv: string[]): Promise<number>;
25
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAmBH,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoE5D"}
package/dist/cli.js ADDED
@@ -0,0 +1,105 @@
1
+ /**
2
+ * cli.ts — entry point CLI para @dfe-agent/dfe-agent.
3
+ *
4
+ * Subcommands:
5
+ * install copia agent + skill para .opencode/ do projeto
6
+ * update baixa base RAG do GitHub Releases
7
+ * query busca semantica / FTS5 / hibrida na base
8
+ * status info da base instalada (path, mtime, doc count)
9
+ *
10
+ * Exit codes:
11
+ * 0 sucesso (incluindo NO_EVIDENCE_MESSAGE em `query`)
12
+ * 1 erro generico / I/O
13
+ * 2 argumentos invalidos
14
+ * 3 base ausente / SHA mismatch em `update`
15
+ *
16
+ * @see PLAN_SPRINT14.md Task C.1
17
+ */
18
+ import { parseArgs } from "node:util";
19
+ import { fileURLToPath } from "node:url";
20
+ const USAGE = `dfe-agent — agente opencode + base RAG de documentacao fiscal eletronica
21
+
22
+ Uso:
23
+ dfe-agent install [--auto-setup] copia agent + skill para .opencode/
24
+ dfe-agent update baixa base RAG do GitHub Releases
25
+ dfe-agent query "<pergunta>" busca na base e retorna JSON {answer, sources[]}
26
+ dfe-agent status info da base instalada
27
+ dfe-agent --help imprime esta mensagem
28
+
29
+ Variaveis de ambiente:
30
+ DFE_AGENT_BASE_DIR path custom para base RAG (default: ~/.dfe-agent)
31
+ NPM_CONFIG_REGISTRY registry npm (para publicacao)
32
+ `;
33
+ export async function runCli(argv) {
34
+ // Lazy imports para evitar carregar modulos pesados (better-sqlite3) sem necessidade
35
+ const { install } = await import("./commands/install.js");
36
+ const { update } = await import("./commands/update.js");
37
+ const { query } = await import("./commands/query.js");
38
+ const { status } = await import("./commands/status.js");
39
+ let parsed;
40
+ try {
41
+ parsed = parseArgs({
42
+ args: argv,
43
+ options: {
44
+ auto: { type: "boolean", default: false },
45
+ json: { type: "boolean", default: true },
46
+ mode: { type: "string", default: "semantic" },
47
+ help: { type: "boolean", short: "h", default: false },
48
+ version: { type: "boolean", short: "v", default: false },
49
+ },
50
+ allowPositionals: true,
51
+ });
52
+ }
53
+ catch (err) {
54
+ console.error(`[dfe-agent] erro de argumentos: ${err.message}`);
55
+ return 2;
56
+ }
57
+ const { values, positionals } = parsed;
58
+ if (values.version) {
59
+ const { VERSION } = await import("./index.js");
60
+ console.log(VERSION);
61
+ return 0;
62
+ }
63
+ if (values.help || positionals.length === 0) {
64
+ console.log(USAGE);
65
+ return 0;
66
+ }
67
+ const [cmd, ...rest] = positionals;
68
+ switch (cmd) {
69
+ case "install":
70
+ return await install({ autoSetup: Boolean(values.auto) });
71
+ case "update":
72
+ return await update({});
73
+ case "query": {
74
+ const question = rest.join(" ").trim();
75
+ if (!question) {
76
+ console.error("[dfe-agent] query requer <pergunta>");
77
+ return 2;
78
+ }
79
+ return await query({
80
+ question,
81
+ mode: String(values.mode ?? "semantic"),
82
+ json: Boolean(values.json),
83
+ });
84
+ }
85
+ case "status":
86
+ return await status({ json: Boolean(values.json) });
87
+ default:
88
+ console.error(`[dfe-agent] comando desconhecido: ${cmd}`);
89
+ console.error(USAGE);
90
+ return 2;
91
+ }
92
+ }
93
+ // Executa quando invocado diretamente como cli.ts OU cli.js (NÃO como binario
94
+ // dist/bin/dfe-agent.js — esse path tem seu proprio entry point).
95
+ // Comparacao exata via fileURLToPath evita heuristica fragil de endsWith.
96
+ const thisFile = fileURLToPath(import.meta.url);
97
+ const invokedDirectly = process.argv[1] === thisFile
98
+ || process.argv[1]?.endsWith(`${thisFile.endsWith(".ts") ? "cli.ts" : "cli.js"}`);
99
+ if (invokedDirectly) {
100
+ runCli(process.argv.slice(2)).then((code) => process.exit(code), (err) => {
101
+ console.error(`[dfe-agent] erro fatal: ${err.message}`);
102
+ process.exit(1);
103
+ });
104
+ }
105
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * commands/install.ts — copia agent + skill de dist/ para .opencode/ do projeto.
3
+ *
4
+ * @see PLAN_SPRINT14.md Task C.1
5
+ *
6
+ * Origem (read-only):
7
+ * <pkg>/dist/agent.md
8
+ * <pkg>/dist/skill/dfe-fiscal/
9
+ *
10
+ * Destino (escrita):
11
+ * <cwd>/.opencode/agent/dfe-agent.md
12
+ * <cwd>/.opencode/skills/dfe-fiscal/
13
+ *
14
+ * Exit codes:
15
+ * 0 sucesso
16
+ * 1 erro de I/O
17
+ * 2 target invalido (sem permissao de escrita)
18
+ */
19
+ export interface InstallOptions {
20
+ autoSetup?: boolean;
21
+ }
22
+ export declare function install(opts: InstallOptions): Promise<number>;
23
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAQH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDnE"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * commands/install.ts — copia agent + skill de dist/ para .opencode/ do projeto.
3
+ *
4
+ * @see PLAN_SPRINT14.md Task C.1
5
+ *
6
+ * Origem (read-only):
7
+ * <pkg>/dist/agent.md
8
+ * <pkg>/dist/skill/dfe-fiscal/
9
+ *
10
+ * Destino (escrita):
11
+ * <cwd>/.opencode/agent/dfe-agent.md
12
+ * <cwd>/.opencode/skills/dfe-fiscal/
13
+ *
14
+ * Exit codes:
15
+ * 0 sucesso
16
+ * 1 erro de I/O
17
+ * 2 target invalido (sem permissao de escrita)
18
+ */
19
+ import { cpSync, existsSync, mkdirSync, statSync } from "node:fs";
20
+ import { dirname, resolve } from "node:path";
21
+ import { fileURLToPath } from "node:url";
22
+ const PKG_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
23
+ export async function install(opts) {
24
+ const target = resolve(process.cwd(), ".opencode");
25
+ const targetAgent = `${target}/agent/dfe-agent.md`;
26
+ const targetSkill = `${target}/skills/dfe-fiscal`;
27
+ // 1. Validar source (dist/)
28
+ const srcAgent = resolve(PKG_ROOT, "dist/agent.md");
29
+ const srcSkill = resolve(PKG_ROOT, "dist/skill/dfe-fiscal");
30
+ if (!existsSync(srcAgent)) {
31
+ console.error(`[dfe-agent] dist/agent.md nao encontrado em ${srcAgent}.\n` +
32
+ `[dfe-agent] isto indica que 'npm run sync' nao foi rodado antes do build.\n` +
33
+ `[dfe-agent] se voce instalou via npm install, isso e' um bug do pacote — reporte em https://github.com/dfe-agent/DFe-Agent/issues`);
34
+ return 1;
35
+ }
36
+ if (!existsSync(srcSkill)) {
37
+ console.error(`[dfe-agent] dist/skill/dfe-fiscal nao encontrado em ${srcSkill}`);
38
+ return 1;
39
+ }
40
+ // 2. Criar target dir
41
+ try {
42
+ mkdirSync(`${target}/agent`, { recursive: true });
43
+ mkdirSync(`${target}/skills/dfe-fiscal`, { recursive: true });
44
+ }
45
+ catch (err) {
46
+ console.error(`[dfe-agent] nao foi possivel criar ${target}: ${err.message}`);
47
+ return 2;
48
+ }
49
+ // 3. Copiar (sobrescreve sem warning — design B.1)
50
+ cpSync(srcAgent, targetAgent);
51
+ const agentSize = statSync(targetAgent).size;
52
+ console.info(`[dfe-agent] copied agent -> ${targetAgent} (${agentSize} bytes)`);
53
+ cpSync(srcSkill, targetSkill, { recursive: true });
54
+ console.info(`[dfe-agent] copied skill -> ${targetSkill}`);
55
+ // 4. Se --auto-setup, dispara update em sequencia
56
+ if (opts.autoSetup) {
57
+ console.info("[dfe-agent] --auto-setup acionado, disparando update...");
58
+ try {
59
+ const { update } = await import("./update.js");
60
+ const updateCode = await update({});
61
+ console.info(`[dfe-agent] update finalizou com exit code ${updateCode}`);
62
+ return updateCode;
63
+ }
64
+ catch (err) {
65
+ console.error(`[dfe-agent] update falhou: ${err.message}`);
66
+ return 3;
67
+ }
68
+ }
69
+ console.info(`[dfe-agent] proximos passos:`);
70
+ console.info(`[dfe-agent] npx dfe-agent update # baixa base RAG`);
71
+ console.info(`[dfe-agent] opencode run # abre TUI e seleciona @dfe-agent`);
72
+ return 0;
73
+ }
74
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * commands/query.ts — busca semantica / FTS5 / hibrida na base RAG.
3
+ *
4
+ * @see PLAN_SPRINT14.md Task C.3 + Fase E
5
+ *
6
+ * Stub inicial: delega para query/index.ts (Fase E).
7
+ */
8
+ export interface QueryOptions {
9
+ question: string;
10
+ mode?: string;
11
+ json?: boolean;
12
+ }
13
+ export declare function query(opts: QueryOptions): Promise<number>;
14
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/D"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * commands/query.ts — busca semantica / FTS5 / hibrida na base RAG.
3
+ *
4
+ * @see PLAN_SPRINT14.md Task C.3 + Fase E
5
+ *
6
+ * Stub inicial: delega para query/index.ts (Fase E).
7
+ */
8
+ import { search } from "../query/index.js";
9
+ export async function query(opts) {
10
+ const result = await search(opts.question, { mode: (opts.mode ?? "semantic") });
11
+ console.log(JSON.stringify(result, null, 2));
12
+ return 0;
13
+ }
14
+ if (import.meta.url === `file:///${process.argv[1]?.replace(/\\/g, "/")}`) {
15
+ const q = process.argv.slice(2).join(" ").trim();
16
+ query({ question: q }).then((code) => process.exit(code));
17
+ }
18
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/commands/query.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQ3C,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAkB;IAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAQ,EAAE,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,WAAW,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAC1E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * commands/status.ts — info da base instalada.
3
+ *
4
+ * @see PLAN_SPRINT14.md Task C.4
5
+ */
6
+ export interface StatusOptions {
7
+ json?: boolean;
8
+ }
9
+ export declare function status(opts: StatusOptions): Promise<number>;
10
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuCjE"}