@nerviq/cli 0.0.1 → 0.9.0-beta.1
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/CHANGELOG.md +181 -0
- package/LICENSE +21 -0
- package/README.md +447 -0
- package/bin/cli.js +749 -0
- package/content/case-study-template.md +91 -0
- package/content/claims-governance.md +37 -0
- package/content/claude-code/audit-repo/SKILL.md +20 -0
- package/content/claude-native-integration.md +60 -0
- package/content/devto-article.json +9 -0
- package/content/launch-posts.md +226 -0
- package/content/pilot-rollout-kit.md +30 -0
- package/content/release-checklist.md +31 -0
- package/package.json +53 -4
- package/src/activity.js +529 -0
- package/src/aider/activity.js +226 -0
- package/src/aider/config-parser.js +166 -0
- package/src/aider/context.js +158 -0
- package/src/aider/deep-review.js +316 -0
- package/src/aider/domain-packs.js +278 -0
- package/src/aider/freshness.js +168 -0
- package/src/aider/governance.js +253 -0
- package/src/aider/interactive.js +334 -0
- package/src/aider/mcp-packs.js +98 -0
- package/src/aider/patch.js +214 -0
- package/src/aider/plans.js +186 -0
- package/src/aider/premium.js +360 -0
- package/src/aider/setup.js +404 -0
- package/src/aider/techniques.js +1323 -0
- package/src/analyze.js +821 -0
- package/src/audit.js +1003 -0
- package/src/badge.js +13 -0
- package/src/benchmark.js +339 -0
- package/src/claudex-sync.json +7 -0
- package/src/codex/activity.js +324 -0
- package/src/codex/config-parser.js +183 -0
- package/src/codex/context.js +221 -0
- package/src/codex/deep-review.js +493 -0
- package/src/codex/domain-packs.js +372 -0
- package/src/codex/freshness.js +167 -0
- package/src/codex/governance.js +192 -0
- package/src/codex/interactive.js +618 -0
- package/src/codex/mcp-packs.js +660 -0
- package/src/codex/patch.js +209 -0
- package/src/codex/plans.js +251 -0
- package/src/codex/premium.js +614 -0
- package/src/codex/setup.js +603 -0
- package/src/codex/techniques.js +2649 -0
- package/src/context.js +272 -0
- package/src/copilot/activity.js +309 -0
- package/src/copilot/config-parser.js +226 -0
- package/src/copilot/context.js +197 -0
- package/src/copilot/deep-review.js +346 -0
- package/src/copilot/domain-packs.js +350 -0
- package/src/copilot/freshness.js +197 -0
- package/src/copilot/governance.js +222 -0
- package/src/copilot/interactive.js +406 -0
- package/src/copilot/mcp-packs.js +572 -0
- package/src/copilot/patch.js +238 -0
- package/src/copilot/plans.js +253 -0
- package/src/copilot/premium.js +450 -0
- package/src/copilot/setup.js +488 -0
- package/src/copilot/techniques.js +1822 -0
- package/src/cursor/activity.js +301 -0
- package/src/cursor/config-parser.js +265 -0
- package/src/cursor/context.js +236 -0
- package/src/cursor/deep-review.js +334 -0
- package/src/cursor/domain-packs.js +346 -0
- package/src/cursor/freshness.js +214 -0
- package/src/cursor/governance.js +229 -0
- package/src/cursor/interactive.js +391 -0
- package/src/cursor/mcp-packs.js +571 -0
- package/src/cursor/patch.js +243 -0
- package/src/cursor/plans.js +254 -0
- package/src/cursor/premium.js +468 -0
- package/src/cursor/setup.js +488 -0
- package/src/cursor/techniques.js +1786 -0
- package/src/deep-review.js +345 -0
- package/src/domain-packs.js +364 -0
- package/src/formatters/sarif.js +115 -0
- package/src/gemini/activity.js +402 -0
- package/src/gemini/config-parser.js +275 -0
- package/src/gemini/context.js +221 -0
- package/src/gemini/deep-review.js +559 -0
- package/src/gemini/domain-packs.js +371 -0
- package/src/gemini/freshness.js +204 -0
- package/src/gemini/governance.js +201 -0
- package/src/gemini/interactive.js +860 -0
- package/src/gemini/mcp-packs.js +658 -0
- package/src/gemini/patch.js +229 -0
- package/src/gemini/plans.js +269 -0
- package/src/gemini/premium.js +759 -0
- package/src/gemini/setup.js +692 -0
- package/src/gemini/techniques.js +2084 -0
- package/src/governance.js +523 -0
- package/src/harmony/advisor.js +383 -0
- package/src/harmony/audit.js +303 -0
- package/src/harmony/canon.js +444 -0
- package/src/harmony/cli.js +331 -0
- package/src/harmony/drift.js +401 -0
- package/src/harmony/governance.js +313 -0
- package/src/harmony/memory.js +238 -0
- package/src/harmony/sync.js +458 -0
- package/src/harmony/watch.js +336 -0
- package/src/index.js +256 -0
- package/src/insights.js +119 -0
- package/src/interactive.js +118 -0
- package/src/mcp-packs.js +597 -0
- package/src/opencode/activity.js +286 -0
- package/src/opencode/config-parser.js +109 -0
- package/src/opencode/context.js +247 -0
- package/src/opencode/deep-review.js +313 -0
- package/src/opencode/domain-packs.js +240 -0
- package/src/opencode/freshness.js +158 -0
- package/src/opencode/governance.js +159 -0
- package/src/opencode/interactive.js +392 -0
- package/src/opencode/mcp-packs.js +474 -0
- package/src/opencode/patch.js +184 -0
- package/src/opencode/plans.js +231 -0
- package/src/opencode/premium.js +413 -0
- package/src/opencode/setup.js +449 -0
- package/src/opencode/techniques.js +1713 -0
- package/src/plans.js +655 -0
- package/src/secret-patterns.js +30 -0
- package/src/setup.js +1274 -0
- package/src/synergy/adaptive.js +261 -0
- package/src/synergy/compensation.js +156 -0
- package/src/synergy/evidence.js +193 -0
- package/src/synergy/learning.js +184 -0
- package/src/synergy/patterns.js +227 -0
- package/src/synergy/ranking.js +83 -0
- package/src/synergy/report.js +163 -0
- package/src/synergy/routing.js +152 -0
- package/src/techniques.js +1354 -0
- package/src/watch.js +229 -0
- package/src/windsurf/activity.js +302 -0
- package/src/windsurf/config-parser.js +267 -0
- package/src/windsurf/context.js +249 -0
- package/src/windsurf/deep-review.js +337 -0
- package/src/windsurf/domain-packs.js +348 -0
- package/src/windsurf/freshness.js +215 -0
- package/src/windsurf/governance.js +231 -0
- package/src/windsurf/interactive.js +388 -0
- package/src/windsurf/mcp-packs.js +535 -0
- package/src/windsurf/patch.js +231 -0
- package/src/windsurf/plans.js +247 -0
- package/src/windsurf/premium.js +467 -0
- package/src/windsurf/setup.js +471 -0
- package/src/windsurf/techniques.js +1758 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* S2. Intelligent Task Routing
|
|
3
|
+
*
|
|
4
|
+
* Routes tasks to the best platform based on capabilities,
|
|
5
|
+
* project history, and active platform availability.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const PLATFORM_CAPABILITIES = {
|
|
9
|
+
claude: { reasoning: 5, refactoring: 5, debugging: 5, CI: 2, IDE: 2, UI: 1, async: 3, review: 5, architecture: 5 },
|
|
10
|
+
codex: { reasoning: 4, CI: 5, cloudTasks: 5, IDE: 3, async: 5, UI: 2, refactoring: 4, debugging: 3, review: 4 },
|
|
11
|
+
gemini: { reasoning: 4, context: 5, sandbox: 5, CI: 3, IDE: 3, UI: 2, refactoring: 3, debugging: 3, async: 4 },
|
|
12
|
+
copilot: { inline: 5, cloudAgent: 4, IDE: 4, CI: 4, reasoning: 3, UI: 3, refactoring: 3, review: 3, debugging: 3 },
|
|
13
|
+
cursor: { IDE: 5, UI: 5, background: 4, automation: 4, reasoning: 3, refactoring: 4, inline: 4, debugging: 4 },
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const TASK_TYPE_PATTERNS = [
|
|
17
|
+
{ type: 'bugfix', patterns: ['bug', 'fix', 'error', 'crash', 'broken', 'issue', 'regression', 'failing'] },
|
|
18
|
+
{ type: 'refactor', patterns: ['refactor', 'clean', 'restructure', 'reorganize', 'simplify', 'extract', 'dedup'] },
|
|
19
|
+
{ type: 'review', patterns: ['review', 'audit', 'check', 'inspect', 'evaluate', 'assess', 'analyze'] },
|
|
20
|
+
{ type: 'UI', patterns: ['ui', 'frontend', 'css', 'layout', 'design', 'component', 'style', 'responsive'] },
|
|
21
|
+
{ type: 'CI', patterns: ['ci', 'pipeline', 'deploy', 'workflow', 'github actions', 'build', 'release'] },
|
|
22
|
+
{ type: 'infrastructure', patterns: ['infra', 'terraform', 'docker', 'k8s', 'kubernetes', 'aws', 'cloud'] },
|
|
23
|
+
{ type: 'testing', patterns: ['test', 'spec', 'coverage', 'e2e', 'unit test', 'integration test'] },
|
|
24
|
+
{ type: 'architecture', patterns: ['architect', 'design', 'plan', 'structure', 'module', 'system design'] },
|
|
25
|
+
{ type: 'documentation', patterns: ['doc', 'readme', 'comment', 'explain', 'document', 'jsdoc'] },
|
|
26
|
+
{ type: 'feature', patterns: ['feature', 'implement', 'add', 'create', 'new', 'build', 'develop'] },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const TASK_CAPABILITY_MAP = {
|
|
30
|
+
bugfix: ['debugging', 'reasoning', 'IDE'],
|
|
31
|
+
refactor: ['refactoring', 'reasoning', 'IDE'],
|
|
32
|
+
review: ['review', 'reasoning', 'context'],
|
|
33
|
+
UI: ['UI', 'IDE', 'inline'],
|
|
34
|
+
CI: ['CI', 'cloudTasks', 'async'],
|
|
35
|
+
infrastructure: ['CI', 'cloudTasks', 'sandbox'],
|
|
36
|
+
testing: ['debugging', 'CI', 'sandbox'],
|
|
37
|
+
architecture: ['architecture', 'reasoning', 'context'],
|
|
38
|
+
documentation: ['reasoning', 'context', 'inline'],
|
|
39
|
+
feature: ['reasoning', 'IDE', 'refactoring'],
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Classify a task description into a task type.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} taskDescription - Free-text task description
|
|
46
|
+
* @returns {string} Task type
|
|
47
|
+
*/
|
|
48
|
+
function classifyTaskType(taskDescription) {
|
|
49
|
+
const lower = taskDescription.toLowerCase();
|
|
50
|
+
let bestMatch = { type: 'feature', score: 0 };
|
|
51
|
+
|
|
52
|
+
for (const { type, patterns } of TASK_TYPE_PATTERNS) {
|
|
53
|
+
const score = patterns.reduce((sum, pattern) => {
|
|
54
|
+
return sum + (lower.includes(pattern) ? 1 : 0);
|
|
55
|
+
}, 0);
|
|
56
|
+
if (score > bestMatch.score) {
|
|
57
|
+
bestMatch = { type, score };
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return bestMatch.type;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Score a platform for a given task type.
|
|
66
|
+
*/
|
|
67
|
+
function scorePlatform(platform, taskType, projectHistory) {
|
|
68
|
+
const capabilities = PLATFORM_CAPABILITIES[platform];
|
|
69
|
+
if (!capabilities) return 0;
|
|
70
|
+
|
|
71
|
+
const relevantCapabilities = TASK_CAPABILITY_MAP[taskType] || ['reasoning'];
|
|
72
|
+
let score = 0;
|
|
73
|
+
let count = 0;
|
|
74
|
+
|
|
75
|
+
for (const cap of relevantCapabilities) {
|
|
76
|
+
if (capabilities[cap] !== undefined) {
|
|
77
|
+
score += capabilities[cap];
|
|
78
|
+
count++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const baseScore = count > 0 ? score / count : 0;
|
|
83
|
+
|
|
84
|
+
// Boost from project history
|
|
85
|
+
let historyBoost = 0;
|
|
86
|
+
if (projectHistory && projectHistory[platform]) {
|
|
87
|
+
const history = projectHistory[platform];
|
|
88
|
+
const taskHistory = history[taskType];
|
|
89
|
+
if (taskHistory) {
|
|
90
|
+
// Success rate boost: up to +1.0
|
|
91
|
+
const successRate = taskHistory.successes / Math.max(1, taskHistory.total);
|
|
92
|
+
historyBoost = successRate * 1.0;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return Math.round((baseScore + historyBoost) * 100) / 100;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Route a task to the best available platform.
|
|
101
|
+
*
|
|
102
|
+
* @param {string} taskDescription - Free-text task description
|
|
103
|
+
* @param {string[]} activePlatforms - Currently available platforms
|
|
104
|
+
* @param {Object} [projectHistory] - Historical task success data per platform
|
|
105
|
+
* @returns {Object} Routing recommendation
|
|
106
|
+
*/
|
|
107
|
+
function routeTask(taskDescription, activePlatforms, projectHistory) {
|
|
108
|
+
const taskType = classifyTaskType(taskDescription);
|
|
109
|
+
const platforms = (activePlatforms || []).filter(p => PLATFORM_CAPABILITIES[p]);
|
|
110
|
+
|
|
111
|
+
if (platforms.length === 0) {
|
|
112
|
+
return {
|
|
113
|
+
recommended: null,
|
|
114
|
+
alternatives: [],
|
|
115
|
+
taskType,
|
|
116
|
+
reasoning: 'No active platforms with known capabilities',
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const scored = platforms.map(platform => ({
|
|
121
|
+
platform,
|
|
122
|
+
score: scorePlatform(platform, taskType, projectHistory),
|
|
123
|
+
})).sort((a, b) => b.score - a.score);
|
|
124
|
+
|
|
125
|
+
const best = scored[0];
|
|
126
|
+
const alternatives = scored.slice(1);
|
|
127
|
+
|
|
128
|
+
// Build reasoning
|
|
129
|
+
const relevantCaps = TASK_CAPABILITY_MAP[taskType] || ['reasoning'];
|
|
130
|
+
const bestCaps = PLATFORM_CAPABILITIES[best.platform];
|
|
131
|
+
const topStrengths = relevantCaps
|
|
132
|
+
.filter(cap => (bestCaps[cap] || 0) >= 4)
|
|
133
|
+
.join(', ');
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
recommended: {
|
|
137
|
+
platform: best.platform,
|
|
138
|
+
confidence: Math.min(1, best.score / 5),
|
|
139
|
+
reasoning: topStrengths
|
|
140
|
+
? `${best.platform} excels at ${topStrengths} (needed for ${taskType})`
|
|
141
|
+
: `${best.platform} is the best available option for ${taskType}`,
|
|
142
|
+
},
|
|
143
|
+
alternatives: alternatives.map(a => ({
|
|
144
|
+
platform: a.platform,
|
|
145
|
+
confidence: Math.min(1, a.score / 5),
|
|
146
|
+
reasoning: `Score: ${a.score}/5 for ${taskType}`,
|
|
147
|
+
})),
|
|
148
|
+
taskType,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
module.exports = { routeTask, classifyTaskType, PLATFORM_CAPABILITIES };
|