groove-dev 0.27.190 → 0.27.192

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/cli",
3
- "version": "0.27.190",
3
+ "version": "0.27.192",
4
4
  "description": "GROOVE CLI — manage AI coding agents from your terminal",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@groove-dev/daemon",
3
- "version": "0.27.190",
3
+ "version": "0.27.192",
4
4
  "description": "GROOVE daemon — agent orchestration engine",
5
5
  "license": "FSL-1.1-Apache-2.0",
6
6
  "type": "module",
@@ -2687,7 +2687,7 @@ After fixing all issues, run tests (npm test) and build (npm run build) to verif
2687
2687
  locks.release(agentId);
2688
2688
 
2689
2689
  // Build resume command
2690
- const { command: rawCommand, args, env } = provider.buildResumeCommand(sessionId, message, config.model, { fast: config.fast });
2690
+ const { command: rawCommand, args, env, stdin: stdinData } = provider.buildResumeCommand(sessionId, message, config.model, { fast: config.fast });
2691
2691
  const command = resolveProviderCommand(config.provider || 'claude-code') || rawCommand;
2692
2692
 
2693
2693
  // Set up log capture
@@ -2752,10 +2752,17 @@ After fixing all issues, run tests (npm test) and build (npm run build) to verif
2752
2752
  const proc = cpSpawn(command, args, {
2753
2753
  cwd: resumeCwd,
2754
2754
  env: resumeEnv,
2755
- stdio: ['ignore', 'pipe', 'pipe'],
2755
+ stdio: [stdinData ? 'pipe' : 'ignore', 'pipe', 'pipe'],
2756
2756
  detached: false,
2757
2757
  });
2758
2758
 
2759
+ // The resume message goes via stdin (not argv) to avoid ARG_MAX/E2BIG on
2760
+ // large messages — mirror the spawn path.
2761
+ if (stdinData && proc.stdin) {
2762
+ proc.stdin.write(stdinData);
2763
+ proc.stdin.end();
2764
+ }
2765
+
2759
2766
  proc.on('error', (err) => {
2760
2767
  if (!logStream.destroyed) logStream.write(`[${new Date().toISOString()}] Resume spawn error: ${err.message}\n`);
2761
2768
  if (!logStream.destroyed) logStream.end();
@@ -39,6 +39,7 @@ export class ClaudeCodeProvider extends Provider {
39
39
  static authType = 'subscription';
40
40
  static managesOwnContext = true; // Claude Code compacts context internally (~25-37% → 2-8%)
41
41
  static models = [
42
+ { id: 'claude-opus-5', name: 'Claude Opus 5', tier: 'heavy', contextWindow: 1_000_000 },
42
43
  { id: 'claude-fable-5', name: 'Claude Fable 5', tier: 'heavy', contextWindow: 1_000_000 },
43
44
  { id: 'claude-opus-4-8', name: 'Claude Opus 4.8', tier: 'heavy', contextWindow: 1_000_000 },
44
45
  { id: 'claude-opus-4-6', name: 'Claude Opus 4.6', tier: 'heavy', contextWindow: 1_000_000 },
@@ -110,16 +111,19 @@ export class ClaudeCodeProvider extends Provider {
110
111
  args.push('--fast');
111
112
  }
112
113
 
113
- // Pass the initial prompt as positional arg (includes GROOVE context)
114
+ // Pass the initial prompt via STDIN, not as a positional argument. A
115
+ // long-running agent's handoff brief accumulates over days and easily
116
+ // exceeds the OS argv limit — on Linux a single arg is capped at 128KB
117
+ // (MAX_ARG_STRLEN) regardless of ARG_MAX — which surfaced as `spawn E2BIG`
118
+ // on rotation. stdin has no such limit. (interactive stream-json mode reads
119
+ // its prompt from stdin, same as headless -p.)
114
120
  const fullPrompt = this.buildFullPrompt(agent);
115
- if (fullPrompt) {
116
- args.push(fullPrompt);
117
- }
118
121
 
119
122
  return {
120
123
  command: 'claude',
121
124
  args,
122
125
  env: {},
126
+ stdin: fullPrompt || undefined,
123
127
  };
124
128
  }
125
129
 
@@ -131,8 +135,8 @@ export class ClaudeCodeProvider extends Provider {
131
135
  if (knockSettings) args.push('--settings', knockSettings);
132
136
  if (model) args.push('--model', model);
133
137
  if (options.fast) args.push('--fast');
134
- if (prompt) args.push(prompt);
135
- return { command: 'claude', args, env: {} };
138
+ // Via stdin, not argv — the resume message can be large (see buildSpawnCommand).
139
+ return { command: 'claude', args, env: {}, stdin: prompt || undefined };
136
140
  }
137
141
 
138
142
  /**