dino-spec 13.6.1 → 14.1.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 (231) hide show
  1. package/README.md +118 -5
  2. package/dist/commands/hud.d.ts +1 -8
  3. package/dist/commands/hud.d.ts.map +1 -1
  4. package/dist/commands/hud.js +4 -18
  5. package/dist/commands/hud.js.map +1 -1
  6. package/dist/core/agents/ambiguity-resolver.d.ts +118 -0
  7. package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -0
  8. package/dist/core/agents/ambiguity-resolver.js +327 -0
  9. package/dist/core/agents/ambiguity-resolver.js.map +1 -0
  10. package/dist/core/agents/confidence-gate.d.ts +99 -0
  11. package/dist/core/agents/confidence-gate.d.ts.map +1 -0
  12. package/dist/core/agents/confidence-gate.js +295 -0
  13. package/dist/core/agents/confidence-gate.js.map +1 -0
  14. package/dist/core/agents/feedback-collector.d.ts +108 -0
  15. package/dist/core/agents/feedback-collector.d.ts.map +1 -0
  16. package/dist/core/agents/feedback-collector.js +313 -0
  17. package/dist/core/agents/feedback-collector.js.map +1 -0
  18. package/dist/core/agents/parallel-reviewer.d.ts +88 -0
  19. package/dist/core/agents/parallel-reviewer.d.ts.map +1 -0
  20. package/dist/core/agents/parallel-reviewer.js +459 -0
  21. package/dist/core/agents/parallel-reviewer.js.map +1 -0
  22. package/dist/core/agents/reviewer-loop.d.ts +102 -0
  23. package/dist/core/agents/reviewer-loop.d.ts.map +1 -0
  24. package/dist/core/agents/reviewer-loop.js +373 -0
  25. package/dist/core/agents/reviewer-loop.js.map +1 -0
  26. package/dist/core/agents/skill-auditor.d.ts +82 -0
  27. package/dist/core/agents/skill-auditor.d.ts.map +1 -0
  28. package/dist/core/agents/skill-auditor.js +278 -0
  29. package/dist/core/agents/skill-auditor.js.map +1 -0
  30. package/dist/core/config/feature-flags.d.ts +25 -1
  31. package/dist/core/config/feature-flags.d.ts.map +1 -1
  32. package/dist/core/config/feature-flags.js +7 -1
  33. package/dist/core/config/feature-flags.js.map +1 -1
  34. package/dist/core/context/__tests__/budget-thresholds.test.d.ts +5 -0
  35. package/dist/core/context/__tests__/budget-thresholds.test.d.ts.map +1 -0
  36. package/dist/core/context/__tests__/budget-thresholds.test.js +223 -0
  37. package/dist/core/context/__tests__/budget-thresholds.test.js.map +1 -0
  38. package/dist/core/context/__tests__/compaction-engine.test.d.ts +5 -0
  39. package/dist/core/context/__tests__/compaction-engine.test.d.ts.map +1 -0
  40. package/dist/core/context/__tests__/compaction-engine.test.js +474 -0
  41. package/dist/core/context/__tests__/compaction-engine.test.js.map +1 -0
  42. package/dist/core/context/__tests__/output-persistence.test.d.ts +5 -0
  43. package/dist/core/context/__tests__/output-persistence.test.d.ts.map +1 -0
  44. package/dist/core/context/__tests__/output-persistence.test.js +246 -0
  45. package/dist/core/context/__tests__/output-persistence.test.js.map +1 -0
  46. package/dist/core/context/auto-injection-engine.d.ts +10 -1
  47. package/dist/core/context/auto-injection-engine.d.ts.map +1 -1
  48. package/dist/core/context/auto-injection-engine.js +45 -2
  49. package/dist/core/context/auto-injection-engine.js.map +1 -1
  50. package/dist/core/context/budget-thresholds.d.ts +167 -0
  51. package/dist/core/context/budget-thresholds.d.ts.map +1 -0
  52. package/dist/core/context/budget-thresholds.js +234 -0
  53. package/dist/core/context/budget-thresholds.js.map +1 -0
  54. package/dist/core/context/compaction-engine.d.ts +193 -0
  55. package/dist/core/context/compaction-engine.d.ts.map +1 -0
  56. package/dist/core/context/compaction-engine.js +376 -0
  57. package/dist/core/context/compaction-engine.js.map +1 -0
  58. package/dist/core/context/context-health.d.ts +27 -2
  59. package/dist/core/context/context-health.d.ts.map +1 -1
  60. package/dist/core/context/context-health.js +98 -12
  61. package/dist/core/context/context-health.js.map +1 -1
  62. package/dist/core/context/focus-resource-loader.d.ts +143 -0
  63. package/dist/core/context/focus-resource-loader.d.ts.map +1 -0
  64. package/dist/core/context/focus-resource-loader.js +305 -0
  65. package/dist/core/context/focus-resource-loader.js.map +1 -0
  66. package/dist/core/context/index.d.ts +10 -5
  67. package/dist/core/context/index.d.ts.map +1 -1
  68. package/dist/core/context/index.js +40 -5
  69. package/dist/core/context/index.js.map +1 -1
  70. package/dist/core/context/lazy-loader.d.ts +44 -1
  71. package/dist/core/context/lazy-loader.d.ts.map +1 -1
  72. package/dist/core/context/lazy-loader.js +59 -1
  73. package/dist/core/context/lazy-loader.js.map +1 -1
  74. package/dist/core/context/output-persistence.d.ts +142 -0
  75. package/dist/core/context/output-persistence.d.ts.map +1 -0
  76. package/dist/core/context/output-persistence.js +242 -0
  77. package/dist/core/context/output-persistence.js.map +1 -0
  78. package/dist/core/context-repl/__tests__/repl-environment.test.d.ts +7 -0
  79. package/dist/core/context-repl/__tests__/repl-environment.test.d.ts.map +1 -0
  80. package/dist/core/context-repl/__tests__/repl-environment.test.js +335 -0
  81. package/dist/core/context-repl/__tests__/repl-environment.test.js.map +1 -0
  82. package/dist/core/context-repl/context-window-monitor.d.ts +181 -0
  83. package/dist/core/context-repl/context-window-monitor.d.ts.map +1 -0
  84. package/dist/core/context-repl/context-window-monitor.js +309 -0
  85. package/dist/core/context-repl/context-window-monitor.js.map +1 -0
  86. package/dist/core/context-repl/index.d.ts +8 -3
  87. package/dist/core/context-repl/index.d.ts.map +1 -1
  88. package/dist/core/context-repl/index.js +11 -3
  89. package/dist/core/context-repl/index.js.map +1 -1
  90. package/dist/core/context-repl/repl-environment.d.ts +66 -0
  91. package/dist/core/context-repl/repl-environment.d.ts.map +1 -0
  92. package/dist/core/context-repl/repl-environment.js +795 -0
  93. package/dist/core/context-repl/repl-environment.js.map +1 -0
  94. package/dist/core/context-repl/types.d.ts +277 -1
  95. package/dist/core/context-repl/types.d.ts.map +1 -1
  96. package/dist/core/context-repl/types.js +52 -1
  97. package/dist/core/context-repl/types.js.map +1 -1
  98. package/dist/core/environment/__tests__/pre-verify.test.d.ts +5 -0
  99. package/dist/core/environment/__tests__/pre-verify.test.d.ts.map +1 -0
  100. package/dist/core/environment/__tests__/pre-verify.test.js +343 -0
  101. package/dist/core/environment/__tests__/pre-verify.test.js.map +1 -0
  102. package/dist/core/environment/index.d.ts +8 -0
  103. package/dist/core/environment/index.d.ts.map +1 -0
  104. package/dist/core/environment/index.js +7 -0
  105. package/dist/core/environment/index.js.map +1 -0
  106. package/dist/core/environment/pre-verify.d.ts +63 -0
  107. package/dist/core/environment/pre-verify.d.ts.map +1 -0
  108. package/dist/core/environment/pre-verify.js +221 -0
  109. package/dist/core/environment/pre-verify.js.map +1 -0
  110. package/dist/core/environment/types.d.ts +37 -0
  111. package/dist/core/environment/types.d.ts.map +1 -0
  112. package/dist/core/environment/types.js +5 -0
  113. package/dist/core/environment/types.js.map +1 -0
  114. package/dist/core/generator/claude-md.js +1 -1
  115. package/dist/core/intelligence/context-budget.d.ts +10 -5
  116. package/dist/core/intelligence/context-budget.d.ts.map +1 -1
  117. package/dist/core/intelligence/context-budget.js +12 -5
  118. package/dist/core/intelligence/context-budget.js.map +1 -1
  119. package/dist/core/provider/storage.d.ts.map +1 -1
  120. package/dist/core/provider/storage.js +1 -2
  121. package/dist/core/provider/storage.js.map +1 -1
  122. package/dist/hooks/post-edit.js +73 -0
  123. package/dist/hooks/post-edit.js.map +1 -1
  124. package/dist/hooks/session-start.js +115 -0
  125. package/dist/hooks/session-start.js.map +1 -1
  126. package/dist/hooks/types.js +1 -1
  127. package/dist/hooks/user-prompt-submit.js +100 -0
  128. package/dist/hooks/user-prompt-submit.js.map +1 -1
  129. package/dist/hud/config.d.ts +3 -28
  130. package/dist/hud/config.d.ts.map +1 -1
  131. package/dist/hud/config.js +8 -60
  132. package/dist/hud/config.js.map +1 -1
  133. package/dist/hud/index.d.ts.map +1 -1
  134. package/dist/hud/index.js +0 -1
  135. package/dist/hud/index.js.map +1 -1
  136. package/dist/hud/render/budget-bar.d.ts +0 -2
  137. package/dist/hud/render/budget-bar.d.ts.map +1 -1
  138. package/dist/hud/render/budget-bar.js +5 -8
  139. package/dist/hud/render/budget-bar.js.map +1 -1
  140. package/dist/hud/stdin.d.ts +0 -3
  141. package/dist/hud/stdin.d.ts.map +1 -1
  142. package/dist/hud/stdin.js +2 -29
  143. package/dist/hud/stdin.js.map +1 -1
  144. package/dist/hud/types.d.ts +0 -2
  145. package/dist/hud/types.d.ts.map +1 -1
  146. package/dist/mcp/__tests__/dynamic-updates.test.d.ts +5 -0
  147. package/dist/mcp/__tests__/dynamic-updates.test.d.ts.map +1 -0
  148. package/dist/mcp/__tests__/dynamic-updates.test.js +314 -0
  149. package/dist/mcp/__tests__/dynamic-updates.test.js.map +1 -0
  150. package/dist/mcp/dynamic-updates.d.ts +167 -0
  151. package/dist/mcp/dynamic-updates.d.ts.map +1 -0
  152. package/dist/mcp/dynamic-updates.js +313 -0
  153. package/dist/mcp/dynamic-updates.js.map +1 -0
  154. package/dist/mcp/focus-filter.d.ts +74 -0
  155. package/dist/mcp/focus-filter.d.ts.map +1 -0
  156. package/dist/mcp/focus-filter.js +229 -0
  157. package/dist/mcp/focus-filter.js.map +1 -0
  158. package/dist/mcp/index.d.ts +4 -2
  159. package/dist/mcp/index.d.ts.map +1 -1
  160. package/dist/mcp/index.js +5 -2
  161. package/dist/mcp/index.js.map +1 -1
  162. package/dist/mcp/registry.d.ts +4 -4
  163. package/dist/mcp/registry.d.ts.map +1 -1
  164. package/dist/mcp/registry.js +17 -16
  165. package/dist/mcp/registry.js.map +1 -1
  166. package/dist/mcp/server.d.ts +2 -1
  167. package/dist/mcp/server.d.ts.map +1 -1
  168. package/dist/mcp/server.js +12 -3
  169. package/dist/mcp/server.js.map +1 -1
  170. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  171. package/dist/mcp/tool-tiers.js +5 -0
  172. package/dist/mcp/tool-tiers.js.map +1 -1
  173. package/dist/mcp/tools/__tests__/environment.test.d.ts +5 -0
  174. package/dist/mcp/tools/__tests__/environment.test.d.ts.map +1 -0
  175. package/dist/mcp/tools/__tests__/environment.test.js +219 -0
  176. package/dist/mcp/tools/__tests__/environment.test.js.map +1 -0
  177. package/dist/mcp/tools/auto-inject.d.ts +36 -0
  178. package/dist/mcp/tools/auto-inject.d.ts.map +1 -0
  179. package/dist/mcp/tools/auto-inject.js +143 -0
  180. package/dist/mcp/tools/auto-inject.js.map +1 -0
  181. package/dist/mcp/tools/auto-unload.d.ts +29 -0
  182. package/dist/mcp/tools/auto-unload.d.ts.map +1 -0
  183. package/dist/mcp/tools/auto-unload.js +151 -0
  184. package/dist/mcp/tools/auto-unload.js.map +1 -0
  185. package/dist/mcp/tools/context-repl.d.ts +48 -0
  186. package/dist/mcp/tools/context-repl.d.ts.map +1 -0
  187. package/dist/mcp/tools/context-repl.js +290 -0
  188. package/dist/mcp/tools/context-repl.js.map +1 -0
  189. package/dist/mcp/tools/environment.d.ts +27 -0
  190. package/dist/mcp/tools/environment.d.ts.map +1 -0
  191. package/dist/mcp/tools/environment.js +97 -0
  192. package/dist/mcp/tools/environment.js.map +1 -0
  193. package/dist/mcp/tools/feedback.d.ts +63 -0
  194. package/dist/mcp/tools/feedback.d.ts.map +1 -0
  195. package/dist/mcp/tools/feedback.js +255 -0
  196. package/dist/mcp/tools/feedback.js.map +1 -0
  197. package/dist/mcp/tools/health.d.ts +29 -0
  198. package/dist/mcp/tools/health.d.ts.map +1 -0
  199. package/dist/mcp/tools/health.js +171 -0
  200. package/dist/mcp/tools/health.js.map +1 -0
  201. package/dist/mcp/tools/index.d.ts +9 -2
  202. package/dist/mcp/tools/index.d.ts.map +1 -1
  203. package/dist/mcp/tools/index.js +37 -2
  204. package/dist/mcp/tools/index.js.map +1 -1
  205. package/dist/mcp/tools/output-persistence.d.ts +44 -0
  206. package/dist/mcp/tools/output-persistence.d.ts.map +1 -0
  207. package/dist/mcp/tools/output-persistence.js +208 -0
  208. package/dist/mcp/tools/output-persistence.js.map +1 -0
  209. package/dist/mcp-server.d.ts +2 -1
  210. package/dist/mcp-server.d.ts.map +1 -1
  211. package/dist/mcp-server.js +36 -7
  212. package/dist/mcp-server.js.map +1 -1
  213. package/dist/rules/index.js +2 -2
  214. package/dist/utils/exec.js +2 -2
  215. package/dist/utils/exec.js.map +1 -1
  216. package/dist/utils/gitignore.d.ts.map +1 -1
  217. package/dist/utils/gitignore.js +5 -0
  218. package/dist/utils/gitignore.js.map +1 -1
  219. package/package.json +76 -77
  220. package/dist/hud/config-tui.d.ts +0 -25
  221. package/dist/hud/config-tui.d.ts.map +0 -1
  222. package/dist/hud/config-tui.js +0 -199
  223. package/dist/hud/config-tui.js.map +0 -1
  224. package/dist/hud/models.d.ts +0 -58
  225. package/dist/hud/models.d.ts.map +0 -1
  226. package/dist/hud/models.js +0 -124
  227. package/dist/hud/models.js.map +0 -1
  228. package/dist/hud/token-estimator.d.ts +0 -79
  229. package/dist/hud/token-estimator.d.ts.map +0 -1
  230. package/dist/hud/token-estimator.js +0 -126
  231. package/dist/hud/token-estimator.js.map +0 -1
@@ -0,0 +1,373 @@
1
+ /**
2
+ * Reviewer Loop - v14.1.0
3
+ *
4
+ * Mandatory review integration for all Edit/Write operations.
5
+ * Spawns reviewer subagent to check code changes before commit.
6
+ *
7
+ * @see .claude/rules/dino/mandatory-review.md
8
+ */
9
+ // =============================================================================
10
+ // Constants
11
+ // =============================================================================
12
+ const DEFAULT_CONFIG = {
13
+ enabled: process.env.DINO_MANDATORY_REVIEW === 'true',
14
+ blockOnCritical: true,
15
+ blockOnMajor: false,
16
+ includeStyle: true,
17
+ includeSecurity: true,
18
+ includeTests: true,
19
+ maxReviewTokens: 3000,
20
+ };
21
+ /**
22
+ * Categories that block on critical
23
+ */
24
+ const BLOCKING_CATEGORIES = ['security', 'quality'];
25
+ // =============================================================================
26
+ // Core Functions
27
+ // =============================================================================
28
+ /**
29
+ * Check if mandatory review is enabled
30
+ */
31
+ export function isReviewEnabled(config = DEFAULT_CONFIG) {
32
+ return config.enabled || process.env.DINO_MANDATORY_REVIEW === 'true';
33
+ }
34
+ /**
35
+ * Review changes using reviewer agent
36
+ *
37
+ * This is the main entry point for code review.
38
+ * Returns review result with findings and verdict.
39
+ */
40
+ export async function reviewChanges(changes, context, config = DEFAULT_CONFIG) {
41
+ if (changes.length === 0) {
42
+ return {
43
+ verdict: 'approve',
44
+ approved: true,
45
+ blocking: false,
46
+ findings: [],
47
+ summary: 'No changes to review',
48
+ reviewerId: 'auto',
49
+ timestamp: new Date(),
50
+ tokensUsed: 0,
51
+ };
52
+ }
53
+ // Build review prompt
54
+ const reviewPrompt = buildReviewPrompt(changes, context, config);
55
+ // This would spawn the reviewer subagent via Task tool
56
+ // For now, return stub with basic analysis
57
+ const findings = analyzeChanges(changes, config);
58
+ // Determine verdict
59
+ const verdict = determineVerdict(findings, config);
60
+ const blocking = shouldBlock(findings, config);
61
+ return {
62
+ verdict,
63
+ approved: verdict === 'approve',
64
+ blocking,
65
+ findings,
66
+ summary: generateReviewSummary(findings, verdict),
67
+ reviewerId: 'dino-reviewer',
68
+ timestamp: new Date(),
69
+ tokensUsed: estimateTokens(reviewPrompt),
70
+ };
71
+ }
72
+ /**
73
+ * Build review prompt for subagent
74
+ */
75
+ export function buildReviewPrompt(changes, context, config = DEFAULT_CONFIG) {
76
+ const sections = [];
77
+ sections.push('# Code Review Task');
78
+ sections.push('');
79
+ sections.push('## Objective');
80
+ sections.push('Review the following code changes and provide feedback.');
81
+ sections.push('');
82
+ // Focus area
83
+ if (context.focus) {
84
+ sections.push(`## Focus Area`);
85
+ sections.push(context.focus);
86
+ sections.push('');
87
+ }
88
+ // Changes
89
+ sections.push('## Changes');
90
+ sections.push('');
91
+ for (const change of changes) {
92
+ sections.push(`### ${change.path} (${change.operation})`);
93
+ sections.push(`Lines: +${change.linesAdded} -${change.linesRemoved}`);
94
+ if (change.diff) {
95
+ sections.push('```diff');
96
+ sections.push(change.diff);
97
+ sections.push('```');
98
+ }
99
+ sections.push('');
100
+ }
101
+ // Review checklist
102
+ sections.push('## Review Checklist');
103
+ sections.push('');
104
+ if (config.includeSecurity) {
105
+ sections.push('### Security');
106
+ sections.push('- [ ] No hardcoded credentials');
107
+ sections.push('- [ ] Input validation present');
108
+ sections.push('- [ ] No injection vulnerabilities');
109
+ sections.push('');
110
+ }
111
+ if (config.includeStyle) {
112
+ sections.push('### Code Quality');
113
+ sections.push('- [ ] Follows existing patterns');
114
+ sections.push('- [ ] No unnecessary complexity');
115
+ sections.push('- [ ] Proper error handling');
116
+ sections.push('');
117
+ }
118
+ if (config.includeTests) {
119
+ sections.push('### Testing');
120
+ sections.push('- [ ] Tests added for new functionality');
121
+ sections.push('- [ ] Existing tests still pass');
122
+ sections.push('');
123
+ }
124
+ // Previous learnings
125
+ if (context.previousLearnings && context.previousLearnings.length > 0) {
126
+ sections.push('## Previous Learnings');
127
+ for (const learning of context.previousLearnings) {
128
+ sections.push(`- ${learning}`);
129
+ }
130
+ sections.push('');
131
+ }
132
+ // Output format
133
+ sections.push('## Output Format');
134
+ sections.push('');
135
+ sections.push('```markdown');
136
+ sections.push('## Review Summary');
137
+ sections.push('**Verdict:** [Approve/Request Changes/Needs Discussion]');
138
+ sections.push('');
139
+ sections.push('## Issues Found');
140
+ sections.push('- **[Critical/Major/Minor]** `file.ts:42`: [Description]');
141
+ sections.push('');
142
+ sections.push('## Recommendations');
143
+ sections.push('- [Recommendation 1]');
144
+ sections.push('```');
145
+ return sections.join('\n');
146
+ }
147
+ /**
148
+ * Build Task tool spawn parameters for reviewer subagent
149
+ */
150
+ export function buildReviewerSpawnParams(changes, context, config = DEFAULT_CONFIG) {
151
+ return {
152
+ description: `Review: ${changes.length} file(s)`,
153
+ prompt: buildReviewPrompt(changes, context, config),
154
+ subagent_type: 'general-purpose',
155
+ model: 'sonnet',
156
+ };
157
+ }
158
+ // =============================================================================
159
+ // Helper Functions
160
+ // =============================================================================
161
+ /**
162
+ * Analyze changes for basic issues (placeholder for subagent)
163
+ */
164
+ function analyzeChanges(changes, config) {
165
+ const findings = [];
166
+ for (const change of changes) {
167
+ // Check for security issues
168
+ if (config.includeSecurity) {
169
+ const securityFindings = checkSecurityIssues(change);
170
+ findings.push(...securityFindings);
171
+ }
172
+ // Check for quality issues
173
+ if (config.includeStyle) {
174
+ const qualityFindings = checkQualityIssues(change);
175
+ findings.push(...qualityFindings);
176
+ }
177
+ }
178
+ return findings;
179
+ }
180
+ /**
181
+ * Check for security issues
182
+ */
183
+ function checkSecurityIssues(change) {
184
+ const findings = [];
185
+ const content = change.content || change.diff || '';
186
+ // Check for hardcoded secrets
187
+ if (/(?:password|secret|api_?key|apiKey|token)\s*[:=]\s*['"][^'"]+['"]/i.test(content)) {
188
+ findings.push({
189
+ type: 'issue',
190
+ severity: 'critical',
191
+ file: change.path,
192
+ message: 'Potential hardcoded secret detected',
193
+ category: 'security',
194
+ suggestion: 'Use environment variables for sensitive values',
195
+ });
196
+ }
197
+ // Check for eval usage
198
+ if (/\beval\s*\(/.test(content)) {
199
+ findings.push({
200
+ type: 'issue',
201
+ severity: 'critical',
202
+ file: change.path,
203
+ message: 'Use of eval() detected - potential code injection risk',
204
+ category: 'security',
205
+ suggestion: 'Avoid eval() - use safer alternatives',
206
+ });
207
+ }
208
+ return findings;
209
+ }
210
+ /**
211
+ * Check for quality issues
212
+ */
213
+ function checkQualityIssues(change) {
214
+ const findings = [];
215
+ const content = change.content || change.diff || '';
216
+ // Check for console.log left in code
217
+ if (/console\.log\(/.test(content) && !change.path.includes('test')) {
218
+ findings.push({
219
+ type: 'suggestion',
220
+ severity: 'minor',
221
+ file: change.path,
222
+ message: 'console.log() found - consider using proper logging',
223
+ category: 'quality',
224
+ suggestion: 'Use a logging framework instead of console.log',
225
+ });
226
+ }
227
+ // Check for TODO comments
228
+ if (/\/\/\s*TODO/i.test(content)) {
229
+ findings.push({
230
+ type: 'suggestion',
231
+ severity: 'info',
232
+ file: change.path,
233
+ message: 'TODO comment found - ensure it is tracked',
234
+ category: 'quality',
235
+ });
236
+ }
237
+ return findings;
238
+ }
239
+ /**
240
+ * Determine verdict based on findings
241
+ */
242
+ function determineVerdict(findings, config) {
243
+ const criticalCount = findings.filter((f) => f.type === 'issue' && f.severity === 'critical').length;
244
+ const majorCount = findings.filter((f) => f.type === 'issue' && f.severity === 'major').length;
245
+ if (criticalCount > 0 && config.blockOnCritical) {
246
+ return 'request-changes';
247
+ }
248
+ if (majorCount > 0 && config.blockOnMajor) {
249
+ return 'request-changes';
250
+ }
251
+ if (findings.some((f) => f.type === 'issue')) {
252
+ return 'needs-discussion';
253
+ }
254
+ return 'approve';
255
+ }
256
+ /**
257
+ * Check if review should block commit
258
+ */
259
+ function shouldBlock(findings, config) {
260
+ // Block on critical issues in blocking categories
261
+ const criticalBlocking = findings.some((f) => f.type === 'issue' &&
262
+ f.severity === 'critical' &&
263
+ BLOCKING_CATEGORIES.includes(f.category) &&
264
+ config.blockOnCritical);
265
+ if (criticalBlocking)
266
+ return true;
267
+ // Block on major if configured
268
+ if (config.blockOnMajor) {
269
+ return findings.some((f) => f.type === 'issue' && f.severity === 'major');
270
+ }
271
+ return false;
272
+ }
273
+ /**
274
+ * Generate review summary
275
+ */
276
+ function generateReviewSummary(findings, verdict) {
277
+ const issueCount = findings.filter((f) => f.type === 'issue').length;
278
+ const suggestionCount = findings.filter((f) => f.type === 'suggestion').length;
279
+ const parts = [];
280
+ switch (verdict) {
281
+ case 'approve':
282
+ parts.push('Changes approved');
283
+ break;
284
+ case 'request-changes':
285
+ parts.push('Changes require fixes before proceeding');
286
+ break;
287
+ case 'needs-discussion':
288
+ parts.push('Changes need discussion');
289
+ break;
290
+ }
291
+ if (issueCount > 0) {
292
+ parts.push(`${issueCount} issue(s) found`);
293
+ }
294
+ if (suggestionCount > 0) {
295
+ parts.push(`${suggestionCount} suggestion(s)`);
296
+ }
297
+ return parts.join('. ') + '.';
298
+ }
299
+ /**
300
+ * Estimate tokens from text
301
+ */
302
+ function estimateTokens(text) {
303
+ return Math.ceil(text.length / 4);
304
+ }
305
+ // =============================================================================
306
+ // Session Integration
307
+ // =============================================================================
308
+ /**
309
+ * Format review result for session.md
310
+ */
311
+ export function formatReviewForSession(result) {
312
+ const lines = [];
313
+ lines.push('## Review Results');
314
+ lines.push('');
315
+ const verdictEmoji = result.verdict === 'approve'
316
+ ? '✅'
317
+ : result.verdict === 'request-changes'
318
+ ? '🚫'
319
+ : '💬';
320
+ lines.push(`**Verdict:** ${verdictEmoji} ${result.verdict}`);
321
+ lines.push(`**Reviewer:** ${result.reviewerId}`);
322
+ lines.push(`**Time:** ${result.timestamp.toISOString()}`);
323
+ lines.push('');
324
+ if (result.findings.length > 0) {
325
+ lines.push('### Findings');
326
+ for (const finding of result.findings) {
327
+ const severityEmoji = {
328
+ critical: '🔴',
329
+ major: '🟠',
330
+ minor: '🟡',
331
+ info: '🔵',
332
+ }[finding.severity];
333
+ lines.push(`- ${severityEmoji} **[${finding.severity}]** \`${finding.file}${finding.line ? `:${finding.line}` : ''}\`: ${finding.message}`);
334
+ if (finding.suggestion) {
335
+ lines.push(` - Suggestion: ${finding.suggestion}`);
336
+ }
337
+ }
338
+ lines.push('');
339
+ }
340
+ lines.push(`**Summary:** ${result.summary}`);
341
+ return lines.join('\n');
342
+ }
343
+ /**
344
+ * Extract learnings from review for next iteration
345
+ */
346
+ export function extractLearningsFromReview(result) {
347
+ const learnings = [];
348
+ for (const finding of result.findings) {
349
+ if (finding.type === 'issue' && finding.severity !== 'info') {
350
+ learnings.push(`Review issue in ${finding.file}: ${finding.message}`);
351
+ if (finding.suggestion) {
352
+ learnings.push(`Suggestion: ${finding.suggestion}`);
353
+ }
354
+ }
355
+ }
356
+ return learnings;
357
+ }
358
+ /**
359
+ * Check if changes need review
360
+ */
361
+ export function needsReview(changes, config = DEFAULT_CONFIG) {
362
+ if (!isReviewEnabled(config))
363
+ return false;
364
+ if (changes.length === 0)
365
+ return false;
366
+ // Always review source code changes
367
+ const hasCodeChanges = changes.some((c) => c.path.endsWith('.ts') ||
368
+ c.path.endsWith('.js') ||
369
+ c.path.endsWith('.tsx') ||
370
+ c.path.endsWith('.jsx'));
371
+ return hasCodeChanges;
372
+ }
373
+ //# sourceMappingURL=reviewer-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-loop.js","sourceRoot":"","sources":["../../../src/core/agents/reviewer-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Skill Auditor - v14.1.0
3
+ *
4
+ * Pre-audit integration for skills like /dino.nest and /dino.hunt.
5
+ * Validates PRD quality and triggers clarification when needed.
6
+ *
7
+ * @see .claude/skills/dino.audit/SKILL.md
8
+ */
9
+ import { type ClarificationQuestion } from './confidence-gate.js';
10
+ /**
11
+ * Audit result for skill pre-check
12
+ */
13
+ export interface SkillAuditResult {
14
+ approved: boolean;
15
+ score: number;
16
+ requiredScore: number;
17
+ status: 'approved' | 'needs-clarification' | 'rejected';
18
+ findings: AuditFinding[];
19
+ questions?: ClarificationQuestion[];
20
+ recommendation: string;
21
+ }
22
+ /**
23
+ * Audit finding
24
+ */
25
+ export interface AuditFinding {
26
+ type: 'missing' | 'incomplete' | 'ambiguous' | 'risk';
27
+ severity: 'critical' | 'major' | 'minor';
28
+ area: string;
29
+ message: string;
30
+ suggestion?: string;
31
+ }
32
+ /**
33
+ * PRD quality assessment
34
+ */
35
+ export interface PRDQuality {
36
+ hasStories: boolean;
37
+ storyCount: number;
38
+ hasAcceptanceCriteria: boolean;
39
+ hasTestCommands: boolean;
40
+ hasFilesList: boolean;
41
+ completenessScore: number;
42
+ }
43
+ /**
44
+ * Skill audit configuration
45
+ */
46
+ export interface SkillAuditConfig {
47
+ minScore: number;
48
+ requireAcceptanceCriteria: boolean;
49
+ requireTestCommands: boolean;
50
+ allowPartialPRD: boolean;
51
+ }
52
+ /**
53
+ * Perform pre-audit for a skill invocation
54
+ *
55
+ * Returns audit result with approval status and findings.
56
+ */
57
+ export declare function auditForSkill(skillName: string, prompt: string, prdContent?: string, config?: SkillAuditConfig): Promise<SkillAuditResult>;
58
+ /**
59
+ * Assess PRD quality
60
+ */
61
+ export declare function assessPRDQuality(prdContent: string): PRDQuality;
62
+ /**
63
+ * Pre-audit for /dino.nest
64
+ */
65
+ export declare function auditForNest(prompt: string, prdContent?: string, config?: SkillAuditConfig): Promise<SkillAuditResult>;
66
+ /**
67
+ * Pre-audit for /dino.hunt
68
+ */
69
+ export declare function auditForHunt(prompt: string, config?: SkillAuditConfig): Promise<SkillAuditResult>;
70
+ /**
71
+ * Pre-audit for /dino.ralph
72
+ */
73
+ export declare function auditForRalph(prompt: string, prdContent: string, config?: SkillAuditConfig): Promise<SkillAuditResult>;
74
+ /**
75
+ * Format audit result for display
76
+ */
77
+ export declare function formatAuditResult(result: SkillAuditResult): string;
78
+ /**
79
+ * Check if audit should block skill execution
80
+ */
81
+ export declare function shouldBlockExecution(result: SkillAuditResult): boolean;
82
+ //# sourceMappingURL=skill-auditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-auditor.d.ts","sourceRoot":"","sources":["../../../src/core/agents/skill-auditor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAMlG;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,UAAU,GAAG,qBAAqB,GAAG,UAAU,CAAC;IACxD,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC;IACtD,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,yBAAyB,EAAE,OAAO,CAAC;IACnC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;CAC1B;AAiBD;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,mBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAwH3B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAkC/D;AAoCD;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,mBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,mBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,MAAM,mBAAiB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAW3B;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAkDlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAGtE"}