@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.
Files changed (148) hide show
  1. package/CHANGELOG.md +181 -0
  2. package/LICENSE +21 -0
  3. package/README.md +447 -0
  4. package/bin/cli.js +749 -0
  5. package/content/case-study-template.md +91 -0
  6. package/content/claims-governance.md +37 -0
  7. package/content/claude-code/audit-repo/SKILL.md +20 -0
  8. package/content/claude-native-integration.md +60 -0
  9. package/content/devto-article.json +9 -0
  10. package/content/launch-posts.md +226 -0
  11. package/content/pilot-rollout-kit.md +30 -0
  12. package/content/release-checklist.md +31 -0
  13. package/package.json +53 -4
  14. package/src/activity.js +529 -0
  15. package/src/aider/activity.js +226 -0
  16. package/src/aider/config-parser.js +166 -0
  17. package/src/aider/context.js +158 -0
  18. package/src/aider/deep-review.js +316 -0
  19. package/src/aider/domain-packs.js +278 -0
  20. package/src/aider/freshness.js +168 -0
  21. package/src/aider/governance.js +253 -0
  22. package/src/aider/interactive.js +334 -0
  23. package/src/aider/mcp-packs.js +98 -0
  24. package/src/aider/patch.js +214 -0
  25. package/src/aider/plans.js +186 -0
  26. package/src/aider/premium.js +360 -0
  27. package/src/aider/setup.js +404 -0
  28. package/src/aider/techniques.js +1323 -0
  29. package/src/analyze.js +821 -0
  30. package/src/audit.js +1003 -0
  31. package/src/badge.js +13 -0
  32. package/src/benchmark.js +339 -0
  33. package/src/claudex-sync.json +7 -0
  34. package/src/codex/activity.js +324 -0
  35. package/src/codex/config-parser.js +183 -0
  36. package/src/codex/context.js +221 -0
  37. package/src/codex/deep-review.js +493 -0
  38. package/src/codex/domain-packs.js +372 -0
  39. package/src/codex/freshness.js +167 -0
  40. package/src/codex/governance.js +192 -0
  41. package/src/codex/interactive.js +618 -0
  42. package/src/codex/mcp-packs.js +660 -0
  43. package/src/codex/patch.js +209 -0
  44. package/src/codex/plans.js +251 -0
  45. package/src/codex/premium.js +614 -0
  46. package/src/codex/setup.js +603 -0
  47. package/src/codex/techniques.js +2649 -0
  48. package/src/context.js +272 -0
  49. package/src/copilot/activity.js +309 -0
  50. package/src/copilot/config-parser.js +226 -0
  51. package/src/copilot/context.js +197 -0
  52. package/src/copilot/deep-review.js +346 -0
  53. package/src/copilot/domain-packs.js +350 -0
  54. package/src/copilot/freshness.js +197 -0
  55. package/src/copilot/governance.js +222 -0
  56. package/src/copilot/interactive.js +406 -0
  57. package/src/copilot/mcp-packs.js +572 -0
  58. package/src/copilot/patch.js +238 -0
  59. package/src/copilot/plans.js +253 -0
  60. package/src/copilot/premium.js +450 -0
  61. package/src/copilot/setup.js +488 -0
  62. package/src/copilot/techniques.js +1822 -0
  63. package/src/cursor/activity.js +301 -0
  64. package/src/cursor/config-parser.js +265 -0
  65. package/src/cursor/context.js +236 -0
  66. package/src/cursor/deep-review.js +334 -0
  67. package/src/cursor/domain-packs.js +346 -0
  68. package/src/cursor/freshness.js +214 -0
  69. package/src/cursor/governance.js +229 -0
  70. package/src/cursor/interactive.js +391 -0
  71. package/src/cursor/mcp-packs.js +571 -0
  72. package/src/cursor/patch.js +243 -0
  73. package/src/cursor/plans.js +254 -0
  74. package/src/cursor/premium.js +468 -0
  75. package/src/cursor/setup.js +488 -0
  76. package/src/cursor/techniques.js +1786 -0
  77. package/src/deep-review.js +345 -0
  78. package/src/domain-packs.js +364 -0
  79. package/src/formatters/sarif.js +115 -0
  80. package/src/gemini/activity.js +402 -0
  81. package/src/gemini/config-parser.js +275 -0
  82. package/src/gemini/context.js +221 -0
  83. package/src/gemini/deep-review.js +559 -0
  84. package/src/gemini/domain-packs.js +371 -0
  85. package/src/gemini/freshness.js +204 -0
  86. package/src/gemini/governance.js +201 -0
  87. package/src/gemini/interactive.js +860 -0
  88. package/src/gemini/mcp-packs.js +658 -0
  89. package/src/gemini/patch.js +229 -0
  90. package/src/gemini/plans.js +269 -0
  91. package/src/gemini/premium.js +759 -0
  92. package/src/gemini/setup.js +692 -0
  93. package/src/gemini/techniques.js +2084 -0
  94. package/src/governance.js +523 -0
  95. package/src/harmony/advisor.js +383 -0
  96. package/src/harmony/audit.js +303 -0
  97. package/src/harmony/canon.js +444 -0
  98. package/src/harmony/cli.js +331 -0
  99. package/src/harmony/drift.js +401 -0
  100. package/src/harmony/governance.js +313 -0
  101. package/src/harmony/memory.js +238 -0
  102. package/src/harmony/sync.js +458 -0
  103. package/src/harmony/watch.js +336 -0
  104. package/src/index.js +256 -0
  105. package/src/insights.js +119 -0
  106. package/src/interactive.js +118 -0
  107. package/src/mcp-packs.js +597 -0
  108. package/src/opencode/activity.js +286 -0
  109. package/src/opencode/config-parser.js +109 -0
  110. package/src/opencode/context.js +247 -0
  111. package/src/opencode/deep-review.js +313 -0
  112. package/src/opencode/domain-packs.js +240 -0
  113. package/src/opencode/freshness.js +158 -0
  114. package/src/opencode/governance.js +159 -0
  115. package/src/opencode/interactive.js +392 -0
  116. package/src/opencode/mcp-packs.js +474 -0
  117. package/src/opencode/patch.js +184 -0
  118. package/src/opencode/plans.js +231 -0
  119. package/src/opencode/premium.js +413 -0
  120. package/src/opencode/setup.js +449 -0
  121. package/src/opencode/techniques.js +1713 -0
  122. package/src/plans.js +655 -0
  123. package/src/secret-patterns.js +30 -0
  124. package/src/setup.js +1274 -0
  125. package/src/synergy/adaptive.js +261 -0
  126. package/src/synergy/compensation.js +156 -0
  127. package/src/synergy/evidence.js +193 -0
  128. package/src/synergy/learning.js +184 -0
  129. package/src/synergy/patterns.js +227 -0
  130. package/src/synergy/ranking.js +83 -0
  131. package/src/synergy/report.js +163 -0
  132. package/src/synergy/routing.js +152 -0
  133. package/src/techniques.js +1354 -0
  134. package/src/watch.js +229 -0
  135. package/src/windsurf/activity.js +302 -0
  136. package/src/windsurf/config-parser.js +267 -0
  137. package/src/windsurf/context.js +249 -0
  138. package/src/windsurf/deep-review.js +337 -0
  139. package/src/windsurf/domain-packs.js +348 -0
  140. package/src/windsurf/freshness.js +215 -0
  141. package/src/windsurf/governance.js +231 -0
  142. package/src/windsurf/interactive.js +388 -0
  143. package/src/windsurf/mcp-packs.js +535 -0
  144. package/src/windsurf/patch.js +231 -0
  145. package/src/windsurf/plans.js +247 -0
  146. package/src/windsurf/premium.js +467 -0
  147. package/src/windsurf/setup.js +471 -0
  148. 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 };