claude-task-worker 0.40.0 → 0.41.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/README.md +40 -20
- package/dist/index.js +67 -7
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -335,6 +335,7 @@ claude-task-worker yolo --epic 100 --epic 200 --label priority-high
|
|
|
335
335
|
```json
|
|
336
336
|
{
|
|
337
337
|
"mode": "default",
|
|
338
|
+
"advisor": false,
|
|
338
339
|
"projects": {
|
|
339
340
|
"app-a": "/Users/me/repos/app-a",
|
|
340
341
|
"app-b": "/Users/me/repos/app-b",
|
|
@@ -346,7 +347,7 @@ claude-task-worker yolo --epic 100 --epic 200 --label priority-high
|
|
|
346
347
|
}
|
|
347
348
|
```
|
|
348
349
|
|
|
349
|
-
`mode` については [`mode`(タスクの実行形態)](#modeタスクの実行形態) を参照。
|
|
350
|
+
`mode` については [`mode`(タスクの実行形態)](#modeタスクの実行形態)、`advisor` については [`advisor`(アドバイザーモデル)](#advisorアドバイザーモデル) を参照。
|
|
350
351
|
|
|
351
352
|
`--project` は繰り返し指定可能で、複数指定した場合は解決後のプロジェクト集合の和集合が対象になる(重複は一意化される)。`--epic` / `--label` と併用でき、ディスパッチ先の各プロジェクトで実行されるコマンドにそのまま引き継がれる。
|
|
352
353
|
|
|
@@ -405,6 +406,24 @@ claude-task-worker exec-issue --project app-a --epic 100 --label priority-high
|
|
|
405
406
|
|
|
406
407
|
適用は `herdr server reload-config`。この設定は herdr サーバー全体に効くため、ワーカー以外の対話セッションの完了音も鳴らなくなる(`[ui.sound.agents] claude = "off"` でも実質同じ範囲)。ワーカーだけを無音にしたい場合は、`HERDR_DISABLE_SOUND=1 herdr --session <name>` で別セッションを起動し、その中でディスパッチャーを動かす
|
|
407
408
|
|
|
409
|
+
### `advisor`(アドバイザーモデル)
|
|
410
|
+
|
|
411
|
+
`config.json` のトップレベルに `advisor: true` を書くと、ワーカーがタスクを起動する際、Claude CLI へ `--advisor <model>` を渡すようになる。渡すモデルはリポジトリ直下の `claude-task-worker.json` の `workers.<ワーカー名>.advisorModel`([ワーカーごとの設定](#ワーカーごとの設定))で指定する。`mode` と同じくトップレベル一括で、プロジェクト単位・ワーカー単位のオン/オフはできない。
|
|
412
|
+
|
|
413
|
+
| `advisor` | 挙動 |
|
|
414
|
+
|---|---|
|
|
415
|
+
| `false`(既定) | `advisorModel` の指定に関わらず `--advisor` を渡さない |
|
|
416
|
+
| `true` | 各ワーカーの `advisorModel`(未指定時はワーカー既定値)を `--advisor` に渡す。空文字のワーカーには渡さない |
|
|
417
|
+
|
|
418
|
+
```json
|
|
419
|
+
{
|
|
420
|
+
"advisor": true,
|
|
421
|
+
"projects": { "app-a": "/Users/me/repos/app-a" }
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
advisor は main モデル以上の能力を持つモデルである必要がある(Claude CLI 側の制約)。そのため `advisorModel` の既定値は、`model` が `sonnet` のワーカーは `opus`、`model` が `opus` のワーカー(`answer-issue-questions`)は空文字(=advisor なし)にしてある。
|
|
426
|
+
|
|
408
427
|
### exec-issue
|
|
409
428
|
|
|
410
429
|
`cc-exec-issue` ラベルが付いた自分にアサインされたIssueを定期取得し、Claude Codeで処理を実行する。(デフォルト1分間隔)
|
|
@@ -562,26 +581,26 @@ claude-task-worker -v
|
|
|
562
581
|
|---|---|---|---|
|
|
563
582
|
| `fixReviewPointCallbackCommentMessage` | string | - | fix-review-point 完了時にPRへ投稿するコメント(未設定の場合は投稿しない) |
|
|
564
583
|
| `uiDesign` | object | `{ "enabled": false, "designDir": "designs" }` | UIデザイン先行ワークフローの設定(詳細は「[UIデザイン先行ワークフロー](#uiデザイン先行ワークフロー)」) |
|
|
565
|
-
| `workers` | object | `{}` | ワーカーごとに Claude CLI に渡すスキル、`--model` / `--effort`、ポーリング間隔、クールダウン時間、最大同時実行数を上書きする設定(詳細は下記) |
|
|
584
|
+
| `workers` | object | `{}` | ワーカーごとに Claude CLI に渡すスキル、`--model` / `--advisor` / `--effort`、ポーリング間隔、クールダウン時間、最大同時実行数を上書きする設定(詳細は下記) |
|
|
566
585
|
|
|
567
586
|
### ワーカーごとの設定
|
|
568
587
|
|
|
569
|
-
`workers` キーにワーカー名ごとの設定オブジェクトを指定することで、Claude CLI の `-p` に渡すスキル(スラッシュコマンド)、`--model` / `--effort`、ポーリング間隔、タスク完了後のクールダウン時間、最大同時実行数を個別に上書きできる。未指定のワーカー・フィールドは下記のワーカー別デフォルト値が使用される。
|
|
570
|
-
|
|
571
|
-
| ワーカー名 | デフォルト `skill` | デフォルト `model` | デフォルト `effort` | デフォルト `pollingIntervalSeconds` | デフォルト `cooldownSeconds` | デフォルト `maxConcurrentTasks` |
|
|
572
|
-
|
|
573
|
-
| `answer-issue-questions` | `/claude-task-worker:answer-issue-questions` | `opus` | `xhigh` | 60 | 0 | 1 |
|
|
574
|
-
| `create-issue` | `/claude-task-worker:create-issue-from-issue-number` | `sonnet` | `xhigh` | 60 | 0 | 1 |
|
|
575
|
-
| `update-issue` | `/claude-task-worker:update-issue` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
576
|
-
| `exec-issue` | `/claude-task-worker:exec-issue` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
577
|
-
| `fix-review-point` | `/claude-task-worker:fix-review-point` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
578
|
-
| `triage-created-issue` | `/claude-task-worker:triage-created-issue` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
579
|
-
| `triage-pr` | `/claude-task-worker:triage-pr` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
580
|
-
| `resolve-conflict` | `/claude-task-worker:resolve-pr-conflict` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
581
|
-
| `check-dependabot` | `/claude-task-worker:check-dependabot` | `sonnet` | `high` | 3600 | 0 | 1 |
|
|
582
|
-
| `epic-issue` | `/claude-task-worker:create-epic-pr` | `sonnet` | `high` | 300 | 0 | 1 |
|
|
583
|
-
| `create-ui-design` | `/claude-task-worker:create-ui-design` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
584
|
-
| `apply-ui-design` | `/claude-task-worker:apply-ui-design` | `sonnet` | `high` | 60 | 0 | 1 |
|
|
588
|
+
`workers` キーにワーカー名ごとの設定オブジェクトを指定することで、Claude CLI の `-p` に渡すスキル(スラッシュコマンド)、`--model` / `--advisor` / `--effort`、ポーリング間隔、タスク完了後のクールダウン時間、最大同時実行数を個別に上書きできる。未指定のワーカー・フィールドは下記のワーカー別デフォルト値が使用される。
|
|
589
|
+
|
|
590
|
+
| ワーカー名 | デフォルト `skill` | デフォルト `model` | デフォルト `advisorModel` | デフォルト `effort` | デフォルト `pollingIntervalSeconds` | デフォルト `cooldownSeconds` | デフォルト `maxConcurrentTasks` |
|
|
591
|
+
|---|---|---|---|---|---|---|---|
|
|
592
|
+
| `answer-issue-questions` | `/claude-task-worker:answer-issue-questions` | `opus` | (なし) | `xhigh` | 60 | 0 | 1 |
|
|
593
|
+
| `create-issue` | `/claude-task-worker:create-issue-from-issue-number` | `sonnet` | `opus` | `xhigh` | 60 | 0 | 1 |
|
|
594
|
+
| `update-issue` | `/claude-task-worker:update-issue` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
595
|
+
| `exec-issue` | `/claude-task-worker:exec-issue` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
596
|
+
| `fix-review-point` | `/claude-task-worker:fix-review-point` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
597
|
+
| `triage-created-issue` | `/claude-task-worker:triage-created-issue` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
598
|
+
| `triage-pr` | `/claude-task-worker:triage-pr` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
599
|
+
| `resolve-conflict` | `/claude-task-worker:resolve-pr-conflict` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
600
|
+
| `check-dependabot` | `/claude-task-worker:check-dependabot` | `sonnet` | `opus` | `high` | 3600 | 0 | 1 |
|
|
601
|
+
| `epic-issue` | `/claude-task-worker:create-epic-pr` | `sonnet` | `opus` | `high` | 300 | 0 | 1 |
|
|
602
|
+
| `create-ui-design` | `/claude-task-worker:create-ui-design` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
603
|
+
| `apply-ui-design` | `/claude-task-worker:apply-ui-design` | `sonnet` | `opus` | `high` | 60 | 0 | 1 |
|
|
585
604
|
|
|
586
605
|
各フィールドの値:
|
|
587
606
|
|
|
@@ -589,6 +608,7 @@ claude-task-worker -v
|
|
|
589
608
|
|---|---|---|
|
|
590
609
|
| `skill` | string | Claude CLI の `-p` に渡すスラッシュコマンド(例: `/claude-task-worker:exec-issue`, `/my-plugin:my-skill`)。ワーカーは `"<skill> <issue-or-pr-number>"` の形で Claude を起動する |
|
|
591
610
|
| `model` | string | Claude CLI の `--model` に渡す値(例: `sonnet`, `opus`, `haiku`) |
|
|
611
|
+
| `advisorModel` | string | Claude CLI の `--advisor` に渡す値(例: `opus`)。空文字を指定するとそのワーカーでは advisor を使わない。`config.json` の `advisor` が `true` のときだけ参照される(詳細は「[`advisor`(アドバイザーモデル)](#advisorアドバイザーモデル)」) |
|
|
592
612
|
| `effort` | string | Claude CLI の `--effort` に渡す値(例: `high`, `medium`, `low`) |
|
|
593
613
|
| `pollingIntervalSeconds` | number | GitHub をポーリングする間隔(秒)。正の数を指定する |
|
|
594
614
|
| `cooldownSeconds` | number | タスク完了後に次のポーリングを停止する時間(秒)。`0` でクールダウンなし |
|
|
@@ -599,8 +619,8 @@ claude-task-worker -v
|
|
|
599
619
|
```json
|
|
600
620
|
{
|
|
601
621
|
"workers": {
|
|
602
|
-
"exec-issue": { "skill": "/my-plugin:exec-issue", "model": "opus", "effort": "high", "pollingIntervalSeconds": 60, "cooldownSeconds": 600, "maxConcurrentTasks": 3 },
|
|
603
|
-
"fix-review-point": { "skill": "/claude-task-worker:fix-review-point", "model": "sonnet", "effort": "high", "maxConcurrentTasks": 2 },
|
|
622
|
+
"exec-issue": { "skill": "/my-plugin:exec-issue", "model": "opus", "advisorModel": "", "effort": "high", "pollingIntervalSeconds": 60, "cooldownSeconds": 600, "maxConcurrentTasks": 3 },
|
|
623
|
+
"fix-review-point": { "skill": "/claude-task-worker:fix-review-point", "model": "sonnet", "advisorModel": "opus", "effort": "high", "maxConcurrentTasks": 2 },
|
|
604
624
|
"triage-pr": { "effort": "medium", "pollingIntervalSeconds": 120 },
|
|
605
625
|
"check-dependabot": { "model": "haiku", "pollingIntervalSeconds": 7200 }
|
|
606
626
|
}
|
package/dist/index.js
CHANGED
|
@@ -1542,7 +1542,8 @@ function systemPromptFilePath() {
|
|
|
1542
1542
|
cachedSystemPromptFilePath = target;
|
|
1543
1543
|
return target;
|
|
1544
1544
|
}
|
|
1545
|
-
function buildClaudeArgs({ mode, prompt, model, effort }) {
|
|
1545
|
+
function buildClaudeArgs({ mode, prompt, model, effort, advisorModel }) {
|
|
1546
|
+
const advisor = advisorModel?.trim() ?? "";
|
|
1546
1547
|
return [
|
|
1547
1548
|
...mode === "herdr" ? [] : ["-p"],
|
|
1548
1549
|
prompt,
|
|
@@ -1555,7 +1556,10 @@ function buildClaudeArgs({ mode, prompt, model, effort }) {
|
|
|
1555
1556
|
"--model",
|
|
1556
1557
|
model,
|
|
1557
1558
|
"--effort",
|
|
1558
|
-
effort
|
|
1559
|
+
effort,
|
|
1560
|
+
// advisor 未指定(空文字)ならフラグごと省く。値なしの `--advisor` を渡すと
|
|
1561
|
+
// 後続フラグを値として食われるため、必ずモデル名とセットでのみ付ける。
|
|
1562
|
+
...advisor === "" ? [] : ["--advisor", advisor]
|
|
1559
1563
|
];
|
|
1560
1564
|
}
|
|
1561
1565
|
function buildClaudeExecution(invocation) {
|
|
@@ -1575,6 +1579,7 @@ var DEFAULT_UI_DESIGN_CONFIG = {
|
|
|
1575
1579
|
var DEFAULT_WORKER_CONFIG = {
|
|
1576
1580
|
skill: "",
|
|
1577
1581
|
model: "sonnet",
|
|
1582
|
+
advisorModel: "opus",
|
|
1578
1583
|
effort: "high",
|
|
1579
1584
|
pollingIntervalSeconds: 60,
|
|
1580
1585
|
cooldownSeconds: 0,
|
|
@@ -1584,6 +1589,7 @@ var WORKER_DEFAULTS = {
|
|
|
1584
1589
|
"answer-issue-questions": {
|
|
1585
1590
|
skill: "/claude-task-worker:answer-issue-questions",
|
|
1586
1591
|
model: "opus",
|
|
1592
|
+
advisorModel: "",
|
|
1587
1593
|
effort: "xhigh",
|
|
1588
1594
|
pollingIntervalSeconds: 60,
|
|
1589
1595
|
cooldownSeconds: 0,
|
|
@@ -1592,6 +1598,7 @@ var WORKER_DEFAULTS = {
|
|
|
1592
1598
|
"create-issue": {
|
|
1593
1599
|
skill: "/claude-task-worker:create-issue-from-issue-number",
|
|
1594
1600
|
model: "sonnet",
|
|
1601
|
+
advisorModel: "opus",
|
|
1595
1602
|
effort: "xhigh",
|
|
1596
1603
|
pollingIntervalSeconds: 60,
|
|
1597
1604
|
cooldownSeconds: 0,
|
|
@@ -1600,6 +1607,7 @@ var WORKER_DEFAULTS = {
|
|
|
1600
1607
|
"update-issue": {
|
|
1601
1608
|
skill: "/claude-task-worker:update-issue",
|
|
1602
1609
|
model: "sonnet",
|
|
1610
|
+
advisorModel: "opus",
|
|
1603
1611
|
effort: "high",
|
|
1604
1612
|
pollingIntervalSeconds: 60,
|
|
1605
1613
|
cooldownSeconds: 0,
|
|
@@ -1608,6 +1616,7 @@ var WORKER_DEFAULTS = {
|
|
|
1608
1616
|
"exec-issue": {
|
|
1609
1617
|
skill: "/claude-task-worker:exec-issue",
|
|
1610
1618
|
model: "sonnet",
|
|
1619
|
+
advisorModel: "opus",
|
|
1611
1620
|
effort: "high",
|
|
1612
1621
|
pollingIntervalSeconds: 60,
|
|
1613
1622
|
cooldownSeconds: 0,
|
|
@@ -1616,6 +1625,7 @@ var WORKER_DEFAULTS = {
|
|
|
1616
1625
|
"fix-review-point": {
|
|
1617
1626
|
skill: "/claude-task-worker:fix-review-point",
|
|
1618
1627
|
model: "sonnet",
|
|
1628
|
+
advisorModel: "opus",
|
|
1619
1629
|
effort: "high",
|
|
1620
1630
|
pollingIntervalSeconds: 60,
|
|
1621
1631
|
cooldownSeconds: 0,
|
|
@@ -1624,6 +1634,7 @@ var WORKER_DEFAULTS = {
|
|
|
1624
1634
|
"triage-created-issue": {
|
|
1625
1635
|
skill: "/claude-task-worker:triage-created-issue",
|
|
1626
1636
|
model: "sonnet",
|
|
1637
|
+
advisorModel: "opus",
|
|
1627
1638
|
effort: "high",
|
|
1628
1639
|
pollingIntervalSeconds: 60,
|
|
1629
1640
|
cooldownSeconds: 0,
|
|
@@ -1632,6 +1643,7 @@ var WORKER_DEFAULTS = {
|
|
|
1632
1643
|
"triage-pr": {
|
|
1633
1644
|
skill: "/claude-task-worker:triage-pr",
|
|
1634
1645
|
model: "sonnet",
|
|
1646
|
+
advisorModel: "opus",
|
|
1635
1647
|
effort: "high",
|
|
1636
1648
|
pollingIntervalSeconds: 60,
|
|
1637
1649
|
cooldownSeconds: 0,
|
|
@@ -1640,6 +1652,7 @@ var WORKER_DEFAULTS = {
|
|
|
1640
1652
|
"resolve-conflict": {
|
|
1641
1653
|
skill: "/claude-task-worker:resolve-pr-conflict",
|
|
1642
1654
|
model: "sonnet",
|
|
1655
|
+
advisorModel: "opus",
|
|
1643
1656
|
effort: "high",
|
|
1644
1657
|
pollingIntervalSeconds: 60,
|
|
1645
1658
|
cooldownSeconds: 0,
|
|
@@ -1648,6 +1661,7 @@ var WORKER_DEFAULTS = {
|
|
|
1648
1661
|
"check-dependabot": {
|
|
1649
1662
|
skill: "/claude-task-worker:check-dependabot",
|
|
1650
1663
|
model: "sonnet",
|
|
1664
|
+
advisorModel: "opus",
|
|
1651
1665
|
effort: "high",
|
|
1652
1666
|
pollingIntervalSeconds: 3600,
|
|
1653
1667
|
cooldownSeconds: 0,
|
|
@@ -1656,6 +1670,7 @@ var WORKER_DEFAULTS = {
|
|
|
1656
1670
|
"epic-issue": {
|
|
1657
1671
|
skill: "/claude-task-worker:create-epic-pr",
|
|
1658
1672
|
model: "sonnet",
|
|
1673
|
+
advisorModel: "opus",
|
|
1659
1674
|
effort: "high",
|
|
1660
1675
|
pollingIntervalSeconds: 300,
|
|
1661
1676
|
cooldownSeconds: 0,
|
|
@@ -1664,6 +1679,7 @@ var WORKER_DEFAULTS = {
|
|
|
1664
1679
|
"create-ui-design": {
|
|
1665
1680
|
skill: "/claude-task-worker:create-ui-design",
|
|
1666
1681
|
model: "sonnet",
|
|
1682
|
+
advisorModel: "opus",
|
|
1667
1683
|
effort: "high",
|
|
1668
1684
|
pollingIntervalSeconds: 60,
|
|
1669
1685
|
cooldownSeconds: 0,
|
|
@@ -1672,6 +1688,7 @@ var WORKER_DEFAULTS = {
|
|
|
1672
1688
|
"apply-ui-design": {
|
|
1673
1689
|
skill: "/claude-task-worker:apply-ui-design",
|
|
1674
1690
|
model: "sonnet",
|
|
1691
|
+
advisorModel: "opus",
|
|
1675
1692
|
effort: "high",
|
|
1676
1693
|
pollingIntervalSeconds: 300,
|
|
1677
1694
|
cooldownSeconds: 0,
|
|
@@ -1709,6 +1726,15 @@ function parseWorkerEntry(name, val) {
|
|
|
1709
1726
|
console.warn(`[config] invalid workers.${name}.model: ${String(entry.model)}, using default ${base.model}`);
|
|
1710
1727
|
}
|
|
1711
1728
|
}
|
|
1729
|
+
if ("advisorModel" in entry) {
|
|
1730
|
+
if (typeof entry.advisorModel === "string") {
|
|
1731
|
+
result.advisorModel = entry.advisorModel;
|
|
1732
|
+
} else {
|
|
1733
|
+
console.warn(
|
|
1734
|
+
`[config] invalid workers.${name}.advisorModel: ${String(entry.advisorModel)}, using default ${JSON.stringify(base.advisorModel)}`
|
|
1735
|
+
);
|
|
1736
|
+
}
|
|
1737
|
+
}
|
|
1712
1738
|
if ("effort" in entry) {
|
|
1713
1739
|
if (typeof entry.effort === "string" && entry.effort.length > 0) {
|
|
1714
1740
|
result.effort = entry.effort;
|
|
@@ -1898,6 +1924,7 @@ import { homedir } from "node:os";
|
|
|
1898
1924
|
import { isAbsolute as isAbsolute2, join as join2, resolve } from "node:path";
|
|
1899
1925
|
var RESERVED_ALL = "all";
|
|
1900
1926
|
var DEFAULT_RUN_MODE = "default";
|
|
1927
|
+
var DEFAULT_ADVISOR_ENABLED = false;
|
|
1901
1928
|
var UserConfigError = class extends Error {
|
|
1902
1929
|
constructor(message) {
|
|
1903
1930
|
super(message);
|
|
@@ -1946,6 +1973,13 @@ function parseMode(raw, path2) {
|
|
|
1946
1973
|
console.warn(`[config] invalid mode: ${JSON.stringify(value)} in ${path2}, using "${DEFAULT_RUN_MODE}"`);
|
|
1947
1974
|
return DEFAULT_RUN_MODE;
|
|
1948
1975
|
}
|
|
1976
|
+
function parseAdvisor(raw, path2) {
|
|
1977
|
+
if (!("advisor" in raw)) return DEFAULT_ADVISOR_ENABLED;
|
|
1978
|
+
const value = raw["advisor"];
|
|
1979
|
+
if (typeof value === "boolean") return value;
|
|
1980
|
+
console.warn(`[config] invalid advisor: ${JSON.stringify(value)} in ${path2}, using ${DEFAULT_ADVISOR_ENABLED}`);
|
|
1981
|
+
return DEFAULT_ADVISOR_ENABLED;
|
|
1982
|
+
}
|
|
1949
1983
|
function loadUserConfig() {
|
|
1950
1984
|
const path2 = getUserConfigPath();
|
|
1951
1985
|
const raw = readRawConfig();
|
|
@@ -1962,6 +1996,7 @@ function loadUserConfig() {
|
|
|
1962
1996
|
throw new UserConfigError(`config.json "projectGroups" must be an object: ${path2}`);
|
|
1963
1997
|
}
|
|
1964
1998
|
const mode = parseMode(raw, path2);
|
|
1999
|
+
const advisor = parseAdvisor(raw, path2);
|
|
1965
2000
|
const rawProjects = raw["projects"];
|
|
1966
2001
|
const rawProjectGroups = "projectGroups" in raw ? raw["projectGroups"] : {};
|
|
1967
2002
|
const projectKeys = Object.keys(rawProjects);
|
|
@@ -2012,7 +2047,7 @@ function loadUserConfig() {
|
|
|
2012
2047
|
}
|
|
2013
2048
|
projectGroups[groupName] = members;
|
|
2014
2049
|
}
|
|
2015
|
-
return { mode, projects, projectGroups };
|
|
2050
|
+
return { mode, advisor, projects, projectGroups };
|
|
2016
2051
|
}
|
|
2017
2052
|
var cachedRunMode;
|
|
2018
2053
|
function getRunMode() {
|
|
@@ -2021,6 +2056,27 @@ function getRunMode() {
|
|
|
2021
2056
|
}
|
|
2022
2057
|
return cachedRunMode;
|
|
2023
2058
|
}
|
|
2059
|
+
var cachedAdvisorEnabled;
|
|
2060
|
+
function isAdvisorEnabled() {
|
|
2061
|
+
if (cachedAdvisorEnabled === void 0) {
|
|
2062
|
+
cachedAdvisorEnabled = readAdvisorEnabled();
|
|
2063
|
+
}
|
|
2064
|
+
return cachedAdvisorEnabled;
|
|
2065
|
+
}
|
|
2066
|
+
function readAdvisorEnabled() {
|
|
2067
|
+
let raw;
|
|
2068
|
+
try {
|
|
2069
|
+
raw = readRawConfig();
|
|
2070
|
+
} catch (err) {
|
|
2071
|
+
console.warn(`[config] failed to read config file, advisor disabled: ${err}`);
|
|
2072
|
+
return DEFAULT_ADVISOR_ENABLED;
|
|
2073
|
+
}
|
|
2074
|
+
if (raw === void 0) return DEFAULT_ADVISOR_ENABLED;
|
|
2075
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
2076
|
+
return DEFAULT_ADVISOR_ENABLED;
|
|
2077
|
+
}
|
|
2078
|
+
return parseAdvisor(raw, getUserConfigPath());
|
|
2079
|
+
}
|
|
2024
2080
|
function readRunMode() {
|
|
2025
2081
|
let raw;
|
|
2026
2082
|
try {
|
|
@@ -2977,7 +3033,7 @@ function createIssuePollingWorker(config) {
|
|
|
2977
3033
|
try {
|
|
2978
3034
|
const issueUrl = `https://github.com/${owner}/${name}/issues/${issue.number}`;
|
|
2979
3035
|
syncDefaultBranch(defaultBranch);
|
|
2980
|
-
const { model, effort, skill } = getWorkerConfig(config.name);
|
|
3036
|
+
const { model, effort, skill, advisorModel } = getWorkerConfig(config.name);
|
|
2981
3037
|
const command = skill || config.command;
|
|
2982
3038
|
const parentNumber = issue.parent?.number;
|
|
2983
3039
|
const mode = getRunMode();
|
|
@@ -2985,7 +3041,9 @@ function createIssuePollingWorker(config) {
|
|
|
2985
3041
|
mode,
|
|
2986
3042
|
prompt: `${command} ${issue.number}`,
|
|
2987
3043
|
model,
|
|
2988
|
-
effort
|
|
3044
|
+
effort,
|
|
3045
|
+
// config.json の advisor が false なら advisorModel の指定に関わらず渡さない。
|
|
3046
|
+
advisorModel: isAdvisorEnabled() ? advisorModel : ""
|
|
2989
3047
|
});
|
|
2990
3048
|
let baseBranch = defaultBranch;
|
|
2991
3049
|
if (parentNumber !== void 0) {
|
|
@@ -3149,14 +3207,16 @@ function createPrPollingWorker(config) {
|
|
|
3149
3207
|
syncDefaultBranch(defaultBranch);
|
|
3150
3208
|
await createWorktreeFromBranch(worktreeId, defaultBranch);
|
|
3151
3209
|
const cwd = getWorktreePath(worktreeId);
|
|
3152
|
-
const { model, effort, skill } = getWorkerConfig(config.name);
|
|
3210
|
+
const { model, effort, skill, advisorModel } = getWorkerConfig(config.name);
|
|
3153
3211
|
const command = skill || config.command;
|
|
3154
3212
|
const mode = getRunMode();
|
|
3155
3213
|
const execution = buildClaudeExecution({
|
|
3156
3214
|
mode,
|
|
3157
3215
|
prompt: `${command} ${pr.number}`,
|
|
3158
3216
|
model,
|
|
3159
|
-
effort
|
|
3217
|
+
effort,
|
|
3218
|
+
// config.json の advisor が false なら advisorModel の指定に関わらず渡さない。
|
|
3219
|
+
advisorModel: isAdvisorEnabled() ? advisorModel : ""
|
|
3160
3220
|
});
|
|
3161
3221
|
run(
|
|
3162
3222
|
execution.command,
|