@nerviq/cli 1.2.3 → 1.2.6
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/bin/cli.js +105 -1
- package/package.json +2 -2
- package/src/activity.js +17 -13
- package/src/aider/activity.js +1 -1
- package/src/audit.js +19 -1
- package/src/claudex-sync.json +3 -3
- package/src/codex/activity.js +1 -1
- package/src/codex/patch.js +1 -1
- package/src/codex/techniques.js +32 -34
- package/src/copilot/patch.js +1 -1
- package/src/copilot/premium.js +2 -1
- package/src/cursor/patch.js +1 -1
- package/src/cursor/premium.js +2 -1
- package/src/feedback.js +13 -8
- package/src/gemini/activity.js +1 -1
- package/src/gemini/patch.js +1 -1
- package/src/gemini/premium.js +3 -2
- package/src/gemini/techniques.js +14 -13
- package/src/harmony/advisor.js +15 -65
- package/src/harmony/audit.js +3 -0
- package/src/harmony/canon.js +122 -1
- package/src/harmony/cli.js +21 -0
- package/src/harmony/drift.js +2 -2
- package/src/harmony/memory.js +9 -8
- package/src/harmony/sync.js +18 -1
- package/src/insights.js +1 -1
- package/src/opencode/activity.js +1 -1
- package/src/opencode/patch.js +1 -1
- package/src/opencode/techniques.js +15 -13
- package/src/shared/capabilities.js +194 -0
- package/src/state-paths.js +85 -0
- package/src/synergy/compensation.js +1 -20
- package/src/synergy/learning.js +20 -5
- package/src/synergy/routing.js +8 -14
- package/src/techniques.js +3231 -2929
- package/src/windsurf/patch.js +1 -1
- package/src/windsurf/premium.js +2 -1
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical Platform Capability Matrix
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for platform strengths/weaknesses.
|
|
5
|
+
* Used by: harmony/advisor.js, synergy/routing.js, synergy/compensation.js
|
|
6
|
+
*
|
|
7
|
+
* Scale: 1 (weak) to 5 (best-in-class)
|
|
8
|
+
* All keys use camelCase for consistency.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const PLATFORM_CAPABILITIES = {
|
|
12
|
+
claude: {
|
|
13
|
+
label: 'Claude Code',
|
|
14
|
+
reasoning: 5,
|
|
15
|
+
refactoring: 5,
|
|
16
|
+
debugging: 5,
|
|
17
|
+
review: 5,
|
|
18
|
+
architecture: 5,
|
|
19
|
+
ci: 2,
|
|
20
|
+
ide: 2,
|
|
21
|
+
ui: 1,
|
|
22
|
+
async: 3,
|
|
23
|
+
inline: 3,
|
|
24
|
+
context: 4,
|
|
25
|
+
automation: 4,
|
|
26
|
+
sandbox: 3,
|
|
27
|
+
cloudTasks: 3,
|
|
28
|
+
cloudAgent: 2,
|
|
29
|
+
background: 3,
|
|
30
|
+
governance: 4,
|
|
31
|
+
},
|
|
32
|
+
codex: {
|
|
33
|
+
label: 'Codex',
|
|
34
|
+
reasoning: 4,
|
|
35
|
+
refactoring: 4,
|
|
36
|
+
debugging: 3,
|
|
37
|
+
review: 4,
|
|
38
|
+
architecture: 3,
|
|
39
|
+
ci: 5,
|
|
40
|
+
ide: 3,
|
|
41
|
+
ui: 2,
|
|
42
|
+
async: 5,
|
|
43
|
+
inline: 2,
|
|
44
|
+
context: 3,
|
|
45
|
+
automation: 4,
|
|
46
|
+
sandbox: 4,
|
|
47
|
+
cloudTasks: 5,
|
|
48
|
+
cloudAgent: 4,
|
|
49
|
+
background: 4,
|
|
50
|
+
governance: 3,
|
|
51
|
+
},
|
|
52
|
+
gemini: {
|
|
53
|
+
label: 'Gemini CLI',
|
|
54
|
+
reasoning: 4,
|
|
55
|
+
refactoring: 3,
|
|
56
|
+
debugging: 3,
|
|
57
|
+
review: 3,
|
|
58
|
+
architecture: 3,
|
|
59
|
+
ci: 3,
|
|
60
|
+
ide: 3,
|
|
61
|
+
ui: 2,
|
|
62
|
+
async: 4,
|
|
63
|
+
inline: 2,
|
|
64
|
+
context: 5,
|
|
65
|
+
automation: 3,
|
|
66
|
+
sandbox: 5,
|
|
67
|
+
cloudTasks: 4,
|
|
68
|
+
cloudAgent: 3,
|
|
69
|
+
background: 3,
|
|
70
|
+
governance: 2,
|
|
71
|
+
},
|
|
72
|
+
copilot: {
|
|
73
|
+
label: 'GitHub Copilot',
|
|
74
|
+
reasoning: 3,
|
|
75
|
+
refactoring: 3,
|
|
76
|
+
debugging: 3,
|
|
77
|
+
review: 3,
|
|
78
|
+
architecture: 2,
|
|
79
|
+
ci: 4,
|
|
80
|
+
ide: 4,
|
|
81
|
+
ui: 3,
|
|
82
|
+
async: 3,
|
|
83
|
+
inline: 5,
|
|
84
|
+
context: 3,
|
|
85
|
+
automation: 3,
|
|
86
|
+
sandbox: 2,
|
|
87
|
+
cloudTasks: 4,
|
|
88
|
+
cloudAgent: 4,
|
|
89
|
+
background: 3,
|
|
90
|
+
governance: 3,
|
|
91
|
+
},
|
|
92
|
+
cursor: {
|
|
93
|
+
label: 'Cursor',
|
|
94
|
+
reasoning: 3,
|
|
95
|
+
refactoring: 4,
|
|
96
|
+
debugging: 4,
|
|
97
|
+
review: 3,
|
|
98
|
+
architecture: 3,
|
|
99
|
+
ci: 2,
|
|
100
|
+
ide: 5,
|
|
101
|
+
ui: 5,
|
|
102
|
+
async: 2,
|
|
103
|
+
inline: 4,
|
|
104
|
+
context: 3,
|
|
105
|
+
automation: 4,
|
|
106
|
+
sandbox: 2,
|
|
107
|
+
cloudTasks: 2,
|
|
108
|
+
cloudAgent: 2,
|
|
109
|
+
background: 4,
|
|
110
|
+
governance: 2,
|
|
111
|
+
},
|
|
112
|
+
windsurf: {
|
|
113
|
+
label: 'Windsurf',
|
|
114
|
+
reasoning: 4,
|
|
115
|
+
refactoring: 4,
|
|
116
|
+
debugging: 4,
|
|
117
|
+
review: 3,
|
|
118
|
+
architecture: 3,
|
|
119
|
+
ci: 2,
|
|
120
|
+
ide: 5,
|
|
121
|
+
ui: 4,
|
|
122
|
+
async: 3,
|
|
123
|
+
inline: 4,
|
|
124
|
+
context: 3,
|
|
125
|
+
automation: 4,
|
|
126
|
+
sandbox: 2,
|
|
127
|
+
cloudTasks: 2,
|
|
128
|
+
cloudAgent: 2,
|
|
129
|
+
background: 2,
|
|
130
|
+
governance: 3,
|
|
131
|
+
},
|
|
132
|
+
aider: {
|
|
133
|
+
label: 'Aider',
|
|
134
|
+
reasoning: 4,
|
|
135
|
+
refactoring: 5,
|
|
136
|
+
debugging: 4,
|
|
137
|
+
review: 3,
|
|
138
|
+
architecture: 3,
|
|
139
|
+
ci: 4,
|
|
140
|
+
ide: 1,
|
|
141
|
+
ui: 1,
|
|
142
|
+
async: 2,
|
|
143
|
+
inline: 1,
|
|
144
|
+
context: 2,
|
|
145
|
+
automation: 2,
|
|
146
|
+
sandbox: 1,
|
|
147
|
+
cloudTasks: 1,
|
|
148
|
+
cloudAgent: 1,
|
|
149
|
+
background: 1,
|
|
150
|
+
governance: 2,
|
|
151
|
+
},
|
|
152
|
+
opencode: {
|
|
153
|
+
label: 'OpenCode',
|
|
154
|
+
reasoning: 4,
|
|
155
|
+
refactoring: 4,
|
|
156
|
+
debugging: 4,
|
|
157
|
+
review: 4,
|
|
158
|
+
architecture: 4,
|
|
159
|
+
ci: 4,
|
|
160
|
+
ide: 3,
|
|
161
|
+
ui: 2,
|
|
162
|
+
async: 4,
|
|
163
|
+
inline: 2,
|
|
164
|
+
context: 4,
|
|
165
|
+
automation: 4,
|
|
166
|
+
sandbox: 4,
|
|
167
|
+
cloudTasks: 3,
|
|
168
|
+
cloudAgent: 3,
|
|
169
|
+
background: 3,
|
|
170
|
+
governance: 4,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const CAPABILITY_LABELS = {
|
|
175
|
+
reasoning: 'Complex reasoning & analysis',
|
|
176
|
+
refactoring: 'Code refactoring',
|
|
177
|
+
debugging: 'Bug diagnosis & debugging',
|
|
178
|
+
review: 'Code review',
|
|
179
|
+
architecture: 'Architecture design',
|
|
180
|
+
ci: 'CI/CD pipeline integration',
|
|
181
|
+
ide: 'IDE integration',
|
|
182
|
+
ui: 'UI/frontend work',
|
|
183
|
+
async: 'Async/background tasks',
|
|
184
|
+
inline: 'Inline code completion',
|
|
185
|
+
context: 'Large context handling',
|
|
186
|
+
automation: 'Workflow automation',
|
|
187
|
+
sandbox: 'Sandboxed execution',
|
|
188
|
+
cloudTasks: 'Cloud-based tasks',
|
|
189
|
+
cloudAgent: 'Cloud agent mode',
|
|
190
|
+
background: 'Background processing',
|
|
191
|
+
governance: 'Governance & permissions',
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
module.exports = { PLATFORM_CAPABILITIES, CAPABILITY_LABELS };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const PROJECT_STATE_ROOT = ['.nerviq'];
|
|
5
|
+
const LEGACY_PROJECT_STATE_ROOT = ['.claude', 'claudex-setup'];
|
|
6
|
+
const HARMONY_STATE_ROOT = ['.nerviq', 'harmony'];
|
|
7
|
+
const LEGACY_HARMONY_STATE_ROOT = ['.claudex', 'harmony'];
|
|
8
|
+
const GEMINI_STATE_ROOT = ['.gemini', '.nerviq'];
|
|
9
|
+
const LEGACY_GEMINI_STATE_ROOT = ['.gemini', '.claudex'];
|
|
10
|
+
|
|
11
|
+
function buildPath(dir, rootSegments, segments) {
|
|
12
|
+
return path.join(dir, ...rootSegments, ...segments);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function resolveReadablePath(dir, preferredRoot, legacyRoot, ...segments) {
|
|
16
|
+
const preferredPath = buildPath(dir, preferredRoot, segments);
|
|
17
|
+
if (fs.existsSync(preferredPath)) return preferredPath;
|
|
18
|
+
|
|
19
|
+
const legacyPath = buildPath(dir, legacyRoot, segments);
|
|
20
|
+
if (fs.existsSync(legacyPath)) return legacyPath;
|
|
21
|
+
|
|
22
|
+
return preferredPath;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function ensureWritableDir(dir, rootSegments, ...segments) {
|
|
26
|
+
const targetPath = buildPath(dir, rootSegments, segments);
|
|
27
|
+
fs.mkdirSync(targetPath, { recursive: true });
|
|
28
|
+
return targetPath;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function resolveProjectStatePath(dir, ...segments) {
|
|
32
|
+
return buildPath(dir, PROJECT_STATE_ROOT, segments);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function resolveProjectStateReadPath(dir, ...segments) {
|
|
36
|
+
return resolveReadablePath(dir, PROJECT_STATE_ROOT, LEGACY_PROJECT_STATE_ROOT, ...segments);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function ensureProjectStateDir(dir, ...segments) {
|
|
40
|
+
return ensureWritableDir(dir, PROJECT_STATE_ROOT, ...segments);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function resolveHarmonyStatePath(dir, ...segments) {
|
|
44
|
+
return buildPath(dir, HARMONY_STATE_ROOT, segments);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function resolveHarmonyStateReadPath(dir, ...segments) {
|
|
48
|
+
return resolveReadablePath(dir, HARMONY_STATE_ROOT, LEGACY_HARMONY_STATE_ROOT, ...segments);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function ensureHarmonyStateDir(dir, ...segments) {
|
|
52
|
+
return ensureWritableDir(dir, HARMONY_STATE_ROOT, ...segments);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function resolveGeminiStatePath(dir, ...segments) {
|
|
56
|
+
return buildPath(dir, GEMINI_STATE_ROOT, segments);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function resolveGeminiStateReadPath(dir, ...segments) {
|
|
60
|
+
return resolveReadablePath(dir, GEMINI_STATE_ROOT, LEGACY_GEMINI_STATE_ROOT, ...segments);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function ensureGeminiStateDir(dir, ...segments) {
|
|
64
|
+
return ensureWritableDir(dir, GEMINI_STATE_ROOT, ...segments);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
module.exports = {
|
|
68
|
+
PROJECT_STATE_ROOT,
|
|
69
|
+
LEGACY_PROJECT_STATE_ROOT,
|
|
70
|
+
HARMONY_STATE_ROOT,
|
|
71
|
+
LEGACY_HARMONY_STATE_ROOT,
|
|
72
|
+
GEMINI_STATE_ROOT,
|
|
73
|
+
LEGACY_GEMINI_STATE_ROOT,
|
|
74
|
+
resolveReadablePath,
|
|
75
|
+
ensureWritableDir,
|
|
76
|
+
resolveProjectStatePath,
|
|
77
|
+
resolveProjectStateReadPath,
|
|
78
|
+
ensureProjectStateDir,
|
|
79
|
+
resolveHarmonyStatePath,
|
|
80
|
+
resolveHarmonyStateReadPath,
|
|
81
|
+
ensureHarmonyStateDir,
|
|
82
|
+
resolveGeminiStatePath,
|
|
83
|
+
resolveGeminiStateReadPath,
|
|
84
|
+
ensureGeminiStateDir,
|
|
85
|
+
};
|
|
@@ -5,26 +5,7 @@
|
|
|
5
5
|
* platform additions to fill coverage gaps.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
const { PLATFORM_CAPABILITIES } = require('
|
|
9
|
-
|
|
10
|
-
const AREA_LABELS = {
|
|
11
|
-
reasoning: 'Complex reasoning & analysis',
|
|
12
|
-
refactoring: 'Code refactoring',
|
|
13
|
-
debugging: 'Bug diagnosis & debugging',
|
|
14
|
-
CI: 'CI/CD pipeline integration',
|
|
15
|
-
IDE: 'IDE integration',
|
|
16
|
-
UI: 'UI/frontend work',
|
|
17
|
-
async: 'Async/background tasks',
|
|
18
|
-
review: 'Code review',
|
|
19
|
-
architecture: 'Architecture design',
|
|
20
|
-
inline: 'Inline code completion',
|
|
21
|
-
cloudTasks: 'Cloud-based tasks',
|
|
22
|
-
context: 'Large context handling',
|
|
23
|
-
sandbox: 'Sandboxed execution',
|
|
24
|
-
cloudAgent: 'Cloud agent mode',
|
|
25
|
-
background: 'Background processing',
|
|
26
|
-
automation: 'Workflow automation',
|
|
27
|
-
};
|
|
8
|
+
const { PLATFORM_CAPABILITIES, CAPABILITY_LABELS: AREA_LABELS } = require('../shared/capabilities');
|
|
28
9
|
|
|
29
10
|
const WEAKNESS_THRESHOLD = 3;
|
|
30
11
|
const STRENGTH_THRESHOLD = 4;
|
package/src/synergy/learning.js
CHANGED
|
@@ -15,6 +15,9 @@ const PLATFORM_SEMANTICS = {
|
|
|
15
15
|
gemini: { configFile: 'GEMINI.md', format: 'markdown', instructionStyle: 'structured' },
|
|
16
16
|
copilot: { configFile: '.github/copilot-instructions.md', format: 'markdown', instructionStyle: 'concise' },
|
|
17
17
|
cursor: { configFile: '.cursor/rules', format: 'mdc', instructionStyle: 'rule-based' },
|
|
18
|
+
windsurf: { configFile: '.windsurf/rules', format: 'markdown', instructionStyle: 'rule-based' },
|
|
19
|
+
aider: { configFile: '.aider.conf.yml', format: 'yaml', instructionStyle: 'convention-based' },
|
|
20
|
+
opencode: { configFile: 'opencode.json', format: 'jsonc', instructionStyle: 'directive' },
|
|
18
21
|
};
|
|
19
22
|
|
|
20
23
|
const TRANSLATION_MAP = {
|
|
@@ -24,13 +27,19 @@ const TRANSLATION_MAP = {
|
|
|
24
27
|
gemini: (rec) => `Add to GEMINI.md: verification command \`${rec.command}\``,
|
|
25
28
|
copilot: (rec) => `Document in copilot-instructions.md: always run \`${rec.command}\` before completing`,
|
|
26
29
|
cursor: (rec) => `Add rule: "Always run \`${rec.command}\` before completing tasks"`,
|
|
30
|
+
windsurf: (rec) => `Add a .windsurf/rules verification rule that runs \`${rec.command}\` before task completion`,
|
|
31
|
+
aider: (rec) => `Document in CONVENTIONS.md or .aider.conf.yml workflow notes: run \`${rec.command}\` before final response`,
|
|
32
|
+
opencode: (rec) => `Add to AGENTS.md or opencode.json workflow guidance: run \`${rec.command}\` before completing`,
|
|
27
33
|
},
|
|
28
34
|
'architecture-doc': {
|
|
29
|
-
claude: (
|
|
30
|
-
codex: (
|
|
31
|
-
gemini: (
|
|
32
|
-
copilot: (
|
|
33
|
-
cursor: (
|
|
35
|
+
claude: () => `Add Mermaid architecture diagram to CLAUDE.md`,
|
|
36
|
+
codex: () => `Add architecture overview to AGENTS.md`,
|
|
37
|
+
gemini: () => `Add architecture context to GEMINI.md`,
|
|
38
|
+
copilot: () => `Add architecture reference in copilot-instructions.md`,
|
|
39
|
+
cursor: () => `Add architecture context rule in .cursor/rules`,
|
|
40
|
+
windsurf: () => `Add architecture guidance to a .windsurf/rules/*.md file or shared workflow`,
|
|
41
|
+
aider: () => `Add architecture overview to CONVENTIONS.md for Aider sessions`,
|
|
42
|
+
opencode: () => `Add architecture context to AGENTS.md and reference it from opencode.json`,
|
|
34
43
|
},
|
|
35
44
|
'permission-rule': {
|
|
36
45
|
claude: (rec) => `Configure in settings.json permissions: ${rec.description}`,
|
|
@@ -38,6 +47,9 @@ const TRANSLATION_MAP = {
|
|
|
38
47
|
gemini: (rec) => `Configure Gemini sandbox settings: ${rec.description}`,
|
|
39
48
|
copilot: (rec) => `Note in instructions: ${rec.description}`,
|
|
40
49
|
cursor: (rec) => `Add safety rule: ${rec.description}`,
|
|
50
|
+
windsurf: (rec) => `Translate into .cascadeignore, MCP whitelist, or rule guidance: ${rec.description}`,
|
|
51
|
+
aider: (rec) => `Translate into git workflow guardrails or config defaults: ${rec.description}`,
|
|
52
|
+
opencode: (rec) => `Encode in opencode.json permissions: ${rec.description}`,
|
|
41
53
|
},
|
|
42
54
|
'hook': {
|
|
43
55
|
claude: (rec) => `Add hook in settings.json: ${rec.description}`,
|
|
@@ -45,6 +57,9 @@ const TRANSLATION_MAP = {
|
|
|
45
57
|
gemini: (rec) => `Add automated check: ${rec.description}`,
|
|
46
58
|
copilot: (rec) => `Add workflow step: ${rec.description}`,
|
|
47
59
|
cursor: (rec) => `Add background task rule: ${rec.description}`,
|
|
60
|
+
windsurf: (rec) => `Implement as a workflow, Steps sequence, or auto rule: ${rec.description}`,
|
|
61
|
+
aider: (rec) => `Implement via git hooks, auto-test, or documented Aider workflow: ${rec.description}`,
|
|
62
|
+
opencode: (rec) => `Implement via plugin, workflow, or task automation: ${rec.description}`,
|
|
48
63
|
},
|
|
49
64
|
};
|
|
50
65
|
|
package/src/synergy/routing.js
CHANGED
|
@@ -5,13 +5,7 @@
|
|
|
5
5
|
* project history, and active platform availability.
|
|
6
6
|
*/
|
|
7
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
|
-
};
|
|
8
|
+
const { PLATFORM_CAPABILITIES } = require('../shared/capabilities');
|
|
15
9
|
|
|
16
10
|
const TASK_TYPE_PATTERNS = [
|
|
17
11
|
{ type: 'bugfix', patterns: ['bug', 'fix', 'error', 'crash', 'broken', 'issue', 'regression', 'failing'] },
|
|
@@ -27,16 +21,16 @@ const TASK_TYPE_PATTERNS = [
|
|
|
27
21
|
];
|
|
28
22
|
|
|
29
23
|
const TASK_CAPABILITY_MAP = {
|
|
30
|
-
bugfix: ['debugging', 'reasoning', '
|
|
31
|
-
refactor: ['refactoring', 'reasoning', '
|
|
24
|
+
bugfix: ['debugging', 'reasoning', 'ide'],
|
|
25
|
+
refactor: ['refactoring', 'reasoning', 'ide'],
|
|
32
26
|
review: ['review', 'reasoning', 'context'],
|
|
33
|
-
UI: ['
|
|
34
|
-
CI: ['
|
|
35
|
-
infrastructure: ['
|
|
36
|
-
testing: ['debugging', '
|
|
27
|
+
UI: ['ui', 'ide', 'inline'],
|
|
28
|
+
CI: ['ci', 'cloudTasks', 'async'],
|
|
29
|
+
infrastructure: ['ci', 'cloudTasks', 'sandbox'],
|
|
30
|
+
testing: ['debugging', 'ci', 'sandbox'],
|
|
37
31
|
architecture: ['architecture', 'reasoning', 'context'],
|
|
38
32
|
documentation: ['reasoning', 'context', 'inline'],
|
|
39
|
-
feature: ['reasoning', '
|
|
33
|
+
feature: ['reasoning', 'ide', 'refactoring'],
|
|
40
34
|
};
|
|
41
35
|
|
|
42
36
|
/**
|