@promptwheel/core 0.7.22 → 0.7.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.
Files changed (91) hide show
  1. package/dist/codebase-index/ast-analysis.d.ts +33 -2
  2. package/dist/codebase-index/ast-analysis.d.ts.map +1 -1
  3. package/dist/codebase-index/ast-analysis.js +457 -2
  4. package/dist/codebase-index/ast-analysis.js.map +1 -1
  5. package/dist/codebase-index/ast-cache.d.ts +9 -1
  6. package/dist/codebase-index/ast-cache.d.ts.map +1 -1
  7. package/dist/codebase-index/ast-cache.js.map +1 -1
  8. package/dist/codebase-index/ast-patterns.d.ts +24 -4
  9. package/dist/codebase-index/ast-patterns.d.ts.map +1 -1
  10. package/dist/codebase-index/ast-patterns.js +274 -10
  11. package/dist/codebase-index/ast-patterns.js.map +1 -1
  12. package/dist/codebase-index/dead-code.d.ts +37 -4
  13. package/dist/codebase-index/dead-code.d.ts.map +1 -1
  14. package/dist/codebase-index/dead-code.js +152 -17
  15. package/dist/codebase-index/dead-code.js.map +1 -1
  16. package/dist/codebase-index/index.d.ts +4 -2
  17. package/dist/codebase-index/index.d.ts.map +1 -1
  18. package/dist/codebase-index/index.js +129 -14
  19. package/dist/codebase-index/index.js.map +1 -1
  20. package/dist/codebase-index/shared.d.ts +31 -0
  21. package/dist/codebase-index/shared.d.ts.map +1 -1
  22. package/dist/codebase-index/shared.js +50 -0
  23. package/dist/codebase-index/shared.js.map +1 -1
  24. package/dist/dedup/shared.d.ts +14 -0
  25. package/dist/dedup/shared.d.ts.map +1 -1
  26. package/dist/dedup/shared.js +40 -0
  27. package/dist/dedup/shared.js.map +1 -1
  28. package/dist/learnings/shared.d.ts +1 -1
  29. package/dist/learnings/shared.d.ts.map +1 -1
  30. package/dist/learnings/shared.js.map +1 -1
  31. package/dist/proposals/blueprint.d.ts +68 -0
  32. package/dist/proposals/blueprint.d.ts.map +1 -0
  33. package/dist/proposals/blueprint.js +292 -0
  34. package/dist/proposals/blueprint.js.map +1 -0
  35. package/dist/proposals/shared.d.ts +30 -2
  36. package/dist/proposals/shared.d.ts.map +1 -1
  37. package/dist/proposals/shared.js +58 -11
  38. package/dist/proposals/shared.js.map +1 -1
  39. package/dist/proposals/step-classifier.d.ts +32 -0
  40. package/dist/proposals/step-classifier.d.ts.map +1 -0
  41. package/dist/proposals/step-classifier.js +49 -0
  42. package/dist/proposals/step-classifier.js.map +1 -0
  43. package/dist/proposals/trajectory-critic.d.ts +35 -0
  44. package/dist/proposals/trajectory-critic.d.ts.map +1 -0
  45. package/dist/proposals/trajectory-critic.js +211 -0
  46. package/dist/proposals/trajectory-critic.js.map +1 -0
  47. package/dist/repos/tickets.d.ts +2 -0
  48. package/dist/repos/tickets.d.ts.map +1 -1
  49. package/dist/repos/tickets.js.map +1 -1
  50. package/dist/scout/index.d.ts.map +1 -1
  51. package/dist/scout/index.js +10 -1
  52. package/dist/scout/index.js.map +1 -1
  53. package/dist/scout/prompt.d.ts.map +1 -1
  54. package/dist/scout/prompt.js +7 -1
  55. package/dist/scout/prompt.js.map +1 -1
  56. package/dist/scout/runner.d.ts.map +1 -1
  57. package/dist/scout/runner.js +1 -0
  58. package/dist/scout/runner.js.map +1 -1
  59. package/dist/scout/types.d.ts +20 -1
  60. package/dist/scout/types.d.ts.map +1 -1
  61. package/dist/scout/types.js +4 -2
  62. package/dist/scout/types.js.map +1 -1
  63. package/dist/sectors/shared.d.ts +17 -0
  64. package/dist/sectors/shared.d.ts.map +1 -1
  65. package/dist/sectors/shared.js +65 -0
  66. package/dist/sectors/shared.js.map +1 -1
  67. package/dist/services/scout.d.ts +2 -0
  68. package/dist/services/scout.d.ts.map +1 -1
  69. package/dist/services/scout.js +1 -0
  70. package/dist/services/scout.js.map +1 -1
  71. package/dist/trajectory/io.d.ts +32 -0
  72. package/dist/trajectory/io.d.ts.map +1 -0
  73. package/dist/trajectory/io.js +201 -0
  74. package/dist/trajectory/io.js.map +1 -0
  75. package/dist/trajectory/shared.d.ts +50 -0
  76. package/dist/trajectory/shared.d.ts.map +1 -1
  77. package/dist/trajectory/shared.js +178 -0
  78. package/dist/trajectory/shared.js.map +1 -1
  79. package/dist/waves/conflict.d.ts +130 -0
  80. package/dist/waves/conflict.d.ts.map +1 -0
  81. package/dist/waves/conflict.js +400 -0
  82. package/dist/waves/conflict.js.map +1 -0
  83. package/dist/waves/merge.d.ts +75 -0
  84. package/dist/waves/merge.d.ts.map +1 -0
  85. package/dist/waves/merge.js +305 -0
  86. package/dist/waves/merge.js.map +1 -0
  87. package/dist/waves/shared.d.ts +6 -102
  88. package/dist/waves/shared.d.ts.map +1 -1
  89. package/dist/waves/shared.js +16 -346
  90. package/dist/waves/shared.js.map +1 -1
  91. package/package.json +17 -1
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Proposal Blueprint — pure-function pre-analysis of scout proposals.
3
+ *
4
+ * Groups proposals by file overlap, detects conflicts, identifies enablers
5
+ * (proposals that unblock others via dependency edges), and finds mergeable
6
+ * near-duplicates. Output feeds into trajectory generation prompts.
7
+ *
8
+ * No I/O, no LLM calls. All functions are deterministic.
9
+ */
10
+ // ---------------------------------------------------------------------------
11
+ // Core algorithms
12
+ // ---------------------------------------------------------------------------
13
+ /**
14
+ * Compute Jaccard overlap between two file sets.
15
+ */
16
+ function fileOverlap(a, b) {
17
+ if (a.length === 0 && b.length === 0)
18
+ return 0;
19
+ const setA = new Set(a);
20
+ const setB = new Set(b);
21
+ let intersection = 0;
22
+ for (const f of setA) {
23
+ if (setB.has(f))
24
+ intersection++;
25
+ }
26
+ const union = setA.size + setB.size - intersection;
27
+ return union === 0 ? 0 : intersection / union;
28
+ }
29
+ /**
30
+ * Find the common parent directory of a set of files.
31
+ * Returns the shared prefix path or '' if none.
32
+ */
33
+ function commonParentDir(files) {
34
+ if (files.length === 0)
35
+ return '';
36
+ const dirs = files
37
+ .map(f => f.split('/').slice(0, -1))
38
+ .filter(d => d.length > 0);
39
+ if (dirs.length === 0)
40
+ return '';
41
+ const first = dirs[0];
42
+ let commonLen = first.length;
43
+ for (const dir of dirs.slice(1)) {
44
+ let i = 0;
45
+ while (i < commonLen && i < dir.length && first[i] === dir[i])
46
+ i++;
47
+ commonLen = i;
48
+ }
49
+ if (commonLen === 0)
50
+ return '';
51
+ return first.slice(0, commonLen).join('/');
52
+ }
53
+ /**
54
+ * Group proposals by file overlap (>=50% Jaccard similarity).
55
+ * Uses single-linkage: if proposal C overlaps with A (already grouped),
56
+ * C joins A's group.
57
+ */
58
+ export function groupByFileOverlap(proposals, overlapThreshold = 0.5) {
59
+ const n = proposals.length;
60
+ const groupId = new Array(n);
61
+ for (let i = 0; i < n; i++)
62
+ groupId[i] = i;
63
+ // Union-find helpers
64
+ function find(i) {
65
+ while (groupId[i] !== i) {
66
+ groupId[i] = groupId[groupId[i]];
67
+ i = groupId[i];
68
+ }
69
+ return i;
70
+ }
71
+ function union(a, b) {
72
+ const ra = find(a);
73
+ const rb = find(b);
74
+ if (ra !== rb)
75
+ groupId[rb] = ra;
76
+ }
77
+ // Merge proposals with file overlap >= threshold
78
+ for (let i = 0; i < n; i++) {
79
+ for (let j = i + 1; j < n; j++) {
80
+ if (fileOverlap(proposals[i].files, proposals[j].files) >= overlapThreshold) {
81
+ union(i, j);
82
+ }
83
+ }
84
+ }
85
+ // Collect groups
86
+ const groups = new Map();
87
+ for (let i = 0; i < n; i++) {
88
+ const root = find(i);
89
+ let arr = groups.get(root);
90
+ if (!arr) {
91
+ arr = [];
92
+ groups.set(root, arr);
93
+ }
94
+ arr.push(i);
95
+ }
96
+ // Build ProposalGroup objects
97
+ const result = [];
98
+ let order = 1;
99
+ for (const indices of groups.values()) {
100
+ const allFiles = [...new Set(indices.flatMap(i => proposals[i].files))];
101
+ const parentDir = commonParentDir(allFiles);
102
+ const scope = parentDir ? `${parentDir}/**` : allFiles.length > 0 ? allFiles[0].split('/').slice(0, -1).join('/') + '/**' : '**';
103
+ // Theme from categories present
104
+ const cats = [...new Set(indices.map(i => proposals[i].category))];
105
+ const theme = cats.join('+');
106
+ result.push({
107
+ theme,
108
+ proposalIndices: indices,
109
+ commonScope: scope,
110
+ suggestedOrder: order++,
111
+ isEnabler: false, // set later by identifyEnablers
112
+ });
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Detect conflicts: proposals touching the same file but with different categories.
118
+ * Higher-impact proposal wins by default.
119
+ */
120
+ export function detectConflicts(proposals) {
121
+ const conflicts = [];
122
+ const n = proposals.length;
123
+ for (let i = 0; i < n; i++) {
124
+ const filesA = new Set(proposals[i].files);
125
+ for (let j = i + 1; j < n; j++) {
126
+ if (proposals[i].category === proposals[j].category)
127
+ continue;
128
+ // Check for shared files
129
+ const shared = [];
130
+ for (const f of proposals[j].files) {
131
+ if (filesA.has(f))
132
+ shared.push(f);
133
+ }
134
+ if (shared.length === 0)
135
+ continue;
136
+ const scoreA = (proposals[i].impact_score ?? 5) * (proposals[i].confidence / 100);
137
+ const scoreB = (proposals[j].impact_score ?? 5) * (proposals[j].confidence / 100);
138
+ const scoreDiff = Math.abs(scoreA - scoreB);
139
+ conflicts.push({
140
+ indexA: i,
141
+ indexB: j,
142
+ reason: `Both touch ${shared.join(', ')} but categories differ (${proposals[i].category} vs ${proposals[j].category})`,
143
+ resolution: scoreDiff > 1 ? 'keep_higher_impact' : 'sequence',
144
+ });
145
+ }
146
+ }
147
+ return conflicts;
148
+ }
149
+ /**
150
+ * Identify enabler proposals — proposals whose files are depended upon by
151
+ * other proposals' files (based on dependency edges).
152
+ */
153
+ export function identifyEnablers(proposals, depEdges) {
154
+ if (Object.keys(depEdges).length === 0)
155
+ return [];
156
+ // Build a set of modules touched by each proposal (parent dir of each file)
157
+ const proposalModules = proposals.map(p => {
158
+ const mods = new Set();
159
+ for (const f of p.files) {
160
+ const dir = f.split('/').slice(0, -1).join('/');
161
+ if (dir)
162
+ mods.add(dir);
163
+ }
164
+ return mods;
165
+ });
166
+ // Build reverse edge map: module → modules that depend on it
167
+ const reverseEdges = new Map();
168
+ for (const [mod, deps] of Object.entries(depEdges)) {
169
+ for (const dep of deps) {
170
+ let rev = reverseEdges.get(dep);
171
+ if (!rev) {
172
+ rev = new Set();
173
+ reverseEdges.set(dep, rev);
174
+ }
175
+ rev.add(mod);
176
+ }
177
+ }
178
+ const enablers = [];
179
+ for (let i = 0; i < proposals.length; i++) {
180
+ // Check if any module touched by proposal i is imported by modules from other proposals
181
+ for (const mod of proposalModules[i]) {
182
+ const dependents = reverseEdges.get(mod);
183
+ if (!dependents)
184
+ continue;
185
+ for (let j = 0; j < proposals.length; j++) {
186
+ if (j === i)
187
+ continue;
188
+ for (const otherMod of proposalModules[j]) {
189
+ if (dependents.has(otherMod)) {
190
+ enablers.push(i);
191
+ // Break out of all inner loops
192
+ break;
193
+ }
194
+ }
195
+ if (enablers[enablers.length - 1] === i)
196
+ break;
197
+ }
198
+ if (enablers[enablers.length - 1] === i)
199
+ break;
200
+ }
201
+ }
202
+ return [...new Set(enablers)];
203
+ }
204
+ /**
205
+ * Detect mergeable pairs: >=70% file overlap + same category = likely duplicate.
206
+ */
207
+ export function detectMergeablePairs(proposals, overlapThreshold = 0.7) {
208
+ const pairs = [];
209
+ const n = proposals.length;
210
+ for (let i = 0; i < n; i++) {
211
+ for (let j = i + 1; j < n; j++) {
212
+ if (proposals[i].category !== proposals[j].category)
213
+ continue;
214
+ if (fileOverlap(proposals[i].files, proposals[j].files) >= overlapThreshold) {
215
+ pairs.push([i, j]);
216
+ }
217
+ }
218
+ }
219
+ return pairs;
220
+ }
221
+ /**
222
+ * Compute a full blueprint from proposals and optional dependency edges.
223
+ */
224
+ export function computeBlueprint(proposals, depEdges = {}, config) {
225
+ const groups = groupByFileOverlap(proposals, config?.groupOverlapThreshold);
226
+ const conflicts = detectConflicts(proposals);
227
+ const enablers = identifyEnablers(proposals, depEdges);
228
+ const mergeablePairs = detectMergeablePairs(proposals, config?.mergeableOverlapThreshold);
229
+ // Mark enabler groups and adjust ordering (enablers first)
230
+ const enablerSet = new Set(enablers);
231
+ for (const group of groups) {
232
+ group.isEnabler = group.proposalIndices.some(i => enablerSet.has(i));
233
+ }
234
+ // Re-sort: enablers first, then by original order
235
+ groups.sort((a, b) => {
236
+ if (a.isEnabler && !b.isEnabler)
237
+ return -1;
238
+ if (!a.isEnabler && b.isEnabler)
239
+ return 1;
240
+ return a.suggestedOrder - b.suggestedOrder;
241
+ });
242
+ // Re-number suggested orders
243
+ for (let i = 0; i < groups.length; i++) {
244
+ groups[i].suggestedOrder = i + 1;
245
+ }
246
+ // Build execution arc summary
247
+ const arcParts = [];
248
+ if (enablers.length > 0) {
249
+ arcParts.push(`${enablers.length} enabler(s) should go first`);
250
+ }
251
+ if (conflicts.length > 0) {
252
+ arcParts.push(`${conflicts.length} conflict(s) need isolation`);
253
+ }
254
+ if (mergeablePairs.length > 0) {
255
+ arcParts.push(`${mergeablePairs.length} pair(s) can be merged`);
256
+ }
257
+ arcParts.push(`${groups.length} group(s) total`);
258
+ const executionArc = arcParts.join(', ');
259
+ return { groups, conflicts, enablers, mergeablePairs, executionArc };
260
+ }
261
+ /**
262
+ * Format a blueprint as compact text for injection into the LLM prompt.
263
+ */
264
+ export function formatBlueprintForPrompt(blueprint, proposals) {
265
+ const lines = [];
266
+ lines.push(`Arc: ${blueprint.executionArc}`);
267
+ lines.push('');
268
+ // Groups
269
+ lines.push('Groups:');
270
+ for (const g of blueprint.groups) {
271
+ const titles = g.proposalIndices.map(i => proposals[i].title).join(', ');
272
+ lines.push(` ${g.suggestedOrder}. [${g.theme}] ${titles} → scope: ${g.commonScope}${g.isEnabler ? ' (ENABLER)' : ''}`);
273
+ }
274
+ // Conflicts
275
+ if (blueprint.conflicts.length > 0) {
276
+ lines.push('');
277
+ lines.push('Conflicts:');
278
+ for (const c of blueprint.conflicts) {
279
+ lines.push(` - #${c.indexA + 1} vs #${c.indexB + 1}: ${c.reason} → ${c.resolution}`);
280
+ }
281
+ }
282
+ // Mergeable
283
+ if (blueprint.mergeablePairs.length > 0) {
284
+ lines.push('');
285
+ lines.push('Mergeable (>=70% overlap, same category):');
286
+ for (const [a, b] of blueprint.mergeablePairs) {
287
+ lines.push(` - #${a + 1} "${proposals[a].title}" + #${b + 1} "${proposals[b].title}"`);
288
+ }
289
+ }
290
+ return lines.join('\n');
291
+ }
292
+ //# sourceMappingURL=blueprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../../src/proposals/blueprint.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,8 @@ export interface RawProposal {
21
21
  risk?: string;
22
22
  touched_files_estimate?: number;
23
23
  rollback_note?: string;
24
+ /** Function/class names this proposal modifies (for symbol-aware conflict detection). */
25
+ target_symbols?: string[];
24
26
  }
25
27
  /** Proposal with all required fields validated and defaults applied. */
26
28
  export interface ValidatedProposal {
@@ -38,6 +40,8 @@ export interface ValidatedProposal {
38
40
  risk: string;
39
41
  touched_files_estimate: number;
40
42
  rollback_note: string;
43
+ /** Function/class names this proposal modifies (for symbol-aware conflict detection). */
44
+ target_symbols?: string[];
41
45
  }
42
46
  /** Result of adversarial review — revised scores for a single proposal. */
43
47
  export interface ReviewedProposal {
@@ -107,14 +111,38 @@ export declare function applyReviewToProposals<T extends {
107
111
  confidence: number;
108
112
  impact_score?: number;
109
113
  }>(proposals: T[], reviewed: ReviewedProposal[]): T[];
114
+ /**
115
+ * Optional dependency graph context for structural impact scoring.
116
+ * When provided, proposals touching hub modules (high fan-in) get a score
117
+ * boost, making structurally impactful changes float to the top.
118
+ */
119
+ export interface GraphContext {
120
+ /** Forward edges: module → modules it imports. */
121
+ edges: Record<string, string[]>;
122
+ /** Reverse edges: module → modules that import it. */
123
+ reverseEdges: Record<string, string[]>;
124
+ /** Modules with fan_in >= 3 (high dependents). */
125
+ hubModules: string[];
126
+ }
127
+ /**
128
+ * Compute a structural boost multiplier for a proposal based on its
129
+ * position in the dependency graph.
130
+ *
131
+ * Returns a multiplier >= 1.0. Hub modules (high fan-in) get boosted
132
+ * because changes to them have cascading impact. Returns 1.0 when
133
+ * no graph context or no matching modules.
134
+ */
135
+ export declare function computeGraphBoost(files: string[], graph: GraphContext | undefined): number;
110
136
  /**
111
137
  * Score proposals by impact × confidence and return the top N.
112
- * Does not mutate the input array.
138
+ * When graphContext is provided, proposals touching hub modules get
139
+ * a structural boost. Does not mutate the input array.
113
140
  */
114
141
  export declare function scoreAndRank<T extends {
115
142
  confidence: number;
116
143
  impact_score?: number;
117
- }>(proposals: T[], maxCount?: number): T[];
144
+ files?: string[];
145
+ }>(proposals: T[], maxCount?: number, graphContext?: GraphContext): T[];
118
146
  /**
119
147
  * Balance test vs non-test proposals by capping the ratio of test-only proposals.
120
148
  *
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/proposals/shared.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,2EAA2E;AAC3E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAMD,eAAO,MAAM,kBAAkB;IAC7B,uDAAuD;;IAEvD,sDAAsD;;IAEtD,6CAA6C;;IAE7C,4DAA4D;;IAE5D,0CAA0C;;IAE1C,iCAAiC;;CAEzB,CAAC;AAEX,gEAAgE;AAChE,eAAO,MAAM,eAAe,EAAE,CAAC,MAAM,iBAAiB,CAAC,EAItD,CAAC;AAMF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAmBtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,iBAAiB,CAiBrE;AAMD,oEAAoE;AACpE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAqDjF;AAMD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,EAAE,GAAG,IAAI,CA2BlF;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3G,SAAS,EAAE,CAAC,EAAE,EACd,QAAQ,EAAE,gBAAgB,EAAE,GAC3B,CAAC,EAAE,CAgBL;AAMD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAClF,SAAS,EAAE,CAAC,EAAE,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,CAAC,EAAE,CAUL;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,EAC3F,SAAS,EAAE,CAAC,EAAE,EACd,YAAY,GAAE,MAA0C,GACvD,CAAC,EAAE,CAmBL;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA2BtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/E"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/proposals/shared.ts"],"names":[],"mappings":"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"}
@@ -26,7 +26,6 @@ export const PROPOSALS_DEFAULTS = {
26
26
  export const REQUIRED_FIELDS = [
27
27
  'category', 'title', 'description', 'allowed_paths',
28
28
  'files', 'confidence', 'verification_commands',
29
- 'risk', 'touched_files_estimate', 'rollback_note',
30
29
  ];
31
30
  // ---------------------------------------------------------------------------
32
31
  // Schema validation
@@ -48,14 +47,14 @@ export function validateProposalSchema(raw) {
48
47
  missing.push('allowed_paths');
49
48
  if (typeof raw.confidence !== 'number')
50
49
  missing.push('confidence');
51
- if (!raw.risk || typeof raw.risk !== 'string')
52
- missing.push('risk');
53
50
  // Soft-required: normalizeProposal provides safe defaults for these.
54
51
  // We still validate type when present, but missing is not fatal.
55
52
  if (raw.files !== null && raw.files !== undefined && !Array.isArray(raw.files))
56
53
  missing.push('files');
57
54
  if (raw.verification_commands !== null && raw.verification_commands !== undefined && !Array.isArray(raw.verification_commands))
58
55
  missing.push('verification_commands');
56
+ if (raw.risk !== null && raw.risk !== undefined && typeof raw.risk !== 'string')
57
+ missing.push('risk');
59
58
  if (raw.touched_files_estimate !== null && raw.touched_files_estimate !== undefined && typeof raw.touched_files_estimate !== 'number')
60
59
  missing.push('touched_files_estimate');
61
60
  if (raw.rollback_note !== null && raw.rollback_note !== undefined && typeof raw.rollback_note !== 'string')
@@ -67,7 +66,7 @@ export function validateProposalSchema(raw) {
67
66
  * Caller must ensure schema validation passed first.
68
67
  */
69
68
  export function normalizeProposal(raw) {
70
- return {
69
+ const result = {
71
70
  category: raw.category,
72
71
  title: raw.title,
73
72
  description: raw.description,
@@ -79,10 +78,13 @@ export function normalizeProposal(raw) {
79
78
  impact_score: raw.impact_score ?? PROPOSALS_DEFAULTS.DEFAULT_IMPACT,
80
79
  rationale: raw.rationale ?? '',
81
80
  estimated_complexity: raw.estimated_complexity ?? 'moderate',
82
- risk: raw.risk,
81
+ risk: raw.risk ?? 'medium',
83
82
  touched_files_estimate: raw.touched_files_estimate ?? (raw.allowed_paths?.length ?? 1),
84
83
  rollback_note: raw.rollback_note ?? 'git revert',
85
84
  };
85
+ if (raw.target_symbols?.length)
86
+ result.target_symbols = raw.target_symbols;
87
+ return result;
86
88
  }
87
89
  /**
88
90
  * Build a prompt for adversarial (second-pass) review of proposals.
@@ -173,19 +175,64 @@ export function applyReviewToProposals(proposals, reviewed) {
173
175
  };
174
176
  });
175
177
  }
178
+ /** Hub boost: 20% increase for proposals touching hub modules. */
179
+ const HUB_BOOST = 0.2;
180
+ /** Fan-in scaling: each additional dependent adds 2% up to 20% max. */
181
+ const FAN_IN_SCALE = 0.02;
182
+ const FAN_IN_CAP = 0.2;
183
+ /**
184
+ * Compute a structural boost multiplier for a proposal based on its
185
+ * position in the dependency graph.
186
+ *
187
+ * Returns a multiplier >= 1.0. Hub modules (high fan-in) get boosted
188
+ * because changes to them have cascading impact. Returns 1.0 when
189
+ * no graph context or no matching modules.
190
+ */
191
+ export function computeGraphBoost(files, graph) {
192
+ if (!graph || files.length === 0)
193
+ return 1.0;
194
+ // Map files to their containing modules (parent directory paths)
195
+ const modules = new Set();
196
+ for (const f of files) {
197
+ const parts = f.split('/');
198
+ // Try increasingly specific paths: a/b/c → a/b, a/b/c
199
+ for (let i = 1; i <= parts.length - 1; i++) {
200
+ const candidate = parts.slice(0, i).join('/');
201
+ if (candidate in graph.reverseEdges || candidate in graph.edges) {
202
+ modules.add(candidate);
203
+ }
204
+ }
205
+ }
206
+ if (modules.size === 0)
207
+ return 1.0;
208
+ let maxBoost = 0;
209
+ for (const mod of modules) {
210
+ const fanIn = (graph.reverseEdges[mod] ?? []).length;
211
+ const isHub = graph.hubModules.includes(mod);
212
+ let boost = 0;
213
+ if (isHub)
214
+ boost += HUB_BOOST;
215
+ boost += Math.min(fanIn * FAN_IN_SCALE, FAN_IN_CAP);
216
+ if (boost > maxBoost)
217
+ maxBoost = boost;
218
+ }
219
+ return 1.0 + maxBoost;
220
+ }
176
221
  // ---------------------------------------------------------------------------
177
222
  // Scoring and ranking
178
223
  // ---------------------------------------------------------------------------
179
224
  /**
180
225
  * Score proposals by impact × confidence and return the top N.
181
- * Does not mutate the input array.
226
+ * When graphContext is provided, proposals touching hub modules get
227
+ * a structural boost. Does not mutate the input array.
182
228
  */
183
- export function scoreAndRank(proposals, maxCount) {
229
+ export function scoreAndRank(proposals, maxCount, graphContext) {
184
230
  const scored = [...proposals]
185
- .map(p => ({
186
- proposal: p,
187
- score: (p.impact_score ?? PROPOSALS_DEFAULTS.DEFAULT_IMPACT) * p.confidence,
188
- }))
231
+ .map(p => {
232
+ const base = (p.impact_score ?? PROPOSALS_DEFAULTS.DEFAULT_IMPACT) * p.confidence;
233
+ const boost = computeGraphBoost(p.files ?? [], graphContext);
234
+ return { proposal: p, score: base * boost };
235
+ })
189
236
  .sort((a, b) => b.score - a.score);
190
237
  const capped = maxCount !== undefined ? scored.slice(0, maxCount) : scored;
191
238
  return capped.map(s => s.proposal);
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/proposals/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/proposals/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Step complexity classifier — routes trajectory steps to appropriate models
3
+ * based on category, scope, and description heuristics.
4
+ */
5
+ /** Complexity levels for model routing */
6
+ export type StepComplexity = 'simple' | 'moderate' | 'complex';
7
+ /** Default model mapping per complexity level */
8
+ export declare const DEFAULT_MODEL_MAP: Record<StepComplexity, string>;
9
+ /**
10
+ * Classify a trajectory step's complexity based on its properties.
11
+ *
12
+ * Rules:
13
+ * - `simple`: single category in [docs, types, cleanup, test] AND narrow scope (single dir or ≤2 files)
14
+ * - `complex`: categories include [security, fix, migration] OR scope is `**` / multi-module (3+ distinct top-level dirs)
15
+ * - `moderate`: everything else
16
+ */
17
+ export declare function classifyStepComplexity(step: {
18
+ categories?: string[];
19
+ scope?: string;
20
+ description?: string;
21
+ allowed_paths?: string[];
22
+ }): StepComplexity;
23
+ /**
24
+ * Get the recommended model for a step based on its complexity.
25
+ */
26
+ export declare function getModelForStep(step: {
27
+ categories?: string[];
28
+ scope?: string;
29
+ description?: string;
30
+ allowed_paths?: string[];
31
+ }, modelMap?: Partial<Record<StepComplexity, string>>): string;
32
+ //# sourceMappingURL=step-classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-classifier.d.ts","sourceRoot":"","sources":["../../src/proposals/step-classifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0CAA0C;AAC1C,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAE/D,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAI5D,CAAC;AAKF;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GAAG,cAAc,CAwBjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC/F,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,GACjD,MAAM,CAIR"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Step complexity classifier — routes trajectory steps to appropriate models
3
+ * based on category, scope, and description heuristics.
4
+ */
5
+ /** Default model mapping per complexity level */
6
+ export const DEFAULT_MODEL_MAP = {
7
+ simple: 'haiku',
8
+ moderate: 'sonnet',
9
+ complex: 'opus',
10
+ };
11
+ const SIMPLE_CATEGORIES = new Set(['docs', 'types', 'cleanup', 'test']);
12
+ const COMPLEX_CATEGORIES = new Set(['security', 'fix', 'migration']);
13
+ /**
14
+ * Classify a trajectory step's complexity based on its properties.
15
+ *
16
+ * Rules:
17
+ * - `simple`: single category in [docs, types, cleanup, test] AND narrow scope (single dir or ≤2 files)
18
+ * - `complex`: categories include [security, fix, migration] OR scope is `**` / multi-module (3+ distinct top-level dirs)
19
+ * - `moderate`: everything else
20
+ */
21
+ export function classifyStepComplexity(step) {
22
+ const categories = step.categories ?? [];
23
+ const scope = step.scope ?? '';
24
+ const paths = step.allowed_paths ?? [];
25
+ // Check for complex indicators first (they take priority)
26
+ const hasComplexCategory = categories.some(c => COMPLEX_CATEGORIES.has(c));
27
+ const isBroadScope = scope === '**' || scope === '';
28
+ const distinctTopDirs = new Set(paths.map(p => p.split('/')[0]).filter(Boolean));
29
+ const isMultiModule = distinctTopDirs.size >= 3;
30
+ if (hasComplexCategory || (paths.length > 0 && isMultiModule) || (isBroadScope && paths.length === 0 && categories.length > 1)) {
31
+ return 'complex';
32
+ }
33
+ // Check for simple indicators
34
+ const allSimpleCategories = categories.length > 0 && categories.every(c => SIMPLE_CATEGORIES.has(c));
35
+ const isNarrowScope = paths.length <= 2 || (distinctTopDirs.size <= 1 && paths.length > 0);
36
+ if (allSimpleCategories && isNarrowScope) {
37
+ return 'simple';
38
+ }
39
+ return 'moderate';
40
+ }
41
+ /**
42
+ * Get the recommended model for a step based on its complexity.
43
+ */
44
+ export function getModelForStep(step, modelMap) {
45
+ const complexity = classifyStepComplexity(step);
46
+ const map = { ...DEFAULT_MODEL_MAP, ...modelMap };
47
+ return map[complexity];
48
+ }
49
+ //# sourceMappingURL=step-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-classifier.js","sourceRoot":"","sources":["../../src/proposals/step-classifier.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,iDAAiD;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAmC;IAC/D,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACxE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AAErE;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAKtC;IACC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC;IAEvC,0DAA0D;IAC1D,MAAM,kBAAkB,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACjF,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC;IAEhD,IAAI,kBAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/H,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8BAA8B;IAC9B,MAAM,mBAAmB,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE3F,IAAI,mBAAmB,IAAI,aAAa,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC7B,IAA+F,EAC/F,QAAkD;IAElD,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,EAAE,GAAG,iBAAiB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAClD,OAAO,GAAG,CAAC,UAAU,CAAC,CAAC;AACzB,CAAC"}