@link-assistant/hive-mind 1.26.3 → 1.27.0

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/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @link-assistant/hive-mind
2
2
 
3
+ ## 1.27.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f6e909e: feat: make --gitkeep-file enabled by default for all --tools (Issue #1385)
8
+
9
+ Previously, `--claude-file` was the default for `--tool claude`, while `--gitkeep-file` was the default for other tools. Now `--gitkeep-file` is the universal default for all `--tool` values, including `--tool claude`.
10
+
11
+ As explained in the referenced video, CLAUDE.md and AGENT.md files generally do not help AI tools and should be avoided. Users who need CLAUDE.md-based task passing can still explicitly opt in with `--claude-file`.
12
+
13
+ ## 1.26.4
14
+
15
+ ### Patch Changes
16
+
17
+ - ff46719: fix: update default agent model to minimax-m2.5-free (Issue #1391)
18
+
19
+ `kimi-k2.5-free` is no longer supported by OpenCode Zen and returns a `ModelError` (HTTP 401). The new default for `--tool agent` is now `minimax-m2.5-free`, matching the upstream fix in [agent PR #209](https://github.com/link-assistant/agent/pull/209).
20
+ - `minimax-m2.5-free` is now the default model for `--tool agent`
21
+ - `kimi-k2.5-free` is moved to the deprecated backward-compatibility section across all model maps
22
+ - Updated `docs/FREE_MODELS.md` to reflect the new default and document `kimi-k2.5-free` as discontinued
23
+
3
24
  ## 1.26.3
4
25
 
5
26
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@link-assistant/hive-mind",
3
- "version": "1.26.3",
3
+ "version": "1.27.0",
4
4
  "description": "AI-powered issue solver and hive mind for collaborative problem solving",
5
5
  "main": "src/hive.mjs",
6
6
  "type": "module",
package/src/agent.lib.mjs CHANGED
@@ -295,7 +295,6 @@ export const mapModelToId = model => {
295
295
  'big-pickle': 'opencode/big-pickle',
296
296
  'gpt-5-nano': 'opencode/gpt-5-nano',
297
297
  'minimax-m2.5-free': 'opencode/minimax-m2.5-free',
298
- 'kimi-k2.5-free': 'opencode/kimi-k2.5-free',
299
298
  // Kilo Gateway free models - short names for Kilo-exclusive models (Issue #1300)
300
299
  'glm-5-free': 'kilo/glm-5-free',
301
300
  'glm-4.5-air-free': 'kilo/glm-4.5-air-free',
@@ -312,6 +311,7 @@ export const mapModelToId = model => {
312
311
  'claude-3.5-haiku': 'anthropic/claude-3.5-haiku',
313
312
  'claude-3.5-sonnet': 'anthropic/claude-3.5-sonnet',
314
313
  // Deprecated free models (backward compatibility)
314
+ 'kimi-k2.5-free': 'opencode/kimi-k2.5-free', // Deprecated: not supported by OpenCode Zen (Issue #1391)
315
315
  'glm-4.7-free': 'opencode/glm-4.7-free',
316
316
  'minimax-m2.1-free': 'opencode/minimax-m2.1-free',
317
317
  };
@@ -36,8 +36,7 @@ export const agentModels = {
36
36
  'grok-code-fast-1': 'opencode/grok-code',
37
37
  'big-pickle': 'opencode/big-pickle',
38
38
  'gpt-5-nano': 'opencode/gpt-5-nano',
39
- 'minimax-m2.5-free': 'opencode/minimax-m2.5-free', // New: upgraded from M2.1
40
- 'kimi-k2.5-free': 'opencode/kimi-k2.5-free',
39
+ 'minimax-m2.5-free': 'opencode/minimax-m2.5-free', // New: upgraded from M2.1 (Issue #1391: now default)
41
40
  // Kilo Gateway free models (Issue #1282, updated in #1300)
42
41
  // Short names for Kilo-exclusive models (Issue #1300)
43
42
  'glm-5-free': 'kilo/glm-5-free', // Kilo-exclusive
@@ -53,6 +52,7 @@ export const agentModels = {
53
52
  'kilo/giga-potato-free': 'kilo/giga-potato-free',
54
53
  'kilo/trinity-large-preview': 'kilo/trinity-large-preview',
55
54
  // Deprecated free models (kept for backward compatibility)
55
+ 'kimi-k2.5-free': 'opencode/kimi-k2.5-free', // Deprecated: not supported (Issue #1391)
56
56
  'glm-4.7-free': 'opencode/glm-4.7-free', // Deprecated: no longer free
57
57
  'minimax-m2.1-free': 'opencode/minimax-m2.1-free', // Deprecated: replaced by m2.5
58
58
  'kilo/glm-4.7-free': 'kilo/glm-4.7-free', // Deprecated: replaced by glm-4.5-air-free
@@ -104,8 +104,7 @@ export const AGENT_MODELS = {
104
104
  'grok-code-fast-1': 'opencode/grok-code',
105
105
  'big-pickle': 'opencode/big-pickle',
106
106
  'gpt-5-nano': 'opencode/gpt-5-nano',
107
- 'minimax-m2.5-free': 'opencode/minimax-m2.5-free', // Upgraded from M2.1 (Issue #1300)
108
- 'kimi-k2.5-free': 'opencode/kimi-k2.5-free',
107
+ 'minimax-m2.5-free': 'opencode/minimax-m2.5-free', // Upgraded from M2.1 (Issue #1300); default as of Issue #1391
109
108
  // Free models (via Kilo Gateway)
110
109
  // Issue #1282: Kilo provider adds access to 500+ models including free tier
111
110
  // Issue #1300: Updated Kilo free models with new offerings
@@ -125,6 +124,7 @@ export const AGENT_MODELS = {
125
124
  'kilo/trinity-large-preview': 'kilo/trinity-large-preview',
126
125
  // Deprecated free models (kept for backward compatibility)
127
126
  // These models are no longer the recommended options but may still work
127
+ 'kimi-k2.5-free': 'opencode/kimi-k2.5-free', // Deprecated: not supported by OpenCode Zen (Issue #1391)
128
128
  'glm-4.7-free': 'opencode/glm-4.7-free', // Deprecated: no longer free on OpenCode Zen
129
129
  'minimax-m2.1-free': 'opencode/minimax-m2.1-free', // Deprecated: replaced by m2.5
130
130
  'kilo/glm-4.7-free': 'kilo/glm-4.7-free', // Deprecated: replaced by glm-4.5-air-free
@@ -140,8 +140,8 @@ export const AGENT_MODELS = {
140
140
  'opencode/big-pickle': 'opencode/big-pickle',
141
141
  'opencode/gpt-5-nano': 'opencode/gpt-5-nano',
142
142
  'opencode/minimax-m2.5-free': 'opencode/minimax-m2.5-free', // New (Issue #1300)
143
- 'opencode/kimi-k2.5-free': 'opencode/kimi-k2.5-free',
144
143
  // Deprecated OpenCode Zen models (kept for backward compatibility)
144
+ 'opencode/kimi-k2.5-free': 'opencode/kimi-k2.5-free', // Deprecated: not supported (Issue #1391)
145
145
  'opencode/glm-4.7-free': 'opencode/glm-4.7-free', // Deprecated
146
146
  'opencode/minimax-m2.1-free': 'opencode/minimax-m2.1-free', // Deprecated
147
147
  // Premium models with provider prefix
@@ -70,8 +70,8 @@ export async function handleAutoPrCreation({ argv, tempDir, branchName, issueNum
70
70
  }
71
71
  }
72
72
  } else {
73
- // .gitkeep mode (via explicit --gitkeep-file or auto-gitkeep-file fallback)
74
- const modeDesc = argv.gitkeepFile === true ? '.gitkeep (explicit --gitkeep-file)' : '.gitkeep (CLAUDE.md is ignored)';
73
+ // .gitkeep mode (default for all tools, or auto-gitkeep-file fallback)
74
+ const modeDesc = argv.claudeFile === false ? '.gitkeep (default)' : '.gitkeep (CLAUDE.md is ignored)';
75
75
  await log(formatAligned('📝', 'Creating:', modeDesc));
76
76
 
77
77
  filePath = path.join(tempDir, '.gitkeep');
@@ -133,7 +133,7 @@ Proceed.
133
133
  }
134
134
  } else {
135
135
  // .gitkeep: Use minimal metadata format (explicit --gitkeep-file or auto-gitkeep-file fallback)
136
- const creationReason = argv.gitkeepFile === true ? '# This file was created with --gitkeep-file flag' : '# This file was created because CLAUDE.md is in .gitignore (--auto-gitkeep-file=true)';
136
+ const creationReason = argv.claudeFile === false ? '# This file was created with --gitkeep-file (default)' : '# This file was created because CLAUDE.md is in .gitignore (--auto-gitkeep-file=true)';
137
137
  const gitkeepContent = `# Auto-generated file for PR creation
138
138
  # Issue: ${issueUrl}
139
139
  # Branch: ${branchName}
@@ -297,8 +297,8 @@ ${creationReason}
297
297
  }
298
298
 
299
299
  await log(formatAligned('📝', 'Creating commit:', `With ${commitFileName} file`));
300
- // Commit message distinguishes between explicit --gitkeep-file and auto-gitkeep-file fallback
301
- const fileDesc = commitFileName === 'CLAUDE.md' ? 'CLAUDE.md with task information for AI processing' : `.gitkeep for PR creation (${argv.gitkeepFile === true ? 'created with --gitkeep-file flag' : 'CLAUDE.md is in .gitignore'})`;
300
+ // Commit message distinguishes between CLAUDE.md and .gitkeep modes
301
+ const fileDesc = commitFileName === 'CLAUDE.md' ? 'CLAUDE.md with task information for AI processing' : `.gitkeep for PR creation (${argv.claudeFile === false ? 'default mode' : 'CLAUDE.md is in .gitignore'})`;
302
302
  const commitMessage = `Initial commit with task details\n\nAdding ${fileDesc}.\nThis file will be removed when the task is complete.\n\nIssue: ${issueUrl}`;
303
303
 
304
304
  // Use explicit cwd option for better reliability
@@ -101,13 +101,13 @@ export const SOLVE_OPTION_DEFINITIONS = {
101
101
  },
102
102
  'claude-file': {
103
103
  type: 'boolean',
104
- description: 'Create CLAUDE.md file for task details (default for --tool claude, mutually exclusive with --gitkeep-file)',
105
- default: true,
104
+ description: 'Create CLAUDE.md file for task details (mutually exclusive with --gitkeep-file)',
105
+ default: false,
106
106
  },
107
107
  'gitkeep-file': {
108
108
  type: 'boolean',
109
- description: 'Create .gitkeep file instead of CLAUDE.md (default for --tool agent/opencode/codex, mutually exclusive with --claude-file)',
110
- default: false,
109
+ description: 'Create .gitkeep file instead of CLAUDE.md (default for all --tool values, mutually exclusive with --claude-file)',
110
+ default: true,
111
111
  },
112
112
  'auto-gitkeep-file': {
113
113
  type: 'boolean',
@@ -400,7 +400,7 @@ export const createYargsConfig = yargsInstance => {
400
400
  config = config
401
401
  .option('model', {
402
402
  type: 'string',
403
- description: 'Model to use (for claude: opus, sonnet, haiku, haiku-3-5, haiku-3; for opencode: grok, gpt4o; for codex: gpt5, gpt5-codex, o3; for agent: kimi-k2.5-free, big-pickle, gpt-5-nano, minimax-m2.5-free, glm-5-free, deepseek-r1-free)',
403
+ description: 'Model to use (for claude: opus, sonnet, haiku, haiku-3-5, haiku-3; for opencode: grok, gpt4o; for codex: gpt5, gpt5-codex, o3; for agent: minimax-m2.5-free, big-pickle, gpt-5-nano, glm-5-free, deepseek-r1-free)',
404
404
  alias: 'm',
405
405
  default: currentParsedArgs => {
406
406
  // Dynamic default based on tool selection
@@ -409,7 +409,7 @@ export const createYargsConfig = yargsInstance => {
409
409
  } else if (currentParsedArgs?.tool === 'codex') {
410
410
  return 'gpt-5';
411
411
  } else if (currentParsedArgs?.tool === 'agent') {
412
- return 'kimi-k2.5-free';
412
+ return 'minimax-m2.5-free';
413
413
  }
414
414
  return 'sonnet';
415
415
  },
@@ -538,21 +538,7 @@ export const parseArguments = async (yargs, hideBin) => {
538
538
  argv.model = 'gpt-5';
539
539
  } else if (argv.tool === 'agent' && !modelExplicitlyProvided) {
540
540
  // User did not explicitly provide --model, so use the correct default for agent
541
- argv.model = 'kimi-k2.5-free';
542
- }
543
-
544
- // Tool-specific defaults for --claude-file and --gitkeep-file
545
- // For non-Claude tools, use .gitkeep by default to avoid polluting CLAUDE.md
546
- // (CLAUDE.md has special meaning for Claude Code as a project-level instruction file)
547
- // See: https://github.com/link-assistant/hive-mind/issues/1158
548
- const claudeFileExplicitlyProvided = rawArgs.includes('--claude-file') || rawArgs.includes('--no-claude-file');
549
- const gitkeepFileExplicitlyProvided = rawArgs.includes('--gitkeep-file') || rawArgs.includes('--no-gitkeep-file');
550
-
551
- if (argv.tool !== 'claude' && !claudeFileExplicitlyProvided && !gitkeepFileExplicitlyProvided) {
552
- // User did not explicitly provide either option, so use the correct defaults for non-Claude tools
553
- // Non-Claude tools (agent, opencode, codex) should use .gitkeep by default
554
- argv.claudeFile = false;
555
- argv.gitkeepFile = true;
541
+ argv.model = 'minimax-m2.5-free';
556
542
  }
557
543
 
558
544
  // Validate mutual exclusivity of --claude-file and --gitkeep-file
@@ -588,7 +574,7 @@ export const parseArguments = async (yargs, hideBin) => {
588
574
  argv.claudeFile = false;
589
575
  }
590
576
 
591
- // If user explicitly set --no-gitkeep-file, enable claude-file (this is the default anyway)
577
+ // If user explicitly set --no-gitkeep-file, enable claude-file
592
578
  if (noGitkeepFile && !argv.claudeFile) {
593
579
  argv.claudeFile = true;
594
580
  argv.gitkeepFile = false;