dino-spec 17.4.3 → 17.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.
Files changed (189) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +10 -0
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  8. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  12. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  16. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  20. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  21. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  22. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  26. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  30. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  34. package/dist/core/agents/blackboard.d.ts +22 -3
  35. package/dist/core/agents/blackboard.d.ts.map +1 -1
  36. package/dist/core/agents/blackboard.js +52 -2
  37. package/dist/core/agents/blackboard.js.map +1 -1
  38. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  39. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  40. package/dist/core/agents/circuit-breaker.js +175 -1
  41. package/dist/core/agents/circuit-breaker.js.map +1 -1
  42. package/dist/core/agents/clarification-phase.d.ts +128 -0
  43. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  44. package/dist/core/agents/clarification-phase.js +375 -0
  45. package/dist/core/agents/clarification-phase.js.map +1 -0
  46. package/dist/core/agents/confidence-gate.d.ts +116 -3
  47. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  48. package/dist/core/agents/confidence-gate.js +363 -3
  49. package/dist/core/agents/confidence-gate.js.map +1 -1
  50. package/dist/core/agents/correction-tracker.d.ts +197 -0
  51. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  52. package/dist/core/agents/correction-tracker.js +366 -0
  53. package/dist/core/agents/correction-tracker.js.map +1 -0
  54. package/dist/core/agents/dependency-graph.d.ts +193 -0
  55. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  56. package/dist/core/agents/dependency-graph.js +462 -0
  57. package/dist/core/agents/dependency-graph.js.map +1 -0
  58. package/dist/core/agents/gap-detector.d.ts +277 -0
  59. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  60. package/dist/core/agents/gap-detector.js +540 -0
  61. package/dist/core/agents/gap-detector.js.map +1 -0
  62. package/dist/core/agents/index.d.ts +14 -1
  63. package/dist/core/agents/index.d.ts.map +1 -1
  64. package/dist/core/agents/index.js +26 -1
  65. package/dist/core/agents/index.js.map +1 -1
  66. package/dist/core/agents/message-protocol.d.ts +13 -2
  67. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  68. package/dist/core/agents/message-protocol.js +20 -1
  69. package/dist/core/agents/message-protocol.js.map +1 -1
  70. package/dist/core/agents/parallel-executor.d.ts +182 -0
  71. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  72. package/dist/core/agents/parallel-executor.js +474 -0
  73. package/dist/core/agents/parallel-executor.js.map +1 -0
  74. package/dist/core/agents/pattern-detector.d.ts +157 -0
  75. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  76. package/dist/core/agents/pattern-detector.js +370 -0
  77. package/dist/core/agents/pattern-detector.js.map +1 -0
  78. package/dist/core/agents/registry-client.d.ts +6 -0
  79. package/dist/core/agents/registry-client.d.ts.map +1 -1
  80. package/dist/core/agents/registry-client.js +3 -0
  81. package/dist/core/agents/registry-client.js.map +1 -1
  82. package/dist/core/agents/research-phase.d.ts +114 -0
  83. package/dist/core/agents/research-phase.d.ts.map +1 -0
  84. package/dist/core/agents/research-phase.js +355 -0
  85. package/dist/core/agents/research-phase.js.map +1 -0
  86. package/dist/core/agents/research-validator.d.ts +13 -2
  87. package/dist/core/agents/research-validator.d.ts.map +1 -1
  88. package/dist/core/agents/research-validator.js +63 -31
  89. package/dist/core/agents/research-validator.js.map +1 -1
  90. package/dist/core/agents/skill-creator.d.ts +174 -0
  91. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  92. package/dist/core/agents/skill-creator.js +570 -0
  93. package/dist/core/agents/skill-creator.js.map +1 -0
  94. package/dist/core/agents/state-persistence.d.ts +184 -0
  95. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  96. package/dist/core/agents/state-persistence.js +394 -0
  97. package/dist/core/agents/state-persistence.js.map +1 -0
  98. package/dist/core/agents/validation-cache.d.ts +122 -0
  99. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  100. package/dist/core/agents/validation-cache.js +280 -0
  101. package/dist/core/agents/validation-cache.js.map +1 -0
  102. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  103. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  104. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  105. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  106. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  107. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  108. package/dist/core/agents/validators/base-validator.js +192 -0
  109. package/dist/core/agents/validators/base-validator.js.map +1 -0
  110. package/dist/core/agents/validators/index.d.ts +7 -0
  111. package/dist/core/agents/validators/index.d.ts.map +1 -0
  112. package/dist/core/agents/validators/index.js +7 -0
  113. package/dist/core/agents/validators/index.js.map +1 -0
  114. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  115. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  116. package/dist/core/agents/validators/npm-validator.js +211 -0
  117. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  118. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  119. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  120. package/dist/core/agents/validators/pip-validator.js +191 -0
  121. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  122. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  123. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  124. package/dist/core/agents/validators/validator-registry.js +321 -0
  125. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  126. package/dist/core/context-repl/types.d.ts +4 -4
  127. package/dist/core/memory/index.d.ts +1 -0
  128. package/dist/core/memory/index.d.ts.map +1 -1
  129. package/dist/core/memory/index.js +2 -0
  130. package/dist/core/memory/index.js.map +1 -1
  131. package/dist/core/memory/learning-store.d.ts +222 -0
  132. package/dist/core/memory/learning-store.d.ts.map +1 -0
  133. package/dist/core/memory/learning-store.js +477 -0
  134. package/dist/core/memory/learning-store.js.map +1 -0
  135. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  136. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  137. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  138. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  139. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  140. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  141. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  142. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  143. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  144. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  145. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  146. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  147. package/dist/core/spec-analyzer/index.d.ts +10 -1
  148. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  149. package/dist/core/spec-analyzer/index.js +13 -1
  150. package/dist/core/spec-analyzer/index.js.map +1 -1
  151. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  152. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  153. package/dist/core/spec-analyzer/patterns.js +412 -0
  154. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  155. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  156. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  157. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  158. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  159. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  160. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  161. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  162. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  163. package/dist/hooks/dynamic-generator.d.ts +158 -0
  164. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  165. package/dist/hooks/dynamic-generator.js +448 -0
  166. package/dist/hooks/dynamic-generator.js.map +1 -0
  167. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  168. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  169. package/dist/hooks/hook-agent-bridge.js +489 -0
  170. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  171. package/dist/hooks/index.d.ts +3 -1
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/index.js +5 -1
  174. package/dist/hooks/index.js.map +1 -1
  175. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  176. package/dist/mcp/tool-catalog.js +47 -0
  177. package/dist/mcp/tool-catalog.js.map +1 -1
  178. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  179. package/dist/mcp/tool-tiers.js +4 -0
  180. package/dist/mcp/tool-tiers.js.map +1 -1
  181. package/dist/mcp/tools/index.d.ts +2 -1
  182. package/dist/mcp/tools/index.d.ts.map +1 -1
  183. package/dist/mcp/tools/index.js +15 -1
  184. package/dist/mcp/tools/index.js.map +1 -1
  185. package/dist/mcp/tools/learning-store.d.ts +30 -0
  186. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  187. package/dist/mcp/tools/learning-store.js +286 -0
  188. package/dist/mcp/tools/learning-store.js.map +1 -0
  189. package/package.json +1 -1
@@ -0,0 +1,355 @@
1
+ /**
2
+ * Research Phase - v17.5.0
3
+ *
4
+ * Handles the research phase of the progressive confidence gate.
5
+ * Triggers codebase and web search to gather context and improve confidence.
6
+ *
7
+ * Features:
8
+ * - Codebase search (Grep, Glob, Read)
9
+ * - Web search for external documentation
10
+ * - Confidence improvement calculation (10-30%)
11
+ * - Research result caching
12
+ * - Integration with ambiguity detector
13
+ *
14
+ * @module research-phase
15
+ */
16
+ import { detectAmbiguity } from '../spec-analyzer/ambiguity-detector.js';
17
+ // =============================================================================
18
+ // Constants
19
+ // =============================================================================
20
+ export const DEFAULT_RESEARCH_CONFIG = {
21
+ enableCodebaseSearch: true,
22
+ enableWebSearch: true,
23
+ maxResearchTokens: 5000,
24
+ cacheDirectory: '.dino/research/',
25
+ minConfidenceImprovement: 0.1, // 10%
26
+ maxConfidenceImprovement: 0.3, // 30%
27
+ };
28
+ // Confidence improvement factors
29
+ const IMPROVEMENT_FACTORS = {
30
+ patternFound: 0.08, // Found relevant pattern
31
+ fileIdentified: 0.05, // Identified target file
32
+ documentationFound: 0.06, // Found relevant docs
33
+ exampleFound: 0.07, // Found working example
34
+ decisionFound: 0.04, // Found past decision
35
+ multipleFindings: 0.02, // Bonus per additional finding (up to 5)
36
+ };
37
+ // =============================================================================
38
+ // Main Functions
39
+ // =============================================================================
40
+ /**
41
+ * Identify what research is needed based on analysis
42
+ */
43
+ export function identifyResearchTargets(analysis, ambiguity) {
44
+ const targets = [];
45
+ // Missing target - need to find files/components
46
+ if (analysis.signals.missingTarget) {
47
+ targets.push({
48
+ type: 'codebase',
49
+ priority: 10,
50
+ areas: [
51
+ {
52
+ query: 'find target files or components',
53
+ reason: 'No specific target mentioned in requirement',
54
+ expectedType: 'file',
55
+ globPatterns: ['src/**/*.ts', 'src/**/*.tsx'],
56
+ },
57
+ ],
58
+ });
59
+ }
60
+ // Vague verbs - need to find patterns/examples
61
+ if (analysis.signals.vagueVerbs.length > 0) {
62
+ for (const verb of analysis.signals.vagueVerbs.slice(0, 2)) {
63
+ targets.push({
64
+ type: 'both',
65
+ priority: 8,
66
+ areas: [
67
+ {
68
+ query: `find examples of "${verb}" in codebase`,
69
+ reason: `Vague verb "${verb}" needs concrete examples`,
70
+ expectedType: 'example',
71
+ globPatterns: ['src/**/*.ts'],
72
+ },
73
+ {
74
+ query: `best practices for "${verb}"`,
75
+ reason: `Need guidance for "${verb}" operation`,
76
+ expectedType: 'documentation',
77
+ webKeywords: [verb, 'best practices', 'typescript'],
78
+ },
79
+ ],
80
+ });
81
+ }
82
+ }
83
+ // Unclear success - need test patterns
84
+ if (analysis.signals.unclearSuccess) {
85
+ targets.push({
86
+ type: 'codebase',
87
+ priority: 7,
88
+ areas: [
89
+ {
90
+ query: 'find test patterns for similar features',
91
+ reason: 'Success criteria not defined',
92
+ expectedType: 'pattern',
93
+ globPatterns: ['test/**/*.test.ts', 'src/**/*.test.ts'],
94
+ },
95
+ ],
96
+ });
97
+ }
98
+ // Security related - need security patterns
99
+ if (analysis.signals.securityRelated) {
100
+ targets.push({
101
+ type: 'both',
102
+ priority: 9,
103
+ areas: [
104
+ {
105
+ query: 'find existing security patterns',
106
+ reason: 'Security-related requirement needs patterns',
107
+ expectedType: 'pattern',
108
+ globPatterns: ['src/**/auth*.ts', 'src/**/security*.ts'],
109
+ },
110
+ {
111
+ query: 'security best practices',
112
+ reason: 'Need security guidance',
113
+ expectedType: 'documentation',
114
+ webKeywords: ['security', 'authentication', 'authorization', 'best practices'],
115
+ },
116
+ ],
117
+ });
118
+ }
119
+ // Data related - need data patterns
120
+ if (analysis.signals.dataRelated) {
121
+ targets.push({
122
+ type: 'codebase',
123
+ priority: 8,
124
+ areas: [
125
+ {
126
+ query: 'find data handling patterns',
127
+ reason: 'Data-related requirement needs patterns',
128
+ expectedType: 'pattern',
129
+ globPatterns: ['src/**/db*.ts', 'src/**/storage*.ts', 'src/**/migration*.ts'],
130
+ },
131
+ ],
132
+ });
133
+ }
134
+ // Breaking change - need affected consumers
135
+ if (analysis.signals.breakingChange) {
136
+ targets.push({
137
+ type: 'codebase',
138
+ priority: 9,
139
+ areas: [
140
+ {
141
+ query: 'find consumers of affected code',
142
+ reason: 'Breaking change needs impact analysis',
143
+ expectedType: 'file',
144
+ globPatterns: ['src/**/*.ts'],
145
+ },
146
+ ],
147
+ });
148
+ }
149
+ // Add research for incomplete markers from MAC-4 ambiguity analysis
150
+ if (ambiguity.breakdown.incompleteMarkers > 0) {
151
+ targets.push({
152
+ type: 'codebase',
153
+ priority: 6,
154
+ areas: [
155
+ {
156
+ query: 'find related documentation or decisions',
157
+ reason: 'Incomplete markers (TBD/TODO) need resolution',
158
+ expectedType: 'decision',
159
+ globPatterns: ['.dino/**/*.md', 'docs/**/*.md'],
160
+ },
161
+ ],
162
+ });
163
+ }
164
+ // Sort by priority
165
+ return targets.sort((a, b) => b.priority - a.priority);
166
+ }
167
+ /**
168
+ * Build research prompt for subagent
169
+ */
170
+ export function buildResearchPrompt(prompt, targets, config = DEFAULT_RESEARCH_CONFIG) {
171
+ const sections = [];
172
+ sections.push('# Research Phase');
173
+ sections.push('');
174
+ sections.push('## Objective');
175
+ sections.push(`Gather context to improve confidence for: "${prompt}"`);
176
+ sections.push('');
177
+ sections.push('## Research Targets');
178
+ sections.push('');
179
+ for (const target of targets) {
180
+ sections.push(`### Priority ${target.priority} (${target.type})`);
181
+ for (const area of target.areas) {
182
+ sections.push(`- **${area.query}**`);
183
+ sections.push(` - Reason: ${area.reason}`);
184
+ sections.push(` - Expected: ${area.expectedType}`);
185
+ if (area.globPatterns && config.enableCodebaseSearch) {
186
+ sections.push(` - Search: ${area.globPatterns.join(', ')}`);
187
+ }
188
+ if (area.webKeywords && config.enableWebSearch) {
189
+ sections.push(` - Keywords: ${area.webKeywords.join(', ')}`);
190
+ }
191
+ }
192
+ sections.push('');
193
+ }
194
+ sections.push('## Instructions');
195
+ sections.push('');
196
+ if (config.enableCodebaseSearch) {
197
+ sections.push('### Codebase Search');
198
+ sections.push('1. Use Glob to find relevant files');
199
+ sections.push('2. Use Grep to search for patterns');
200
+ sections.push('3. Read key files to understand context');
201
+ sections.push('');
202
+ }
203
+ if (config.enableWebSearch) {
204
+ sections.push('### Web Research');
205
+ sections.push('1. Use WebSearch for best practices');
206
+ sections.push('2. Use WebFetch for documentation');
207
+ sections.push('');
208
+ }
209
+ sections.push('## Output');
210
+ sections.push('Return findings as structured list with:');
211
+ sections.push('- type: pattern|file|documentation|example|decision');
212
+ sections.push('- source: file path or URL');
213
+ sections.push('- summary: what was found');
214
+ sections.push('- relevance: 0-1 how relevant');
215
+ return sections.join('\n');
216
+ }
217
+ /**
218
+ * Calculate confidence improvement from findings
219
+ */
220
+ export function calculateConfidenceImprovement(findings, config = DEFAULT_RESEARCH_CONFIG) {
221
+ if (findings.length === 0)
222
+ return 0;
223
+ let improvement = 0;
224
+ // Count findings by type
225
+ const byType = new Map();
226
+ for (const finding of findings) {
227
+ const count = byType.get(finding.type) || 0;
228
+ byType.set(finding.type, count + 1);
229
+ }
230
+ // Add improvement for each type found
231
+ if (byType.has('pattern')) {
232
+ improvement += IMPROVEMENT_FACTORS.patternFound;
233
+ }
234
+ if (byType.has('file')) {
235
+ improvement += IMPROVEMENT_FACTORS.fileIdentified;
236
+ }
237
+ if (byType.has('documentation')) {
238
+ improvement += IMPROVEMENT_FACTORS.documentationFound;
239
+ }
240
+ if (byType.has('example')) {
241
+ improvement += IMPROVEMENT_FACTORS.exampleFound;
242
+ }
243
+ if (byType.has('decision')) {
244
+ improvement += IMPROVEMENT_FACTORS.decisionFound;
245
+ }
246
+ // Bonus for multiple findings (up to 5)
247
+ const extraFindings = Math.min(5, findings.length - 1);
248
+ improvement += extraFindings * IMPROVEMENT_FACTORS.multipleFindings;
249
+ // Weight by average relevance
250
+ const avgRelevance = findings.reduce((sum, f) => sum + f.relevance, 0) / findings.length;
251
+ improvement *= avgRelevance;
252
+ // Clamp to configured range
253
+ return Math.max(config.minConfidenceImprovement, Math.min(config.maxConfidenceImprovement, improvement));
254
+ }
255
+ /**
256
+ * Execute research phase
257
+ */
258
+ export async function executeResearchPhase(prompt, currentConfidence, analysis, config = DEFAULT_RESEARCH_CONFIG) {
259
+ // Get ambiguity analysis from MAC-4
260
+ const ambiguity = detectAmbiguity(prompt);
261
+ // Identify research targets
262
+ const targets = identifyResearchTargets(analysis, ambiguity);
263
+ if (targets.length === 0) {
264
+ return {
265
+ executed: false,
266
+ targets: [],
267
+ findings: [],
268
+ confidenceImprovement: 0,
269
+ newConfidence: currentConfidence,
270
+ summary: 'No research targets identified',
271
+ tokensUsed: 0,
272
+ canImproveMore: false,
273
+ };
274
+ }
275
+ // Build research prompt (to be executed by subagent)
276
+ const researchPrompt = buildResearchPrompt(prompt, targets, config);
277
+ // This would be populated by actual subagent execution
278
+ // For now, return structure for subagent to fill
279
+ const findings = [];
280
+ const confidenceImprovement = calculateConfidenceImprovement(findings, config);
281
+ const newConfidence = Math.min(1, currentConfidence + confidenceImprovement);
282
+ return {
283
+ executed: true,
284
+ targets,
285
+ findings,
286
+ confidenceImprovement,
287
+ newConfidence,
288
+ summary: generateResearchSummary(targets, findings),
289
+ tokensUsed: estimateTokens(researchPrompt),
290
+ canImproveMore: targets.length > findings.length,
291
+ };
292
+ }
293
+ /**
294
+ * Generate summary of research
295
+ */
296
+ function generateResearchSummary(targets, findings) {
297
+ if (findings.length === 0) {
298
+ return `Research identified ${targets.length} target(s) to investigate. Awaiting subagent execution.`;
299
+ }
300
+ const parts = [];
301
+ parts.push(`Found ${findings.length} relevant finding(s)`);
302
+ const types = new Set(findings.map((f) => f.type));
303
+ parts.push(`across ${types.size} categor${types.size === 1 ? 'y' : 'ies'}`);
304
+ const avgRelevance = findings.reduce((sum, f) => sum + f.relevance, 0) / findings.length;
305
+ parts.push(`with ${Math.round(avgRelevance * 100)}% average relevance`);
306
+ return `${parts.join(' ')}.`;
307
+ }
308
+ /**
309
+ * Estimate tokens from text
310
+ */
311
+ function estimateTokens(text) {
312
+ return Math.ceil(text.length / 4);
313
+ }
314
+ // =============================================================================
315
+ // Task Tool Integration
316
+ // =============================================================================
317
+ /**
318
+ * Build Task tool parameters for research subagent
319
+ */
320
+ export function buildResearchTaskParams(prompt, targets, config = DEFAULT_RESEARCH_CONFIG) {
321
+ return {
322
+ description: 'Research: gather context',
323
+ prompt: buildResearchPrompt(prompt, targets, config),
324
+ subagent_type: 'Explore',
325
+ model: 'sonnet',
326
+ };
327
+ }
328
+ // =============================================================================
329
+ // Formatting
330
+ // =============================================================================
331
+ /**
332
+ * Format research result for session.md
333
+ */
334
+ export function formatResearchForSession(result) {
335
+ const lines = [];
336
+ lines.push('### Research Phase');
337
+ lines.push('');
338
+ lines.push(`**Targets:** ${result.targets.length}`);
339
+ lines.push(`**Findings:** ${result.findings.length}`);
340
+ lines.push(`**Confidence Improvement:** +${Math.round(result.confidenceImprovement * 100)}%`);
341
+ lines.push('');
342
+ if (result.findings.length > 0) {
343
+ lines.push('**Key Findings:**');
344
+ for (const finding of result.findings.slice(0, 5)) {
345
+ lines.push(`- [${finding.type}] ${finding.summary} (${Math.round(finding.relevance * 100)}%)`);
346
+ }
347
+ if (result.findings.length > 5) {
348
+ lines.push(`- ... and ${result.findings.length - 5} more`);
349
+ }
350
+ }
351
+ lines.push('');
352
+ lines.push(`**Summary:** ${result.summary}`);
353
+ return lines.join('\n');
354
+ }
355
+ //# sourceMappingURL=research-phase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-phase.js","sourceRoot":"","sources":["../../../src/core/agents/research-phase.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Research Validator Agent
2
+ * Research Validator Agent - v17.5.0
3
3
  *
4
4
  * Orchestrates package validation by integrating registry-client and security-scanner.
5
5
  * Provides comprehensive package analysis including metadata, size, and security.
@@ -8,6 +8,9 @@
8
8
  * - Single package validation
9
9
  * - Batch validation for multiple packages
10
10
  * - Caching of validation results (1-hour TTL)
11
+ * - Rate limiting per API source
12
+ * - Version comparison (latest vs requested)
13
+ * - Deprecation detection with alternatives
11
14
  * - Structured validation results
12
15
  *
13
16
  * @module research-validator
@@ -24,6 +27,11 @@ export interface PackageValidation {
24
27
  isValid: boolean;
25
28
  warnings: string[];
26
29
  errors: string[];
30
+ latestVersion: string | null;
31
+ isLatest: boolean;
32
+ isDeprecated: boolean;
33
+ deprecationMessage: string | null;
34
+ alternatives: string[];
27
35
  }
28
36
  export interface ValidationOptions {
29
37
  severityThreshold?: VulnerabilitySeverity;
@@ -55,6 +63,9 @@ export declare function clearValidationCache(): void;
55
63
  */
56
64
  export declare function getValidationCacheStats(): {
57
65
  size: number;
58
- entries: string[];
66
+ maxSize: number;
67
+ hits: number;
68
+ misses: number;
69
+ hitRate: number;
59
70
  };
60
71
  //# sourceMappingURL=research-validator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"research-validator.d.ts","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,eAAe,CAAA;IACzB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAsBD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAoE5B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAc9B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;;EAKtC"}
1
+ {"version":3,"file":"research-validator.d.ts","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,KAAK,kBAAkB,EAEvB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAA;AAG9B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,eAAe,CAAA;IACzB,IAAI,EAAE,WAAW,CAAA;IACjB,QAAQ,EAAE,kBAAkB,CAAA;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAEhB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,qBAAqB,CAAA;IACzC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAQD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAsH5B;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAc9B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,uBAAuB;;;;;;EAEtC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Research Validator Agent
2
+ * Research Validator Agent - v17.5.0
3
3
  *
4
4
  * Orchestrates package validation by integrating registry-client and security-scanner.
5
5
  * Provides comprehensive package analysis including metadata, size, and security.
@@ -8,25 +8,20 @@
8
8
  * - Single package validation
9
9
  * - Batch validation for multiple packages
10
10
  * - Caching of validation results (1-hour TTL)
11
+ * - Rate limiting per API source
12
+ * - Version comparison (latest vs requested)
13
+ * - Deprecation detection with alternatives
11
14
  * - Structured validation results
12
15
  *
13
16
  * @module research-validator
14
17
  */
15
18
  import { fetchPackageMetadata, getPackageSize, } from './registry-client.js';
16
19
  import { scanPackage, } from './security-scanner.js';
17
- // Cache with 1-hour TTL
18
- const CACHE_TTL_MS = 60 * 60 * 1000; // 1 hour
19
- const validationCache = new Map();
20
+ import { ValidationCache, withRateLimit } from './validation-cache.js';
21
+ // Cache with 1-hour TTL using ValidationCache
22
+ const validationCache = new ValidationCache();
20
23
  // Default size threshold: 100KB gzipped
21
24
  const DEFAULT_MAX_SIZE_KB = 100;
22
- /**
23
- * Check if cache entry is still valid
24
- */
25
- function isCacheValid(entry) {
26
- if (!entry)
27
- return false;
28
- return Date.now() - entry.timestamp < CACHE_TTL_MS;
29
- }
30
25
  /**
31
26
  * Validate a single package
32
27
  *
@@ -41,18 +36,44 @@ export async function validatePackage(packageName, version, options = {}) {
41
36
  // Check cache first
42
37
  const cacheKey = version ? `${packageName}@${version}` : packageName;
43
38
  const cached = validationCache.get(cacheKey);
44
- if (cached && isCacheValid(cached)) {
45
- return cached.data;
39
+ if (cached) {
40
+ return cached;
46
41
  }
47
- // Fetch metadata (includes version resolution)
48
- const metadata = await fetchPackageMetadata(packageName, version);
42
+ // Fetch metadata with rate limiting (includes version resolution)
43
+ const metadata = await withRateLimit('npm', () => fetchPackageMetadata(packageName, version));
49
44
  const resolvedVersion = metadata.version;
50
- // Fetch size info
51
- const sizeInfo = await getPackageSize(packageName, resolvedVersion);
52
- // Scan for security vulnerabilities
53
- const securityResult = await scanPackage(packageName, resolvedVersion, {
54
- severityThreshold,
55
- });
45
+ // Fetch latest version for comparison
46
+ let latestVersion = null;
47
+ let isLatest = true;
48
+ if (version) {
49
+ try {
50
+ const latestMetadata = await withRateLimit('npm', () => fetchPackageMetadata(packageName));
51
+ latestVersion = latestMetadata.version;
52
+ isLatest = resolvedVersion === latestVersion;
53
+ if (!isLatest) {
54
+ // Version comparison will be added to warnings
55
+ }
56
+ }
57
+ catch {
58
+ // Could not fetch latest version
59
+ }
60
+ }
61
+ // Check for deprecation
62
+ const isDeprecated = metadata.deprecated !== undefined && metadata.deprecated !== null;
63
+ const deprecationMessage = metadata.deprecated ?? null;
64
+ const alternatives = [];
65
+ // Extract alternatives from deprecation message if present
66
+ if (isDeprecated && deprecationMessage) {
67
+ // Common patterns: "use X instead", "replaced by Y", "see Z"
68
+ const altMatch = deprecationMessage.match(/(?:use|replaced by|see|try|switch to)\s+['"`]?([a-z0-9@/-]+)['"`]?/i);
69
+ if (altMatch) {
70
+ alternatives.push(altMatch[1]);
71
+ }
72
+ }
73
+ // Fetch size info with rate limiting
74
+ const sizeInfo = await withRateLimit('bundlephobia', () => getPackageSize(packageName, resolvedVersion));
75
+ // Scan for security vulnerabilities with rate limiting
76
+ const securityResult = await withRateLimit('audit', () => scanPackage(packageName, resolvedVersion, { severityThreshold }));
56
77
  // Analyze results
57
78
  const warnings = [];
58
79
  const errors = [];
@@ -61,6 +82,17 @@ export async function validatePackage(packageName, version, options = {}) {
61
82
  if (sizeKB > maxSizeKB) {
62
83
  warnings.push(`Package size (${sizeKB.toFixed(2)}KB) exceeds threshold (${maxSizeKB}KB)`);
63
84
  }
85
+ // Check version
86
+ if (!isLatest && latestVersion) {
87
+ warnings.push(`Newer version available: ${latestVersion} (requested: ${resolvedVersion})`);
88
+ }
89
+ // Check deprecation
90
+ if (isDeprecated) {
91
+ warnings.push(`DEPRECATED: ${deprecationMessage ?? 'No reason provided'}`);
92
+ if (alternatives.length > 0) {
93
+ warnings.push(`Suggested alternatives: ${alternatives.join(', ')}`);
94
+ }
95
+ }
64
96
  // Check security
65
97
  if (securityResult.hasBlockingIssues) {
66
98
  for (const vuln of securityResult.vulnerabilities) {
@@ -82,15 +114,18 @@ export async function validatePackage(packageName, version, options = {}) {
82
114
  size: sizeInfo,
83
115
  security: securityResult,
84
116
  validatedAt: Date.now(),
85
- isValid: errors.length === 0,
117
+ isValid: errors.length === 0 && !isDeprecated,
86
118
  warnings,
87
119
  errors,
120
+ // v17.5.0: Enhanced fields
121
+ latestVersion,
122
+ isLatest,
123
+ isDeprecated,
124
+ deprecationMessage,
125
+ alternatives,
88
126
  };
89
127
  // Cache result
90
- validationCache.set(cacheKey, {
91
- data: validation,
92
- timestamp: Date.now(),
93
- });
128
+ validationCache.set(cacheKey, validation);
94
129
  return validation;
95
130
  }
96
131
  /**
@@ -119,9 +154,6 @@ export function clearValidationCache() {
119
154
  * Get validation cache statistics (useful for debugging)
120
155
  */
121
156
  export function getValidationCacheStats() {
122
- return {
123
- size: validationCache.size,
124
- entries: Array.from(validationCache.keys()),
125
- };
157
+ return validationCache.getStats();
126
158
  }
127
159
  //# sourceMappingURL=research-validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"research-validator.js","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"research-validator.js","sourceRoot":"","sources":["../../../src/core/agents/research-validator.ts"],"names":[],"mappings":"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"}