@duckcodeailabs/dql-agent 1.6.33 → 1.6.34
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 +26 -8
- package/dist/agent-run-engine.d.ts.map +1 -1
- package/dist/agent-run-engine.js +46 -7
- 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 +15 -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 +25 -2
- package/dist/answer-loop.d.ts.map +1 -1
- package/dist/answer-loop.js +368 -72
- package/dist/answer-loop.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 +76 -43
- 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 +1 -0
- package/dist/cascade/route-policy.js.map +1 -1
- 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/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/index.d.ts +39 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +143 -7
- 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/sqlite-fts.d.ts +13 -0
- package/dist/kg/sqlite-fts.d.ts.map +1 -1
- package/dist/kg/sqlite-fts.js +75 -47
- package/dist/kg/sqlite-fts.js.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.js +45 -10
- package/dist/metadata/analysis-planner.js.map +1 -1
- 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/catalog.d.ts +39 -0
- package/dist/metadata/catalog.d.ts.map +1 -1
- package/dist/metadata/catalog.js +361 -41
- package/dist/metadata/catalog.js.map +1 -1
- 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-grounding.d.ts +4 -2
- package/dist/metadata/sql-grounding.d.ts.map +1 -1
- package/dist/metadata/sql-grounding.js +4 -2
- package/dist/metadata/sql-grounding.js.map +1 -1
- package/dist/metadata/sql-retrieval.d.ts +3 -2
- package/dist/metadata/sql-retrieval.d.ts.map +1 -1
- package/dist/metadata/sql-retrieval.js +23 -5
- package/dist/metadata/sql-retrieval.js.map +1 -1
- package/dist/propose/build-from-prompt.d.ts.map +1 -1
- package/dist/propose/build-from-prompt.js +10 -4
- 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 +147 -20
- 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 +46 -8
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +186 -41
- package/dist/skills/loader.js.map +1 -1
- package/dist/tools/registry.js +12 -12
- package/dist/tools/registry.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence-first domain/skill bootstrap. It deliberately drafts from the
|
|
3
|
+
* compiled repository instead of asking a model to invent a taxonomy. A UI or
|
|
4
|
+
* provider can enrich the prose later, but every candidate carries the exact
|
|
5
|
+
* metrics, blocks, and terms that caused it to exist.
|
|
6
|
+
*/
|
|
7
|
+
import type { DQLManifest } from '@duckcodeailabs/dql-core';
|
|
8
|
+
import type { DomainInput } from '@duckcodeailabs/dql-core';
|
|
9
|
+
import type { WriteSkillInput } from './loader.js';
|
|
10
|
+
export interface DomainBootstrapCandidate {
|
|
11
|
+
id: string;
|
|
12
|
+
kind: 'domain' | 'skill';
|
|
13
|
+
action: 'create' | 'update' | 'unchanged' | 'needs_attention';
|
|
14
|
+
confidence: number;
|
|
15
|
+
evidence: string[];
|
|
16
|
+
/** Local-only notes from the optional AI enrichment pass. */
|
|
17
|
+
notes?: string[];
|
|
18
|
+
domain?: DomainInput;
|
|
19
|
+
skill?: WriteSkillInput;
|
|
20
|
+
}
|
|
21
|
+
export interface DomainSkillBootstrapAiDraft {
|
|
22
|
+
id: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
boundedContext?: string;
|
|
25
|
+
businessOutcome?: string;
|
|
26
|
+
inScope?: string[];
|
|
27
|
+
outOfScope?: string[];
|
|
28
|
+
primaryTerms?: string[];
|
|
29
|
+
tags?: string[];
|
|
30
|
+
triggers?: string[];
|
|
31
|
+
exclusions?: string[];
|
|
32
|
+
clarifyWhen?: string[];
|
|
33
|
+
examples?: string[];
|
|
34
|
+
body?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface DomainSkillBootstrapEnrichment {
|
|
37
|
+
candidates: DomainBootstrapCandidate[];
|
|
38
|
+
applied: string[];
|
|
39
|
+
rejected: string[];
|
|
40
|
+
}
|
|
41
|
+
/** Build reviewable candidates without writing tracked files. */
|
|
42
|
+
export declare function draftDomainSkillBootstrap(manifest: DQLManifest): DomainBootstrapCandidate[];
|
|
43
|
+
/**
|
|
44
|
+
* A bounded, evidence-only prompt for enriching repository drafts. The model is
|
|
45
|
+
* never asked to discover metrics, joins, or new taxonomy: it may only improve
|
|
46
|
+
* prose and operational guidance for the candidate IDs supplied here.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildDomainSkillBootstrapPrompt(manifest: DQLManifest, candidates: DomainBootstrapCandidate[]): {
|
|
49
|
+
system: string;
|
|
50
|
+
user: string;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Apply only safe, textual AI improvements. This deliberately rejects model
|
|
54
|
+
* attempts to add governed-object references or unknown candidate IDs.
|
|
55
|
+
*/
|
|
56
|
+
export declare function mergeDomainSkillBootstrapEnrichment(candidates: DomainBootstrapCandidate[], response: string): DomainSkillBootstrapEnrichment;
|
|
57
|
+
//# sourceMappingURL=bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/skills/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,iBAAiB,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAMD,iEAAiE;AACjE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,WAAW,GAAG,wBAAwB,EAAE,CAgF3F;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,WAAW,EACrB,UAAU,EAAE,wBAAwB,EAAE,GACrC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAsDlC;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,wBAAwB,EAAE,EACtC,QAAQ,EAAE,MAAM,GACf,8BAA8B,CAsDhC"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { buildDomainReferenceSkills } from './domain-skills.js';
|
|
2
|
+
function slug(value) {
|
|
3
|
+
return value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'domain';
|
|
4
|
+
}
|
|
5
|
+
/** Build reviewable candidates without writing tracked files. */
|
|
6
|
+
export function draftDomainSkillBootstrap(manifest) {
|
|
7
|
+
const candidates = [];
|
|
8
|
+
const declared = Object.values(manifest.domains ?? {});
|
|
9
|
+
const declaredNames = new Set(declared.map((domain) => domain.name.toLowerCase()));
|
|
10
|
+
const inferred = new Set();
|
|
11
|
+
for (const block of Object.values(manifest.blocks ?? {}))
|
|
12
|
+
if (block.domain)
|
|
13
|
+
inferred.add(block.domain);
|
|
14
|
+
for (const metric of Object.values(manifest.metrics ?? {}))
|
|
15
|
+
if (metric.domain)
|
|
16
|
+
inferred.add(metric.domain);
|
|
17
|
+
for (const term of Object.values(manifest.terms ?? {}))
|
|
18
|
+
if (term.domain)
|
|
19
|
+
inferred.add(term.domain);
|
|
20
|
+
for (const domain of declared) {
|
|
21
|
+
const metricCount = Object.values(manifest.metrics ?? {}).filter((metric) => metric.domain === domain.name).length;
|
|
22
|
+
const blockCount = Object.values(manifest.blocks ?? {}).filter((block) => block.domain === domain.name).length;
|
|
23
|
+
const termCount = Object.values(manifest.terms ?? {}).filter((term) => term.domain === domain.name).length;
|
|
24
|
+
candidates.push({
|
|
25
|
+
id: `domain:${slug(domain.name)}`,
|
|
26
|
+
kind: 'domain',
|
|
27
|
+
action: 'unchanged',
|
|
28
|
+
confidence: 1,
|
|
29
|
+
evidence: [`Declared in ${domain.filePath}`, `${metricCount} metrics`, `${blockCount} blocks`, `${termCount} terms`],
|
|
30
|
+
domain: {
|
|
31
|
+
name: domain.name,
|
|
32
|
+
parent: domain.parent,
|
|
33
|
+
owner: domain.owner,
|
|
34
|
+
businessOwner: domain.businessOwner,
|
|
35
|
+
boundedContext: domain.boundedContext,
|
|
36
|
+
sourceSystems: domain.sourceSystems,
|
|
37
|
+
primaryTerms: domain.primaryTerms,
|
|
38
|
+
tags: domain.tags,
|
|
39
|
+
businessOutcome: domain.businessOutcome,
|
|
40
|
+
description: domain.description,
|
|
41
|
+
reviewCadence: domain.reviewCadence,
|
|
42
|
+
inScope: domain.inScope,
|
|
43
|
+
outOfScope: domain.outOfScope,
|
|
44
|
+
dbtGroups: domain.dbtGroups,
|
|
45
|
+
dbtPaths: domain.dbtPaths,
|
|
46
|
+
dbtTags: domain.dbtTags,
|
|
47
|
+
semanticDomains: domain.semanticDomains,
|
|
48
|
+
semanticTags: domain.semanticTags,
|
|
49
|
+
sourcePath: domain.filePath,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
for (const name of inferred) {
|
|
54
|
+
if (declaredNames.has(name.toLowerCase()))
|
|
55
|
+
continue;
|
|
56
|
+
const metricCount = Object.values(manifest.metrics ?? {}).filter((metric) => metric.domain === name).length;
|
|
57
|
+
const blockCount = Object.values(manifest.blocks ?? {}).filter((block) => block.domain === name).length;
|
|
58
|
+
const termCount = Object.values(manifest.terms ?? {}).filter((term) => term.domain === name).length;
|
|
59
|
+
candidates.push({
|
|
60
|
+
id: `domain:${slug(name)}`,
|
|
61
|
+
kind: 'domain',
|
|
62
|
+
action: 'create',
|
|
63
|
+
confidence: metricCount + blockCount + termCount >= 3 ? 0.9 : 0.55,
|
|
64
|
+
evidence: ['Inferred from governed artifacts', `${metricCount} metrics`, `${blockCount} blocks`, `${termCount} terms`],
|
|
65
|
+
domain: {
|
|
66
|
+
name,
|
|
67
|
+
boundedContext: `Governed analytics for ${name}. Review the generated scope before use.`,
|
|
68
|
+
reviewCadence: 'quarterly',
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
for (const skill of buildDomainReferenceSkills({ ...manifest, domains: Object.fromEntries(candidates.filter((candidate) => candidate.kind === 'domain' && candidate.domain).map((candidate) => [candidate.domain.name, {
|
|
73
|
+
name: candidate.domain.name,
|
|
74
|
+
filePath: candidate.domain.sourcePath ?? `domains/${slug(candidate.domain.name)}/domain.dql`,
|
|
75
|
+
...candidate.domain,
|
|
76
|
+
}])) })) {
|
|
77
|
+
candidates.push({
|
|
78
|
+
id: `skill:${skill.id}`,
|
|
79
|
+
kind: 'skill',
|
|
80
|
+
action: 'create',
|
|
81
|
+
confidence: 0.85,
|
|
82
|
+
evidence: [`Derived from domain ${skill.domain}`, `${skill.preferredMetrics?.length ?? 0} metrics`, `${skill.preferredBlocks?.length ?? 0} certified blocks`],
|
|
83
|
+
skill: { ...skill, kind: 'domain_reference', status: 'draft', domains: skill.domain ? [skill.domain] : [] },
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return candidates.sort((a, b) => a.kind.localeCompare(b.kind) || b.confidence - a.confidence || a.id.localeCompare(b.id));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* A bounded, evidence-only prompt for enriching repository drafts. The model is
|
|
90
|
+
* never asked to discover metrics, joins, or new taxonomy: it may only improve
|
|
91
|
+
* prose and operational guidance for the candidate IDs supplied here.
|
|
92
|
+
*/
|
|
93
|
+
export function buildDomainSkillBootstrapPrompt(manifest, candidates) {
|
|
94
|
+
const metricIndex = Object.values(manifest.metrics ?? {});
|
|
95
|
+
const blockIndex = Object.values(manifest.blocks ?? {});
|
|
96
|
+
const termIndex = Object.values(manifest.terms ?? {});
|
|
97
|
+
const items = candidates.map((candidate) => {
|
|
98
|
+
const domainName = candidate.domain?.name ?? candidate.skill?.domain ?? candidate.skill?.domains?.[0];
|
|
99
|
+
const metrics = metricIndex.filter((metric) => metric.domain === domainName).slice(0, 24)
|
|
100
|
+
.map((metric) => ({ id: metric.name, label: metric.label, description: truncate(metric.description, 180) }));
|
|
101
|
+
const blocks = blockIndex.filter((block) => block.domain === domainName).slice(0, 16)
|
|
102
|
+
.map((block) => ({ id: block.name, status: block.status, description: truncate(block.description, 180) }));
|
|
103
|
+
const terms = termIndex.filter((term) => term.domain === domainName).slice(0, 24)
|
|
104
|
+
.map((term) => ({ name: term.name, synonyms: (term.synonyms ?? []).slice(0, 8), caveats: (term.caveats ?? []).slice(0, 5) }));
|
|
105
|
+
return {
|
|
106
|
+
id: candidate.id,
|
|
107
|
+
kind: candidate.kind,
|
|
108
|
+
action: candidate.action,
|
|
109
|
+
domain: candidate.domain ? {
|
|
110
|
+
name: candidate.domain.name,
|
|
111
|
+
parent: candidate.domain.parent,
|
|
112
|
+
description: candidate.domain.description,
|
|
113
|
+
boundedContext: candidate.domain.boundedContext,
|
|
114
|
+
businessOutcome: candidate.domain.businessOutcome,
|
|
115
|
+
primaryTerms: candidate.domain.primaryTerms,
|
|
116
|
+
tags: candidate.domain.tags,
|
|
117
|
+
inScope: candidate.domain.inScope,
|
|
118
|
+
outOfScope: candidate.domain.outOfScope,
|
|
119
|
+
} : undefined,
|
|
120
|
+
skill: candidate.skill ? {
|
|
121
|
+
id: candidate.skill.id,
|
|
122
|
+
domain: candidate.skill.domain,
|
|
123
|
+
domains: candidate.skill.domains,
|
|
124
|
+
description: candidate.skill.description,
|
|
125
|
+
preferredMetrics: candidate.skill.preferredMetrics,
|
|
126
|
+
preferredBlocks: candidate.skill.preferredBlocks,
|
|
127
|
+
} : undefined,
|
|
128
|
+
evidence: candidate.evidence,
|
|
129
|
+
governedArtifacts: { metrics, blocks, terms },
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
return {
|
|
133
|
+
system: [
|
|
134
|
+
'You enrich governed analytics domain and skill drafts from repository evidence.',
|
|
135
|
+
'Return JSON only. Do not use markdown fences.',
|
|
136
|
+
'Never invent or rename domains, metrics, dimensions, blocks, models, joins, filters, owners, or source systems.',
|
|
137
|
+
'Do not create candidate IDs. Return only IDs supplied by the user.',
|
|
138
|
+
'If repository evidence is insufficient, add a concise clarification rule instead of assuming a business definition.',
|
|
139
|
+
'For domains, improve only business description, bounded context, outcome, in/out scope, primary terms, and tags.',
|
|
140
|
+
'For skills, improve only description, triggers, exclusions, clarification rules, examples, and a concise Markdown body.',
|
|
141
|
+
'Skill bodies must use exactly these sections when useful: Purpose, Governed reuse, Vocabulary, Guardrails, Clarify.',
|
|
142
|
+
'Treat listed metrics and certified blocks as references, not proof of an unstated calculation. Keep every field concise.',
|
|
143
|
+
'Output shape: {"drafts":[{"id":"...","description":"...","boundedContext":"...","businessOutcome":"...","inScope":["..."],"outOfScope":["..."],"primaryTerms":["..."],"tags":["..."],"triggers":["..."],"exclusions":["..."],"clarifyWhen":["..."],"examples":["..."],"body":"..."}]}. Omit fields you cannot ground.',
|
|
144
|
+
].join('\n'),
|
|
145
|
+
user: JSON.stringify({ candidates: items }, null, 2),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Apply only safe, textual AI improvements. This deliberately rejects model
|
|
150
|
+
* attempts to add governed-object references or unknown candidate IDs.
|
|
151
|
+
*/
|
|
152
|
+
export function mergeDomainSkillBootstrapEnrichment(candidates, response) {
|
|
153
|
+
const parsed = parseBootstrapResponse(response);
|
|
154
|
+
const byId = new Map(candidates.map((candidate) => [candidate.id, candidate]));
|
|
155
|
+
const applied = [];
|
|
156
|
+
const rejected = [];
|
|
157
|
+
const next = candidates.map((candidate) => ({ ...candidate }));
|
|
158
|
+
const nextById = new Map(next.map((candidate) => [candidate.id, candidate]));
|
|
159
|
+
for (const draft of parsed) {
|
|
160
|
+
const original = byId.get(draft.id);
|
|
161
|
+
const candidate = nextById.get(draft.id);
|
|
162
|
+
if (!original || !candidate) {
|
|
163
|
+
rejected.push(`Ignored unknown candidate ${draft.id || '(missing id)'}.`);
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (candidate.kind === 'domain' && candidate.domain) {
|
|
167
|
+
const domain = { ...candidate.domain };
|
|
168
|
+
const allowedTerms = new Set((original.domain?.primaryTerms ?? []).map(normalize));
|
|
169
|
+
const safeTerms = filterKnown(draft.primaryTerms, allowedTerms);
|
|
170
|
+
if ((draft.primaryTerms?.length ?? 0) !== safeTerms.length)
|
|
171
|
+
rejected.push(`Ignored ungrounded primary terms for ${draft.id}.`);
|
|
172
|
+
let changed = false;
|
|
173
|
+
changed = assignText(domain, 'description', draft.description) || changed;
|
|
174
|
+
changed = assignText(domain, 'boundedContext', draft.boundedContext) || changed;
|
|
175
|
+
changed = assignText(domain, 'businessOutcome', draft.businessOutcome) || changed;
|
|
176
|
+
changed = assignStrings(domain, 'inScope', draft.inScope) || changed;
|
|
177
|
+
changed = assignStrings(domain, 'outOfScope', draft.outOfScope) || changed;
|
|
178
|
+
changed = assignStrings(domain, 'tags', draft.tags) || changed;
|
|
179
|
+
if (safeTerms.length)
|
|
180
|
+
changed = assignStrings(domain, 'primaryTerms', safeTerms) || changed;
|
|
181
|
+
candidate.domain = domain;
|
|
182
|
+
if (changed) {
|
|
183
|
+
candidate.action = candidate.action === 'unchanged' ? 'update' : candidate.action;
|
|
184
|
+
candidate.notes = [...(candidate.notes ?? []), 'AI enrichment was constrained to repository evidence.'];
|
|
185
|
+
applied.push(draft.id);
|
|
186
|
+
}
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (candidate.kind === 'skill' && candidate.skill) {
|
|
190
|
+
const skill = { ...candidate.skill };
|
|
191
|
+
let changed = false;
|
|
192
|
+
changed = assignText(skill, 'description', draft.description) || changed;
|
|
193
|
+
changed = assignStrings(skill, 'triggers', draft.triggers) || changed;
|
|
194
|
+
changed = assignStrings(skill, 'exclusions', draft.exclusions) || changed;
|
|
195
|
+
changed = assignStrings(skill, 'clarifyWhen', draft.clarifyWhen) || changed;
|
|
196
|
+
changed = assignStrings(skill, 'examples', draft.examples) || changed;
|
|
197
|
+
changed = assignText(skill, 'body', draft.body, 8000) || changed;
|
|
198
|
+
candidate.skill = skill;
|
|
199
|
+
if (changed) {
|
|
200
|
+
candidate.action = candidate.action === 'unchanged' ? 'update' : candidate.action;
|
|
201
|
+
candidate.notes = [...(candidate.notes ?? []), 'AI enrichment was constrained to repository evidence.'];
|
|
202
|
+
applied.push(draft.id);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return { candidates: next, applied, rejected };
|
|
207
|
+
}
|
|
208
|
+
function parseBootstrapResponse(response) {
|
|
209
|
+
const match = response.match(/\{[\s\S]*\}/);
|
|
210
|
+
if (!match)
|
|
211
|
+
return [];
|
|
212
|
+
try {
|
|
213
|
+
const value = JSON.parse(match[0]);
|
|
214
|
+
if (!Array.isArray(value.drafts))
|
|
215
|
+
return [];
|
|
216
|
+
return value.drafts.flatMap((entry) => {
|
|
217
|
+
if (!entry || typeof entry !== 'object' || typeof entry.id !== 'string')
|
|
218
|
+
return [];
|
|
219
|
+
const raw = entry;
|
|
220
|
+
return [{
|
|
221
|
+
id: raw.id,
|
|
222
|
+
description: safeText(raw.description), boundedContext: safeText(raw.boundedContext), businessOutcome: safeText(raw.businessOutcome),
|
|
223
|
+
inScope: safeList(raw.inScope), outOfScope: safeList(raw.outOfScope), primaryTerms: safeList(raw.primaryTerms), tags: safeList(raw.tags),
|
|
224
|
+
triggers: safeList(raw.triggers), exclusions: safeList(raw.exclusions), clarifyWhen: safeList(raw.clarifyWhen), examples: safeList(raw.examples), body: safeText(raw.body, 8000),
|
|
225
|
+
}];
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return [];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function safeText(value, max = 500) {
|
|
233
|
+
return typeof value === 'string' && value.trim() ? value.trim().slice(0, max) : undefined;
|
|
234
|
+
}
|
|
235
|
+
function safeList(value) {
|
|
236
|
+
if (!Array.isArray(value))
|
|
237
|
+
return undefined;
|
|
238
|
+
const values = value.filter((item) => typeof item === 'string').map((item) => item.trim().slice(0, 240)).filter(Boolean).slice(0, 20);
|
|
239
|
+
return values.length ? values : undefined;
|
|
240
|
+
}
|
|
241
|
+
function normalize(value) { return value.trim().toLowerCase(); }
|
|
242
|
+
function filterKnown(values, allowed) {
|
|
243
|
+
return (values ?? []).filter((value) => allowed.has(normalize(value)));
|
|
244
|
+
}
|
|
245
|
+
function truncate(value, max) { return value?.trim().slice(0, max); }
|
|
246
|
+
function assignText(target, key, value, max = 500) {
|
|
247
|
+
const record = target;
|
|
248
|
+
if (!value || value.length > max || record[key] === value)
|
|
249
|
+
return false;
|
|
250
|
+
record[key] = value;
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
function assignStrings(target, key, value) {
|
|
254
|
+
const record = target;
|
|
255
|
+
if (!value?.length || JSON.stringify(record[key] ?? []) === JSON.stringify(value))
|
|
256
|
+
return false;
|
|
257
|
+
record[key] = value;
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/skills/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Default starter Skills (spec 16) — `seedDefaultSkills` writes three EDITABLE
|
|
3
|
-
* starters into
|
|
3
|
+
* starters into `skills/`, idempotently (it NEVER clobbers a file the user
|
|
4
4
|
* has edited). The starters are:
|
|
5
5
|
*
|
|
6
6
|
* (a) Metrics glossary — pre-filled from the semantic layer (MetricFlow
|
|
@@ -29,7 +29,7 @@ export interface SeedDefaultSkillsResult {
|
|
|
29
29
|
skipped: string[];
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* Seed the editable starter skills into
|
|
32
|
+
* Seed the editable starter skills into `skills/`. Idempotent: a starter is
|
|
33
33
|
* written only when its file does not already exist, so user edits are never
|
|
34
34
|
* clobbered.
|
|
35
35
|
*/
|
package/dist/skills/defaults.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Default starter Skills (spec 16) — `seedDefaultSkills` writes three EDITABLE
|
|
3
|
-
* starters into
|
|
3
|
+
* starters into `skills/`, idempotently (it NEVER clobbers a file the user
|
|
4
4
|
* has edited). The starters are:
|
|
5
5
|
*
|
|
6
6
|
* (a) Metrics glossary — pre-filled from the semantic layer (MetricFlow
|
|
@@ -162,7 +162,7 @@ function blockAuthoringSkill() {
|
|
|
162
162
|
};
|
|
163
163
|
}
|
|
164
164
|
/**
|
|
165
|
-
* Seed the editable starter skills into
|
|
165
|
+
* Seed the editable starter skills into `skills/`. Idempotent: a starter is
|
|
166
166
|
* written only when its file does not already exist, so user edits are never
|
|
167
167
|
* clobbered.
|
|
168
168
|
*/
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain skill packs (W4.5).
|
|
3
|
+
*
|
|
4
|
+
* Anthropic's 21%→95% accuracy jump came from curated per-domain reference docs
|
|
5
|
+
* ("skills") that tell the agent the preferred metrics, canonical joins, and
|
|
6
|
+
* gotchas for each domain. This auto-drafts one reference skill per domain from
|
|
7
|
+
* the governed manifest — preferred certified metrics, certified blocks, glossary
|
|
8
|
+
* terms + their caveats — as an editable STARTER. A human curates it (the file is
|
|
9
|
+
* never clobbered on re-seed); it is injected only when retrieval routes to that
|
|
10
|
+
* domain. Distills what the manifest already knows into the shape the agent reads.
|
|
11
|
+
*/
|
|
12
|
+
import type { DQLManifest } from '@duckcodeailabs/dql-core';
|
|
13
|
+
import { type Skill, type WriteSkillInput } from './loader.js';
|
|
14
|
+
/** Build one editable reference skill per domain from the governed manifest. Pure. */
|
|
15
|
+
export declare function buildDomainReferenceSkills(manifest: DQLManifest): WriteSkillInput[];
|
|
16
|
+
/**
|
|
17
|
+
* Seed per-domain reference skills into `skills/`. Idempotent: a domain skill
|
|
18
|
+
* is written only when its file does not already exist, so curator edits are kept.
|
|
19
|
+
*/
|
|
20
|
+
export declare function seedDomainSkills(projectRoot: string, manifest: DQLManifest): {
|
|
21
|
+
created: Skill[];
|
|
22
|
+
skipped: string[];
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=domain-skills.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-skills.d.ts","sourceRoot":"","sources":["../../src/skills/domain-skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAyB,KAAK,KAAK,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAMtF,sFAAsF;AACtF,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe,EAAE,CAsDnF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG;IAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAWpH"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { skillPath, writeSkill } from './loader.js';
|
|
3
|
+
function slug(name) {
|
|
4
|
+
return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') || 'domain';
|
|
5
|
+
}
|
|
6
|
+
/** Build one editable reference skill per domain from the governed manifest. Pure. */
|
|
7
|
+
export function buildDomainReferenceSkills(manifest) {
|
|
8
|
+
const domains = Object.values(manifest.domains ?? {});
|
|
9
|
+
const blocks = Object.values(manifest.blocks ?? {});
|
|
10
|
+
const allMetrics = Object.values(manifest.metrics ?? {});
|
|
11
|
+
const allTerms = Object.values(manifest.terms ?? {});
|
|
12
|
+
const skills = [];
|
|
13
|
+
for (const domain of domains) {
|
|
14
|
+
const name = domain.name;
|
|
15
|
+
if (!name)
|
|
16
|
+
continue;
|
|
17
|
+
const metrics = allMetrics.filter((metric) => metric.domain === name);
|
|
18
|
+
const certifiedBlocks = blocks.filter((block) => block.domain === name && String(block.status ?? '').toLowerCase() === 'certified');
|
|
19
|
+
const terms = allTerms.filter((term) => term.domain === name);
|
|
20
|
+
const body = [
|
|
21
|
+
`# ${name} domain reference`,
|
|
22
|
+
'',
|
|
23
|
+
`Curated guidance for answering questions in the **${name}** domain. Prefer the`,
|
|
24
|
+
'certified metrics and blocks below over ad-hoc SQL, and heed the caveats.',
|
|
25
|
+
'',
|
|
26
|
+
];
|
|
27
|
+
body.push('## Preferred metrics');
|
|
28
|
+
body.push(metrics.length
|
|
29
|
+
? metrics.map((m) => `- **${(m.label && m.label.trim()) || m.name}** (\`${m.name}\`)${m.description ? ` — ${m.description}` : ''}`).join('\n')
|
|
30
|
+
: '_No certified metrics in this domain yet._');
|
|
31
|
+
body.push('', '## Certified blocks');
|
|
32
|
+
body.push(certifiedBlocks.length
|
|
33
|
+
? certifiedBlocks.map((b) => `- \`${b.name}\`${b.description ? ` — ${b.description}` : ''}`).join('\n')
|
|
34
|
+
: '_No certified blocks in this domain yet._');
|
|
35
|
+
const caveats = terms.flatMap((term) => (term.caveats ?? []).map((caveat) => `- ${term.name}: ${caveat}`));
|
|
36
|
+
if (caveats.length) {
|
|
37
|
+
body.push('', '## Gotchas', 'Domain caveats a senior analyst would warn about:', ...caveats);
|
|
38
|
+
}
|
|
39
|
+
body.push('', '_Auto-drafted from the manifest (W4.5). Edit to curate; it will not be overwritten on re-seed._');
|
|
40
|
+
const vocabulary = {};
|
|
41
|
+
for (const term of terms) {
|
|
42
|
+
vocabulary[term.name] = `term:${term.name}`;
|
|
43
|
+
for (const synonym of term.synonyms ?? [])
|
|
44
|
+
vocabulary[synonym] = `term:${term.name}`;
|
|
45
|
+
}
|
|
46
|
+
skills.push({
|
|
47
|
+
id: `domain-${slug(name)}`,
|
|
48
|
+
scope: 'project',
|
|
49
|
+
domain: name,
|
|
50
|
+
description: `Reference for the ${name} domain: preferred metrics, certified blocks, and gotchas.`,
|
|
51
|
+
preferredMetrics: metrics.map((m) => m.name),
|
|
52
|
+
preferredBlocks: certifiedBlocks.map((b) => b.name),
|
|
53
|
+
vocabulary,
|
|
54
|
+
body: body.join('\n'),
|
|
55
|
+
isStarter: true,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return skills;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Seed per-domain reference skills into `skills/`. Idempotent: a domain skill
|
|
62
|
+
* is written only when its file does not already exist, so curator edits are kept.
|
|
63
|
+
*/
|
|
64
|
+
export function seedDomainSkills(projectRoot, manifest) {
|
|
65
|
+
const created = [];
|
|
66
|
+
const skipped = [];
|
|
67
|
+
for (const skill of buildDomainReferenceSkills(manifest)) {
|
|
68
|
+
if (existsSync(skillPath(projectRoot, skill.id))) {
|
|
69
|
+
skipped.push(skill.id);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
created.push(writeSkill(projectRoot, skill));
|
|
73
|
+
}
|
|
74
|
+
return { created, skipped };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=domain-skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-skills.js","sourceRoot":"","sources":["../../src/skills/domain-skills.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/loader.d.ts
CHANGED
|
@@ -27,9 +27,21 @@ export interface Skill {
|
|
|
27
27
|
user?: string;
|
|
28
28
|
/** Optional domain this skill belongs to (spec 17, part B). */
|
|
29
29
|
domain?: string;
|
|
30
|
+
/** Domain paths for cross-domain skills. `domain` remains backward compatible. */
|
|
31
|
+
domains?: string[];
|
|
32
|
+
kind?: 'domain_reference' | 'metric_policy' | 'glossary' | 'analysis_pattern' | 'sql_policy' | 'custom';
|
|
33
|
+
status?: 'draft' | 'active' | 'deprecated';
|
|
34
|
+
owner?: string;
|
|
35
|
+
triggers?: string[];
|
|
36
|
+
exclusions?: string[];
|
|
30
37
|
description?: string;
|
|
31
38
|
preferredMetrics: string[];
|
|
32
39
|
preferredBlocks: string[];
|
|
40
|
+
preferredDimensions?: string[];
|
|
41
|
+
requiredFilters?: string[];
|
|
42
|
+
clarifyWhen?: string[];
|
|
43
|
+
examples?: string[];
|
|
44
|
+
sourceRefs?: string[];
|
|
33
45
|
vocabulary: Record<string, string>;
|
|
34
46
|
/** Markdown body (everything after the closing `---`). */
|
|
35
47
|
body: string;
|
|
@@ -45,16 +57,20 @@ export interface SkillLoadResult {
|
|
|
45
57
|
}>;
|
|
46
58
|
}
|
|
47
59
|
/**
|
|
48
|
-
* Walk
|
|
60
|
+
* Walk the visible, Git-owned `skills/**` tree. The historical
|
|
61
|
+
* `.dql/skills/**` tree remains read-compatible during migration, but a skill
|
|
62
|
+
* with the same id in `skills/` wins so projects can move incrementally.
|
|
49
63
|
* Misformed files are reported in `errors`; valid Skills still come back.
|
|
50
64
|
*/
|
|
51
65
|
export declare function loadSkills(projectRoot: string): SkillLoadResult;
|
|
52
66
|
/** Public for tests. */
|
|
53
67
|
export declare function parseSkill(raw: string, path: string): Skill | null;
|
|
54
|
-
/**
|
|
68
|
+
/** Visible Git-owned skills directory for new and upgraded OSS projects. */
|
|
55
69
|
export declare function skillsDir(projectRoot: string): string;
|
|
70
|
+
/** Historical local-state location, retained only as a read/migration source. */
|
|
71
|
+
export declare function legacySkillsDir(projectRoot: string): string;
|
|
56
72
|
/** Resolve the `.skill.md` path a skill should be written to. */
|
|
57
|
-
export declare function skillPath(projectRoot: string, id: string): string;
|
|
73
|
+
export declare function skillPath(projectRoot: string, id: string, domains?: string[]): string;
|
|
58
74
|
/**
|
|
59
75
|
* Render a Skill back to the EXACT `.skill.md` format `parseSkill` consumes, so
|
|
60
76
|
* `parseSkill(renderSkill(s))` round-trips. Only emits keys that have content.
|
|
@@ -65,22 +81,38 @@ export interface WriteSkillInput {
|
|
|
65
81
|
scope: 'project' | 'personal';
|
|
66
82
|
user?: string;
|
|
67
83
|
domain?: string;
|
|
84
|
+
domains?: string[];
|
|
85
|
+
kind?: Skill['kind'];
|
|
86
|
+
status?: Skill['status'];
|
|
87
|
+
owner?: string;
|
|
88
|
+
triggers?: string[];
|
|
89
|
+
exclusions?: string[];
|
|
68
90
|
description?: string;
|
|
69
91
|
preferredMetrics?: string[];
|
|
70
92
|
preferredBlocks?: string[];
|
|
93
|
+
preferredDimensions?: string[];
|
|
94
|
+
requiredFilters?: string[];
|
|
95
|
+
clarifyWhen?: string[];
|
|
96
|
+
examples?: string[];
|
|
97
|
+
sourceRefs?: string[];
|
|
71
98
|
vocabulary?: Record<string, string>;
|
|
72
99
|
body?: string;
|
|
73
100
|
isStarter?: boolean;
|
|
74
101
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Write a skill to `.dql/skills/<id>.skill.md` (overwriting if present). Returns
|
|
77
|
-
* the persisted Skill as re-read from disk so callers see the canonical form.
|
|
78
|
-
*/
|
|
102
|
+
/** Write a skill to `skills/<id>.skill.md`, the shared source location. */
|
|
79
103
|
export declare function writeSkill(projectRoot: string, input: WriteSkillInput): Skill;
|
|
80
104
|
/** Alias for `writeSkill` — create-or-update by id. */
|
|
81
105
|
export declare function upsertSkill(projectRoot: string, input: WriteSkillInput): Skill;
|
|
82
|
-
/** Delete
|
|
106
|
+
/** Delete a skill from its actual source path. Returns true when a file was removed. */
|
|
83
107
|
export declare function deleteSkill(projectRoot: string, id: string): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Explicit one-way OSS layout upgrade. Moves legacy skills into the visible
|
|
110
|
+
* source tree without overwriting a skill already migrated by a teammate.
|
|
111
|
+
*/
|
|
112
|
+
export declare function migrateLegacySkills(projectRoot: string): {
|
|
113
|
+
moved: string[];
|
|
114
|
+
skipped: string[];
|
|
115
|
+
};
|
|
84
116
|
/**
|
|
85
117
|
* Compose Skills into a single system-prompt fragment for the agent.
|
|
86
118
|
* Filtered by user when a persona is active.
|
|
@@ -88,6 +120,10 @@ export declare function deleteSkill(projectRoot: string, id: string): boolean;
|
|
|
88
120
|
export declare function buildSkillsPrompt(skills: Skill[], userId: string | null): string;
|
|
89
121
|
export declare function activeSkills(skills: Skill[], userId: string | null): Skill[];
|
|
90
122
|
export declare function buildSkillBlockHints(skills: Skill[], userId: string | null): string[];
|
|
123
|
+
/** Metric ids a selected skill may prefer, including vocabulary aliases. */
|
|
124
|
+
export declare function buildSkillMetricHints(skills: Skill[], userId: string | null): string[];
|
|
125
|
+
/** Add governed metric aliases to retrieval text without changing the user request. */
|
|
126
|
+
export declare function expandQuestionWithSkillVocabulary(question: string, skills: Skill[], userId: string | null): string;
|
|
91
127
|
export interface SelectRelevantSkillsOptions {
|
|
92
128
|
/** Active user — gates personal skills (only this user's are eligible). */
|
|
93
129
|
userId?: string | null;
|
|
@@ -99,6 +135,8 @@ export interface SelectRelevantSkillsOptions {
|
|
|
99
135
|
* kept when they are in-scope for the active user.
|
|
100
136
|
*/
|
|
101
137
|
pinnedIds?: string[];
|
|
138
|
+
/** Domains inferred from the retrieved metadata context for this question. */
|
|
139
|
+
domains?: string[];
|
|
102
140
|
}
|
|
103
141
|
/**
|
|
104
142
|
* Rank in-scope skills by topic/vocabulary match to `question` and return the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|