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 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
- manager.workstreamUse(args[2]);
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
@@ -2,7 +2,7 @@
2
2
  * Constants and tool path configurations
3
3
  */
4
4
 
5
- const VERSION = '0.43.1';
5
+ const VERSION = '0.43.3';
6
6
 
7
7
  // Tool-specific path configurations
8
8
  const TOOL_PATHS = {
@@ -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 === data.activeId ? 'ā— ' : 'ā—‹ ';
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 active = data.workstreams.find(w => w.id === data.activeId);
167
- if (active) {
168
- console.log(`Active workstream: ${active.name}`);
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 active workstream');
172
+ console.log('No workstream detected for current directory');
171
173
  }
172
- return active || null;
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
- data.activeId = ws.id;
185
- saveWorkstreams(installDir, data);
186
- console.log(`āœ“ Switched to workstream: ${ws.name}`);
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 (takes precedence over global active)
281
+ // Auto-detect from current directory
271
282
  if (autoDetect) {
272
- const detected = workstreamDetect(installDir, process.cwd());
273
- if (detected) return detected;
283
+ return workstreamDetect(installDir, process.cwd());
274
284
  }
275
285
 
276
- // Fall back to file-based activeId (global active workstream)
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.1",
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",