@su-record/vibe 3.2.17 → 3.2.19

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 (41) hide show
  1. package/CLAUDE.md +1 -0
  2. package/dist/cli/commands/remove.d.ts.map +1 -1
  3. package/dist/cli/commands/remove.js +15 -6
  4. package/dist/cli/commands/remove.js.map +1 -1
  5. package/dist/tools/dispatch/costGate.d.ts +59 -0
  6. package/dist/tools/dispatch/costGate.d.ts.map +1 -0
  7. package/dist/tools/dispatch/costGate.js +85 -0
  8. package/dist/tools/dispatch/costGate.js.map +1 -0
  9. package/dist/tools/dispatch/deterministicSignals.d.ts +61 -0
  10. package/dist/tools/dispatch/deterministicSignals.d.ts.map +1 -0
  11. package/dist/tools/dispatch/deterministicSignals.js +131 -0
  12. package/dist/tools/dispatch/deterministicSignals.js.map +1 -0
  13. package/dist/tools/dispatch/index.d.ts +5 -0
  14. package/dist/tools/dispatch/index.d.ts.map +1 -0
  15. package/dist/tools/dispatch/index.js +3 -0
  16. package/dist/tools/dispatch/index.js.map +1 -0
  17. package/dist/tools/index.d.ts +5 -0
  18. package/dist/tools/index.d.ts.map +1 -1
  19. package/dist/tools/index.js +4 -0
  20. package/dist/tools/index.js.map +1 -1
  21. package/dist/tools/release/releaseNotes.d.ts.map +1 -1
  22. package/dist/tools/release/releaseNotes.js +2 -1
  23. package/dist/tools/release/releaseNotes.js.map +1 -1
  24. package/dist/tools/spec/index.d.ts +2 -0
  25. package/dist/tools/spec/index.d.ts.map +1 -1
  26. package/dist/tools/spec/index.js +2 -0
  27. package/dist/tools/spec/index.js.map +1 -1
  28. package/dist/tools/spec/validateSpecDocument.d.ts +30 -0
  29. package/dist/tools/spec/validateSpecDocument.d.ts.map +1 -0
  30. package/dist/tools/spec/validateSpecDocument.js +201 -0
  31. package/dist/tools/spec/validateSpecDocument.js.map +1 -0
  32. package/package.json +2 -2
  33. package/skills/vibe/SKILL.md +18 -5
  34. package/skills/vibe.image/SKILL.md +8 -0
  35. package/skills/vibe.review/SKILL.md +8 -0
  36. package/skills/vibe.spec/SKILL.md +21 -0
  37. package/vibe/rules/loop-contract.md +31 -0
  38. package/dist/infra/lib/OrchestrateWorkflow.d.ts +0 -88
  39. package/dist/infra/lib/OrchestrateWorkflow.d.ts.map +0 -1
  40. package/dist/infra/lib/OrchestrateWorkflow.js +0 -259
  41. package/dist/infra/lib/OrchestrateWorkflow.js.map +0 -1
@@ -1,259 +0,0 @@
1
- /**
2
- * Orchestrate Workflow Pattern
3
- * Intent Gate → Assessment → Delegation → Verification
4
- */
5
- // Phase 0: Intent Gate
6
- const SKILL_KEYWORDS = {
7
- 'spec': ['spec', 'specification', 'requirements', 'design'],
8
- 'vibe.review': ['review', 'code review', 'PR review'],
9
- 'vibe.verify': ['verify', 'verification', 'test', 'check'],
10
- 'vibe.analyze': ['analyze', 'analysis', 'explore'],
11
- 'vibe.reason': ['reason', 'reasoning', 'think', 'problem'],
12
- };
13
- /**
14
- * Phase 0: Intent Gate
15
- * Check if there's a matching skill BEFORE doing any work
16
- */
17
- export function checkIntentGate(prompt) {
18
- const lowerPrompt = prompt.toLowerCase();
19
- for (const [skillName, keywords] of Object.entries(SKILL_KEYWORDS)) {
20
- for (const keyword of keywords) {
21
- if (lowerPrompt.includes(keyword)) {
22
- return {
23
- hasMatchingSkill: true,
24
- skillName,
25
- shouldDelegate: true,
26
- reason: `Prompt matches "${keyword}" → Use ${skillName} instead`,
27
- };
28
- }
29
- }
30
- }
31
- return {
32
- hasMatchingSkill: false,
33
- shouldDelegate: false,
34
- reason: 'No matching skill found, proceed with orchestration',
35
- };
36
- }
37
- /**
38
- * Phase 1: Codebase Assessment
39
- * Classify codebase maturity and characteristics
40
- */
41
- export function assessCodebase(signals) {
42
- const { hasTests, hasLinting, hasTypescript, hasCICD, hasDocumentation, fileCount, techStack } = signals;
43
- // Calculate maturity score
44
- let score = 0;
45
- if (hasTests)
46
- score += 2;
47
- if (hasLinting)
48
- score += 1;
49
- if (hasTypescript)
50
- score += 2;
51
- if (hasCICD)
52
- score += 2;
53
- if (hasDocumentation)
54
- score += 1;
55
- // Determine maturity
56
- let maturity;
57
- if (fileCount === 0) {
58
- maturity = 'greenfield';
59
- }
60
- else if (score >= 6) {
61
- maturity = 'disciplined';
62
- }
63
- else if (score >= 3) {
64
- maturity = 'transitional';
65
- }
66
- else {
67
- maturity = 'legacy';
68
- }
69
- // Identify patterns
70
- const patterns = [];
71
- if (hasTypescript)
72
- patterns.push('TypeScript');
73
- if (hasTests)
74
- patterns.push('Testing');
75
- if (hasLinting)
76
- patterns.push('Linting');
77
- if (hasCICD)
78
- patterns.push('CI/CD');
79
- // Identify risks
80
- const risks = [];
81
- if (!hasTests)
82
- risks.push('No test coverage - changes are risky');
83
- if (!hasTypescript)
84
- risks.push('No type safety - runtime errors possible');
85
- if (!hasLinting)
86
- risks.push('No linting - code style inconsistent');
87
- if (maturity === 'legacy')
88
- risks.push('Legacy codebase - proceed with caution');
89
- return {
90
- maturity,
91
- patterns,
92
- techStack,
93
- testCoverage: hasTests ? (hasCICD ? 'high' : 'medium') : 'none',
94
- documentationLevel: hasDocumentation ? 'partial' : 'minimal',
95
- risks,
96
- };
97
- }
98
- /**
99
- * Phase 2: Create Delegation Plan
100
- * Plan how to delegate work to sub-agents
101
- */
102
- export function createDelegationPlan(task, assessment, phaseCount = 3) {
103
- const phases = [];
104
- // Phase 1: Exploration
105
- phases.push({
106
- name: 'Exploration',
107
- agents: [
108
- {
109
- agentType: 'Explore',
110
- model: 'haiku',
111
- prompt: `Explore codebase for: ${task}. Find related files, patterns, dependencies.`,
112
- background: false,
113
- },
114
- {
115
- agentType: 'Explore',
116
- model: 'haiku',
117
- prompt: `Search for existing similar implementations or patterns for: ${task}`,
118
- background: false,
119
- },
120
- ],
121
- dependencies: [],
122
- verificationCriteria: ['Found relevant files', 'Identified patterns'],
123
- });
124
- // Phase 2: Implementation
125
- const implModel = assessment.maturity === 'disciplined' ? 'sonnet' : 'opus';
126
- phases.push({
127
- name: 'Implementation',
128
- agents: [
129
- {
130
- agentType: 'implementer',
131
- model: implModel,
132
- prompt: `Implement: ${task}. Follow existing patterns. Write tests if applicable.`,
133
- background: false,
134
- },
135
- ],
136
- dependencies: ['Exploration'],
137
- verificationCriteria: ['Code compiles', 'Tests pass', 'Follows patterns'],
138
- });
139
- // Phase 3: Verification
140
- phases.push({
141
- name: 'Verification',
142
- agents: [
143
- {
144
- agentType: 'architect',
145
- model: 'opus',
146
- prompt: `Verify implementation of: ${task}. Check for issues, security, performance.`,
147
- background: false,
148
- },
149
- ],
150
- dependencies: ['Implementation'],
151
- verificationCriteria: ['Architect approval', 'No critical issues'],
152
- });
153
- // Add more phases if requested
154
- for (let i = 3; i < phaseCount; i++) {
155
- phases.push({
156
- name: `Phase ${i + 1}`,
157
- agents: [],
158
- dependencies: [phases[i - 1].name],
159
- verificationCriteria: [],
160
- });
161
- }
162
- return {
163
- phases,
164
- totalAgents: phases.reduce((sum, p) => sum + p.agents.length, 0),
165
- estimatedComplexity: assessment.maturity === 'legacy' ? 'high' : 'medium',
166
- requiredVerifications: ['build', 'test', 'architect_review'],
167
- };
168
- }
169
- /**
170
- * Phase 3: Verification with Evidence
171
- * Collect evidence of completion
172
- */
173
- export function createVerificationChecklist(plan) {
174
- const evidence = [];
175
- // Build verification
176
- evidence.push({
177
- type: 'build',
178
- command: 'npm run build',
179
- passed: false,
180
- });
181
- // Test verification
182
- evidence.push({
183
- type: 'test',
184
- command: 'npm test',
185
- passed: false,
186
- });
187
- // Lint verification
188
- evidence.push({
189
- type: 'lint',
190
- command: 'npm run lint',
191
- passed: false,
192
- });
193
- // Type check verification
194
- evidence.push({
195
- type: 'typecheck',
196
- command: 'npx tsc --noEmit',
197
- passed: false,
198
- });
199
- return evidence;
200
- }
201
- /**
202
- * Format orchestration status
203
- */
204
- export function formatOrchestrationStatus(phase, assessment, plan) {
205
- const lines = [];
206
- lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
207
- lines.push(`🎭 ORCHESTRATION: ${phase}`);
208
- lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
209
- lines.push(`\nCodebase: ${assessment.maturity.toUpperCase()}`);
210
- lines.push(`Stack: ${assessment.techStack.join(', ') || 'Unknown'}`);
211
- lines.push(`Patterns: ${assessment.patterns.join(', ') || 'None'}`);
212
- if (assessment.risks.length > 0) {
213
- lines.push(`\n⚠️ Risks:`);
214
- for (const risk of assessment.risks) {
215
- lines.push(` - ${risk}`);
216
- }
217
- }
218
- lines.push(`\n📋 Plan: ${plan.phases.length} phases, ${plan.totalAgents} agents`);
219
- for (const p of plan.phases) {
220
- const agentInfo = p.agents.length > 0
221
- ? `(${p.agents.map(a => `${a.agentType}:${a.model}`).join(', ')})`
222
- : '(no agents)';
223
- lines.push(` → ${p.name} ${agentInfo}`);
224
- }
225
- lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
226
- return lines.join('\n');
227
- }
228
- /**
229
- * Background task rules
230
- */
231
- export function shouldRunInBackground(command) {
232
- const backgroundPatterns = [
233
- /^npm (run |)(build|test|start|dev)/i,
234
- /^yarn (build|test|start|dev)/i,
235
- /^pnpm (build|test|start|dev)/i,
236
- /^bun (run |)(build|test|start|dev)/i,
237
- /^(pytest|jest|vitest|mocha)/i,
238
- /^(tsc|webpack|vite|rollup)/i,
239
- ];
240
- const foregroundPatterns = [
241
- /^git\s/i,
242
- /^ls\s/i,
243
- /^cat\s/i,
244
- /^echo\s/i,
245
- /^pwd$/i,
246
- ];
247
- // Check foreground first (quick commands)
248
- for (const pattern of foregroundPatterns) {
249
- if (pattern.test(command))
250
- return false;
251
- }
252
- // Check background patterns (long-running)
253
- for (const pattern of backgroundPatterns) {
254
- if (pattern.test(command))
255
- return true;
256
- }
257
- return false;
258
- }
259
- //# sourceMappingURL=OrchestrateWorkflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OrchestrateWorkflow.js","sourceRoot":"","sources":["../../../src/infra/lib/OrchestrateWorkflow.ts"],"names":[],"mappings":"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"}