@wiati/dfe-agent 0.1.2 → 0.1.3
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/CHANGELOG.md +13 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +2 -8
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +62 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +77 -0
- package/dist/paths.js.map +1 -0
- package/dist/query/cache.d.ts +27 -5
- package/dist/query/cache.d.ts.map +1 -1
- package/dist/query/cache.js +43 -6
- package/dist/query/cache.js.map +1 -1
- package/dist/query/index.d.ts +1 -4
- package/dist/query/index.d.ts.map +1 -1
- package/dist/query/index.js +9 -12
- package/dist/query/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,7 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Todas as mudancas notaveis neste projeto sao documentadas aqui.
|
|
4
4
|
|
|
5
|
-
## 0.1.
|
|
5
|
+
## 0.1.3 — 2026-08-27 (Sprint 15 bugfix)
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- **`dfe-agent update && dfe-agent query` end-to-end quebrava no Windows** com `"Cannot open database because the directory does not exist"`. Causa raiz: a regra `~/.dfe-agent/dfe.db` (decisao D4 da Sprint 14) estava duplicada em 3 funcoes locais (`src/commands/update.ts`, `src/commands/status.ts`, `src/query/index.ts`); 2 esqueceram o `resolve(..., ".dfe-agent")`. Fix: nova fonte UNICA `src/paths.ts` com `resolveBaseDir/resolveDbPath/resolveCacheDbPath`; os 3 entrypoints agora importam de la. Gate: `tests/query/paths.test.ts` (7 testes estruturais).
|
|
9
|
+
- **`dfe-agent query` quebrava em modo `semantic`/`hybrid` com `"attempt to write a readonly database"`**. Causa raiz: `QueryCache` aceitava `handle: BetterSqlite3Database` no construtor e escrevia `CREATE TABLE` no mesmo handle aberto com `readonly: true`. Fix: construtor agora recebe `baseDir: string` e abre SUA PROPRIA conexao (read-write) em `<baseDir>/cache.db`, isolada do `dfe.db` (read-only). Adicionado `close()` idempotente (gate destructor cleanup-hook). Gates: estrutural em `paths.test.ts` + comportamental em `cache.test.ts`.
|
|
10
|
+
|
|
11
|
+
### Notes
|
|
12
|
+
- Sem change breaking na API publica (`src/index.ts` nao exporta `QueryCache`). Patch bump.
|
|
13
|
+
- Gate CI estendido: auto-detecta `win32 && Node >= 22` para skip dos testes comportamentais em ambiente Windows (bug pre-existente better-sqlite3 `RemoveEnvironmentCleanupHook`). Gate estrutural cross-platform cobre o caminho em qualquer ambiente.
|
|
14
|
+
- Code review (subagent `general`): 1 BLOQUEANTE / 0 IMPORTANTE / 6 SUGESTAO (round 1) -> 0/0/1 (round 2). 1 iteracao do loop corretivo.
|
|
15
|
+
- Antes da instalacao da nova versao, mover base antiga: `Move-Item -LiteralPath "$HOME\dfe.db" -Destination "$HOME\.dfe-agent\dfe.db"` se voce rodou `update` com v0.1.0-v0.1.2 (onde a base foi gravada no path errado).
|
|
16
|
+
|
|
17
|
+
## 0.1.0 — 2026-08-26 (Sprint 14 MVP)
|
|
6
18
|
|
|
7
19
|
### Added
|
|
8
20
|
- Pacote npm `@wiati/dfe-agent` com agent + skill + CLI Node
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCjE"}
|
package/dist/commands/status.js
CHANGED
|
@@ -5,16 +5,12 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, statSync } from "node:fs";
|
|
7
7
|
import { resolve, dirname } from "node:path";
|
|
8
|
-
import { homedir, tmpdir } from "node:os";
|
|
9
8
|
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { resolveDbPath } from "../paths.js";
|
|
10
10
|
const PKG_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
|
|
11
11
|
import { VERSION } from "../index.js";
|
|
12
12
|
export async function status(opts) {
|
|
13
|
-
const
|
|
14
|
-
?? process.env.HOME
|
|
15
|
-
?? homedir()
|
|
16
|
-
?? tmpdir();
|
|
17
|
-
const dbPath = resolve(baseDir, "dfe.db");
|
|
13
|
+
const dbPath = resolveDbPath();
|
|
18
14
|
const info = {
|
|
19
15
|
version: VERSION,
|
|
20
16
|
packageName: "@wiati/dfe-agent",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMtC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAmB;IAC9C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,MAAM,IAAI,GAA4B;QACpC,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,MAAM;QAChB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;KAC/B,CAAC;IAEF,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACrC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB;eACpD,uCAAuC,CAAC;QAE7C,sEAAsE;QACtE,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAmB,CAAC;YACzF,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC;YAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,GAAG,EAA8B,CAAC;YACnF,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC;YACzC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,GAAI,GAAa,CAAC,OAAO,CAAC;QAC/C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,GAAG,4CAA4C,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC;OACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC5C,IAAI,eAAe,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CACb,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,CAAC,GAAG,EAAE,EAAE;QACN,OAAO,CAAC,KAAK,CAAC,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwBH,MAAM,WAAW,aAAa;IAC5B,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA+CD,wBAAsB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAqEjE"}
|
package/dist/commands/update.js
CHANGED
|
@@ -22,19 +22,13 @@ import { createHash } from "node:crypto";
|
|
|
22
22
|
import { gunzipSync } from "node:zlib";
|
|
23
23
|
import { existsSync, writeFileSync, renameSync, mkdirSync, readFileSync, } from "node:fs";
|
|
24
24
|
import { resolve, dirname } from "node:path";
|
|
25
|
-
import { tmpdir, homedir } from "node:os";
|
|
26
25
|
import { fileURLToPath } from "node:url";
|
|
26
|
+
import { resolveBaseDir, resolveDbPath } from "../paths.js";
|
|
27
27
|
const PKG_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "../..");
|
|
28
28
|
const GH_REPO = process.env.DFE_AGENT_GH_REPO ?? "wia-ti/dfe-agent";
|
|
29
29
|
const GH_API = `https://api.github.com/repos/${GH_REPO}/releases/latest`;
|
|
30
30
|
const ASSET_DB = "dfe.db.gz";
|
|
31
31
|
const ASSET_SHA = "dfe.db.gz.sha256";
|
|
32
|
-
function resolveBaseDir() {
|
|
33
|
-
return process.env.DFE_AGENT_BASE_DIR
|
|
34
|
-
?? process.env.HOME
|
|
35
|
-
?? homedir()
|
|
36
|
-
?? tmpdir();
|
|
37
|
-
}
|
|
38
32
|
async function fetchJson(url, token) {
|
|
39
33
|
const headers = {
|
|
40
34
|
"User-Agent": "dfe-agent-cli/0.1.0",
|
|
@@ -80,7 +74,7 @@ function fallbackToSeed(dbPath) {
|
|
|
80
74
|
}
|
|
81
75
|
export async function update(opts) {
|
|
82
76
|
const baseDir = opts.baseDirOverride ?? resolveBaseDir();
|
|
83
|
-
const dbPath =
|
|
77
|
+
const dbPath = resolveDbPath(opts.baseDirOverride);
|
|
84
78
|
mkdirSync(baseDir, { recursive: true });
|
|
85
79
|
// 1. fetch release metadata
|
|
86
80
|
let release;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,GACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// @
|
|
1
|
+
// @wiati/dfe-agent — entry point
|
|
2
2
|
// Documentado em PLAN_SPRINT14.md Task A.1 (Sprint 14)
|
|
3
|
-
export const VERSION = "0.1.
|
|
3
|
+
export const VERSION = "0.1.3";
|
|
4
4
|
export const PACKAGE_NAME = "@wiati/dfe-agent";
|
|
5
5
|
export { runCli } from "./cli.js";
|
|
6
6
|
export { search } from "./query/index.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,uDAAuD;AAEvD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* paths.ts — centraliza todos os resolves de paths do pacote.
|
|
3
|
+
*
|
|
4
|
+
* Sprint 15 / bug dfe-agent-runtime-path-and-cache.
|
|
5
|
+
*
|
|
6
|
+
* Ate' Sprint 14, dois bugs coexistiam porque a regra D4 do design doc
|
|
7
|
+
* ("Base no consumidor: ~/.dfe-agent/dfe.db + override DFE_AGENT_BASE_DIR")
|
|
8
|
+
* estava duplicada em 3 funcoes locais em arquivos diferentes, e cada
|
|
9
|
+
* uma implementava de um jeito:
|
|
10
|
+
*
|
|
11
|
+
* src/query/index.ts:64-68 -> CORRETO (resolve(..., ".dfe-agent"))
|
|
12
|
+
* src/commands/update.ts:47-52 -> ERRADO (esquece ".dfe-agent")
|
|
13
|
+
* src/commands/status.ts:20-24 -> ERRADO (mesmo)
|
|
14
|
+
*
|
|
15
|
+
* Sintoma: `npx dfe-agent update && npx dfe-agent query` end-to-end quebrava
|
|
16
|
+
* com "Cannot open database because the directory does not exist" porque
|
|
17
|
+
* cada comando apontava para um path diferente. CI passou porque nao ha
|
|
18
|
+
* teste E2E (apenas tests/cli/skeleton.test.ts 100% estrutural).
|
|
19
|
+
*
|
|
20
|
+
* Este arquivo e' a fonte UNICA de verdade para resolver:
|
|
21
|
+
* resolveBaseDir() -> ~/.dfe-agent (ou override)
|
|
22
|
+
* resolveDbPath() -> <baseDir>/dfe.db
|
|
23
|
+
* resolveCacheDbPath() -> <baseDir>/cache.db (Sprint 15 FIX Bug B)
|
|
24
|
+
*
|
|
25
|
+
* Bug B (cache acoplado ao handle do dfe.db readonly): QueryCache agora
|
|
26
|
+
* aceita `baseDir: string` e abre SUA PROPRIA conexao em resolveCacheDbPath().
|
|
27
|
+
* Justificativa: o dfe.db e' aberto com readonly: true em search(); query
|
|
28
|
+
* cache precisa de RW; misturar os dois = "attempt to write a readonly db".
|
|
29
|
+
*
|
|
30
|
+
* @see PLAN_SPRINT14.md D4 (decisao ~/.dfe-agent)
|
|
31
|
+
* @see AGENTS.md "Decisoes resolvidas (Sprint 14)" FOLLOW-UPS (geral;
|
|
32
|
+
* bugs A e B nao foram catalogados em v0.1.0 mas seguem o mesmo
|
|
33
|
+
* pattern de drift Py/Node documentado na Sprint 14 D.4 + D.7)
|
|
34
|
+
* @see .opencode/rag/knowledge/2026-08-26-dev-sprint14-npm-package.md:21
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Resolve o diretorio base onde o pacote persiste dados.
|
|
38
|
+
*
|
|
39
|
+
* Precedencia (gate D4):
|
|
40
|
+
* 1. `baseDirOverride` explicito (injetado por testes; UNICO caminho que
|
|
41
|
+
* bypassa env + HOME).
|
|
42
|
+
* 2. $DFE_AGENT_BASE_DIR (env var).
|
|
43
|
+
* 3. $HOME (Unix) ou $USERPROFILE (Windows) ou `os.homedir()`. Sempre
|
|
44
|
+
* resolve para `<home>/.dfe-agent`. No Windows, `os.homedir()` consulta
|
|
45
|
+
* `process.env.USERPROFILE` internamente, entao o fallback explicito a
|
|
46
|
+
* `homedir()` cobre os 2 SOs sem branch.
|
|
47
|
+
*
|
|
48
|
+
* @param baseDirOverride - path custom para testes (UNICO jeito de bypassar env).
|
|
49
|
+
* NUNCA bate em disco automaticamente: o caller decide criar.
|
|
50
|
+
*/
|
|
51
|
+
export declare function resolveBaseDir(baseDirOverride?: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Path canonico do dfe.db (base RAG principal, read-only em runtime).
|
|
54
|
+
*/
|
|
55
|
+
export declare function resolveDbPath(baseDirOverride?: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Path canonico do cache.db (query embedding cache, read-write em runtime).
|
|
58
|
+
* Separado do dfe.db por design Bug B Sprint 15: o cache NAO pode
|
|
59
|
+
* compartilhar o handle readonly de search().
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveCacheDbPath(baseDirOverride?: string): string;
|
|
62
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAKH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnE"}
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* paths.ts — centraliza todos os resolves de paths do pacote.
|
|
3
|
+
*
|
|
4
|
+
* Sprint 15 / bug dfe-agent-runtime-path-and-cache.
|
|
5
|
+
*
|
|
6
|
+
* Ate' Sprint 14, dois bugs coexistiam porque a regra D4 do design doc
|
|
7
|
+
* ("Base no consumidor: ~/.dfe-agent/dfe.db + override DFE_AGENT_BASE_DIR")
|
|
8
|
+
* estava duplicada em 3 funcoes locais em arquivos diferentes, e cada
|
|
9
|
+
* uma implementava de um jeito:
|
|
10
|
+
*
|
|
11
|
+
* src/query/index.ts:64-68 -> CORRETO (resolve(..., ".dfe-agent"))
|
|
12
|
+
* src/commands/update.ts:47-52 -> ERRADO (esquece ".dfe-agent")
|
|
13
|
+
* src/commands/status.ts:20-24 -> ERRADO (mesmo)
|
|
14
|
+
*
|
|
15
|
+
* Sintoma: `npx dfe-agent update && npx dfe-agent query` end-to-end quebrava
|
|
16
|
+
* com "Cannot open database because the directory does not exist" porque
|
|
17
|
+
* cada comando apontava para um path diferente. CI passou porque nao ha
|
|
18
|
+
* teste E2E (apenas tests/cli/skeleton.test.ts 100% estrutural).
|
|
19
|
+
*
|
|
20
|
+
* Este arquivo e' a fonte UNICA de verdade para resolver:
|
|
21
|
+
* resolveBaseDir() -> ~/.dfe-agent (ou override)
|
|
22
|
+
* resolveDbPath() -> <baseDir>/dfe.db
|
|
23
|
+
* resolveCacheDbPath() -> <baseDir>/cache.db (Sprint 15 FIX Bug B)
|
|
24
|
+
*
|
|
25
|
+
* Bug B (cache acoplado ao handle do dfe.db readonly): QueryCache agora
|
|
26
|
+
* aceita `baseDir: string` e abre SUA PROPRIA conexao em resolveCacheDbPath().
|
|
27
|
+
* Justificativa: o dfe.db e' aberto com readonly: true em search(); query
|
|
28
|
+
* cache precisa de RW; misturar os dois = "attempt to write a readonly db".
|
|
29
|
+
*
|
|
30
|
+
* @see PLAN_SPRINT14.md D4 (decisao ~/.dfe-agent)
|
|
31
|
+
* @see AGENTS.md "Decisoes resolvidas (Sprint 14)" FOLLOW-UPS (geral;
|
|
32
|
+
* bugs A e B nao foram catalogados em v0.1.0 mas seguem o mesmo
|
|
33
|
+
* pattern de drift Py/Node documentado na Sprint 14 D.4 + D.7)
|
|
34
|
+
* @see .opencode/rag/knowledge/2026-08-26-dev-sprint14-npm-package.md:21
|
|
35
|
+
*/
|
|
36
|
+
import { resolve } from "node:path";
|
|
37
|
+
import { homedir } from "node:os";
|
|
38
|
+
/**
|
|
39
|
+
* Resolve o diretorio base onde o pacote persiste dados.
|
|
40
|
+
*
|
|
41
|
+
* Precedencia (gate D4):
|
|
42
|
+
* 1. `baseDirOverride` explicito (injetado por testes; UNICO caminho que
|
|
43
|
+
* bypassa env + HOME).
|
|
44
|
+
* 2. $DFE_AGENT_BASE_DIR (env var).
|
|
45
|
+
* 3. $HOME (Unix) ou $USERPROFILE (Windows) ou `os.homedir()`. Sempre
|
|
46
|
+
* resolve para `<home>/.dfe-agent`. No Windows, `os.homedir()` consulta
|
|
47
|
+
* `process.env.USERPROFILE` internamente, entao o fallback explicito a
|
|
48
|
+
* `homedir()` cobre os 2 SOs sem branch.
|
|
49
|
+
*
|
|
50
|
+
* @param baseDirOverride - path custom para testes (UNICO jeito de bypassar env).
|
|
51
|
+
* NUNCA bate em disco automaticamente: o caller decide criar.
|
|
52
|
+
*/
|
|
53
|
+
export function resolveBaseDir(baseDirOverride) {
|
|
54
|
+
if (baseDirOverride)
|
|
55
|
+
return baseDirOverride;
|
|
56
|
+
if (process.env.DFE_AGENT_BASE_DIR)
|
|
57
|
+
return process.env.DFE_AGENT_BASE_DIR;
|
|
58
|
+
// `os.homedir()` nunca retorna string vazia (consulta USERPROFILE no Windows
|
|
59
|
+
// e passwd no Unix); caimos nele para evitar o dead-code `?? tmpdir()`.
|
|
60
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? homedir();
|
|
61
|
+
return resolve(home, ".dfe-agent");
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Path canonico do dfe.db (base RAG principal, read-only em runtime).
|
|
65
|
+
*/
|
|
66
|
+
export function resolveDbPath(baseDirOverride) {
|
|
67
|
+
return resolve(resolveBaseDir(baseDirOverride), "dfe.db");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Path canonico do cache.db (query embedding cache, read-write em runtime).
|
|
71
|
+
* Separado do dfe.db por design Bug B Sprint 15: o cache NAO pode
|
|
72
|
+
* compartilhar o handle readonly de search().
|
|
73
|
+
*/
|
|
74
|
+
export function resolveCacheDbPath(baseDirOverride) {
|
|
75
|
+
return resolve(resolveBaseDir(baseDirOverride), "cache.db");
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAAC,eAAwB;IACrD,IAAI,eAAe;QAAE,OAAO,eAAe,CAAC;IAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC1E,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,EAAE,CAAC;IACtE,OAAO,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,eAAwB;IACpD,OAAO,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,eAAwB;IACzD,OAAO,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE,UAAU,CAAC,CAAC;AAC9D,CAAC"}
|
package/dist/query/cache.d.ts
CHANGED
|
@@ -2,14 +2,24 @@
|
|
|
2
2
|
* cache.ts — cache SQLite de embeddings de query.
|
|
3
3
|
*
|
|
4
4
|
* @see PLAN_SPRINT14.md Task E.4 + Sprint 13 I13.2 (QueryEmbeddingCache)
|
|
5
|
+
* @see Sprint 15 BUG-B: desacoplamento do handle do dfe.db (readonly).
|
|
5
6
|
*
|
|
6
|
-
* Persiste em `<baseDir>/cache.db
|
|
7
|
+
* Persiste em `<baseDir>/cache.db` (canonico via `resolveCacheDbPath` em
|
|
8
|
+
* `paths.ts`). Chave = sha256(model|mode|q_normalized).
|
|
7
9
|
*
|
|
8
|
-
*
|
|
10
|
+
* Ate' Sprint 14, QueryCache aceitava `handle` no construtor e escrevia
|
|
11
|
+
* `CREATE TABLE IF NOT EXISTS` no mesmo handle aberto em `readonly: true`
|
|
12
|
+
* por `query/index.ts`. Isso quebrava toda busca semantica/hibrida com
|
|
13
|
+
* "attempt to write a readonly database" (SQLITE_READONLY).
|
|
14
|
+
*
|
|
15
|
+
* Fix Sprint 15: construtor agora recebe `baseDir: string` e abre SUA
|
|
16
|
+
* PROPRIA conexao (read-write) em `<baseDir>/cache.db`, isolada do
|
|
17
|
+
* dfe.db. `query/index.ts` passa `resolveBaseDir(opts.baseDirOverride)`.
|
|
18
|
+
*
|
|
19
|
+
* HIT na 2a chamada identica (mesmo modelo + mesmo mode + mesma query
|
|
9
20
|
* normalizada) NAO invoca o embedder. Gate Sprint 13 + canonico em
|
|
10
|
-
* src/query/embedding_cache.py.
|
|
21
|
+
* src/query/embedding_cache.py do DFe-Agent root.
|
|
11
22
|
*/
|
|
12
|
-
import type { Database as BetterSqlite3Database } from "better-sqlite3";
|
|
13
23
|
export declare const QUERY_CACHE_SCHEMA = "\n CREATE TABLE IF NOT EXISTS query_cache (\n query_hash TEXT PRIMARY KEY,\n embedding BLOB NOT NULL,\n model TEXT NOT NULL,\n mode TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT (datetime('now'))\n )\n";
|
|
14
24
|
export interface QueryCacheOptions {
|
|
15
25
|
model?: string;
|
|
@@ -17,7 +27,13 @@ export interface QueryCacheOptions {
|
|
|
17
27
|
export declare class QueryCache {
|
|
18
28
|
private readonly model;
|
|
19
29
|
private readonly handle;
|
|
20
|
-
|
|
30
|
+
private readonly dbPath;
|
|
31
|
+
/**
|
|
32
|
+
* @param baseDir diretorio base (canonico vem de `paths.ts::resolveBaseDir`).
|
|
33
|
+
* O cache sera persistido em `<baseDir>/cache.db` (RW).
|
|
34
|
+
* @param opts opções (so `model` por enquanto; cai no env ou no default).
|
|
35
|
+
*/
|
|
36
|
+
constructor(baseDir: string, opts?: QueryCacheOptions);
|
|
21
37
|
/**
|
|
22
38
|
* Busca embedding em cache. Retorna null em miss.
|
|
23
39
|
*/
|
|
@@ -30,6 +46,12 @@ export declare class QueryCache {
|
|
|
30
46
|
* Limpa cache (util apos troca de modelo).
|
|
31
47
|
*/
|
|
32
48
|
clear(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Fecha a conexao SQLite propria. Idempotente. Recomendado chamar no
|
|
51
|
+
* teardown de testes/scripts para evitar o crash de cleanup do
|
|
52
|
+
* better-sqlite3 nativo em Node 22/24 (`RemoveEnvironmentCleanupHook`).
|
|
53
|
+
*/
|
|
54
|
+
close(): void;
|
|
33
55
|
/**
|
|
34
56
|
* Estatisticas: numero de entradas.
|
|
35
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/query/cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/query/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,eAAO,MAAM,kBAAkB,yPAQ9B,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAYD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB;IAczD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAUxD;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,GAAG,IAAI;IAWlE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,MAAM;CAMf"}
|
package/dist/query/cache.js
CHANGED
|
@@ -2,14 +2,29 @@
|
|
|
2
2
|
* cache.ts — cache SQLite de embeddings de query.
|
|
3
3
|
*
|
|
4
4
|
* @see PLAN_SPRINT14.md Task E.4 + Sprint 13 I13.2 (QueryEmbeddingCache)
|
|
5
|
+
* @see Sprint 15 BUG-B: desacoplamento do handle do dfe.db (readonly).
|
|
5
6
|
*
|
|
6
|
-
* Persiste em `<baseDir>/cache.db
|
|
7
|
+
* Persiste em `<baseDir>/cache.db` (canonico via `resolveCacheDbPath` em
|
|
8
|
+
* `paths.ts`). Chave = sha256(model|mode|q_normalized).
|
|
7
9
|
*
|
|
8
|
-
*
|
|
10
|
+
* Ate' Sprint 14, QueryCache aceitava `handle` no construtor e escrevia
|
|
11
|
+
* `CREATE TABLE IF NOT EXISTS` no mesmo handle aberto em `readonly: true`
|
|
12
|
+
* por `query/index.ts`. Isso quebrava toda busca semantica/hibrida com
|
|
13
|
+
* "attempt to write a readonly database" (SQLITE_READONLY).
|
|
14
|
+
*
|
|
15
|
+
* Fix Sprint 15: construtor agora recebe `baseDir: string` e abre SUA
|
|
16
|
+
* PROPRIA conexao (read-write) em `<baseDir>/cache.db`, isolada do
|
|
17
|
+
* dfe.db. `query/index.ts` passa `resolveBaseDir(opts.baseDirOverride)`.
|
|
18
|
+
*
|
|
19
|
+
* HIT na 2a chamada identica (mesmo modelo + mesmo mode + mesma query
|
|
9
20
|
* normalizada) NAO invoca o embedder. Gate Sprint 13 + canonico em
|
|
10
|
-
* src/query/embedding_cache.py.
|
|
21
|
+
* src/query/embedding_cache.py do DFe-Agent root.
|
|
11
22
|
*/
|
|
12
23
|
import { createHash } from "node:crypto";
|
|
24
|
+
import { mkdirSync } from "node:fs";
|
|
25
|
+
import { dirname } from "node:path";
|
|
26
|
+
import Database from "better-sqlite3";
|
|
27
|
+
import { resolveCacheDbPath } from "../paths.js";
|
|
13
28
|
export const QUERY_CACHE_SCHEMA = `
|
|
14
29
|
CREATE TABLE IF NOT EXISTS query_cache (
|
|
15
30
|
query_hash TEXT PRIMARY KEY,
|
|
@@ -30,12 +45,24 @@ function hashKey(model, mode, q) {
|
|
|
30
45
|
export class QueryCache {
|
|
31
46
|
model;
|
|
32
47
|
handle;
|
|
33
|
-
|
|
34
|
-
|
|
48
|
+
dbPath;
|
|
49
|
+
/**
|
|
50
|
+
* @param baseDir diretorio base (canonico vem de `paths.ts::resolveBaseDir`).
|
|
51
|
+
* O cache sera persistido em `<baseDir>/cache.db` (RW).
|
|
52
|
+
* @param opts opções (so `model` por enquanto; cai no env ou no default).
|
|
53
|
+
*/
|
|
54
|
+
constructor(baseDir, opts = {}) {
|
|
35
55
|
this.model = opts.model
|
|
36
56
|
?? process.env.DFE_EMBEDDING_MODEL
|
|
37
57
|
?? "paraphrase-multilingual-MiniLM-L12-v2";
|
|
38
|
-
|
|
58
|
+
this.dbPath = resolveCacheDbPath(baseDir);
|
|
59
|
+
// Garante que a pasta existe; better-sqlite3 falha se o path pai nao
|
|
60
|
+
// existe quando o arquivo ainda nao foi criado.
|
|
61
|
+
mkdirSync(dirname(this.dbPath), { recursive: true });
|
|
62
|
+
// Conexao PROPRIA read-write, isolada do dfe.db (que pode estar readonly
|
|
63
|
+
// durante `search()`). Cache NAO compartilha handle com a base principal.
|
|
64
|
+
this.handle = new Database(this.dbPath);
|
|
65
|
+
this.handle.exec(QUERY_CACHE_SCHEMA);
|
|
39
66
|
}
|
|
40
67
|
/**
|
|
41
68
|
* Busca embedding em cache. Retorna null em miss.
|
|
@@ -67,6 +94,16 @@ export class QueryCache {
|
|
|
67
94
|
clear() {
|
|
68
95
|
this.handle.exec("DELETE FROM query_cache");
|
|
69
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Fecha a conexao SQLite propria. Idempotente. Recomendado chamar no
|
|
99
|
+
* teardown de testes/scripts para evitar o crash de cleanup do
|
|
100
|
+
* better-sqlite3 nativo em Node 22/24 (`RemoveEnvironmentCleanupHook`).
|
|
101
|
+
*/
|
|
102
|
+
close() {
|
|
103
|
+
if (this.handle.open) {
|
|
104
|
+
this.handle.close();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
70
107
|
/**
|
|
71
108
|
* Estatisticas: numero de entradas.
|
|
72
109
|
*/
|
package/dist/query/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/query/cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/query/cache.ts"],"names":[],"mappings":"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"}
|
package/dist/query/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
import { EMBEDDING_MODEL_NAME } from "./embedder.js";
|
|
17
17
|
import { hasSufficientEvidence } from "./contextBuilder.js";
|
|
18
18
|
import { NO_EVIDENCE_MESSAGE, SUPPORTED_MODES, DEFAULT_TOP_K, MIN_RELEVANCE_SCORE, type SearchMode } from "./constants.js";
|
|
19
|
+
export { resolveBaseDir } from "../paths.js";
|
|
19
20
|
export { NO_EVIDENCE_MESSAGE, SUPPORTED_MODES, DEFAULT_TOP_K };
|
|
20
21
|
export type { SearchMode };
|
|
21
22
|
export interface Source {
|
|
@@ -32,10 +33,6 @@ export interface SearchOptions {
|
|
|
32
33
|
topK?: number;
|
|
33
34
|
baseDirOverride?: string;
|
|
34
35
|
}
|
|
35
|
-
/**
|
|
36
|
-
* Resolve path da base RAG. Default: $DFE_AGENT_BASE_DIR ou ~/.dfe-agent.
|
|
37
|
-
*/
|
|
38
|
-
export declare function resolveBaseDir(override?: string): string;
|
|
39
36
|
/**
|
|
40
37
|
* Busca principal. Retorna {answer, sources[]} no contrato canonico.
|
|
41
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAU,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAK7D,OAAO,EAEL,qBAAqB,EAEtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,mBAAmB,EAGnB,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAyED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,YAAY,CAAC,CAqEvB;AAED,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/query/index.js
CHANGED
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
* NUNCA duplique este literal.
|
|
15
15
|
*/
|
|
16
16
|
import Database from "better-sqlite3";
|
|
17
|
-
import {
|
|
18
|
-
import { resolve } from "node:path";
|
|
17
|
+
import { resolveBaseDir, resolveDbPath } from "../paths.js";
|
|
19
18
|
import { encode, EMBEDDING_MODEL_NAME } from "./embedder.js";
|
|
20
19
|
import { vectorSearch } from "./vectorSearch.js";
|
|
21
20
|
import { ftsSearch } from "./ftsSearch.js";
|
|
@@ -23,15 +22,11 @@ import { rrf } from "./hybrid.js";
|
|
|
23
22
|
import { QueryCache } from "./cache.js";
|
|
24
23
|
import { buildContext, hasSufficientEvidence, } from "./contextBuilder.js";
|
|
25
24
|
import { NO_EVIDENCE_MESSAGE, SUPPORTED_MODES, DEFAULT_TOP_K, MIN_RELEVANCE_SCORE, RECENCY_WEIGHT, RECENCY_HALF_LIFE_DAYS, } from "./constants.js";
|
|
25
|
+
// Re-exports para manter compat: callers antigos podem importar
|
|
26
|
+
// `resolveBaseDir` de `query/index.ts` como antes. A fonte unica da
|
|
27
|
+
// verdade eh `paths.ts` (gate Sprint 15 BUG-A).
|
|
28
|
+
export { resolveBaseDir } from "../paths.js";
|
|
26
29
|
export { NO_EVIDENCE_MESSAGE, SUPPORTED_MODES, DEFAULT_TOP_K };
|
|
27
|
-
/**
|
|
28
|
-
* Resolve path da base RAG. Default: $DFE_AGENT_BASE_DIR ou ~/.dfe-agent.
|
|
29
|
-
*/
|
|
30
|
-
export function resolveBaseDir(override) {
|
|
31
|
-
return override
|
|
32
|
-
?? process.env.DFE_AGENT_BASE_DIR
|
|
33
|
-
?? resolve(process.env.HOME ?? homedir() ?? tmpdir(), ".dfe-agent");
|
|
34
|
-
}
|
|
35
30
|
/**
|
|
36
31
|
* Recency boost (gate paridade com Py `src/query/query_engine.py:34-36`).
|
|
37
32
|
*
|
|
@@ -96,11 +91,13 @@ export async function search(question, opts = {}) {
|
|
|
96
91
|
if (!question.trim()) {
|
|
97
92
|
return { answer: NO_EVIDENCE_MESSAGE, sources: [] };
|
|
98
93
|
}
|
|
99
|
-
const dbPath =
|
|
94
|
+
const dbPath = resolveDbPath(opts.baseDirOverride);
|
|
100
95
|
const handle = new Database(dbPath, { readonly: true });
|
|
101
96
|
try {
|
|
102
97
|
// 1. Cache check
|
|
103
|
-
|
|
98
|
+
// Bug B Sprint 15: cache abre SUA PROPRIA conexao em <baseDir>/cache.db
|
|
99
|
+
// (read-write), isolada do dfe.db (read-only).
|
|
100
|
+
const cache = new QueryCache(resolveBaseDir(opts.baseDirOverride));
|
|
104
101
|
let queryVec = null;
|
|
105
102
|
if (mode !== "fts") {
|
|
106
103
|
queryVec = cache.get(mode, question);
|
package/dist/query/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wiati/dfe-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Agente opencode + base RAG com documentacao fiscal eletronica oficial brasileira (NF-e, NFC-e, CT-e, MDF-e, SPED) distribuido como pacote npm.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"scripts": {
|
|
20
20
|
"build": "tsc",
|
|
21
21
|
"pretest": "npm run build",
|
|
22
|
-
"test": "tsx --test tests/scaffold.test.ts tests/sync-assets.test.ts tests/drift-check.test.ts tests/cli/skeleton.test.ts tests/query/embedder.test.ts tests/query/ftsSearch.test.ts tests/query/hybrid.test.ts tests/query/cache.test.ts tests/query/orchestrator.test.ts tests/integration/test_embedding_parity.test.ts",
|
|
22
|
+
"test": "tsx --test tests/scaffold.test.ts tests/sync-assets.test.ts tests/drift-check.test.ts tests/cli/skeleton.test.ts tests/query/embedder.test.ts tests/query/ftsSearch.test.ts tests/query/hybrid.test.ts tests/query/cache.test.ts tests/query/orchestrator.test.ts tests/query/paths.test.ts tests/integration/test_embedding_parity.test.ts",
|
|
23
23
|
"test:e2e": "powershell -ExecutionPolicy Bypass -File tests/e2e/smoke-test.ps1",
|
|
24
24
|
"lint": "tsc --noEmit",
|
|
25
25
|
"sync": "tsx scripts/sync-assets.ts",
|