coder-config 0.43.1 ā 0.43.3
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/config-loader.js +1 -1
- package/lib/cli.js +5 -1
- package/lib/constants.js +1 -1
- package/lib/workstreams.js +34 -25
- package/package.json +1 -1
package/config-loader.js
CHANGED
|
@@ -135,7 +135,7 @@ class ClaudeConfigManager {
|
|
|
135
135
|
workstreamCreate(name, projects, rules) { return workstreamCreate(this.installDir, name, projects, rules); }
|
|
136
136
|
workstreamUpdate(idOrName, updates) { return workstreamUpdate(this.installDir, idOrName, updates); }
|
|
137
137
|
workstreamDelete(idOrName) { return workstreamDelete(this.installDir, idOrName); }
|
|
138
|
-
workstreamUse(idOrName) { return workstreamUse(this.installDir, idOrName); }
|
|
138
|
+
workstreamUse(idOrName, evalMode) { return workstreamUse(this.installDir, idOrName, evalMode); }
|
|
139
139
|
workstreamActive() { return workstreamActive(this.installDir); }
|
|
140
140
|
workstreamAddProject(idOrName, projectPath) { return workstreamAddProject(this.installDir, idOrName, projectPath); }
|
|
141
141
|
workstreamRemoveProject(idOrName, projectPath) { return workstreamRemoveProject(this.installDir, idOrName, projectPath); }
|
package/lib/cli.js
CHANGED
|
@@ -120,7 +120,8 @@ function runCli(manager) {
|
|
|
120
120
|
} else if (args[1] === 'delete' || args[1] === 'rm') {
|
|
121
121
|
manager.workstreamDelete(args[2]);
|
|
122
122
|
} else if (args[1] === 'use' || args[1] === 'switch') {
|
|
123
|
-
|
|
123
|
+
const evalMode = args.includes('--eval') || args.includes('-e');
|
|
124
|
+
manager.workstreamUse(args[2], evalMode);
|
|
124
125
|
} else if (args[1] === 'add') {
|
|
125
126
|
manager.workstreamAddProject(args[2], args[3]);
|
|
126
127
|
} else if (args[1] === 'remove' || args[1] === 'rm') {
|
|
@@ -201,6 +202,9 @@ function runCli(manager) {
|
|
|
201
202
|
console.log(`CD hook: ${status.installed ? 'installed' : 'not installed'}`);
|
|
202
203
|
console.log(`Shell: ${status.shell}`);
|
|
203
204
|
console.log(`RC file: ${status.rcFile}`);
|
|
205
|
+
} else if (args[1]) {
|
|
206
|
+
// workstream <name> - show details for that workstream
|
|
207
|
+
manager.workstreamShow(args[1]);
|
|
204
208
|
} else {
|
|
205
209
|
manager.workstreamList();
|
|
206
210
|
}
|
package/lib/constants.js
CHANGED
package/lib/workstreams.js
CHANGED
|
@@ -52,8 +52,9 @@ function workstreamList(installDir) {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
console.log('\nš Workstreams:\n');
|
|
55
|
+
const detected = workstreamDetect(installDir, process.cwd());
|
|
55
56
|
for (const ws of data.workstreams) {
|
|
56
|
-
const active = ws.id ===
|
|
57
|
+
const active = detected && ws.id === detected.id ? 'ā ' : 'ā ';
|
|
57
58
|
console.log(`${active}${ws.name}`);
|
|
58
59
|
if (ws.projects && ws.projects.length > 0) {
|
|
59
60
|
console.log(` Projects: ${ws.projects.map(p => path.basename(p)).join(', ')}`);
|
|
@@ -93,11 +94,6 @@ function workstreamCreate(installDir, name, projects = [], rules = '') {
|
|
|
93
94
|
};
|
|
94
95
|
|
|
95
96
|
data.workstreams.push(workstream);
|
|
96
|
-
|
|
97
|
-
if (!data.activeId) {
|
|
98
|
-
data.activeId = workstream.id;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
97
|
saveWorkstreams(installDir, data);
|
|
102
98
|
console.log(`ā Created workstream: ${name}`);
|
|
103
99
|
return workstream;
|
|
@@ -146,11 +142,6 @@ function workstreamDelete(installDir, idOrName) {
|
|
|
146
142
|
}
|
|
147
143
|
|
|
148
144
|
const removed = data.workstreams.splice(idx, 1)[0];
|
|
149
|
-
|
|
150
|
-
if (data.activeId === removed.id) {
|
|
151
|
-
data.activeId = data.workstreams[0]?.id || null;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
145
|
saveWorkstreams(installDir, data);
|
|
155
146
|
console.log(`ā Deleted workstream: ${removed.name}`);
|
|
156
147
|
return true;
|
|
@@ -159,19 +150,31 @@ function workstreamDelete(installDir, idOrName) {
|
|
|
159
150
|
/**
|
|
160
151
|
* Set active workstream
|
|
161
152
|
*/
|
|
162
|
-
function workstreamUse(installDir, idOrName) {
|
|
153
|
+
function workstreamUse(installDir, idOrName, evalMode = false) {
|
|
163
154
|
const data = loadWorkstreams(installDir);
|
|
164
155
|
|
|
156
|
+
// Show current workstream
|
|
165
157
|
if (!idOrName) {
|
|
166
|
-
const
|
|
167
|
-
if (
|
|
168
|
-
|
|
158
|
+
const envWs = process.env.CODER_WORKSTREAM;
|
|
159
|
+
if (envWs) {
|
|
160
|
+
const ws = data.workstreams.find(
|
|
161
|
+
w => w.id === envWs || w.name.toLowerCase() === envWs.toLowerCase()
|
|
162
|
+
);
|
|
163
|
+
console.log(`Active workstream: ${ws ? ws.name : envWs} (via CODER_WORKSTREAM)`);
|
|
164
|
+
return ws || null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const detected = workstreamDetect(installDir, process.cwd());
|
|
168
|
+
if (detected) {
|
|
169
|
+
console.log(`Auto-detected workstream: ${detected.name}`);
|
|
170
|
+
console.log(` (based on current directory)`);
|
|
169
171
|
} else {
|
|
170
|
-
console.log('No
|
|
172
|
+
console.log('No workstream detected for current directory');
|
|
171
173
|
}
|
|
172
|
-
return
|
|
174
|
+
return detected || null;
|
|
173
175
|
}
|
|
174
176
|
|
|
177
|
+
// Find workstream
|
|
175
178
|
const ws = data.workstreams.find(
|
|
176
179
|
w => w.id === idOrName || w.name.toLowerCase() === idOrName.toLowerCase()
|
|
177
180
|
);
|
|
@@ -181,9 +184,17 @@ function workstreamUse(installDir, idOrName) {
|
|
|
181
184
|
return null;
|
|
182
185
|
}
|
|
183
186
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
+
// Output for eval mode: eval "$(coder-config workstream use name --eval)"
|
|
188
|
+
if (evalMode) {
|
|
189
|
+
console.log(`export CODER_WORKSTREAM="${ws.name}"`);
|
|
190
|
+
return ws;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Normal mode: show instructions
|
|
194
|
+
console.log(`To activate workstream "${ws.name}", run:`);
|
|
195
|
+
console.log(` eval "$(coder-config workstream use ${ws.name} --eval)"`);
|
|
196
|
+
console.log(`\nOr manually:`);
|
|
197
|
+
console.log(` export CODER_WORKSTREAM="${ws.name}"`);
|
|
187
198
|
return ws;
|
|
188
199
|
}
|
|
189
200
|
|
|
@@ -267,14 +278,12 @@ function getActiveWorkstream(installDir, autoDetect = true) {
|
|
|
267
278
|
if (ws) return ws;
|
|
268
279
|
}
|
|
269
280
|
|
|
270
|
-
// Auto-detect from current directory
|
|
281
|
+
// Auto-detect from current directory
|
|
271
282
|
if (autoDetect) {
|
|
272
|
-
|
|
273
|
-
if (detected) return detected;
|
|
283
|
+
return workstreamDetect(installDir, process.cwd());
|
|
274
284
|
}
|
|
275
285
|
|
|
276
|
-
|
|
277
|
-
return data.workstreams.find(w => w.id === data.activeId) || null;
|
|
286
|
+
return null;
|
|
278
287
|
}
|
|
279
288
|
|
|
280
289
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coder-config",
|
|
3
|
-
"version": "0.43.
|
|
3
|
+
"version": "0.43.3",
|
|
4
4
|
"description": "Configuration manager for AI coding tools - Claude Code, Gemini CLI, Codex CLI, Antigravity. Manage MCPs, rules, permissions, memory, and workstreams.",
|
|
5
5
|
"author": "regression.io",
|
|
6
6
|
"main": "config-loader.js",
|