@llm-dev-ops/agentics-cli 2.3.0 → 2.5.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/agents/repo-agent-runner.d.ts +2 -0
- package/dist/agents/repo-agent-runner.d.ts.map +1 -1
- package/dist/agents/repo-agent-runner.js +4 -2
- package/dist/agents/repo-agent-runner.js.map +1 -1
- package/dist/agents/system-prompts.d.ts.map +1 -1
- package/dist/agents/system-prompts.js +19 -0
- package/dist/agents/system-prompts.js.map +1 -1
- package/dist/commands/agents.d.ts +7 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +115 -3
- package/dist/commands/agents.js.map +1 -1
- package/dist/config/qe-gating.d.ts +81 -0
- package/dist/config/qe-gating.d.ts.map +1 -0
- package/dist/config/qe-gating.js +138 -0
- package/dist/config/qe-gating.js.map +1 -0
- package/dist/pipeline/auto-chain.d.ts +117 -0
- package/dist/pipeline/auto-chain.d.ts.map +1 -1
- package/dist/pipeline/auto-chain.js +1047 -35
- package/dist/pipeline/auto-chain.js.map +1 -1
- package/dist/pipeline/phase2/phases/prompt-generator.d.ts.map +1 -1
- package/dist/pipeline/phase2/phases/prompt-generator.js +152 -6
- package/dist/pipeline/phase2/phases/prompt-generator.js.map +1 -1
- package/dist/pipeline/phase4-5-pre-render/financial-model.d.ts +51 -0
- package/dist/pipeline/phase4-5-pre-render/financial-model.d.ts.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/financial-model.js +118 -0
- package/dist/pipeline/phase4-5-pre-render/financial-model.js.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/post-render-reconciler.d.ts +53 -0
- package/dist/pipeline/phase4-5-pre-render/post-render-reconciler.d.ts.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/post-render-reconciler.js +130 -0
- package/dist/pipeline/phase4-5-pre-render/post-render-reconciler.js.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/pre-render-coordinator.d.ts +47 -0
- package/dist/pipeline/phase4-5-pre-render/pre-render-coordinator.d.ts.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/pre-render-coordinator.js +105 -0
- package/dist/pipeline/phase4-5-pre-render/pre-render-coordinator.js.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/sector-baselines.d.ts +42 -0
- package/dist/pipeline/phase4-5-pre-render/sector-baselines.d.ts.map +1 -0
- package/dist/pipeline/phase4-5-pre-render/sector-baselines.js +117 -0
- package/dist/pipeline/phase4-5-pre-render/sector-baselines.js.map +1 -0
- package/dist/pipeline/phase5-build/phases/post-generation-validator.d.ts.map +1 -1
- package/dist/pipeline/phase5-build/phases/post-generation-validator.js +341 -1
- package/dist/pipeline/phase5-build/phases/post-generation-validator.js.map +1 -1
- package/dist/pipeline/phase5-build/qe-gating-executor.d.ts +73 -0
- package/dist/pipeline/phase5-build/qe-gating-executor.d.ts.map +1 -0
- package/dist/pipeline/phase5-build/qe-gating-executor.js +134 -0
- package/dist/pipeline/phase5-build/qe-gating-executor.js.map +1 -0
- package/dist/pipeline/types.d.ts +4 -1
- package/dist/pipeline/types.d.ts.map +1 -1
- package/dist/pipeline/types.js +9 -1
- package/dist/pipeline/types.js.map +1 -1
- package/dist/promotion/graph-diff.d.ts +39 -0
- package/dist/promotion/graph-diff.d.ts.map +1 -0
- package/dist/promotion/graph-diff.js +60 -0
- package/dist/promotion/graph-diff.js.map +1 -0
- package/dist/promotion/sampler-lib.d.ts +45 -0
- package/dist/promotion/sampler-lib.d.ts.map +1 -0
- package/dist/promotion/sampler-lib.js +96 -0
- package/dist/promotion/sampler-lib.js.map +1 -0
- package/dist/routing/domain-boundary.d.ts +92 -0
- package/dist/routing/domain-boundary.d.ts.map +1 -0
- package/dist/routing/domain-boundary.js +208 -0
- package/dist/routing/domain-boundary.js.map +1 -0
- package/dist/routing/index.d.ts +2 -0
- package/dist/routing/index.d.ts.map +1 -1
- package/dist/routing/index.js +4 -0
- package/dist/routing/index.js.map +1 -1
- package/dist/synthesis/domain-unit-registry.d.ts +1 -1
- package/dist/synthesis/domain-unit-registry.d.ts.map +1 -1
- package/dist/synthesis/domain-unit-registry.js +26 -0
- package/dist/synthesis/domain-unit-registry.js.map +1 -1
- package/dist/synthesis/financial-claim-extractor.d.ts +20 -0
- package/dist/synthesis/financial-claim-extractor.d.ts.map +1 -1
- package/dist/synthesis/financial-claim-extractor.js +31 -0
- package/dist/synthesis/financial-claim-extractor.js.map +1 -1
- package/dist/synthesis/financial-consistency-rules.d.ts +4 -0
- package/dist/synthesis/financial-consistency-rules.d.ts.map +1 -1
- package/dist/synthesis/financial-consistency-rules.js +51 -0
- package/dist/synthesis/financial-consistency-rules.js.map +1 -1
- package/dist/synthesis/roadmap-dates.d.ts +72 -0
- package/dist/synthesis/roadmap-dates.d.ts.map +1 -0
- package/dist/synthesis/roadmap-dates.js +203 -0
- package/dist/synthesis/roadmap-dates.js.map +1 -0
- package/dist/synthesis/simulation-artifact-generator.d.ts.map +1 -1
- package/dist/synthesis/simulation-artifact-generator.js +46 -0
- package/dist/synthesis/simulation-artifact-generator.js.map +1 -1
- package/dist/synthesis/simulation-renderers.d.ts.map +1 -1
- package/dist/synthesis/simulation-renderers.js +139 -34
- package/dist/synthesis/simulation-renderers.js.map +1 -1
- package/docs/ecosystem.graph.json +87 -14
- package/package.json +1 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure logic for the promotion sampler (ADR-PIPELINE-084 §2.1).
|
|
3
|
+
*
|
|
4
|
+
* Parses, filters, and samples domain agent findings for human FP-rate review.
|
|
5
|
+
* The CLI wrapper lives in tools/promotion-sampler.ts and handles I/O + args;
|
|
6
|
+
* all deterministic logic is here and independently testable.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Parse a blob that is either JSON array of findings or newline-delimited
|
|
10
|
+
* JSON (JSONL). Returns [] for empty input.
|
|
11
|
+
*/
|
|
12
|
+
export function parseFindings(raw) {
|
|
13
|
+
const trimmed = raw.trim();
|
|
14
|
+
if (!trimmed)
|
|
15
|
+
return [];
|
|
16
|
+
if (trimmed.startsWith('[')) {
|
|
17
|
+
const arr = JSON.parse(trimmed);
|
|
18
|
+
return Array.isArray(arr) ? arr : [];
|
|
19
|
+
}
|
|
20
|
+
return trimmed
|
|
21
|
+
.split('\n')
|
|
22
|
+
.map(l => l.trim())
|
|
23
|
+
.filter(l => l.length > 0)
|
|
24
|
+
.map(l => JSON.parse(l));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Keep findings from the specified domain whose timestamps fall within
|
|
28
|
+
* [now - windowDays, now].
|
|
29
|
+
*/
|
|
30
|
+
export function filterInWindow(findings, domain, windowDays, now = new Date()) {
|
|
31
|
+
const cutoff = new Date(now.getTime() - windowDays * 24 * 60 * 60 * 1000);
|
|
32
|
+
return findings.filter(f => {
|
|
33
|
+
if (f.domain !== domain)
|
|
34
|
+
return false;
|
|
35
|
+
const ts = new Date(f.timestamp);
|
|
36
|
+
return ts >= cutoff && ts <= now;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Keep only blocking findings (ADR-084 §2 — FP rate is computed against
|
|
41
|
+
* findings the agent marked blocking).
|
|
42
|
+
*/
|
|
43
|
+
export function filterBlocking(findings) {
|
|
44
|
+
return findings.filter(f => f.blocking === true);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Draw a random sample. Size = max(floor(0.1 * N), 30), capped at 200.
|
|
48
|
+
* If N ≤ 30, returns everything.
|
|
49
|
+
*/
|
|
50
|
+
export function drawSample(findings, options = {}) {
|
|
51
|
+
const n = findings.length;
|
|
52
|
+
if (n === 0)
|
|
53
|
+
return [];
|
|
54
|
+
if (n <= 30)
|
|
55
|
+
return [...findings];
|
|
56
|
+
const tenPercent = Math.floor(n * 0.1);
|
|
57
|
+
const targetSize = Math.min(Math.max(tenPercent, 30), 200);
|
|
58
|
+
const rng = makeRng(options.seed ?? Date.now());
|
|
59
|
+
const copy = [...findings];
|
|
60
|
+
for (let i = 0; i < targetSize; i++) {
|
|
61
|
+
const j = i + Math.floor(rng() * (copy.length - i));
|
|
62
|
+
const tmp = copy[i];
|
|
63
|
+
copy[i] = copy[j];
|
|
64
|
+
copy[j] = tmp;
|
|
65
|
+
}
|
|
66
|
+
return copy.slice(0, targetSize);
|
|
67
|
+
}
|
|
68
|
+
function makeRng(seed) {
|
|
69
|
+
// Mulberry32 — deterministic, seedable PRNG for reproducible tests.
|
|
70
|
+
let a = seed >>> 0;
|
|
71
|
+
return () => {
|
|
72
|
+
a = (a + 0x6d2b79f5) >>> 0;
|
|
73
|
+
let t = a;
|
|
74
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
75
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
76
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Emit a CSV with a blank fp_label column for the reviewer.
|
|
81
|
+
*/
|
|
82
|
+
export function toCsv(sample) {
|
|
83
|
+
const header = 'id,timestamp,domain,agent,severity,blocking,summary,fp_label';
|
|
84
|
+
const rows = sample.map(f => {
|
|
85
|
+
const summary = escapeCsv(f.summary ?? '');
|
|
86
|
+
return [f.id, f.timestamp, f.domain, f.agent, f.severity, f.blocking, summary, ''].join(',');
|
|
87
|
+
});
|
|
88
|
+
return [header, ...rows].join('\n') + '\n';
|
|
89
|
+
}
|
|
90
|
+
function escapeCsv(value) {
|
|
91
|
+
if (/[,"\n]/.test(value)) {
|
|
92
|
+
return `"${value.replace(/"/g, '""')}"`;
|
|
93
|
+
}
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=sampler-lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampler-lib.js","sourceRoot":"","sources":["../../src/promotion/sampler-lib.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAExB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAc,CAAC;QAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,OAAO;SACX,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAY,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAmB,EACnB,MAAc,EACd,UAAkB,EAClB,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACzB,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,GAAG,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAmB;IAChD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,QAAmB,EAAE,UAAyB,EAAE;IACzE,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACvB,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;IAElC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACnB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,oEAAoE;IACpE,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IACnB,OAAO,GAAG,EAAE;QACV,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,MAAiB;IACrC,MAAM,MAAM,GAAG,8DAA8D,CAAC;IAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Boundary Resolution (ADR-PIPELINE-082)
|
|
3
|
+
*
|
|
4
|
+
* Disambiguation rules for overlapping capability keywords and tie-break rules
|
|
5
|
+
* for domain ownership. Used to resolve which domain should handle a query
|
|
6
|
+
* when multiple domains could legitimately claim the same tag.
|
|
7
|
+
*
|
|
8
|
+
* Two rule types:
|
|
9
|
+
* 1. DISAMBIGUATION_RULES — modifier-based routing (ADR-082 §3).
|
|
10
|
+
* "regression" alone → test_bench; "regression test" → quality_engineering.
|
|
11
|
+
* 2. TIE_BREAK_RULES — priority resolution (ADR-082 §4).
|
|
12
|
+
* "security" always goes to safety (shield), never quality_engineering.
|
|
13
|
+
*
|
|
14
|
+
* This module is declarative; callers (capability classifier, agentics ask)
|
|
15
|
+
* consult it to refine routing decisions. It performs no I/O and is safe to
|
|
16
|
+
* import anywhere.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* A disambiguation rule for a keyword that could route to multiple domains
|
|
20
|
+
* depending on nearby modifiers in the prompt.
|
|
21
|
+
*/
|
|
22
|
+
export interface DisambiguationRule {
|
|
23
|
+
/** Trigger keyword that activates this rule (lowercase). */
|
|
24
|
+
readonly trigger: string;
|
|
25
|
+
/** Ordered modifier patterns. First match wins. */
|
|
26
|
+
readonly modifiers: readonly {
|
|
27
|
+
pattern: RegExp;
|
|
28
|
+
domain: string;
|
|
29
|
+
}[];
|
|
30
|
+
/** Domain used when no modifier matches. */
|
|
31
|
+
readonly defaultDomain: string;
|
|
32
|
+
/** Human-readable rationale tied to ADR-082. */
|
|
33
|
+
readonly note: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* A tie-break rule declaring that one domain always wins a keyword over
|
|
37
|
+
* another. Used to enforce the capability ownership boundary from ADR-082 §1.
|
|
38
|
+
*/
|
|
39
|
+
export interface TieBreakRule {
|
|
40
|
+
/** Keyword that triggers this rule (lowercase). */
|
|
41
|
+
readonly keyword: string;
|
|
42
|
+
/** The domain that wins — its capabilities stay. */
|
|
43
|
+
readonly winner: string;
|
|
44
|
+
/**
|
|
45
|
+
* Domains whose capabilities are suppressed when this keyword is present
|
|
46
|
+
* AND they would otherwise match. Empty means "both stay" (complementary).
|
|
47
|
+
*/
|
|
48
|
+
readonly suppress: readonly string[];
|
|
49
|
+
/** Human-readable rationale. */
|
|
50
|
+
readonly note: string;
|
|
51
|
+
}
|
|
52
|
+
/** Result of resolving a prompt against the boundary rules. */
|
|
53
|
+
export interface BoundaryResolution {
|
|
54
|
+
/** Disambiguation resolutions: keyword → winning domain. */
|
|
55
|
+
readonly disambiguations: ReadonlyMap<string, string>;
|
|
56
|
+
/** Suppressed domains — their capabilities should be filtered from routing. */
|
|
57
|
+
readonly suppressedDomains: ReadonlySet<string>;
|
|
58
|
+
/** Applied rules for explain/debug. */
|
|
59
|
+
readonly appliedRules: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Modifier-based disambiguation rules. Order within modifiers[] matters:
|
|
63
|
+
* the first matching modifier wins, so more specific patterns come first.
|
|
64
|
+
*/
|
|
65
|
+
export declare const DISAMBIGUATION_RULES: readonly DisambiguationRule[];
|
|
66
|
+
/**
|
|
67
|
+
* Priority resolution: certain keywords always belong to one domain regardless
|
|
68
|
+
* of what other domains might tag. Enforces the capability ownership boundary
|
|
69
|
+
* declared in ADR-082 §1 (Shield owns security, Latency-Lens owns perf, etc.).
|
|
70
|
+
*
|
|
71
|
+
* Note on domain names: ecosystem.graph.json uses underscores
|
|
72
|
+
* ("quality_engineering"), the CLI runner uses hyphens ("quality-engineering").
|
|
73
|
+
* These rules use the graph names (underscored) to match what the classifier
|
|
74
|
+
* emits.
|
|
75
|
+
*/
|
|
76
|
+
export declare const TIE_BREAK_RULES: readonly TieBreakRule[];
|
|
77
|
+
/**
|
|
78
|
+
* Apply ADR-082 boundary rules to a user prompt.
|
|
79
|
+
* Returns disambiguation decisions and suppressed domains.
|
|
80
|
+
*/
|
|
81
|
+
export declare function resolveDomainBoundary(prompt: string): BoundaryResolution;
|
|
82
|
+
/**
|
|
83
|
+
* Check whether a domain should be filtered from routing given the prompt.
|
|
84
|
+
* Convenience wrapper over resolveDomainBoundary.
|
|
85
|
+
*/
|
|
86
|
+
export declare function isDomainSuppressed(domain: string, prompt: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Resolve a single keyword to its routing domain, applying both disambiguation
|
|
89
|
+
* and tie-break rules. Returns null if the keyword is not governed by any rule.
|
|
90
|
+
*/
|
|
91
|
+
export declare function routeKeyword(keyword: string, prompt: string): string | null;
|
|
92
|
+
//# sourceMappingURL=domain-boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-boundary.d.ts","sourceRoot":"","sources":["../../src/routing/domain-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnE,4CAA4C;IAC5C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,mDAAmD;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,gCAAgC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,+DAA+D;AAC/D,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,+EAA+E;IAC/E,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAChD,uCAAuC;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAMD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,kBAAkB,EAqC7D,CAAC;AAMF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EA0BlD,CAAC;AAMF;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA2CxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB3E"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain Boundary Resolution (ADR-PIPELINE-082)
|
|
3
|
+
*
|
|
4
|
+
* Disambiguation rules for overlapping capability keywords and tie-break rules
|
|
5
|
+
* for domain ownership. Used to resolve which domain should handle a query
|
|
6
|
+
* when multiple domains could legitimately claim the same tag.
|
|
7
|
+
*
|
|
8
|
+
* Two rule types:
|
|
9
|
+
* 1. DISAMBIGUATION_RULES — modifier-based routing (ADR-082 §3).
|
|
10
|
+
* "regression" alone → test_bench; "regression test" → quality_engineering.
|
|
11
|
+
* 2. TIE_BREAK_RULES — priority resolution (ADR-082 §4).
|
|
12
|
+
* "security" always goes to safety (shield), never quality_engineering.
|
|
13
|
+
*
|
|
14
|
+
* This module is declarative; callers (capability classifier, agentics ask)
|
|
15
|
+
* consult it to refine routing decisions. It performs no I/O and is safe to
|
|
16
|
+
* import anywhere.
|
|
17
|
+
*/
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// Rules — ADR-082 §3
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Modifier-based disambiguation rules. Order within modifiers[] matters:
|
|
23
|
+
* the first matching modifier wins, so more specific patterns come first.
|
|
24
|
+
*/
|
|
25
|
+
export const DISAMBIGUATION_RULES = [
|
|
26
|
+
{
|
|
27
|
+
trigger: 'regression',
|
|
28
|
+
modifiers: [
|
|
29
|
+
{ pattern: /\btests?\b/i, domain: 'quality_engineering' },
|
|
30
|
+
{ pattern: /\b(models?|qualit(?:y|ies))\b/i, domain: 'test_bench' },
|
|
31
|
+
],
|
|
32
|
+
defaultDomain: 'test_bench',
|
|
33
|
+
note: 'ADR-082 §3: "regression test" → QE; "model regression" → test_bench',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
trigger: 'quality',
|
|
37
|
+
modifiers: [
|
|
38
|
+
{ pattern: /\b(code|tests?)\s+qualit(?:y|ies)\b/i, domain: 'quality_engineering' },
|
|
39
|
+
{ pattern: /\b(models?|outputs?)\s+qualit(?:y|ies)\b/i, domain: 'test_bench' },
|
|
40
|
+
],
|
|
41
|
+
defaultDomain: 'quality_engineering',
|
|
42
|
+
note: 'ADR-082 §3: code/test quality → QE; model/output quality → test_bench',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
trigger: 'evaluation',
|
|
46
|
+
modifiers: [
|
|
47
|
+
{ pattern: /\b(code|tests?|coverage|defects?)\b/i, domain: 'quality_engineering' },
|
|
48
|
+
{ pattern: /\b(models?|prompts?|llms?)\b/i, domain: 'test_bench' },
|
|
49
|
+
],
|
|
50
|
+
defaultDomain: 'test_bench',
|
|
51
|
+
note: 'ADR-082 §3: code/test evaluation → QE; model/prompt evaluation → test_bench',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
trigger: 'synthetic',
|
|
55
|
+
modifiers: [
|
|
56
|
+
{ pattern: /\b(tests?|fixtures?|mocks?)\b/i, domain: 'quality_engineering' },
|
|
57
|
+
{ pattern: /\b(benchmarks?|datasets?|training)\b/i, domain: 'test_bench' },
|
|
58
|
+
],
|
|
59
|
+
defaultDomain: 'test_bench',
|
|
60
|
+
note: 'ADR-082 §3: synthetic test data → QE; synthetic benchmark data → test_bench',
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Rules — ADR-082 §4
|
|
65
|
+
// ============================================================================
|
|
66
|
+
/**
|
|
67
|
+
* Priority resolution: certain keywords always belong to one domain regardless
|
|
68
|
+
* of what other domains might tag. Enforces the capability ownership boundary
|
|
69
|
+
* declared in ADR-082 §1 (Shield owns security, Latency-Lens owns perf, etc.).
|
|
70
|
+
*
|
|
71
|
+
* Note on domain names: ecosystem.graph.json uses underscores
|
|
72
|
+
* ("quality_engineering"), the CLI runner uses hyphens ("quality-engineering").
|
|
73
|
+
* These rules use the graph names (underscored) to match what the classifier
|
|
74
|
+
* emits.
|
|
75
|
+
*/
|
|
76
|
+
export const TIE_BREAK_RULES = [
|
|
77
|
+
// Safety (Shield) owns security (ADR-082 §1 + §4)
|
|
78
|
+
{ keyword: 'security', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns security per ADR-082 §1' },
|
|
79
|
+
{ keyword: 'sast', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns SAST per ADR-082 §1' },
|
|
80
|
+
{ keyword: 'dast', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns DAST per ADR-082 §1' },
|
|
81
|
+
{ keyword: 'vulnerability', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns vulnerability scanning per ADR-082 §1' },
|
|
82
|
+
{ keyword: 'penetration', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns pentest per ADR-082 §1' },
|
|
83
|
+
// Performance Profiling (Latency-Lens) owns perf measurement, QE complements with chaos stressing
|
|
84
|
+
{ keyword: 'latency', winner: 'performance_profiling', suppress: [], note: 'Latency-Lens owns perf measurement; QE complements via chaos. Both stay.' },
|
|
85
|
+
{ keyword: 'cold-start', winner: 'performance_profiling', suppress: [], note: 'Latency-Lens owns cold-start; ADR-082 §4' },
|
|
86
|
+
// Data Privacy (Data-Vault) owns anonymization
|
|
87
|
+
{ keyword: 'anonymize', winner: 'data_security', suppress: ['quality_engineering'], note: 'Data-Vault owns anonymization per ADR-082 §1' },
|
|
88
|
+
{ keyword: 'pii', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns PII detection per ADR-082 §1' },
|
|
89
|
+
{ keyword: 'redaction', winner: 'safety', suppress: ['quality_engineering'], note: 'Shield owns redaction per ADR-082 §1' },
|
|
90
|
+
// ERP boundary (connector-hub + ERP-Surface, ADR-074)
|
|
91
|
+
{ keyword: 'sap', winner: 'connector_hub', suppress: ['quality_engineering'], note: 'ERP surface boundary — connector-hub owns SAP integration per ADR-082 §1 + ADR-074' },
|
|
92
|
+
{ keyword: 'oracle', winner: 'connector_hub', suppress: ['quality_engineering'], note: 'ERP surface boundary per ADR-074' },
|
|
93
|
+
{ keyword: 'workday', winner: 'connector_hub', suppress: ['quality_engineering'], note: 'ERP surface boundary per ADR-074' },
|
|
94
|
+
{ keyword: 'soap', winner: 'connector_hub', suppress: ['quality_engineering'], note: 'Enterprise integration surface per ADR-082 §1' },
|
|
95
|
+
{ keyword: 'odata', winner: 'connector_hub', suppress: ['quality_engineering'], note: 'Enterprise integration surface per ADR-082 §1' },
|
|
96
|
+
// Memory/learning (Memory-Graph)
|
|
97
|
+
{ keyword: 'learning', winner: 'memory_context', suppress: ['quality_engineering'], note: 'Memory-Graph owns cross-session learning per ADR-082 §1' },
|
|
98
|
+
];
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// Resolvers
|
|
101
|
+
// ============================================================================
|
|
102
|
+
/**
|
|
103
|
+
* Apply ADR-082 boundary rules to a user prompt.
|
|
104
|
+
* Returns disambiguation decisions and suppressed domains.
|
|
105
|
+
*/
|
|
106
|
+
export function resolveDomainBoundary(prompt) {
|
|
107
|
+
const promptLower = prompt.toLowerCase();
|
|
108
|
+
const disambiguations = new Map();
|
|
109
|
+
const suppressedDomains = new Set();
|
|
110
|
+
const appliedRules = [];
|
|
111
|
+
// Disambiguation rules
|
|
112
|
+
for (const rule of DISAMBIGUATION_RULES) {
|
|
113
|
+
if (!wordPresent(promptLower, rule.trigger))
|
|
114
|
+
continue;
|
|
115
|
+
let matched = false;
|
|
116
|
+
for (const mod of rule.modifiers) {
|
|
117
|
+
if (mod.pattern.test(prompt)) {
|
|
118
|
+
disambiguations.set(rule.trigger, mod.domain);
|
|
119
|
+
appliedRules.push(`disambiguation:${rule.trigger}→${mod.domain} (${rule.note})`);
|
|
120
|
+
matched = true;
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!matched) {
|
|
125
|
+
disambiguations.set(rule.trigger, rule.defaultDomain);
|
|
126
|
+
appliedRules.push(`disambiguation:${rule.trigger}→${rule.defaultDomain} (default, ${rule.note})`);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Tie-break rules
|
|
130
|
+
for (const rule of TIE_BREAK_RULES) {
|
|
131
|
+
if (!wordPresent(promptLower, rule.keyword))
|
|
132
|
+
continue;
|
|
133
|
+
for (const loser of rule.suppress) {
|
|
134
|
+
suppressedDomains.add(loser);
|
|
135
|
+
}
|
|
136
|
+
if (rule.suppress.length > 0) {
|
|
137
|
+
appliedRules.push(`tie-break:${rule.keyword}→${rule.winner} (suppress: ${rule.suppress.join(', ')})`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
appliedRules.push(`tie-break:${rule.keyword}→${rule.winner} (complementary, no suppression)`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
disambiguations,
|
|
145
|
+
suppressedDomains,
|
|
146
|
+
appliedRules,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check whether a domain should be filtered from routing given the prompt.
|
|
151
|
+
* Convenience wrapper over resolveDomainBoundary.
|
|
152
|
+
*/
|
|
153
|
+
export function isDomainSuppressed(domain, prompt) {
|
|
154
|
+
return resolveDomainBoundary(prompt).suppressedDomains.has(domain);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Resolve a single keyword to its routing domain, applying both disambiguation
|
|
158
|
+
* and tie-break rules. Returns null if the keyword is not governed by any rule.
|
|
159
|
+
*/
|
|
160
|
+
export function routeKeyword(keyword, prompt) {
|
|
161
|
+
const keywordLower = keyword.toLowerCase();
|
|
162
|
+
// Disambiguation takes precedence when a modifier matches
|
|
163
|
+
for (const rule of DISAMBIGUATION_RULES) {
|
|
164
|
+
if (rule.trigger !== keywordLower)
|
|
165
|
+
continue;
|
|
166
|
+
for (const mod of rule.modifiers) {
|
|
167
|
+
if (mod.pattern.test(prompt))
|
|
168
|
+
return mod.domain;
|
|
169
|
+
}
|
|
170
|
+
return rule.defaultDomain;
|
|
171
|
+
}
|
|
172
|
+
// Fall through to tie-break rules
|
|
173
|
+
for (const rule of TIE_BREAK_RULES) {
|
|
174
|
+
if (rule.keyword === keywordLower)
|
|
175
|
+
return rule.winner;
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
// ============================================================================
|
|
180
|
+
// Internals
|
|
181
|
+
// ============================================================================
|
|
182
|
+
/**
|
|
183
|
+
* Test whether a keyword appears in the prompt as a whole word, allowing
|
|
184
|
+
* common English inflections at the end (plural -s/-es/-ies, participle
|
|
185
|
+
* -ed/-ing).
|
|
186
|
+
*
|
|
187
|
+
* Matches: "security", "securities", "regression", "regressions"
|
|
188
|
+
* "vulnerability", "vulnerabilities", "cold-start", "cold-started"
|
|
189
|
+
* Does not match: "insecurity" (no preceding word boundary)
|
|
190
|
+
*/
|
|
191
|
+
function wordPresent(promptLower, keyword) {
|
|
192
|
+
const escaped = keyword.replace(/[-\s]/g, '[-\\s]').replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
193
|
+
// Allow up to 4 trailing letters to catch common stems (s, es, ed, ing, ies)
|
|
194
|
+
// without matching unrelated long words. The leading boundary remains strict.
|
|
195
|
+
const re = new RegExp(`(?:^|[^a-z0-9_])${escaped}[a-z]{0,4}(?:$|[^a-z0-9_])`, 'i');
|
|
196
|
+
if (re.test(promptLower))
|
|
197
|
+
return true;
|
|
198
|
+
// Handle -y → -ies plurals explicitly (e.g., "vulnerability" → "vulnerabilities")
|
|
199
|
+
if (keyword.endsWith('y')) {
|
|
200
|
+
const stem = keyword.slice(0, -1);
|
|
201
|
+
const escapedStem = stem.replace(/[-\s]/g, '[-\\s]').replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
202
|
+
const iesRe = new RegExp(`(?:^|[^a-z0-9_])${escapedStem}ies(?:$|[^a-z0-9_])`, 'i');
|
|
203
|
+
if (iesRe.test(promptLower))
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=domain-boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-boundary.js","sourceRoot":"","sources":["../../src/routing/domain-boundary.ts"],"names":[],"mappings":"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"}
|
package/dist/routing/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export { isFederatedGraph, loadFragments, federateGraph, fragmentToCapabilityEnt
|
|
|
25
25
|
export type { CapabilityFragment, FederatedRootGraph, FragmentOverride, FederationResult, } from './graph-federation.js';
|
|
26
26
|
export { validateTier1, validateTier3, formatValidationReport, } from './graph-validator.js';
|
|
27
27
|
export type { ValidationTier, ValidationSeverity, ValidationResult, ValidationReport, } from './graph-validator.js';
|
|
28
|
+
export { DISAMBIGUATION_RULES, TIE_BREAK_RULES, resolveDomainBoundary, isDomainSuppressed, routeKeyword, } from './domain-boundary.js';
|
|
29
|
+
export type { DisambiguationRule, TieBreakRule, BoundaryResolution, } from './domain-boundary.js';
|
|
28
30
|
import type { RoutingResult, DomainAgentRef } from './graph-router.js';
|
|
29
31
|
export interface RouteQueryResult {
|
|
30
32
|
/** Full routing result with classification, pipeline, and explanation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,aAAa,EACb,UAAU,EACV,SAAS,EACT,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,GACV,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAW/E"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAEpC,YAAY,EACV,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,YAAY,EACV,aAAa,EACb,UAAU,EACV,SAAS,EACT,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,SAAS,GACV,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAW/E"}
|
package/dist/routing/index.js
CHANGED
|
@@ -35,6 +35,10 @@ export { isFederatedGraph, loadFragments, federateGraph, fragmentToCapabilityEnt
|
|
|
35
35
|
// ============================================================================
|
|
36
36
|
export { validateTier1, validateTier3, formatValidationReport, } from './graph-validator.js';
|
|
37
37
|
// ============================================================================
|
|
38
|
+
// ADR-PIPELINE-082: Domain Boundary Resolution
|
|
39
|
+
// ============================================================================
|
|
40
|
+
export { DISAMBIGUATION_RULES, TIE_BREAK_RULES, resolveDomainBoundary, isDomainSuppressed, routeKeyword, } from './domain-boundary.js';
|
|
41
|
+
// ============================================================================
|
|
38
42
|
// Convenience: one-call routing
|
|
39
43
|
// ============================================================================
|
|
40
44
|
import { loadEcosystemGraph } from './graph-loader.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAU3B,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAShC,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAE/E,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAO9B,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAWjC,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E;AAE/E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAS/B,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAS9B,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAYzE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,SAAkB;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO;QACP,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/routing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAS3B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AAOpC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAU3B,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E,OAAO,EACL,cAAc,EACd,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAShC,+EAA+E;AAC/E,sCAAsC;AACtC,+EAA+E;AAE/E,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAO9B,+EAA+E;AAC/E,qCAAqC;AACrC,+EAA+E;AAE/E,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,yBAAyB,CAAC;AAWjC,+EAA+E;AAC/E,0CAA0C;AAC1C,+EAA+E;AAE/E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAS/B,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAS9B,+EAA+E;AAC/E,+CAA+C;AAC/C,+EAA+E;AAE/E,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,GACb,MAAM,sBAAsB,CAAC;AAQ9B,+EAA+E;AAC/E,gCAAgC;AAChC,+EAA+E;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAYzE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,SAAkB;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,iBAAiB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE1C,OAAO;QACL,OAAO;QACP,MAAM;QACN,OAAO,EAAE,OAAO,CAAC,WAAW,GAAG,CAAC;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Pure functions — no I/O.
|
|
9
9
|
*/
|
|
10
10
|
import type { DomainUnit } from '../pipeline/types.js';
|
|
11
|
-
export type Sector = 'hospitality' | 'commercial-real-estate' | 'fleet' | 'retail' | 'manufacturing' | 'healthcare' | 'data-center' | 'call-center' | 'unknown';
|
|
11
|
+
export type Sector = 'hospitality' | 'commercial-real-estate' | 'fleet' | 'retail' | 'manufacturing' | 'healthcare' | 'data-center' | 'call-center' | 'airline-catering' | 'unknown';
|
|
12
12
|
export interface SectorRegistryEntry {
|
|
13
13
|
readonly sector: Exclude<Sector, 'unknown'>;
|
|
14
14
|
readonly domainUnit: DomainUnit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-unit-registry.d.ts","sourceRoot":"","sources":["../../src/synthesis/domain-unit-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,MAAM,GACd,aAAa,GACb,wBAAwB,GACxB,OAAO,GACP,QAAQ,GACR,eAAe,GACf,YAAY,GACZ,aAAa,GACb,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,mBAAmB,
|
|
1
|
+
{"version":3,"file":"domain-unit-registry.d.ts","sourceRoot":"","sources":["../../src/synthesis/domain-unit-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,MAAM,MAAM,GACd,aAAa,GACb,wBAAwB,GACxB,OAAO,GACP,QAAQ,GACR,eAAe,GACf,YAAY,GACZ,aAAa,GACb,aAAa,GACb,kBAAkB,GAClB,SAAS,CAAC;AAEd,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,mBAAmB,EAgEzD,CAAC;AAMF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAEzE;AAuHD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,CASR;AAqBD,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8BAA8B;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oCAAoC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;CAC1D;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBlE;AAqBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACzB,WAAW,CA2Db"}
|
|
@@ -68,13 +68,35 @@ export const SECTOR_REGISTRY = [
|
|
|
68
68
|
savingsFormula: 'agents × minutes × $/contact-minute',
|
|
69
69
|
unitSavingsKey: 'usd_per_contact_minute',
|
|
70
70
|
},
|
|
71
|
+
{
|
|
72
|
+
sector: 'airline-catering',
|
|
73
|
+
domainUnit: { label: 'meal loaded', abbrev: 'meal' },
|
|
74
|
+
scopeKeys: ['units', 'properties'],
|
|
75
|
+
savingsFormula: 'meals × flights × 365 × $/meal-loaded',
|
|
76
|
+
unitSavingsKey: 'usd_per_meal_loaded',
|
|
77
|
+
},
|
|
71
78
|
];
|
|
72
79
|
const REGISTRY_BY_SECTOR = new Map(SECTOR_REGISTRY.map(e => [e.sector, e]));
|
|
73
80
|
export function getSectorEntry(sector) {
|
|
74
81
|
return REGISTRY_BY_SECTOR.get(sector) ?? null;
|
|
75
82
|
}
|
|
76
83
|
// Hard patterns: unambiguous sector indicators that lock the classification.
|
|
84
|
+
// Order matters — airline-catering must be checked BEFORE hospitality because
|
|
85
|
+
// an airline-catering query ("in-flight catering", "meals") might otherwise
|
|
86
|
+
// match "catering" as hospitality-adjacent.
|
|
77
87
|
const HARD_RULES = [
|
|
88
|
+
{
|
|
89
|
+
sector: 'airline-catering',
|
|
90
|
+
patterns: [
|
|
91
|
+
/\bin[-\s]?flight\s+catering\b/i,
|
|
92
|
+
/\bairline\s+catering\b/i,
|
|
93
|
+
/\bflight\s+catering\b/i,
|
|
94
|
+
/\bmeal\s+planning\b/i,
|
|
95
|
+
/\bmeals?\s+(?:loaded|per\s+flight)\b/i,
|
|
96
|
+
/\bgalley\s+catering\b/i,
|
|
97
|
+
/\b(?:airline|carrier)\s+(?:meal|food|galley)\b/i,
|
|
98
|
+
],
|
|
99
|
+
},
|
|
78
100
|
{
|
|
79
101
|
sector: 'hospitality',
|
|
80
102
|
patterns: [
|
|
@@ -179,6 +201,9 @@ export function classifySector(query, sectorHint) {
|
|
|
179
201
|
}
|
|
180
202
|
function normalizeSectorHint(hint) {
|
|
181
203
|
const h = hint.toLowerCase().trim();
|
|
204
|
+
// airline-catering checked BEFORE hospitality so "hotel catering" doesn't misclassify
|
|
205
|
+
if (/airline[-\s]catering|in[-\s]?flight|flight[-\s]catering|galley/.test(h))
|
|
206
|
+
return 'airline-catering';
|
|
182
207
|
if (/hospitality|hotel|lodging|resort/.test(h))
|
|
183
208
|
return 'hospitality';
|
|
184
209
|
if (/commercial[-\s]real[-\s]estate|cre\b|office|workplace|building/.test(h))
|
|
@@ -219,6 +244,7 @@ export function extractEmployeeCountFromText(query) {
|
|
|
219
244
|
return employees;
|
|
220
245
|
}
|
|
221
246
|
const UNIT_PATTERNS = [
|
|
247
|
+
{ pattern: /(\d[\d,]*)\s*(?:flights?|aircraft)/i, sector: 'airline-catering', unitLabel: 'flights', unitAbbrev: 'flights' },
|
|
222
248
|
{ pattern: /(\d[\d,]*)\s*(?:hotels?|properties|resorts?)/i, sector: 'hospitality', unitLabel: 'rooms', unitAbbrev: 'rooms' },
|
|
223
249
|
{ pattern: /(\d[\d,]*)\s*(?:rooms?)\b/i, sector: 'hospitality', unitLabel: 'rooms', unitAbbrev: 'rooms' },
|
|
224
250
|
{ pattern: /(\d[\d,]*)\s*(?:buildings?|offices?|sites?)/i, sector: 'commercial-real-estate', unitLabel: 'sqft', unitAbbrev: 'sqft' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain-unit-registry.js","sourceRoot":"","sources":["../../src/synthesis/domain-unit-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"domain-unit-registry.js","sourceRoot":"","sources":["../../src/synthesis/domain-unit-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,13 +30,33 @@ export interface FinancialClaim {
|
|
|
30
30
|
readonly line: number;
|
|
31
31
|
/** True when the claim was pulled from an explicit fcv: HTML comment tag. */
|
|
32
32
|
readonly tagged: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* ADR-PIPELINE-073: when the tag carried a `doc=` field, this holds its
|
|
35
|
+
* value. FCR-012 fires when this disagrees with the enclosing document.
|
|
36
|
+
*/
|
|
37
|
+
readonly docTag?: FinancialClaimDocument;
|
|
33
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* ADR-PIPELINE-073: Documents that MUST carry authoritative fcv tags on
|
|
41
|
+
* every money figure. Untagged money figures in these docs fire FCR-011.
|
|
42
|
+
* Other documents (narrative memos, agent output) continue to use
|
|
43
|
+
* proximity-based scope detection as a fallback.
|
|
44
|
+
*/
|
|
45
|
+
export declare const EXPECTS_TAGS: ReadonlySet<FinancialClaimDocument>;
|
|
34
46
|
/**
|
|
35
47
|
* Parse a single currency token like "$1.2M", "$600K", "$1,200,000",
|
|
36
48
|
* "USD 1.2M", or "1.2 million dollars". Returns NaN when the input does not
|
|
37
49
|
* look like a currency amount.
|
|
38
50
|
*/
|
|
39
51
|
export declare function parseCurrency(token: string): number;
|
|
52
|
+
/** ADR-PIPELINE-073: count fcv tags in a document body. */
|
|
53
|
+
export declare function countFcvTags(body: string): number;
|
|
54
|
+
/**
|
|
55
|
+
* ADR-PIPELINE-073: emit an fcv HTML comment tag. Used by renderers.
|
|
56
|
+
* Exported here (not in simulation-renderers) so the extractor and the
|
|
57
|
+
* renderer speak the same grammar.
|
|
58
|
+
*/
|
|
59
|
+
export declare function fcvTag(kind: FinancialClaimKind, scope: FinancialClaimScope, doc: FinancialClaimDocument): string;
|
|
40
60
|
/**
|
|
41
61
|
* Extract FinancialClaim records from a markdown document. The document name
|
|
42
62
|
* is recorded on every claim and becomes the primary key for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"financial-claim-extractor.d.ts","sourceRoot":"","sources":["../../src/synthesis/financial-claim-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,eAAe,GACf,SAAS,GACT,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,GACT,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"financial-claim-extractor.d.ts","sourceRoot":"","sources":["../../src/synthesis/financial-claim-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,sBAAsB,GAC9B,mBAAmB,GACnB,eAAe,GACf,SAAS,GACT,eAAe,GACf,eAAe,GACf,oBAAoB,GACpB,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAC1B,YAAY,GACZ,SAAS,GACT,UAAU,GACV,WAAW,GACX,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,GAC3B,OAAO,GACP,SAAS,GACT,SAAS,GACT,SAAS,GACT,cAAc,GACd,UAAU,CAAC;AAEf,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,sBAAsB,CAM3D,CAAC;AAYH;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsCnD;AA0GD,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CACpB,IAAI,EAAE,kBAAkB,EACxB,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,sBAAsB,GAC1B,MAAM,CAER;AA6BD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,sBAAsB,GAC/B,cAAc,EAAE,CAmClB"}
|