@link-assistant/hive-mind 2.2.2 → 2.3.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 +12 -0
- package/README.hi.md +3 -3
- package/README.md +4 -4
- package/README.ru.md +3 -3
- package/README.zh.md +3 -3
- package/package.json +1 -1
- package/src/github-merge.lib.mjs +3 -3
- package/src/models/index.mjs +1 -1
- package/src/solve.auto-merge-helpers.lib.mjs +26 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @link-assistant/hive-mind
|
|
2
2
|
|
|
3
|
+
## 2.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 40cf185: Use Opus as the default model for the Claude tool while preserving explicit model overrides.
|
|
8
|
+
|
|
9
|
+
## 2.2.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 37303d7: Stop auto-restarting for stale failed check-runs when GitHub reports the pull request as clean and mergeable
|
|
14
|
+
|
|
3
15
|
## 2.2.2
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.hi.md
CHANGED
|
@@ -38,7 +38,7 @@ Hive Mind एक **सामान्यवादी AI** (मिनी-AGI) ह
|
|
|
38
38
|
|
|
39
39
|
| सदस्यता | `--tool` के साथ | डिफ़ॉल्ट मॉडल | किसके लिए बेहतर है |
|
|
40
40
|
| ---------------------------------------------------------------- | ------------------- | ------------- | ------------------------------------------------- |
|
|
41
|
-
| **Anthropic Claude MAX** (~$200/माह, अक्सर 50% छूट = $400 मूल्य) | `claude` (डिफ़ॉल्ट) |
|
|
41
|
+
| **Anthropic Claude MAX** (~$200/माह, अक्सर 50% छूट = $400 मूल्य) | `claude` (डिफ़ॉल्ट) | Opus | उच्चतम रचनात्मकता, मजबूत सामान्य कोड रीजनिंग |
|
|
42
42
|
| **OpenAI ChatGPT Pro** ($200/माह, Codex शामिल) | `codex` | `gpt-5.6-sol` | भरोसेमंद deterministic refactors और तेज iteration |
|
|
43
43
|
|
|
44
44
|
दोनों टूल एक ही hive में साथ उपयोग किए जा सकते हैं। Worker अलग-अलग टूल समानांतर चला सकते हैं, और `/codex` या `/solve --tool codex` कार्यों को ChatGPT Pro पर भेजता है जबकि डिफ़ॉल्ट Claude MAX पर जाता है। किसी एक को चुनना आवश्यक नहीं है: किसी भी एक सदस्यता से संचालन संभव है, और दोनों का उपयोग per-tool/model concurrency mode (#1474) खोलता है।
|
|
@@ -349,7 +349,7 @@ solve <issue-url> [options]
|
|
|
349
349
|
|
|
350
350
|
| विकल्प | संक्षिप्त | विवरण | डिफ़ॉल्ट |
|
|
351
351
|
| --------------- | --------- | --------------------------------------------------------- | ---------- |
|
|
352
|
-
| `--model` | `-m` | उपयोग करने वाला AI मॉडल (sonnet, opus, haiku) |
|
|
352
|
+
| `--model` | `-m` | उपयोग करने वाला AI मॉडल (sonnet, opus, haiku) | opus |
|
|
353
353
|
| `--think` | | सोचने का स्तर (off, low, medium, high, xhigh, ultra, max) | off |
|
|
354
354
|
| `--base-branch` | `-b` | PR के लिए टार्गेट ब्रांच | (डिफ़ॉल्ट) |
|
|
355
355
|
|
|
@@ -375,7 +375,7 @@ hive <github-url> [options]
|
|
|
375
375
|
|
|
376
376
|
| विकल्प | संक्षिप्त | विवरण | डिफ़ॉल्ट |
|
|
377
377
|
| -------------- | --------- | --------------------------------------------------------- | -------- |
|
|
378
|
-
| `--model` | `-m` | उपयोग करने वाला AI मॉडल (sonnet, opus, haiku) |
|
|
378
|
+
| `--model` | `-m` | उपयोग करने वाला AI मॉडल (sonnet, opus, haiku) | opus |
|
|
379
379
|
| `--think` | | सोचने का स्तर (off, low, medium, high, xhigh, ultra, max) | off |
|
|
380
380
|
| `--all-issues` | `-a` | सभी इश्यू निगरानी करें (लेबल अनदेखा करें) | false |
|
|
381
381
|
| `--once` | | एकल रन (लगातार निगरानी न करें) | false |
|
package/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Hive Mind is a **generalist AI** (mini-AGI) capable of working on a wide range o
|
|
|
38
38
|
|
|
39
39
|
| Subscription | Pairs with `--tool` | Default model | Best for |
|
|
40
40
|
| ------------------------------------------------------------------ | ------------------- | ------------- | ------------------------------------------------------- |
|
|
41
|
-
| **Anthropic Claude MAX** (~$200/month, often 50% off = $400 value) | `claude` (default) |
|
|
41
|
+
| **Anthropic Claude MAX** (~$200/month, often 50% off = $400 value) | `claude` (default) | Opus | Highest creativity, strongest general code reasoning |
|
|
42
42
|
| **OpenAI ChatGPT Pro** ($200/month, includes Codex) | `codex` | `gpt-5.6-sol` | Strong deterministic refactors and fast iteration loops |
|
|
43
43
|
|
|
44
44
|
Both tools can be combined in the same hive. Workers can run different tools in parallel, and `/codex` or `/solve --tool codex` routes tasks to ChatGPT Pro while the default routes to Claude MAX. There is no requirement to pick one: either single subscription is enough to operate, and using both unlocks per-tool/model concurrency mode (#1474).
|
|
@@ -357,7 +357,7 @@ solve <issue-url> [options]
|
|
|
357
357
|
|
|
358
358
|
| Option | Alias | Description | Default |
|
|
359
359
|
| --------------- | ----- | --------------------------------------- | --------- |
|
|
360
|
-
| `--model` | `-m` | AI model to use (sonnet, opus, haiku) |
|
|
360
|
+
| `--model` | `-m` | AI model to use (sonnet, opus, haiku) | opus |
|
|
361
361
|
| `--think` | | Thinking level (low, medium, high, max) | - |
|
|
362
362
|
| `--base-branch` | `-b` | Target branch for PR | (default) |
|
|
363
363
|
|
|
@@ -383,7 +383,7 @@ hive <github-url> [options]
|
|
|
383
383
|
|
|
384
384
|
| Option | Alias | Description | Default |
|
|
385
385
|
| -------------- | ----- | --------------------------------------- | ------- |
|
|
386
|
-
| `--model` | `-m` | AI model to use (sonnet, opus, haiku) |
|
|
386
|
+
| `--model` | `-m` | AI model to use (sonnet, opus, haiku) | opus |
|
|
387
387
|
| `--think` | | Thinking level (low, medium, high, max) | - |
|
|
388
388
|
| `--all-issues` | `-a` | Monitor all issues (ignore labels) | false |
|
|
389
389
|
| `--once` | | Single run (don't monitor continuously) | false |
|
|
@@ -509,7 +509,7 @@ Current tool defaults in Hive Mind:
|
|
|
509
509
|
|
|
510
510
|
| Tool | Default model | Default reasoning behavior |
|
|
511
511
|
| ---------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
|
|
512
|
-
| `claude` | `
|
|
512
|
+
| `claude` | `opus` | Defaults to `--think off`: zero budget when supported, otherwise the lowest effort |
|
|
513
513
|
| `codex` | `gpt-5.6-sol` preferred, with runtime fallback to local catalog (`gpt-5.5`) | Defaults to `--think off`, mapped to `reasoning_effort=none` |
|
|
514
514
|
| `opencode` | `grok-code-fast-1` | Defaults to `--think off`; no positive thinking prompt is added |
|
|
515
515
|
| `agent` | `nemotron-3-super-free` | Defaults to `--think off`; no positive thinking prompt is added |
|
package/README.ru.md
CHANGED
|
@@ -38,7 +38,7 @@ Hive Mind — это **универсальный ИИ** (мини-AGI), спо
|
|
|
38
38
|
|
|
39
39
|
| Подписка | Используется с `--tool` | Модель по умолчанию | Лучше всего подходит для |
|
|
40
40
|
| ----------------------------------------------------------------- | ----------------------- | ------------------- | ---------------------------------------------------------- |
|
|
41
|
-
| **Anthropic Claude MAX** (~$200 в месяц, часто скидка 50% = $400) | `claude` (по умолчанию) |
|
|
41
|
+
| **Anthropic Claude MAX** (~$200 в месяц, часто скидка 50% = $400) | `claude` (по умолчанию) | Opus | Максимальная креативность и сильное общее кодовое мышление |
|
|
42
42
|
| **OpenAI ChatGPT Pro** ($200 в месяц, включает Codex) | `codex` | `gpt-5.6-sol` | Надёжные детерминированные рефакторинги и быстрые итерации |
|
|
43
43
|
|
|
44
44
|
Оба инструмента можно сочетать в одном hive. Воркеры могут параллельно запускать разные инструменты, а `/codex` или `/solve --tool codex` направляет задачи в ChatGPT Pro, тогда как маршрут по умолчанию идёт в Claude MAX. Выбирать только один вариант не требуется: любой одной подписки достаточно для работы, а использование обеих открывает режим параллелизма по инструментам/моделям (#1474).
|
|
@@ -349,7 +349,7 @@ solve <issue-url> [options]
|
|
|
349
349
|
|
|
350
350
|
| Параметр | Сокр. | Описание | По умолчанию |
|
|
351
351
|
| --------------- | ----- | ------------------------------------------------------------ | -------------- |
|
|
352
|
-
| `--model` | `-m` | Используемая модель ИИ (sonnet, opus, haiku) |
|
|
352
|
+
| `--model` | `-m` | Используемая модель ИИ (sonnet, opus, haiku) | opus |
|
|
353
353
|
| `--think` | | Уровень мышления (off, low, medium, high, xhigh, ultra, max) | off |
|
|
354
354
|
| `--base-branch` | `-b` | Целевая ветка для PR | (по умолчанию) |
|
|
355
355
|
|
|
@@ -375,7 +375,7 @@ hive <github-url> [options]
|
|
|
375
375
|
|
|
376
376
|
| Параметр | Сокр. | Описание | По умолчанию |
|
|
377
377
|
| -------------- | ----- | ------------------------------------------------------------ | ------------ |
|
|
378
|
-
| `--model` | `-m` | Используемая модель ИИ (sonnet, opus, haiku) |
|
|
378
|
+
| `--model` | `-m` | Используемая модель ИИ (sonnet, opus, haiku) | opus |
|
|
379
379
|
| `--think` | | Уровень мышления (off, low, medium, high, xhigh, ultra, max) | off |
|
|
380
380
|
| `--all-issues` | `-a` | Мониторинг всех задач (игнорировать метки) | false |
|
|
381
381
|
| `--once` | | Одиночный запуск (без непрерывного мониторинга) | false |
|
package/README.zh.md
CHANGED
|
@@ -38,7 +38,7 @@ Hive Mind 是一款**通用 AI**(迷你 AGI),能够处理广泛的任务
|
|
|
38
38
|
|
|
39
39
|
| 订阅 | 搭配 `--tool` | 默认模型 | 最适合场景 |
|
|
40
40
|
| ---------------------------------------------------------------- | ---------------- | ------------- | ---------------------------- |
|
|
41
|
-
| **Anthropic Claude MAX**(约 $200/月,常有五折优惠 = 价值 $400) | `claude`(默认) |
|
|
41
|
+
| **Anthropic Claude MAX**(约 $200/月,常有五折优惠 = 价值 $400) | `claude`(默认) | Opus | 最高创造力、最强通用代码推理 |
|
|
42
42
|
| **OpenAI ChatGPT Pro**($200/月,包含 Codex) | `codex` | `gpt-5.6-sol` | 稳定确定性的重构和快速迭代 |
|
|
43
43
|
|
|
44
44
|
两个工具可以在同一个 hive 中组合使用。Worker 可以并行运行不同工具,`/codex` 或 `/solve --tool codex` 会将任务路由到 ChatGPT Pro,而默认路由到 Claude MAX。无需二选一:任意单一订阅都足以运行,同时使用两者可解锁按工具/模型划分的并发模式(#1474)。
|
|
@@ -349,7 +349,7 @@ solve <issue-url> [options]
|
|
|
349
349
|
|
|
350
350
|
| 选项 | 简写 | 描述 | 默认值 |
|
|
351
351
|
| --------------- | ---- | ----------------------------------------------------- | -------- |
|
|
352
|
-
| `--model` | `-m` | 使用的 AI 模型(sonnet、opus、haiku) |
|
|
352
|
+
| `--model` | `-m` | 使用的 AI 模型(sonnet、opus、haiku) | opus |
|
|
353
353
|
| `--think` | | 思考级别(off、low、medium、high、xhigh、ultra、max) | off |
|
|
354
354
|
| `--base-branch` | `-b` | PR 的目标分支 | (默认) |
|
|
355
355
|
|
|
@@ -375,7 +375,7 @@ hive <github-url> [options]
|
|
|
375
375
|
|
|
376
376
|
| 选项 | 简写 | 描述 | 默认值 |
|
|
377
377
|
| -------------- | ---- | ----------------------------------------------------- | ------ |
|
|
378
|
-
| `--model` | `-m` | 使用的 AI 模型(sonnet、opus、haiku) |
|
|
378
|
+
| `--model` | `-m` | 使用的 AI 模型(sonnet、opus、haiku) | opus |
|
|
379
379
|
| `--think` | | 思考级别(off、low、medium、high、xhigh、ultra、max) | off |
|
|
380
380
|
| `--all-issues` | `-a` | 监控所有 Issue(忽略标签) | false |
|
|
381
381
|
| `--once` | | 单次运行(不持续监控) | false |
|
package/package.json
CHANGED
package/src/github-merge.lib.mjs
CHANGED
|
@@ -446,7 +446,7 @@ export async function checkPRCIStatus(owner, repo, prNumber, verbose = false) {
|
|
|
446
446
|
* @param {string} repo - Repository name
|
|
447
447
|
* @param {number} prNumber - Pull request number
|
|
448
448
|
* @param {boolean} verbose - Whether to log verbose output
|
|
449
|
-
* @returns {Promise<{mergeable: boolean, reason: string|null, terminal?: boolean}>}
|
|
449
|
+
* @returns {Promise<{mergeable: boolean, mergeableState?: string|null, mergeStateStatus?: string|null, reason: string|null, terminal?: boolean}>}
|
|
450
450
|
*/
|
|
451
451
|
export async function checkPRMergeable(owner, repo, prNumber, verbose = false) {
|
|
452
452
|
// Issue #1339: GitHub computes mergeability asynchronously. When mergeStateStatus is
|
|
@@ -473,7 +473,7 @@ export async function checkPRMergeable(owner, repo, prNumber, verbose = false) {
|
|
|
473
473
|
if (verbose) {
|
|
474
474
|
console.log(`[VERBOSE] /merge: PR #${prNumber} mergeability still UNKNOWN after ${MAX_UNKNOWN_RETRIES} attempts`);
|
|
475
475
|
}
|
|
476
|
-
return { mergeable: false, reason: `Merge state: UNKNOWN (GitHub could not compute mergeability after ${MAX_UNKNOWN_RETRIES} attempts)` };
|
|
476
|
+
return { mergeable: false, mergeableState: pr.mergeable, mergeStateStatus: pr.mergeStateStatus, reason: `Merge state: UNKNOWN (GitHub could not compute mergeability after ${MAX_UNKNOWN_RETRIES} attempts)` };
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
const mergeable = pr.mergeable === 'MERGEABLE';
|
|
@@ -505,7 +505,7 @@ export async function checkPRMergeable(owner, repo, prNumber, verbose = false) {
|
|
|
505
505
|
console.log(`[VERBOSE] /merge: PR #${prNumber} mergeable: ${mergeable}, state: ${pr.mergeStateStatus}`);
|
|
506
506
|
}
|
|
507
507
|
|
|
508
|
-
return { mergeable, reason };
|
|
508
|
+
return { mergeable, mergeableState: pr.mergeable, mergeStateStatus: pr.mergeStateStatus, reason };
|
|
509
509
|
} catch (error) {
|
|
510
510
|
if (isTerminalGitHubEntityError(error)) {
|
|
511
511
|
const terminalError = getTerminalGitHubEntityErrorMessage(error);
|
package/src/models/index.mjs
CHANGED
|
@@ -189,7 +189,7 @@ export const geminiModels = {
|
|
|
189
189
|
|
|
190
190
|
// Default model for each tool (Issue #1473: centralized to avoid scattered hardcoded defaults)
|
|
191
191
|
export const defaultModels = {
|
|
192
|
-
claude: '
|
|
192
|
+
claude: 'opus', // Issue #2033: Opus is the preferred default for Claude; sonnet remains available explicitly
|
|
193
193
|
agent: 'nemotron-3-super-free', // Issue #1563: changed from qwen3.6-plus-free (free promotion ended) per agent PR #243
|
|
194
194
|
opencode: 'grok-code-fast-1',
|
|
195
195
|
codex: 'gpt-5.6-sol', // Issue #2027: GPT-5.6 Sol is the released Codex flagship; runtime falls back to gpt-5.5 when Sol is not in the local catalog
|
|
@@ -464,6 +464,22 @@ export const shouldResetNoRunsCounter = (ciStatus, noWorkflowRunsForCommit = fal
|
|
|
464
464
|
return Boolean(ciStatus && ciStatus.status !== 'no_checks');
|
|
465
465
|
};
|
|
466
466
|
|
|
467
|
+
/**
|
|
468
|
+
* Issue #2031: GitHub can retain a failed check-run from an older workflow run
|
|
469
|
+
* alongside a newer successful run for the same job and HEAD SHA. The raw
|
|
470
|
+
* check-run rollup then says "failure" even though GitHub's live PR state is
|
|
471
|
+
* CLEAN/MERGEABLE. Only this explicit pair is strong enough to override the
|
|
472
|
+
* rollup; every other merge state remains conservative.
|
|
473
|
+
*/
|
|
474
|
+
export const isAuthoritativeCleanMergeState = mergeStatus => mergeStatus?.mergeable === true && mergeStatus?.mergeableState === 'MERGEABLE' && mergeStatus?.mergeStateStatus === 'CLEAN';
|
|
475
|
+
|
|
476
|
+
export const reconcileStaleCIBlockers = (blockers, ciStatus, mergeStatus) => {
|
|
477
|
+
if (ciStatus?.status !== 'failure' || !isAuthoritativeCleanMergeState(mergeStatus)) {
|
|
478
|
+
return blockers;
|
|
479
|
+
}
|
|
480
|
+
return blockers.filter(blocker => blocker.type !== 'ci_failure' && blocker.type !== 'ci_cancelled');
|
|
481
|
+
};
|
|
482
|
+
|
|
467
483
|
export const getMergeBlockers = async (owner, repo, prNumber, verbose = false, checkCount = 1, prBranchRef = null) => {
|
|
468
484
|
const blockers = [];
|
|
469
485
|
|
|
@@ -945,6 +961,16 @@ export const getMergeBlockers = async (owner, repo, prNumber, verbose = false, c
|
|
|
945
961
|
return { blockers, ciStatus, noCiConfigured: false, noCiTriggered: false, noWorkflowRunsForCommit };
|
|
946
962
|
}
|
|
947
963
|
|
|
964
|
+
if (ciStatus.status === 'failure' && isAuthoritativeCleanMergeState(mergeStatus)) {
|
|
965
|
+
const staleFailureBlockers = blockers.filter(blocker => blocker.type === 'ci_failure' || blocker.type === 'ci_cancelled');
|
|
966
|
+
if (staleFailureBlockers.length > 0) {
|
|
967
|
+
if (verbose) {
|
|
968
|
+
await log(`[VERBOSE] /merge: PR #${prNumber} is CLEAN/MERGEABLE according to GitHub; ignoring ${staleFailureBlockers.length} stale CI failure/cancellation blocker(s) from the raw check-run rollup`);
|
|
969
|
+
}
|
|
970
|
+
blockers.splice(0, blockers.length, ...reconcileStaleCIBlockers(blockers, ciStatus, mergeStatus));
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
|
|
948
974
|
if (!mergeStatus.mergeable) {
|
|
949
975
|
blockers.push({
|
|
950
976
|
type: 'not_mergeable',
|