@duckcodeailabs/dql-agent 1.6.33 → 1.7.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/dist/agent-run-engine.d.ts +39 -8
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +169 -10
- package/dist/agent-run-engine.js.map +1 -1
- package/dist/agent-run-gates.d.ts.map +1 -1
- package/dist/agent-run-gates.js +21 -3
- package/dist/agent-run-gates.js.map +1 -1
- package/dist/agent-run-planner.d.ts.map +1 -1
- package/dist/agent-run-planner.js +14 -3
- package/dist/agent-run-planner.js.map +1 -1
- package/dist/agentic/answer-contract.d.ts +37 -0
- package/dist/agentic/answer-contract.d.ts.map +1 -0
- package/dist/agentic/answer-contract.js +47 -0
- package/dist/agentic/answer-contract.js.map +1 -0
- package/dist/agentic/tool-loop.d.ts +48 -0
- package/dist/agentic/tool-loop.d.ts.map +1 -0
- package/dist/agentic/tool-loop.js +181 -0
- package/dist/agentic/tool-loop.js.map +1 -0
- package/dist/agentic/toolset.d.ts +40 -0
- package/dist/agentic/toolset.d.ts.map +1 -0
- package/dist/agentic/toolset.js +265 -0
- package/dist/agentic/toolset.js.map +1 -0
- package/dist/answer-loop.d.ts +82 -6
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +799 -112
- package/dist/answer-loop.js.map +1 -1
- package/dist/app-builder.d.ts.map +1 -1
- package/dist/app-builder.js +18 -10
- package/dist/app-builder.js.map +1 -1
- package/dist/cascade/budgets.d.ts +20 -2
- package/dist/cascade/budgets.d.ts.map +1 -1
- package/dist/cascade/budgets.js +83 -45
- package/dist/cascade/budgets.js.map +1 -1
- package/dist/cascade/route-policy.d.ts +1 -1
- package/dist/cascade/route-policy.d.ts.map +1 -1
- package/dist/cascade/route-policy.js +6 -0
- package/dist/cascade/route-policy.js.map +1 -1
- package/dist/domain-context.d.ts +30 -0
- package/dist/domain-context.d.ts.map +1 -0
- package/dist/domain-context.js +68 -0
- package/dist/domain-context.js.map +1 -0
- package/dist/embeddings/provider.d.ts +67 -4
- package/dist/embeddings/provider.d.ts.map +1 -1
- package/dist/embeddings/provider.js +167 -6
- package/dist/embeddings/provider.js.map +1 -1
- package/dist/hints/correction-eval.d.ts +30 -0
- package/dist/hints/correction-eval.d.ts.map +1 -0
- package/dist/hints/correction-eval.js +63 -0
- package/dist/hints/correction-eval.js.map +1 -0
- package/dist/hints/git-store.d.ts +39 -3
- package/dist/hints/git-store.d.ts.map +1 -1
- package/dist/hints/git-store.js +172 -2
- package/dist/hints/git-store.js.map +1 -1
- package/dist/hints/staleness.d.ts +30 -0
- package/dist/hints/staleness.d.ts.map +1 -0
- package/dist/hints/staleness.js +38 -0
- package/dist/hints/staleness.js.map +1 -0
- package/dist/hints/store.d.ts.map +1 -1
- package/dist/hints/store.js +3 -32
- package/dist/hints/store.js.map +1 -1
- package/dist/hints/types.d.ts +41 -0
- package/dist/hints/types.d.ts.map +1 -1
- package/dist/hints/types.js +1 -0
- package/dist/hints/types.js.map +1 -1
- package/dist/index.d.ts +46 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +180 -9
- package/dist/index.js.map +1 -1
- package/dist/intent-controller.d.ts.map +1 -1
- package/dist/intent-controller.js +15 -3
- package/dist/intent-controller.js.map +1 -1
- package/dist/kg/build.d.ts.map +1 -1
- package/dist/kg/build.js +196 -4
- package/dist/kg/build.js.map +1 -1
- package/dist/kg/sqlite-fts.d.ts +13 -0
- package/dist/kg/sqlite-fts.d.ts.map +1 -1
- package/dist/kg/sqlite-fts.js +82 -49
- package/dist/kg/sqlite-fts.js.map +1 -1
- package/dist/kg/types.d.ts +9 -2
- package/dist/kg/types.d.ts.map +1 -1
- package/dist/memory/fts-query.d.ts +37 -4
- package/dist/memory/fts-query.d.ts.map +1 -1
- package/dist/memory/fts-query.js +53 -12
- package/dist/memory/fts-query.js.map +1 -1
- package/dist/metadata/analysis-planner.d.ts.map +1 -1
- package/dist/metadata/analysis-planner.js +179 -28
- package/dist/metadata/analysis-planner.js.map +1 -1
- package/dist/metadata/analytical-policy.d.ts +51 -0
- package/dist/metadata/analytical-policy.d.ts.map +1 -0
- package/dist/metadata/analytical-policy.js +309 -0
- package/dist/metadata/analytical-policy.js.map +1 -0
- package/dist/metadata/block-adapt.d.ts +37 -0
- package/dist/metadata/block-adapt.d.ts.map +1 -0
- package/dist/metadata/block-adapt.js +89 -0
- package/dist/metadata/block-adapt.js.map +1 -0
- package/dist/metadata/block-fit.js +37 -4
- package/dist/metadata/block-fit.js.map +1 -1
- package/dist/metadata/catalog.d.ts +85 -1
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +674 -92
- package/dist/metadata/catalog.js.map +1 -1
- package/dist/metadata/dbt-first-safety.d.ts +19 -0
- package/dist/metadata/dbt-first-safety.d.ts.map +1 -0
- package/dist/metadata/dbt-first-safety.js +17 -0
- package/dist/metadata/dbt-first-safety.js.map +1 -0
- package/dist/metadata/example-match.d.ts +30 -0
- package/dist/metadata/example-match.d.ts.map +1 -0
- package/dist/metadata/example-match.js +69 -0
- package/dist/metadata/example-match.js.map +1 -0
- package/dist/metadata/grain-ledger.d.ts +51 -0
- package/dist/metadata/grain-ledger.d.ts.map +1 -0
- package/dist/metadata/grain-ledger.js +174 -0
- package/dist/metadata/grain-ledger.js.map +1 -0
- package/dist/metadata/metric-match.d.ts +21 -1
- package/dist/metadata/metric-match.d.ts.map +1 -1
- package/dist/metadata/metric-match.js +157 -21
- package/dist/metadata/metric-match.js.map +1 -1
- package/dist/metadata/sql-context-validation.d.ts.map +1 -1
- package/dist/metadata/sql-context-validation.js +42 -2
- package/dist/metadata/sql-context-validation.js.map +1 -1
- package/dist/metadata/sql-grounding.d.ts +4 -2
- package/dist/metadata/sql-grounding.d.ts.map +1 -1
- package/dist/metadata/sql-grounding.js +29 -4
- package/dist/metadata/sql-grounding.js.map +1 -1
- package/dist/metadata/sql-retrieval.d.ts +5 -2
- package/dist/metadata/sql-retrieval.d.ts.map +1 -1
- package/dist/metadata/sql-retrieval.js +28 -6
- package/dist/metadata/sql-retrieval.js.map +1 -1
- package/dist/propose/build-from-prompt.d.ts +34 -0
- package/dist/propose/build-from-prompt.d.ts.map +1 -1
- package/dist/propose/build-from-prompt.js +205 -19
- package/dist/propose/build-from-prompt.js.map +1 -1
- package/dist/propose/failure-analysis.d.ts +48 -0
- package/dist/propose/failure-analysis.d.ts.map +1 -0
- package/dist/propose/failure-analysis.js +71 -0
- package/dist/propose/failure-analysis.js.map +1 -0
- package/dist/propose/join-mining.d.ts +18 -0
- package/dist/propose/join-mining.d.ts.map +1 -0
- package/dist/propose/join-mining.js +74 -0
- package/dist/propose/join-mining.js.map +1 -0
- package/dist/providers/claude.d.ts.map +1 -1
- package/dist/providers/claude.js +36 -1
- package/dist/providers/claude.js.map +1 -1
- package/dist/providers/index.d.ts +2 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +34 -1
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/reasoning-effort.d.ts +27 -0
- package/dist/providers/reasoning-effort.d.ts.map +1 -1
- package/dist/providers/reasoning-effort.js +32 -0
- package/dist/providers/reasoning-effort.js.map +1 -1
- package/dist/providers/types.d.ts +2 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/research-loop.d.ts.map +1 -1
- package/dist/research-loop.js +9 -2
- package/dist/research-loop.js.map +1 -1
- package/dist/semantic-bridge/compose.d.ts.map +1 -1
- package/dist/semantic-bridge/compose.js +316 -25
- package/dist/semantic-bridge/compose.js.map +1 -1
- package/dist/skills/bootstrap.d.ts +57 -0
- package/dist/skills/bootstrap.d.ts.map +1 -0
- package/dist/skills/bootstrap.js +260 -0
- package/dist/skills/bootstrap.js.map +1 -0
- package/dist/skills/defaults.d.ts +2 -2
- package/dist/skills/defaults.js +2 -2
- package/dist/skills/domain-skills.d.ts +24 -0
- package/dist/skills/domain-skills.d.ts.map +1 -0
- package/dist/skills/domain-skills.js +76 -0
- package/dist/skills/domain-skills.js.map +1 -0
- package/dist/skills/loader.d.ts +56 -8
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +257 -41
- package/dist/skills/loader.js.map +1 -1
- package/dist/synthesize.d.ts.map +1 -1
- package/dist/synthesize.js +152 -16
- package/dist/synthesize.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +54 -12
- package/dist/tools/registry.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Corrections become regression eval cases (W4.3).
|
|
3
|
+
*
|
|
4
|
+
* When an analyst corrects an answer, we already capture a scoped hint. This also
|
|
5
|
+
* distills the correction into an agent-eval case so the wrong answer can never
|
|
6
|
+
* silently return: the case asserts a future answer to the same question references
|
|
7
|
+
* the same relations the human's corrected SQL used. Cases accumulate in the
|
|
8
|
+
* project's `agent-evals/corrections.agent-evals.yml`, which `dql agent eval` reads.
|
|
9
|
+
* This is the Anthropic pattern — a stakeholder correction turns into a durable test.
|
|
10
|
+
*/
|
|
11
|
+
import { analyzeSqlReferences } from '@duckcodeailabs/dql-core';
|
|
12
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
13
|
+
import { dirname, join } from 'node:path';
|
|
14
|
+
import yaml from 'js-yaml';
|
|
15
|
+
export const CORRECTIONS_EVAL_RELATIVE_PATH = 'agent-evals/corrections.agent-evals.yml';
|
|
16
|
+
/**
|
|
17
|
+
* Build a regression eval case from a correction: the answer to this question
|
|
18
|
+
* should reference the same relations the corrected SQL used. Falls back to a
|
|
19
|
+
* question-only case (no assertion) when the SQL has no parseable relations.
|
|
20
|
+
*/
|
|
21
|
+
export function buildCorrectionEvalCase(input) {
|
|
22
|
+
const analysis = analyzeSqlReferences(input.correctedSql);
|
|
23
|
+
const relations = [...new Set(analysis.tables.map((table) => table.split('.').at(-1) ?? table))]
|
|
24
|
+
.filter(Boolean)
|
|
25
|
+
.slice(0, 5);
|
|
26
|
+
return {
|
|
27
|
+
name: input.name ?? `correction: ${input.question.slice(0, 60)}`,
|
|
28
|
+
question: input.question,
|
|
29
|
+
expected: relations.length > 0 ? { sqlContains: relations } : {},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Append a correction eval case to the project's corrections file (creating it if
|
|
34
|
+
* absent), deduped by question (latest correction wins). Best-effort; returns the path.
|
|
35
|
+
*/
|
|
36
|
+
export function appendCorrectionEvalCase(projectRoot, evalCase) {
|
|
37
|
+
const path = join(projectRoot, CORRECTIONS_EVAL_RELATIVE_PATH);
|
|
38
|
+
const cases = [];
|
|
39
|
+
if (existsSync(path)) {
|
|
40
|
+
try {
|
|
41
|
+
const parsed = yaml.load(readFileSync(path, 'utf8'));
|
|
42
|
+
if (parsed && Array.isArray(parsed.cases))
|
|
43
|
+
cases.push(...parsed.cases);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Corrupt file → start fresh rather than lose the new case.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const normalized = evalCase.question.trim().toLowerCase();
|
|
50
|
+
const deduped = cases.filter((existing) => existing.question.trim().toLowerCase() !== normalized);
|
|
51
|
+
deduped.push(evalCase);
|
|
52
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
53
|
+
const header = '# Auto-generated regression eval cases from human corrections (W4.3).\n'
|
|
54
|
+
+ '# Each case asserts a future answer references the relations the correction used.\n'
|
|
55
|
+
+ '# Run: dql agent eval agent-evals/corrections.agent-evals.yml --execute\n';
|
|
56
|
+
writeFileSync(path, header + yaml.dump({ cases: deduped }, { lineWidth: 120 }));
|
|
57
|
+
return path;
|
|
58
|
+
}
|
|
59
|
+
/** Build + append a correction eval case in one call. */
|
|
60
|
+
export function emitCorrectionEvalCase(projectRoot, input) {
|
|
61
|
+
return appendCorrectionEvalCase(projectRoot, buildCorrectionEvalCase(input));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=correction-eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correction-eval.js","sourceRoot":"","sources":["../../src/hints/correction-eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,19 +4,22 @@
|
|
|
4
4
|
* Files (the source of truth, consistent with DQL):
|
|
5
5
|
* - `.dql/traces/<id>.trace.json` — correction traces
|
|
6
6
|
* - `.dql/hints/<id>.hint.yaml` — candidate / approved / rejected hints
|
|
7
|
+
* - `.dql/evaluations/<id>.hint-evaluation.yaml` — required evaluation results
|
|
7
8
|
* - `.dql/reviews/<id>.review.yaml` — human review decisions
|
|
8
9
|
*
|
|
9
10
|
* `.dql/cache/agent-kg.sqlite` is a rebuildable index (see {@link HintStore}).
|
|
10
11
|
*
|
|
11
12
|
* The lifecycle:
|
|
12
13
|
* recordCorrectionTrace() → derives a `candidate` hint
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* evaluateHint() → writes a passed/failed Git evaluation against the trace snapshot
|
|
15
|
+
* reviewHint('approved') → requires a passing evaluation in dbt-first v3,
|
|
16
|
+
* flips status, writes the review, and reindexes SQLite
|
|
15
17
|
* Approved-only is enforced at retrieval; nothing here auto-applies a hint.
|
|
16
18
|
*/
|
|
17
|
-
import type { CorrectionTrace, Hint, HintReview, HintScope } from './types.js';
|
|
19
|
+
import type { CorrectionTrace, Hint, HintEvaluation, HintEvaluationCheck, HintReview, HintScope } from './types.js';
|
|
18
20
|
export declare function tracesDir(projectRoot: string): string;
|
|
19
21
|
export declare function hintsDir(projectRoot: string): string;
|
|
22
|
+
export declare function evaluationsDir(projectRoot: string): string;
|
|
20
23
|
export declare function reviewsDir(projectRoot: string): string;
|
|
21
24
|
export declare function defaultHintIndexPath(projectRoot: string): string;
|
|
22
25
|
export interface RecordCorrectionTraceInput {
|
|
@@ -27,6 +30,14 @@ export interface RecordCorrectionTraceInput {
|
|
|
27
30
|
rationale?: string;
|
|
28
31
|
author?: string;
|
|
29
32
|
anchorObjectKey?: string;
|
|
33
|
+
/** Failed governed route/tool path. Required by dbt-first manifest v3. */
|
|
34
|
+
failedRoute?: string;
|
|
35
|
+
/** Reviewable evidence supporting the proposed correction. Required by v3. */
|
|
36
|
+
evidence?: string[];
|
|
37
|
+
/** Immutable project snapshot for this correction. Required by v3. */
|
|
38
|
+
snapshotId?: string;
|
|
39
|
+
/** Stable evaluation name that must pass before approval. Required by v3. */
|
|
40
|
+
requiredEvaluation?: string;
|
|
30
41
|
/** Override the derived candidate hint's title. */
|
|
31
42
|
hintTitle?: string;
|
|
32
43
|
/** Override the derived candidate hint's guidance (defaults to the correction). */
|
|
@@ -48,11 +59,36 @@ export declare function writeHintFile(projectRoot: string, hint: Hint): void;
|
|
|
48
59
|
export declare function readHintFile(path: string, sourcePath?: string): Hint | null;
|
|
49
60
|
export declare function listHintsFromGit(projectRoot: string): Hint[];
|
|
50
61
|
export declare function getHintFromGit(projectRoot: string, hintId: string): Hint | null;
|
|
62
|
+
export declare class HintLifecycleError extends Error {
|
|
63
|
+
readonly code: string;
|
|
64
|
+
constructor(code: string, message: string);
|
|
65
|
+
}
|
|
66
|
+
export interface EvaluateHintInput {
|
|
67
|
+
hintId: string;
|
|
68
|
+
snapshotId: string;
|
|
69
|
+
evaluation: string;
|
|
70
|
+
evaluator: string;
|
|
71
|
+
checks: HintEvaluationCheck[];
|
|
72
|
+
evidence: string[];
|
|
73
|
+
note?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface EvaluateHintResult {
|
|
76
|
+
hint: Hint;
|
|
77
|
+
evaluation: HintEvaluation;
|
|
78
|
+
}
|
|
79
|
+
export declare function hintEvaluationFilePath(projectRoot: string, evaluationId: string): string;
|
|
80
|
+
/** Record a deterministic required evaluation. Overall status is derived from every check. */
|
|
81
|
+
export declare function evaluateHint(projectRoot: string, input: EvaluateHintInput): EvaluateHintResult;
|
|
82
|
+
export declare function readHintEvaluationFile(path: string): HintEvaluation | null;
|
|
83
|
+
export declare function getHintEvaluationFromGit(projectRoot: string, evaluationId: string): HintEvaluation | null;
|
|
84
|
+
export declare function listHintEvaluationsFromGit(projectRoot: string, hintId?: string): HintEvaluation[];
|
|
51
85
|
export interface ReviewHintInput {
|
|
52
86
|
hintId: string;
|
|
53
87
|
decision: 'approved' | 'rejected';
|
|
54
88
|
reviewer: string;
|
|
55
89
|
note?: string;
|
|
90
|
+
/** Current immutable project snapshot. Required for v3 approval. */
|
|
91
|
+
snapshotId?: string;
|
|
56
92
|
}
|
|
57
93
|
export interface ReviewHintResult {
|
|
58
94
|
hint: Hint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-store.d.ts","sourceRoot":"","sources":["../../src/hints/git-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"git-store.d.ts","sourceRoot":"","sources":["../../src/hints/git-store.ts"],"names":[],"mappings":"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"}
|
package/dist/hints/git-store.js
CHANGED
|
@@ -4,22 +4,26 @@
|
|
|
4
4
|
* Files (the source of truth, consistent with DQL):
|
|
5
5
|
* - `.dql/traces/<id>.trace.json` — correction traces
|
|
6
6
|
* - `.dql/hints/<id>.hint.yaml` — candidate / approved / rejected hints
|
|
7
|
+
* - `.dql/evaluations/<id>.hint-evaluation.yaml` — required evaluation results
|
|
7
8
|
* - `.dql/reviews/<id>.review.yaml` — human review decisions
|
|
8
9
|
*
|
|
9
10
|
* `.dql/cache/agent-kg.sqlite` is a rebuildable index (see {@link HintStore}).
|
|
10
11
|
*
|
|
11
12
|
* The lifecycle:
|
|
12
13
|
* recordCorrectionTrace() → derives a `candidate` hint
|
|
13
|
-
*
|
|
14
|
-
*
|
|
14
|
+
* evaluateHint() → writes a passed/failed Git evaluation against the trace snapshot
|
|
15
|
+
* reviewHint('approved') → requires a passing evaluation in dbt-first v3,
|
|
16
|
+
* flips status, writes the review, and reindexes SQLite
|
|
15
17
|
* Approved-only is enforced at retrieval; nothing here auto-applies a hint.
|
|
16
18
|
*/
|
|
17
19
|
import { join } from 'node:path';
|
|
18
20
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync, } from 'node:fs';
|
|
19
21
|
import * as yaml from 'js-yaml';
|
|
22
|
+
import { loadProjectConfig } from '@duckcodeailabs/dql-core';
|
|
20
23
|
import { HintStore } from './store.js';
|
|
21
24
|
const TRACES_DIR = ['.dql', 'traces'];
|
|
22
25
|
const HINTS_DIR = ['.dql', 'hints'];
|
|
26
|
+
const EVALUATIONS_DIR = ['.dql', 'evaluations'];
|
|
23
27
|
const REVIEWS_DIR = ['.dql', 'reviews'];
|
|
24
28
|
export function tracesDir(projectRoot) {
|
|
25
29
|
return join(projectRoot, ...TRACES_DIR);
|
|
@@ -27,6 +31,9 @@ export function tracesDir(projectRoot) {
|
|
|
27
31
|
export function hintsDir(projectRoot) {
|
|
28
32
|
return join(projectRoot, ...HINTS_DIR);
|
|
29
33
|
}
|
|
34
|
+
export function evaluationsDir(projectRoot) {
|
|
35
|
+
return join(projectRoot, ...EVALUATIONS_DIR);
|
|
36
|
+
}
|
|
30
37
|
export function reviewsDir(projectRoot) {
|
|
31
38
|
return join(projectRoot, ...REVIEWS_DIR);
|
|
32
39
|
}
|
|
@@ -44,6 +51,17 @@ function nowIso() {
|
|
|
44
51
|
* The hint is NOT usable until reviewed/approved.
|
|
45
52
|
*/
|
|
46
53
|
export function recordCorrectionTrace(projectRoot, input) {
|
|
54
|
+
if (requiresEvaluatedApproval(projectRoot)) {
|
|
55
|
+
const missing = [
|
|
56
|
+
!strOrUndef(input.failedRoute) ? 'failedRoute' : undefined,
|
|
57
|
+
cleanStringList(input.evidence).length === 0 ? 'evidence' : undefined,
|
|
58
|
+
!strOrUndef(input.snapshotId) ? 'snapshotId' : undefined,
|
|
59
|
+
!strOrUndef(input.requiredEvaluation) ? 'requiredEvaluation' : undefined,
|
|
60
|
+
].filter((item) => Boolean(item));
|
|
61
|
+
if (missing.length > 0) {
|
|
62
|
+
throw new HintLifecycleError('HINT_CORRECTION_EVIDENCE_REQUIRED', `dbt-first manifest v3 corrections require ${missing.join(', ')}.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
47
65
|
const traceId = genId('trace');
|
|
48
66
|
const hintId = genId('hint');
|
|
49
67
|
const createdAt = nowIso();
|
|
@@ -57,6 +75,10 @@ export function recordCorrectionTrace(projectRoot, input) {
|
|
|
57
75
|
rationale: input.rationale,
|
|
58
76
|
author: input.author,
|
|
59
77
|
anchorObjectKey: input.anchorObjectKey,
|
|
78
|
+
failedRoute: strOrUndef(input.failedRoute),
|
|
79
|
+
evidence: cleanStringList(input.evidence),
|
|
80
|
+
snapshotId: strOrUndef(input.snapshotId),
|
|
81
|
+
requiredEvaluation: strOrUndef(input.requiredEvaluation),
|
|
60
82
|
derivedHintId: hintId,
|
|
61
83
|
};
|
|
62
84
|
const hint = {
|
|
@@ -69,6 +91,8 @@ export function recordCorrectionTrace(projectRoot, input) {
|
|
|
69
91
|
correctedSql: input.correctedSql,
|
|
70
92
|
tags: input.tags,
|
|
71
93
|
author: input.author,
|
|
94
|
+
snapshotId: strOrUndef(input.snapshotId),
|
|
95
|
+
requiredEvaluation: strOrUndef(input.requiredEvaluation),
|
|
72
96
|
createdAt,
|
|
73
97
|
updatedAt: createdAt,
|
|
74
98
|
};
|
|
@@ -98,6 +122,9 @@ export function writeHintFile(projectRoot, hint) {
|
|
|
98
122
|
tags: hint.tags,
|
|
99
123
|
author: hint.author,
|
|
100
124
|
reviewer: hint.reviewer,
|
|
125
|
+
snapshotId: hint.snapshotId,
|
|
126
|
+
requiredEvaluation: hint.requiredEvaluation,
|
|
127
|
+
evaluationId: hint.evaluationId,
|
|
101
128
|
supersedes: hint.supersedes,
|
|
102
129
|
createdAt: hint.createdAt,
|
|
103
130
|
updatedAt: hint.updatedAt,
|
|
@@ -128,6 +155,9 @@ export function readHintFile(path, sourcePath) {
|
|
|
128
155
|
tags: Array.isArray(raw.tags) ? raw.tags.map(String) : undefined,
|
|
129
156
|
author: strOrUndef(raw.author),
|
|
130
157
|
reviewer: strOrUndef(raw.reviewer),
|
|
158
|
+
snapshotId: strOrUndef(raw.snapshotId),
|
|
159
|
+
requiredEvaluation: strOrUndef(raw.requiredEvaluation),
|
|
160
|
+
evaluationId: strOrUndef(raw.evaluationId),
|
|
131
161
|
supersedes: strOrUndef(raw.supersedes),
|
|
132
162
|
createdAt: String(raw.createdAt ?? nowIso()),
|
|
133
163
|
updatedAt: String(raw.updatedAt ?? nowIso()),
|
|
@@ -160,6 +190,105 @@ export function getHintFromGit(projectRoot, hintId) {
|
|
|
160
190
|
const path = hintFilePath(projectRoot, hintId);
|
|
161
191
|
return existsSync(path) ? readHintFile(path, path) : null;
|
|
162
192
|
}
|
|
193
|
+
// --- Evaluations ------------------------------------------------------------
|
|
194
|
+
export class HintLifecycleError extends Error {
|
|
195
|
+
code;
|
|
196
|
+
constructor(code, message) {
|
|
197
|
+
super(message);
|
|
198
|
+
this.code = code;
|
|
199
|
+
this.name = 'HintLifecycleError';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export function hintEvaluationFilePath(projectRoot, evaluationId) {
|
|
203
|
+
return join(evaluationsDir(projectRoot), `${evaluationId}.hint-evaluation.yaml`);
|
|
204
|
+
}
|
|
205
|
+
/** Record a deterministic required evaluation. Overall status is derived from every check. */
|
|
206
|
+
export function evaluateHint(projectRoot, input) {
|
|
207
|
+
const hint = getHintFromGit(projectRoot, input.hintId);
|
|
208
|
+
if (!hint)
|
|
209
|
+
throw new HintLifecycleError('HINT_NOT_FOUND', `Hint ${input.hintId} was not found.`);
|
|
210
|
+
if (hint.status !== 'candidate') {
|
|
211
|
+
throw new HintLifecycleError('HINT_NOT_CANDIDATE', `Hint ${input.hintId} is ${hint.status}; only candidates can be evaluated.`);
|
|
212
|
+
}
|
|
213
|
+
const snapshotId = strOrUndef(input.snapshotId);
|
|
214
|
+
if (!snapshotId || !hint.snapshotId || snapshotId !== hint.snapshotId) {
|
|
215
|
+
throw new HintLifecycleError('HINT_SNAPSHOT_MISMATCH', `Hint ${input.hintId} was recorded against snapshot ${hint.snapshotId ?? 'unknown'}, not ${snapshotId ?? 'unknown'}. Refresh and evaluate the original correction snapshot.`);
|
|
216
|
+
}
|
|
217
|
+
const evaluationName = strOrUndef(input.evaluation);
|
|
218
|
+
if (!evaluationName || !hint.requiredEvaluation || evaluationName !== hint.requiredEvaluation) {
|
|
219
|
+
throw new HintLifecycleError('HINT_EVALUATION_MISMATCH', `Hint ${input.hintId} requires evaluation ${hint.requiredEvaluation ?? 'unknown'}, not ${evaluationName ?? 'unknown'}.`);
|
|
220
|
+
}
|
|
221
|
+
const checks = cleanEvaluationChecks(input.checks);
|
|
222
|
+
const evidence = cleanStringList(input.evidence);
|
|
223
|
+
if (checks.length === 0 || evidence.length === 0) {
|
|
224
|
+
throw new HintLifecycleError('HINT_EVALUATION_EVIDENCE_REQUIRED', 'Hint evaluation requires at least one check and one evidence reference.');
|
|
225
|
+
}
|
|
226
|
+
const evaluationId = genId('hint_eval');
|
|
227
|
+
const createdAt = nowIso();
|
|
228
|
+
const evaluation = {
|
|
229
|
+
id: evaluationId,
|
|
230
|
+
hintId: hint.id,
|
|
231
|
+
traceId: hint.traceId,
|
|
232
|
+
snapshotId,
|
|
233
|
+
evaluation: evaluationName,
|
|
234
|
+
status: checks.every((check) => check.passed) ? 'passed' : 'failed',
|
|
235
|
+
checks,
|
|
236
|
+
evidence,
|
|
237
|
+
evaluator: input.evaluator.trim(),
|
|
238
|
+
note: strOrUndef(input.note),
|
|
239
|
+
createdAt,
|
|
240
|
+
};
|
|
241
|
+
if (!evaluation.evaluator) {
|
|
242
|
+
throw new HintLifecycleError('HINT_EVALUATOR_REQUIRED', 'Hint evaluation requires an evaluator.');
|
|
243
|
+
}
|
|
244
|
+
mkdirSync(evaluationsDir(projectRoot), { recursive: true });
|
|
245
|
+
writeFileSync(hintEvaluationFilePath(projectRoot, evaluationId), yaml.dump(stripUndefined({ ...evaluation }), { lineWidth: 100, noRefs: true }), 'utf-8');
|
|
246
|
+
const updated = { ...hint, evaluationId, updatedAt: createdAt };
|
|
247
|
+
writeHintFile(projectRoot, updated);
|
|
248
|
+
reindexHints(projectRoot);
|
|
249
|
+
return { hint: updated, evaluation };
|
|
250
|
+
}
|
|
251
|
+
export function readHintEvaluationFile(path) {
|
|
252
|
+
try {
|
|
253
|
+
const raw = yaml.load(readFileSync(path, 'utf-8'));
|
|
254
|
+
if (!raw || typeof raw !== 'object')
|
|
255
|
+
return null;
|
|
256
|
+
const rawChecks = Array.isArray(raw.checks) ? raw.checks : [];
|
|
257
|
+
const evaluation = {
|
|
258
|
+
id: String(raw.id ?? ''),
|
|
259
|
+
hintId: String(raw.hintId ?? ''),
|
|
260
|
+
traceId: strOrUndef(raw.traceId),
|
|
261
|
+
snapshotId: String(raw.snapshotId ?? ''),
|
|
262
|
+
evaluation: String(raw.evaluation ?? ''),
|
|
263
|
+
status: raw.status === 'passed' ? 'passed' : 'failed',
|
|
264
|
+
checks: cleanEvaluationChecks(rawChecks),
|
|
265
|
+
evidence: cleanStringList(raw.evidence),
|
|
266
|
+
evaluator: String(raw.evaluator ?? ''),
|
|
267
|
+
note: strOrUndef(raw.note),
|
|
268
|
+
createdAt: String(raw.createdAt ?? ''),
|
|
269
|
+
};
|
|
270
|
+
if (!evaluation.id || !evaluation.hintId || !evaluation.snapshotId || !evaluation.evaluation || !evaluation.evaluator)
|
|
271
|
+
return null;
|
|
272
|
+
return evaluation;
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
export function getHintEvaluationFromGit(projectRoot, evaluationId) {
|
|
279
|
+
const path = hintEvaluationFilePath(projectRoot, evaluationId);
|
|
280
|
+
return existsSync(path) ? readHintEvaluationFile(path) : null;
|
|
281
|
+
}
|
|
282
|
+
export function listHintEvaluationsFromGit(projectRoot, hintId) {
|
|
283
|
+
const dir = evaluationsDir(projectRoot);
|
|
284
|
+
if (!existsSync(dir))
|
|
285
|
+
return [];
|
|
286
|
+
return readdirSync(dir)
|
|
287
|
+
.filter((file) => file.endsWith('.hint-evaluation.yaml'))
|
|
288
|
+
.map((file) => readHintEvaluationFile(join(dir, file)))
|
|
289
|
+
.filter((item) => Boolean(item) && (!hintId || item.hintId === hintId))
|
|
290
|
+
.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
|
|
291
|
+
}
|
|
163
292
|
/**
|
|
164
293
|
* Approve or reject a candidate hint. Writes the review record, flips the hint
|
|
165
294
|
* file's status, and reindexes SQLite. Approval is the ONLY path that makes a
|
|
@@ -169,6 +298,21 @@ export function reviewHint(projectRoot, input) {
|
|
|
169
298
|
const hint = getHintFromGit(projectRoot, input.hintId);
|
|
170
299
|
if (!hint)
|
|
171
300
|
return null;
|
|
301
|
+
if (input.decision === 'approved' && requiresEvaluatedApproval(projectRoot)) {
|
|
302
|
+
if (!input.snapshotId || !hint.snapshotId || input.snapshotId !== hint.snapshotId) {
|
|
303
|
+
throw new HintLifecycleError('HINT_SNAPSHOT_MISMATCH', `Hint ${hint.id} was recorded against snapshot ${hint.snapshotId ?? 'unknown'}, not ${input.snapshotId ?? 'unknown'}. Refresh before review.`);
|
|
304
|
+
}
|
|
305
|
+
const evaluation = hint.evaluationId ? getHintEvaluationFromGit(projectRoot, hint.evaluationId) : null;
|
|
306
|
+
if (!evaluation) {
|
|
307
|
+
throw new HintLifecycleError('HINT_EVALUATION_REQUIRED', `Hint ${hint.id} cannot be approved before its required evaluation runs.`);
|
|
308
|
+
}
|
|
309
|
+
if (evaluation.status !== 'passed') {
|
|
310
|
+
throw new HintLifecycleError('HINT_EVALUATION_FAILED', `Hint ${hint.id} cannot be approved because evaluation ${evaluation.id} failed.`);
|
|
311
|
+
}
|
|
312
|
+
if (evaluation.snapshotId !== input.snapshotId || evaluation.evaluation !== hint.requiredEvaluation) {
|
|
313
|
+
throw new HintLifecycleError('HINT_EVALUATION_STALE', `Hint ${hint.id} evaluation does not match the current correction snapshot and required evaluation.`);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
172
316
|
const reviewId = genId('review');
|
|
173
317
|
const createdAt = nowIso();
|
|
174
318
|
const review = {
|
|
@@ -226,6 +370,32 @@ function strOrUndef(value) {
|
|
|
226
370
|
const str = String(value).trim();
|
|
227
371
|
return str.length > 0 ? str : undefined;
|
|
228
372
|
}
|
|
373
|
+
function cleanStringList(value) {
|
|
374
|
+
if (!Array.isArray(value))
|
|
375
|
+
return [];
|
|
376
|
+
return [...new Set(value.map((item) => String(item).trim()).filter(Boolean))];
|
|
377
|
+
}
|
|
378
|
+
function cleanEvaluationChecks(value) {
|
|
379
|
+
if (!Array.isArray(value))
|
|
380
|
+
return [];
|
|
381
|
+
return value.flatMap((check) => {
|
|
382
|
+
if (!check || typeof check !== 'object')
|
|
383
|
+
return [];
|
|
384
|
+
const name = strOrUndef(check.name);
|
|
385
|
+
if (!name || typeof check.passed !== 'boolean')
|
|
386
|
+
return [];
|
|
387
|
+
return [{ name, passed: check.passed, evidence: strOrUndef(check.evidence) }];
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
function requiresEvaluatedApproval(projectRoot) {
|
|
391
|
+
try {
|
|
392
|
+
const config = loadProjectConfig(projectRoot);
|
|
393
|
+
return config.manifestVersion === 3 && config.modeling?.mode === 'dbt-first';
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
}
|
|
229
399
|
function stripUndefined(obj) {
|
|
230
400
|
const out = {};
|
|
231
401
|
for (const [key, value] of Object.entries(obj)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-store.js","sourceRoot":"","sources":["../../src/hints/git-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git-store.js","sourceRoot":"","sources":["../../src/hints/git-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hint staleness detection (W4.6).
|
|
3
|
+
*
|
|
4
|
+
* An approved hint names scope targets (a block, metric, dbt model, or term). After
|
|
5
|
+
* a model rename or a deleted block, the hint keeps firing with guidance about a
|
|
6
|
+
* thing that no longer exists — silently steering answers with stale advice. On
|
|
7
|
+
* reindex we cross-check each approved hint's scope targets against the current
|
|
8
|
+
* catalog and flag the ones whose targets vanished, so a human can retire or
|
|
9
|
+
* re-scope them (surfaced in the review queue like any other proposal).
|
|
10
|
+
*/
|
|
11
|
+
import type { Hint } from './types.js';
|
|
12
|
+
import type { KGStore } from '../kg/sqlite-fts.js';
|
|
13
|
+
export type HintScopeTargetKind = 'block' | 'metric' | 'dbtModel' | 'term';
|
|
14
|
+
export interface StaleHintFinding {
|
|
15
|
+
hintId: string;
|
|
16
|
+
title: string;
|
|
17
|
+
missing: Array<{
|
|
18
|
+
kind: HintScopeTargetKind;
|
|
19
|
+
name: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Flag approved hints whose named scope targets no longer exist. `exists` checks
|
|
24
|
+
* the current catalog for a scope kind + name. Only approved hints are considered —
|
|
25
|
+
* candidate/rejected hints never reach an answer.
|
|
26
|
+
*/
|
|
27
|
+
export declare function findStaleHints(hints: Array<Pick<Hint, 'id' | 'title' | 'scope' | 'status'>>, exists: (kind: HintScopeTargetKind, name: string) => boolean): StaleHintFinding[];
|
|
28
|
+
/** KG-backed staleness check: resolves scope targets against the knowledge graph. */
|
|
29
|
+
export declare function findStaleApprovedHints(hints: Array<Pick<Hint, 'id' | 'title' | 'scope' | 'status'>>, kg: KGStore): StaleHintFinding[];
|
|
30
|
+
//# sourceMappingURL=staleness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleness.d.ts","sourceRoot":"","sources":["../../src/hints/staleness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAa,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,mBAAmB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7D;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAC7D,MAAM,EAAE,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAC3D,gBAAgB,EAAE,CAYpB;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,EAC7D,EAAE,EAAE,OAAO,GACV,gBAAgB,EAAE,CAapB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const SCOPE_TARGET_KINDS = ['block', 'metric', 'dbtModel', 'term'];
|
|
2
|
+
/**
|
|
3
|
+
* Flag approved hints whose named scope targets no longer exist. `exists` checks
|
|
4
|
+
* the current catalog for a scope kind + name. Only approved hints are considered —
|
|
5
|
+
* candidate/rejected hints never reach an answer.
|
|
6
|
+
*/
|
|
7
|
+
export function findStaleHints(hints, exists) {
|
|
8
|
+
const findings = [];
|
|
9
|
+
for (const hint of hints) {
|
|
10
|
+
if (hint.status !== 'approved')
|
|
11
|
+
continue;
|
|
12
|
+
const missing = [];
|
|
13
|
+
for (const kind of SCOPE_TARGET_KINDS) {
|
|
14
|
+
const name = hint.scope[kind];
|
|
15
|
+
if (name && !exists(kind, name))
|
|
16
|
+
missing.push({ kind, name });
|
|
17
|
+
}
|
|
18
|
+
if (missing.length > 0)
|
|
19
|
+
findings.push({ hintId: hint.id, title: hint.title, missing });
|
|
20
|
+
}
|
|
21
|
+
return findings;
|
|
22
|
+
}
|
|
23
|
+
/** KG-backed staleness check: resolves scope targets against the knowledge graph. */
|
|
24
|
+
export function findStaleApprovedHints(hints, kg) {
|
|
25
|
+
const dbtNames = new Set([
|
|
26
|
+
...kg.getNodesByKind('dbt_model', 5000).map((node) => node.name.toLowerCase()),
|
|
27
|
+
...kg.getNodesByKind('dbt_source', 5000).map((node) => node.name.toLowerCase()),
|
|
28
|
+
]);
|
|
29
|
+
return findStaleHints(hints, (kind, name) => {
|
|
30
|
+
switch (kind) {
|
|
31
|
+
case 'block': return kg.getNode(`block:${name}`) !== null;
|
|
32
|
+
case 'metric': return kg.getNode(`metric:${name}`) !== null;
|
|
33
|
+
case 'term': return kg.getNode(`term:${name}`) !== null;
|
|
34
|
+
case 'dbtModel': return dbtNames.has(name.toLowerCase());
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=staleness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staleness.js","sourceRoot":"","sources":["../../src/hints/staleness.ts"],"names":[],"mappings":"AAqBA,MAAM,kBAAkB,GAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAE1F;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,KAA6D,EAC7D,MAA4D;IAE5D,MAAM,QAAQ,GAAuB,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;YAAE,SAAS;QACzC,MAAM,OAAO,GAAuD,EAAE,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;YACtC,MAAM,IAAI,GAAI,IAAI,CAAC,KAAmB,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CACpC,KAA6D,EAC7D,EAAW;IAEX,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9E,GAAG,EAAE,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;KAChF,CAAC,CAAC;IACH,OAAO,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QAC1C,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;YAC1D,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;YAC5D,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;YACxD,KAAK,UAAU,CAAC,CAAC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/hints/store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAEL,KAAK,IAAI,EAET,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/hints/store.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAEL,KAAK,IAAI,EAET,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAWnC,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,EAAE,MAAM;IAQ1B,OAAO,CAAC,UAAU;IAuClB,mEAAmE;IACnE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;IAsB5B,gFAAgF;IAChF,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAmBxB,OAAO,CAAC,SAAS;IAmCjB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK5B,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,EAAE;IAOjC;;;;OAIG;IACG,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IA0D1F,8EAA8E;IAC9E,wBAAwB,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAc/C,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/hints/store.js
CHANGED
|
@@ -10,7 +10,8 @@ import { dirname } from 'node:path';
|
|
|
10
10
|
import { mkdirSync } from 'node:fs';
|
|
11
11
|
import { createRequire } from 'node:module';
|
|
12
12
|
import { hintAppliesToScope, } from './types.js';
|
|
13
|
-
import {
|
|
13
|
+
import { envEmbeddingProvider, hybridRank, } from '../embeddings/provider.js';
|
|
14
|
+
import { sanitizeFtsQuery } from '../memory/fts-query.js';
|
|
14
15
|
const require = createRequire(import.meta.url);
|
|
15
16
|
let databaseCtor = null;
|
|
16
17
|
function loadDatabase() {
|
|
@@ -164,7 +165,7 @@ export class HintStore {
|
|
|
164
165
|
ftsScore: entry.ftsScore,
|
|
165
166
|
})), {
|
|
166
167
|
alpha: options.alpha ?? 0,
|
|
167
|
-
provider: options.embeddingProvider ??
|
|
168
|
+
provider: options.embeddingProvider ?? envEmbeddingProvider(),
|
|
168
169
|
});
|
|
169
170
|
return ranked.slice(0, limit).map((entry) => ({
|
|
170
171
|
hint: entry.item.hint,
|
|
@@ -246,34 +247,4 @@ function safeJSON(raw, fallback) {
|
|
|
246
247
|
return fallback;
|
|
247
248
|
}
|
|
248
249
|
}
|
|
249
|
-
const STOP_WORDS = new Set([
|
|
250
|
-
'a', 'about', 'above', 'after', 'again', 'against', 'all', 'am', 'an', 'and', 'any', 'are', 'as', 'at',
|
|
251
|
-
'be', 'because', 'been', 'before', 'being', 'below', 'between', 'both', 'but', 'by',
|
|
252
|
-
'can', 'could', 'current', 'did', 'do', 'does', 'doing', 'down', 'during',
|
|
253
|
-
'each', 'explain', 'few', 'find', 'for', 'from', 'further',
|
|
254
|
-
'get', 'give',
|
|
255
|
-
'had', 'has', 'have', 'having', 'he', 'her', 'here', 'hers', 'herself', 'him', 'himself', 'his', 'how',
|
|
256
|
-
'i', 'if', 'in', 'into', 'is', 'it', 'its', 'itself',
|
|
257
|
-
'just',
|
|
258
|
-
'me', 'more', 'most', 'my', 'myself',
|
|
259
|
-
'no', 'nor', 'not', 'now',
|
|
260
|
-
'of', 'off', 'on', 'once', 'only', 'or', 'other', 'our', 'ours', 'ourselves', 'out', 'over', 'own',
|
|
261
|
-
'please',
|
|
262
|
-
'query',
|
|
263
|
-
'same', 'she', 'should', 'show', 'so', 'some', 'sql', 'such',
|
|
264
|
-
'than', 'that', 'the', 'their', 'theirs', 'them', 'themselves', 'then', 'there', 'these', 'they', 'this', 'those', 'through', 'to', 'too',
|
|
265
|
-
'under', 'until', 'up', 'using',
|
|
266
|
-
'very',
|
|
267
|
-
'was', 'we', 'were', 'what', 'when', 'where', 'which', 'while', 'who', 'whom', 'why', 'will', 'with', 'would',
|
|
268
|
-
'you', 'your', 'yours', 'yourself', 'yourselves',
|
|
269
|
-
]);
|
|
270
|
-
function sanitizeFtsQuery(raw) {
|
|
271
|
-
return raw
|
|
272
|
-
.split(/\s+/)
|
|
273
|
-
.map((t) => t.replace(/[^\p{L}\p{N}_]/gu, ''))
|
|
274
|
-
.filter((t) => t.length > 1 && !STOP_WORDS.has(t.toLowerCase()))
|
|
275
|
-
.slice(0, 48)
|
|
276
|
-
.map((t) => `"${t}"`)
|
|
277
|
-
.join(' OR ');
|
|
278
|
-
}
|
|
279
250
|
//# sourceMappingURL=store.js.map
|