@devflow-tools/context-engine 0.17.2 → 0.17.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/artifact-identity-resolver.d.ts +39 -0
  2. package/dist/artifact-identity-resolver.d.ts.map +1 -0
  3. package/dist/artifact-identity-resolver.js +58 -0
  4. package/dist/artifact-identity-resolver.js.map +1 -0
  5. package/dist/artifact-inventory.d.ts +2 -0
  6. package/dist/artifact-inventory.d.ts.map +1 -1
  7. package/dist/artifact-inventory.js +16 -3
  8. package/dist/artifact-inventory.js.map +1 -1
  9. package/dist/context-engine.d.ts.map +1 -1
  10. package/dist/context-engine.js +1 -0
  11. package/dist/context-engine.js.map +1 -1
  12. package/dist/create-engines.d.ts +2 -0
  13. package/dist/create-engines.d.ts.map +1 -1
  14. package/dist/create-engines.js +3 -1
  15. package/dist/create-engines.js.map +1 -1
  16. package/dist/index.d.ts +10 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/intent-parser.d.ts +2 -0
  21. package/dist/intent-parser.d.ts.map +1 -1
  22. package/dist/intent-parser.js +12 -0
  23. package/dist/intent-parser.js.map +1 -1
  24. package/dist/retrieval-handlers.d.ts.map +1 -1
  25. package/dist/retrieval-handlers.js +60 -1
  26. package/dist/retrieval-handlers.js.map +1 -1
  27. package/dist/retrieval-ledger.d.ts.map +1 -1
  28. package/dist/retrieval-ledger.js +9 -0
  29. package/dist/retrieval-ledger.js.map +1 -1
  30. package/dist/retrieval-task-plan.d.ts +2 -1
  31. package/dist/retrieval-task-plan.d.ts.map +1 -1
  32. package/dist/retrieval-task-plan.js +36 -22
  33. package/dist/retrieval-task-plan.js.map +1 -1
  34. package/dist/semantic-authority-merger.d.ts +11 -0
  35. package/dist/semantic-authority-merger.d.ts.map +1 -0
  36. package/dist/semantic-authority-merger.js +176 -0
  37. package/dist/semantic-authority-merger.js.map +1 -0
  38. package/dist/semantic-resolver.d.ts +19 -0
  39. package/dist/semantic-resolver.d.ts.map +1 -0
  40. package/dist/semantic-resolver.js +49 -0
  41. package/dist/semantic-resolver.js.map +1 -0
  42. package/dist/semantic-route-catalog.d.ts +22 -0
  43. package/dist/semantic-route-catalog.d.ts.map +1 -0
  44. package/dist/semantic-route-catalog.js +53 -0
  45. package/dist/semantic-route-catalog.js.map +1 -0
  46. package/dist/semantic-router.d.ts +40 -0
  47. package/dist/semantic-router.d.ts.map +1 -0
  48. package/dist/semantic-router.js +153 -0
  49. package/dist/semantic-router.js.map +1 -0
  50. package/dist/semantic-structural-evidence.d.ts +20 -0
  51. package/dist/semantic-structural-evidence.d.ts.map +1 -0
  52. package/dist/semantic-structural-evidence.js +84 -0
  53. package/dist/semantic-structural-evidence.js.map +1 -0
  54. package/dist/task-retrieval-orchestrator.d.ts.map +1 -1
  55. package/dist/task-retrieval-orchestrator.js +39 -2
  56. package/dist/task-retrieval-orchestrator.js.map +1 -1
  57. package/package.json +8 -8
@@ -0,0 +1,176 @@
1
+ import { createTaskSemanticFrameV2, semanticEvidenceId, } from '@devflow-tools/sdk';
2
+ const MUTATING_ACTIONS = new Set([
3
+ 'debug', 'create', 'modify', 'format', 'test', 'build', 'install', 'release', 'document',
4
+ ]);
5
+ export function mergeSemanticAuthority(input) {
6
+ const conflicts = [];
7
+ const routeValues = acceptedRouteValues(input.route);
8
+ const sampled = input.sampledFrame;
9
+ const primaryIntent = sampled?.primaryIntent
10
+ ?? asIntent(routeValues.get('intent'))
11
+ ?? input.provisionalFrame.primaryIntent;
12
+ const primaryAction = sampled?.primaryAction
13
+ ?? asAction(routeValues.get('action'))
14
+ ?? input.provisionalFrame.primaryAction;
15
+ const mutating = MUTATING_ACTIONS.has(primaryAction);
16
+ const positiveActionEvidence = input.structural.positiveActionSpans
17
+ .filter(span => span.value === primaryAction || compatibleAction(span.value, primaryAction));
18
+ const evidence = dedupeEvidence([
19
+ ...input.provisionalFrame.evidence,
20
+ ...(sampled?.evidence ?? []),
21
+ ...input.structural.prohibitions,
22
+ ...input.structural.conditions,
23
+ ...positiveActionEvidence,
24
+ ]);
25
+ let state = resolvedState(input.route, sampled);
26
+ let permission = mutating ? 'ambiguous' : 'not_requested';
27
+ let outOfScope = input.route.status === 'out_of_scope' || (sampled?.outOfScope ?? false);
28
+ const routedIntent = asIntent(routeValues.get('intent'));
29
+ if (sampled && routedIntent && routedIntent !== sampled.primaryIntent
30
+ && sampled.confidence.overall >= 0.8
31
+ && (input.route.candidates.find(item => item.route === `intent:${routedIntent}`)?.score ?? 0) >= 0.8) {
32
+ state = 'abstained';
33
+ permission = 'ambiguous';
34
+ conflicts.push({
35
+ field: 'intent',
36
+ leftSource: 'host_sampling',
37
+ rightSource: 'embedding_route',
38
+ resolution: 'abstain',
39
+ });
40
+ }
41
+ else if (input.structural.prohibitions.length > 0) {
42
+ permission = 'explicitly_forbidden';
43
+ conflicts.push({
44
+ field: 'mutationPermission',
45
+ leftSource: sampled ? 'host_sampling' : 'embedding_route',
46
+ rightSource: 'structural',
47
+ resolution: 'prohibition_wins',
48
+ });
49
+ }
50
+ else if (mutating && input.structural.conditions.length > 0) {
51
+ permission = 'conditional';
52
+ }
53
+ else if (mutating && positiveActionEvidence.length > 0 && state === 'resolved') {
54
+ permission = 'explicitly_authorized';
55
+ }
56
+ else if (sampled?.mutationPermission === 'explicitly_forbidden') {
57
+ permission = 'explicitly_forbidden';
58
+ }
59
+ else if (sampled?.mutationPermission === 'conditional') {
60
+ permission = 'conditional';
61
+ }
62
+ else if (mutating) {
63
+ permission = 'ambiguous';
64
+ }
65
+ if (state === 'abstained' || state === 'unavailable')
66
+ permission = 'ambiguous';
67
+ if (state === 'unavailable')
68
+ outOfScope = false;
69
+ const memoryDirective = sampled?.memoryDirective
70
+ ?? asMemoryDirective(routeValues.get('memory'))
71
+ ?? input.provisionalFrame.memoryDirective;
72
+ const frameInput = {
73
+ ...input.provisionalFrame,
74
+ sourceHash: input.sourceHash,
75
+ state,
76
+ primaryIntent,
77
+ primaryAction,
78
+ mutationPermission: permission,
79
+ intents: unique([primaryIntent, ...(sampled?.intents ?? []), ...input.provisionalFrame.intents]),
80
+ entities: unique([
81
+ ...(sampled?.entities ?? []),
82
+ ...input.provisionalFrame.entities,
83
+ ...input.structural.packageVersions.map(item => item.name),
84
+ ]),
85
+ targetAnchors: unique([...input.structural.targetAnchors, ...(sampled?.targetAnchors ?? [])]),
86
+ constraints: unique([...(sampled?.constraints ?? []), ...input.provisionalFrame.constraints]),
87
+ negations: input.structural.prohibitions.map(item => item.value),
88
+ steps: permission === 'conditional' && mutating ? [{
89
+ order: 0,
90
+ action: primaryAction,
91
+ condition: input.structural.conditions[0]?.value ?? sampled?.steps[0]?.condition,
92
+ mutationPermission: 'conditional',
93
+ evidenceIds: evidence
94
+ .filter(item => item.field === 'condition' || item.field === 'action')
95
+ .map(semanticEvidenceId),
96
+ }] : (sampled?.steps ?? []),
97
+ memoryDirective,
98
+ knowledgeNeeds: sampled?.knowledgeNeeds ?? input.provisionalFrame.knowledgeNeeds,
99
+ outOfScope,
100
+ confidence: sampled?.confidence ?? {
101
+ overall: input.route.candidates[0]?.score ?? 0,
102
+ perField: Object.fromEntries([...routeValues.keys()].map(field => [field, input.route.candidates
103
+ .find(item => item.route.startsWith(`${field}:`))?.score ?? 0])),
104
+ },
105
+ evidence,
106
+ resolver: {
107
+ generatedBy: sampled ? 'hybrid'
108
+ : input.route.status === 'accepted' ? 'embedding_router' : 'deterministic',
109
+ ...(input.route.modelId ? { modelId: input.route.modelId } : {}),
110
+ ...(input.route.modelRevision ? { modelRevision: input.route.modelRevision } : {}),
111
+ routeCatalogVersion: input.provisionalFrame.resolver.routeCatalogVersion,
112
+ thresholdVersion: input.route.thresholdVersion,
113
+ },
114
+ createdAt: input.now ?? Date.now(),
115
+ };
116
+ const frame = createTaskSemanticFrameV2(frameInput, input.structural.normalizedPrompt);
117
+ return {
118
+ frame,
119
+ route: input.route,
120
+ sampling: sampled ? { attempted: true, status: 'resolved' } : {
121
+ attempted: false,
122
+ status: input.route.status === 'escalation_required' ? 'unsupported' : 'not_needed',
123
+ },
124
+ conflicts,
125
+ };
126
+ }
127
+ function resolvedState(route, sampled) {
128
+ if (sampled)
129
+ return sampled.state;
130
+ if (route.status === 'accepted')
131
+ return 'resolved';
132
+ if (route.status === 'unavailable')
133
+ return 'unavailable';
134
+ return 'abstained';
135
+ }
136
+ function acceptedRouteValues(route) {
137
+ const values = new Map();
138
+ if (route.status !== 'accepted')
139
+ return values;
140
+ for (const candidate of route.candidates) {
141
+ const separator = candidate.route.indexOf(':');
142
+ if (separator < 1)
143
+ continue;
144
+ const field = candidate.route.slice(0, separator);
145
+ if (!values.has(field))
146
+ values.set(field, candidate.route.slice(separator + 1));
147
+ }
148
+ return values;
149
+ }
150
+ function asIntent(value) {
151
+ return value && [
152
+ 'debug', 'feature', 'refactor', 'understand', 'review', 'performance', 'memory', 'knowledge', 'unknown',
153
+ ].includes(value) ? value : undefined;
154
+ }
155
+ function asAction(value) {
156
+ return value && [
157
+ 'analyze', 'debug', 'create', 'modify', 'format', 'test', 'build', 'install', 'release', 'document', 'unknown',
158
+ ].includes(value) ? value : undefined;
159
+ }
160
+ function asMemoryDirective(value) {
161
+ return value && ['save', 'forget', 'recall', 'none', 'ambiguous'].includes(value)
162
+ ? value
163
+ : undefined;
164
+ }
165
+ function compatibleAction(evidenceValue, action) {
166
+ return (evidenceValue === 'create' && action === 'modify')
167
+ || (evidenceValue === 'modify' && action === 'debug')
168
+ || (evidenceValue === 'build' && action === 'debug');
169
+ }
170
+ function dedupeEvidence(values) {
171
+ return [...new Map(values.map(item => [semanticEvidenceId(item), item])).values()];
172
+ }
173
+ function unique(values) {
174
+ return [...new Set(values)];
175
+ }
176
+ //# sourceMappingURL=semantic-authority-merger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-authority-merger.js","sourceRoot":"","sources":["../src/semantic-authority-merger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type SemanticResolutionResult, type TaskSemanticFrameV2 } from '@devflow-tools/sdk';
2
+ import { SemanticRouter } from './semantic-router.js';
3
+ import { type StructuralSemanticEvidence } from './semantic-structural-evidence.js';
4
+ export declare function createProvisionalSemanticFrame(input: {
5
+ normalizedPrompt: string;
6
+ sourceHash?: string;
7
+ structural: StructuralSemanticEvidence;
8
+ thresholdVersion?: string;
9
+ now?: number;
10
+ }): TaskSemanticFrameV2;
11
+ export declare function resolveLocalSemantics(input: {
12
+ prompt: string;
13
+ router: SemanticRouter;
14
+ provisionalFrame?: TaskSemanticFrameV2;
15
+ command?: string;
16
+ targetAnchors?: string[];
17
+ now?: number;
18
+ }): Promise<SemanticResolutionResult>;
19
+ //# sourceMappingURL=semantic-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-resolver.d.ts","sourceRoot":"","sources":["../src/semantic-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAC;AAG3C,wBAAgB,8BAA8B,CAAC,KAAK,EAAE;IACpD,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,0BAA0B,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,mBAAmB,CA2BtB;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,cAAc,CAAC;IACvB,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAepC"}
@@ -0,0 +1,49 @@
1
+ import { createTaskSemanticFrameV2, semanticTextHash, } from '@devflow-tools/sdk';
2
+ import { mergeSemanticAuthority } from './semantic-authority-merger.js';
3
+ import { extractStructuralSemanticEvidence, } from './semantic-structural-evidence.js';
4
+ import { SEMANTIC_ROUTE_CATALOG } from './semantic-route-catalog.js';
5
+ export function createProvisionalSemanticFrame(input) {
6
+ const forbidden = input.structural.prohibitions.length > 0;
7
+ return createTaskSemanticFrameV2({
8
+ schemaVersion: 'task-semantic-frame.v2',
9
+ sourceHash: input.sourceHash ?? semanticTextHash(input.normalizedPrompt),
10
+ state: 'provisional',
11
+ primaryIntent: 'unknown',
12
+ primaryAction: 'analyze',
13
+ mutationPermission: forbidden ? 'explicitly_forbidden' : 'ambiguous',
14
+ intents: ['unknown'],
15
+ entities: input.structural.packageVersions.map(item => item.name),
16
+ targetAnchors: input.structural.targetAnchors,
17
+ constraints: [],
18
+ negations: input.structural.prohibitions.map(item => item.value),
19
+ steps: [],
20
+ memoryDirective: 'none',
21
+ knowledgeNeeds: [],
22
+ outOfScope: false,
23
+ confidence: { overall: 0, perField: {} },
24
+ evidence: [...input.structural.prohibitions, ...input.structural.conditions],
25
+ resolver: {
26
+ generatedBy: 'deterministic',
27
+ routeCatalogVersion: SEMANTIC_ROUTE_CATALOG.version,
28
+ thresholdVersion: input.thresholdVersion ?? 'shadow-bootstrap.v1',
29
+ },
30
+ createdAt: input.now ?? Date.now(),
31
+ }, input.normalizedPrompt);
32
+ }
33
+ export async function resolveLocalSemantics(input) {
34
+ const structural = extractStructuralSemanticEvidence(input);
35
+ const provisional = input.provisionalFrame ?? createProvisionalSemanticFrame({
36
+ normalizedPrompt: structural.normalizedPrompt,
37
+ structural,
38
+ now: input.now,
39
+ });
40
+ const route = await input.router.route(structural.normalizedPrompt);
41
+ return mergeSemanticAuthority({
42
+ sourceHash: provisional.sourceHash,
43
+ structural,
44
+ route,
45
+ provisionalFrame: provisional,
46
+ now: input.now,
47
+ });
48
+ }
49
+ //# sourceMappingURL=semantic-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-resolver.js","sourceRoot":"","sources":["../src/semantic-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yBAAyB,EACzB,gBAAgB,GAGjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,OAAO,EACL,iCAAiC,GAElC,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,UAAU,8BAA8B,CAAC,KAM9C;IACC,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3D,OAAO,yBAAyB,CAAC;QAC/B,aAAa,EAAE,wBAAwB;QACvC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC;QACxE,KAAK,EAAE,aAAa;QACpB,aAAa,EAAE,SAAS;QACxB,aAAa,EAAE,SAAS;QACxB,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW;QACpE,OAAO,EAAE,CAAC,SAAS,CAAC;QACpB,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACjE,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,aAAa;QAC7C,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;QAChE,KAAK,EAAE,EAAE;QACT,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,EAAE;QAClB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QAC5E,QAAQ,EAAE;YACR,WAAW,EAAE,eAAe;YAC5B,mBAAmB,EAAE,sBAAsB,CAAC,OAAO;YACnD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,qBAAqB;SAClE;QACD,SAAS,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE;KACnC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAO3C;IACC,MAAM,UAAU,GAAG,iCAAiC,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,IAAI,8BAA8B,CAAC;QAC3E,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,UAAU;QACV,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACpE,OAAO,sBAAsB,CAAC;QAC5B,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,UAAU;QACV,KAAK;QACL,gBAAgB,EAAE,WAAW;QAC7B,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,22 @@
1
+ export interface SemanticRouteDefinition {
2
+ id: string;
3
+ field: 'intent' | 'action' | 'memory' | 'knowledge';
4
+ value: string;
5
+ positives: Array<{
6
+ id: string;
7
+ text: string;
8
+ }>;
9
+ contrasts: Array<{
10
+ id: string;
11
+ text: string;
12
+ }>;
13
+ }
14
+ export declare const SEMANTIC_ROUTE_CATALOG_SCHEMA: "semantic-route-catalog.v1";
15
+ export declare const SEMANTIC_ROUTE_DEFINITIONS: SemanticRouteDefinition[];
16
+ export declare const SEMANTIC_ROUTE_CATALOG: {
17
+ readonly schemaVersion: "semantic-route-catalog.v1";
18
+ readonly version: "semantic-route-catalog.v1";
19
+ readonly routes: SemanticRouteDefinition[];
20
+ readonly hash: string;
21
+ };
22
+ //# sourceMappingURL=semantic-route-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-route-catalog.d.ts","sourceRoot":"","sources":["../src/semantic-route-catalog.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,6BAA6B,EAAG,2BAAoC,CAAC;AAElF,eAAO,MAAM,0BAA0B,EAAE,uBAAuB,EAyBR,CAAC;AAEzD,eAAO,MAAM,sBAAsB;;;;;CAKzB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { semanticTextHash } from '@devflow-tools/sdk';
2
+ export const SEMANTIC_ROUTE_CATALOG_SCHEMA = 'semantic-route-catalog.v1';
3
+ export const SEMANTIC_ROUTE_DEFINITIONS = [
4
+ route('intent:debug', 'intent', 'debug', ['fix the crash', '修复登录崩溃', 'diagnose failing build'], ['explain the design', '没有 bug']),
5
+ route('intent:feature', 'intent', 'feature', ['create a component', '新增搜索功能', 'implement the feature'], ['review existing code']),
6
+ route('intent:review', 'intent', 'review', ['review naming', '审查代码', 'analyze architecture'], ['直接修复问题']),
7
+ route('intent:understand', 'intent', 'understand', ['explain why', '了解实现原理', 'how does it work'], ['implement it']),
8
+ route('intent:memory', 'intent', 'memory', ['remember this rule', '记住项目约定', 'recall our decision'], ['memory leak']),
9
+ route('intent:knowledge', 'intent', 'knowledge', ['query React API', '查询框架文档', 'migration guide'], ['local component code']),
10
+ route('intent:performance', 'intent', 'performance', ['profile latency', '分析渲染性能', 'memory leak diagnosis'], ['not a performance issue']),
11
+ route('intent:refactor', 'intent', 'refactor', ['refactor the module', '重构状态管理', 'extract service'], ['explain current structure']),
12
+ route('action:analyze', 'action', 'analyze', ['only analyze', '只分析日志', 'explain without changes'], ['apply the fix']),
13
+ route('action:debug', 'action', 'debug', ['fix the bug', '修复崩溃', 'resolve the failure'], ['explain the failure only']),
14
+ route('action:create', 'action', 'create', ['implement a component', '新增模块', 'scaffold a page'], ['review the component']),
15
+ route('action:modify', 'action', 'modify', ['edit the API', '修改接口', 'refactor this file'], ['inspect the API']),
16
+ route('action:release', 'action', 'release', ['publish version', '发布新版本', 'run npm publish'], ['analyze release failure']),
17
+ route('action:build', 'action', 'build', ['run the build', '执行构建', 'compile the project'], ['build is failing; explain why']),
18
+ route('action:test', 'action', 'test', ['run the tests', '执行测试', 'write a regression test'], ['review test design']),
19
+ route('action:install', 'action', 'install', ['install dependency', '安装依赖', 'pnpm add package'], ['explain dependency choice']),
20
+ route('memory:save', 'memory', 'save', ['remember this convention', '记住项目约定', 'store this for later'], ['do not remember this']),
21
+ route('memory:forget', 'memory', 'forget', ['forget old policy', '删除这条记忆', 'remove stored convention'], ['recall the policy']),
22
+ route('memory:recall', 'memory', 'recall', ['recall our decision', '回忆选择原因', 'what did we decide'], ['forget it']),
23
+ route('knowledge:api', 'knowledge', 'api', ['API signature', '查询调用参数', 'method reference'], ['architecture overview']),
24
+ route('knowledge:migration', 'knowledge', 'migration', ['migration guide', '升级破坏性变更', 'migrate React 18 to 19'], ['current API signature']),
25
+ route('knowledge:error', 'knowledge', 'error', ['error documentation', '失败原因文档', 'exception reference'], ['framework overview']),
26
+ route('knowledge:overview', 'knowledge', 'overview', ['framework overview', '解释基本原理', 'introduction'], ['exact API signature']),
27
+ route('knowledge:behavior', 'knowledge', 'behavior', ['runtime behavior', '实现机制', 'how it behaves'], ['migration breaking changes']),
28
+ ].sort((left, right) => left.id.localeCompare(right.id));
29
+ export const SEMANTIC_ROUTE_CATALOG = {
30
+ schemaVersion: SEMANTIC_ROUTE_CATALOG_SCHEMA,
31
+ version: 'semantic-route-catalog.v1',
32
+ routes: SEMANTIC_ROUTE_DEFINITIONS,
33
+ hash: semanticTextHash(stableCatalogJson(SEMANTIC_ROUTE_DEFINITIONS)),
34
+ };
35
+ function route(id, field, value, positives, contrasts) {
36
+ return {
37
+ id,
38
+ field,
39
+ value,
40
+ positives: positives.map((text, index) => ({ id: `${id}:p${index + 1}`, text })),
41
+ contrasts: contrasts.map((text, index) => ({ id: `${id}:c${index + 1}`, text })),
42
+ };
43
+ }
44
+ function stableCatalogJson(routes) {
45
+ return JSON.stringify(routes.map(item => ({
46
+ id: item.id,
47
+ field: item.field,
48
+ value: item.value,
49
+ positives: [...item.positives].sort((a, b) => a.id.localeCompare(b.id)),
50
+ contrasts: [...item.contrasts].sort((a, b) => a.id.localeCompare(b.id)),
51
+ })));
52
+ }
53
+ //# sourceMappingURL=semantic-route-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-route-catalog.js","sourceRoot":"","sources":["../src/semantic-route-catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { SemanticRouteDecision } from '@devflow-tools/sdk';
2
+ import type { EmbeddingProvider } from '@devflow-tools/memory-engine';
3
+ import { type SemanticRouteDefinition } from './semantic-route-catalog.js';
4
+ export interface SemanticRouterEncoder {
5
+ readonly modelId: string;
6
+ readonly modelRevision: string;
7
+ warmup(): Promise<boolean>;
8
+ embedBatch(texts: string[]): Promise<Float32Array[]>;
9
+ }
10
+ export interface SemanticRouterThresholds {
11
+ schemaVersion: 'semantic-thresholds.v1';
12
+ version: string;
13
+ minimumScore: number;
14
+ minimumMargin: number;
15
+ }
16
+ export declare const SHADOW_SEMANTIC_THRESHOLDS: SemanticRouterThresholds;
17
+ export declare class SemanticRouter {
18
+ private readonly encoder;
19
+ private readonly routes;
20
+ private readonly thresholds;
21
+ private embeddedRoutes;
22
+ private warmupPromise;
23
+ constructor(encoder: SemanticRouterEncoder, routes?: SemanticRouteDefinition[], thresholds?: SemanticRouterThresholds);
24
+ warmup(): Promise<boolean>;
25
+ route(prompt: string): Promise<SemanticRouteDecision>;
26
+ get modelId(): string;
27
+ get modelRevision(): string;
28
+ get thresholdVersion(): string;
29
+ private initialize;
30
+ private unavailable;
31
+ }
32
+ export declare class EmbeddingProviderSemanticEncoder implements SemanticRouterEncoder {
33
+ private readonly provider;
34
+ readonly modelId = "Xenova/all-MiniLM-L6-v2";
35
+ readonly modelRevision = "751bff37182d3f1213fa05d7196b954e230abad9";
36
+ constructor(provider: EmbeddingProvider);
37
+ warmup(): Promise<boolean>;
38
+ embedBatch(texts: string[]): Promise<Float32Array[]>;
39
+ }
40
+ //# sourceMappingURL=semantic-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-router.d.ts","sourceRoot":"","sources":["../src/semantic-router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAsB,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,wBAAwB;IACvC,aAAa,EAAE,wBAAwB,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,EAAE,wBAKxC,CAAC;AAQF,qBAAa,cAAc;IAKvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,OAAO,CAAC,cAAc,CAAgC;IACtD,OAAO,CAAC,aAAa,CAAiC;gBAGnC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,GAAE,uBAAuB,EAAkC,EACjE,UAAU,GAAE,wBAAqD;IAGpF,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAOpB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmC3D,IAAI,OAAO,IAAI,MAAM,CAAiC;IACtD,IAAI,aAAa,IAAI,MAAM,CAAuC;IAClE,IAAI,gBAAgB,IAAI,MAAM,CAAoC;YAEpD,UAAU;IAuBxB,OAAO,CAAC,WAAW;CAGpB;AAED,qBAAa,gCAAiC,YAAW,qBAAqB;IAGhE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,QAAQ,CAAC,OAAO,6BAAsB;IACtC,QAAQ,CAAC,aAAa,8CAA4B;gBACrB,QAAQ,EAAE,iBAAiB;IACxD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAC1B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CACrD"}
@@ -0,0 +1,153 @@
1
+ import { EMBEDDING_MODEL_ID, EMBEDDING_MODEL_REVISION } from '@devflow-tools/memory-engine';
2
+ import { SEMANTIC_ROUTE_CATALOG, } from './semantic-route-catalog.js';
3
+ export const SHADOW_SEMANTIC_THRESHOLDS = {
4
+ schemaVersion: 'semantic-thresholds.v1',
5
+ version: 'shadow-bootstrap.v1',
6
+ minimumScore: 0.55,
7
+ minimumMargin: 0.08,
8
+ };
9
+ export class SemanticRouter {
10
+ encoder;
11
+ routes;
12
+ thresholds;
13
+ embeddedRoutes = null;
14
+ warmupPromise = null;
15
+ constructor(encoder, routes = SEMANTIC_ROUTE_CATALOG.routes, thresholds = SHADOW_SEMANTIC_THRESHOLDS) {
16
+ this.encoder = encoder;
17
+ this.routes = routes;
18
+ this.thresholds = thresholds;
19
+ }
20
+ warmup() {
21
+ this.warmupPromise ??= this.initialize().finally(() => {
22
+ if (!this.embeddedRoutes)
23
+ this.warmupPromise = null;
24
+ });
25
+ return this.warmupPromise;
26
+ }
27
+ async route(prompt) {
28
+ const startedAt = performance.now();
29
+ if (!this.embeddedRoutes && !(await this.warmup())) {
30
+ return this.unavailable(startedAt, 'encoder_unavailable');
31
+ }
32
+ try {
33
+ const [query] = await this.encoder.embedBatch([prompt.normalize('NFKC')]);
34
+ if (!query)
35
+ return this.unavailable(startedAt, 'query_embedding_missing');
36
+ const allScores = this.embeddedRoutes.map(item => scoreRoute(query, item));
37
+ const fieldWinners = [...new Set(this.routes.map(item => item.field))]
38
+ .flatMap(field => allScores.filter(item => item.field === field)
39
+ .sort(compareScoredRoute).slice(0, 2));
40
+ const ranked = fieldWinners.sort(compareScoredRoute);
41
+ const top = ranked[0];
42
+ const secondSameField = top
43
+ ? ranked.find(item => item.field === top.field && item.route !== top.route)
44
+ : undefined;
45
+ const margin = top && secondSameField ? top.score - secondSameField.score : undefined;
46
+ const candidates = ranked.map(item => ({
47
+ route: item.route,
48
+ score: item.score,
49
+ prototypeIds: item.prototypeIds,
50
+ }));
51
+ if (!top || top.score < this.thresholds.minimumScore) {
52
+ return decision('out_of_scope', candidates, margin, this, startedAt, 'minimum_score_not_met');
53
+ }
54
+ if (margin !== undefined && margin < this.thresholds.minimumMargin) {
55
+ return decision('escalation_required', candidates, margin, this, startedAt, 'minimum_margin_not_met');
56
+ }
57
+ return decision('accepted', candidates, margin, this, startedAt, 'route_accepted');
58
+ }
59
+ catch {
60
+ return this.unavailable(startedAt, 'encoder_failed');
61
+ }
62
+ }
63
+ get modelId() { return this.encoder.modelId; }
64
+ get modelRevision() { return this.encoder.modelRevision; }
65
+ get thresholdVersion() { return this.thresholds.version; }
66
+ async initialize() {
67
+ if (!(await this.encoder.warmup()))
68
+ return false;
69
+ const flattened = this.routes.flatMap(item => [
70
+ ...item.positives.map(prototype => ({ route: item, kind: 'positive', prototype })),
71
+ ...item.contrasts.map(prototype => ({ route: item, kind: 'contrast', prototype })),
72
+ ]);
73
+ try {
74
+ const embeddings = await this.encoder.embedBatch(flattened.map(item => item.prototype.text));
75
+ if (embeddings.length !== flattened.length || embeddings.some(item => !validVector(item)))
76
+ return false;
77
+ const grouped = new Map();
78
+ flattened.forEach((item, index) => {
79
+ const entry = grouped.get(item.route.id) ?? { route: item.route, positives: [], contrasts: [] };
80
+ entry[item.kind === 'positive' ? 'positives' : 'contrasts'].push(embeddings[index]);
81
+ grouped.set(item.route.id, entry);
82
+ });
83
+ this.embeddedRoutes = this.routes.map(item => grouped.get(item.id));
84
+ return true;
85
+ }
86
+ catch {
87
+ this.embeddedRoutes = null;
88
+ return false;
89
+ }
90
+ }
91
+ unavailable(startedAt, reason) {
92
+ return decision('unavailable', [], undefined, this, startedAt, reason);
93
+ }
94
+ }
95
+ export class EmbeddingProviderSemanticEncoder {
96
+ provider;
97
+ modelId = EMBEDDING_MODEL_ID;
98
+ modelRevision = EMBEDDING_MODEL_REVISION;
99
+ constructor(provider) {
100
+ this.provider = provider;
101
+ }
102
+ warmup() { return this.provider.warmup(); }
103
+ embedBatch(texts) { return this.provider.embedBatch(texts); }
104
+ }
105
+ function scoreRoute(query, embedded) {
106
+ const positiveScores = embedded.positives.map(value => cosine(query, value));
107
+ const contrastScores = embedded.contrasts.map(value => cosine(query, value));
108
+ const positive = Math.max(...positiveScores);
109
+ const contrast = contrastScores.length > 0 ? Math.max(...contrastScores) : 0;
110
+ const winningPositive = positiveScores.indexOf(positive);
111
+ const winningContrast = contrastScores.indexOf(contrast);
112
+ return {
113
+ route: embedded.route.id,
114
+ field: embedded.route.field,
115
+ score: positive - contrast,
116
+ prototypeIds: [
117
+ embedded.route.positives[winningPositive]?.id,
118
+ embedded.route.contrasts[winningContrast]?.id,
119
+ ].filter((value) => Boolean(value)),
120
+ };
121
+ }
122
+ function compareScoredRoute(left, right) {
123
+ return right.score - left.score || left.route.localeCompare(right.route);
124
+ }
125
+ function cosine(left, right) {
126
+ if (left.length === 0 || left.length !== right.length)
127
+ return -1;
128
+ let dot = 0;
129
+ let leftNorm = 0;
130
+ let rightNorm = 0;
131
+ for (let index = 0; index < left.length; index += 1) {
132
+ dot += left[index] * right[index];
133
+ leftNorm += left[index] ** 2;
134
+ rightNorm += right[index] ** 2;
135
+ }
136
+ return leftNorm > 0 && rightNorm > 0 ? dot / Math.sqrt(leftNorm * rightNorm) : -1;
137
+ }
138
+ function validVector(value) {
139
+ return value instanceof Float32Array && value.length > 0 && !value.some(item => !Number.isFinite(item));
140
+ }
141
+ function decision(status, candidates, margin, router, startedAt, reason) {
142
+ return {
143
+ status,
144
+ candidates,
145
+ ...(margin !== undefined ? { margin } : {}),
146
+ thresholdVersion: router.thresholdVersion,
147
+ modelId: router.modelId,
148
+ modelRevision: router.modelRevision,
149
+ latencyMs: Math.max(0, Math.round((performance.now() - startedAt) * 1000) / 1000),
150
+ reason,
151
+ };
152
+ }
153
+ //# sourceMappingURL=semantic-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-router.js","sourceRoot":"","sources":["../src/semantic-router.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { type SemanticEvidenceSpanV1 } from '@devflow-tools/sdk';
2
+ export interface StructuralSemanticEvidence {
3
+ normalizedPrompt: string;
4
+ command?: string;
5
+ targetAnchors: string[];
6
+ packageVersions: Array<{
7
+ name: string;
8
+ version: string;
9
+ }>;
10
+ symbols: string[];
11
+ prohibitions: SemanticEvidenceSpanV1[];
12
+ positiveActionSpans: SemanticEvidenceSpanV1[];
13
+ conditions: SemanticEvidenceSpanV1[];
14
+ }
15
+ export declare function extractStructuralSemanticEvidence(input: {
16
+ prompt: string;
17
+ command?: string;
18
+ targetAnchors?: string[];
19
+ }): StructuralSemanticEvidence;
20
+ //# sourceMappingURL=semantic-structural-evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-structural-evidence.d.ts","sourceRoot":"","sources":["../src/semantic-structural-evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,mBAAmB,EAAE,sBAAsB,EAAE,CAAC;IAC9C,UAAU,EAAE,sBAAsB,EAAE,CAAC;CACtC;AAgCD,wBAAgB,iCAAiC,CAAC,KAAK,EAAE;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GAAG,0BAA0B,CAY7B"}