dino-spec 14.0.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.
- package/README.md +37 -1
- package/dist/core/agents/ambiguity-resolver.d.ts +118 -0
- package/dist/core/agents/ambiguity-resolver.d.ts.map +1 -0
- package/dist/core/agents/ambiguity-resolver.js +327 -0
- package/dist/core/agents/ambiguity-resolver.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +99 -0
- package/dist/core/agents/confidence-gate.d.ts.map +1 -0
- package/dist/core/agents/confidence-gate.js +295 -0
- package/dist/core/agents/confidence-gate.js.map +1 -0
- package/dist/core/agents/feedback-collector.d.ts +108 -0
- package/dist/core/agents/feedback-collector.d.ts.map +1 -0
- package/dist/core/agents/feedback-collector.js +313 -0
- package/dist/core/agents/feedback-collector.js.map +1 -0
- package/dist/core/agents/parallel-reviewer.d.ts +88 -0
- package/dist/core/agents/parallel-reviewer.d.ts.map +1 -0
- package/dist/core/agents/parallel-reviewer.js +459 -0
- package/dist/core/agents/parallel-reviewer.js.map +1 -0
- package/dist/core/agents/reviewer-loop.d.ts +102 -0
- package/dist/core/agents/reviewer-loop.d.ts.map +1 -0
- package/dist/core/agents/reviewer-loop.js +373 -0
- package/dist/core/agents/reviewer-loop.js.map +1 -0
- package/dist/core/agents/skill-auditor.d.ts +82 -0
- package/dist/core/agents/skill-auditor.d.ts.map +1 -0
- package/dist/core/agents/skill-auditor.js +278 -0
- package/dist/core/agents/skill-auditor.js.map +1 -0
- package/dist/mcp/registry.d.ts +1 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +1 -0
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/tools/feedback.d.ts +63 -0
- package/dist/mcp/tools/feedback.d.ts.map +1 -0
- package/dist/mcp/tools/feedback.js +255 -0
- package/dist/mcp/tools/feedback.js.map +1 -0
- package/package.json +1 -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"}
|