claude-task-worker 0.47.0 → 0.48.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 CHANGED
@@ -74,7 +74,8 @@ UI実装Issueについて、実装の前に Pencil(`.pen`)でデザインを
74
74
  {
75
75
  "uiDesign": {
76
76
  "enabled": true,
77
- "designDir": "designs"
77
+ "designDir": "designs",
78
+ "yolo": false
78
79
  }
79
80
  }
80
81
  ```
@@ -83,6 +84,7 @@ UI実装Issueについて、実装の前に Pencil(`.pen`)でデザインを
83
84
  |---|---|---|
84
85
  | `uiDesign.enabled` | `false` | 本ワークフローの有効化。`false` の間は `triage-created-issue` がUI判定を行わず、2つのワーカーも起動しない |
85
86
  | `uiDesign.designDir` | `"designs"` | `.pen` とスナップショットの配置先(リポジトリルートからの相対パス) |
87
+ | `uiDesign.yolo` | `false` | デザインPRを自動レビュー・自動マージへ流すか。`true` のときだけデザインPRに `cc-triage-scope` を付与する。`false`(既定)ではデザインPRは `cc-ui-design` のみが付いた状態で止まり、人がレビュー・マージするまで `apply-ui-design` は先へ進まない |
86
88
 
87
89
  フローは以下のとおり。
88
90
 
@@ -93,8 +95,9 @@ cc-issue-created + triage-created-issue(ルーティング)
93
95
  → create-ui-design ワーカー
94
96
  ・.pen を作成/更新 + snapshots/ に PNG 出力
95
97
  ・ブランチ cc-ui-design-<N> を push しデザインPRを作成(Refs #N。closing keyword は使わない)
96
- ・PR に cc-triage-scope + cc-ui-design、Issue に cc-ui-design-pr-created を付与
97
- → triage-pr / fix-review-point / resolve-conflict(既存フローでレビュー・マージ)
98
+ ・PR に cc-ui-design(uiDesign.yolo true なら cc-triage-scope も)、Issue に cc-ui-design-pr-created を付与
99
+ uiDesign.yolo: true → triage-pr / fix-review-point / resolve-conflict(既存フローでレビュー・マージ)
100
+ uiDesign.yolo: false → 人がデザインPRをレビュー・マージ
98
101
  → apply-ui-design ワーカー
99
102
  ・デザインPRが MERGED になるまで skip
100
103
  ・Issue description に「## UIデザイン」セクションを追記
@@ -102,7 +105,7 @@ cc-issue-created + triage-created-issue(ルーティング)
102
105
  → exec-issue(デザインを参照元として実装)
103
106
  ```
104
107
 
105
- デザインPR Epic PR ではないため `cc-release-ready` によるマージ保留の対象外で、`triage-pr` が通常どおりレビュー・マージする。`triage-pr` は `cc-ui-design` ラベル付きPRに対してコードレビューではなくデザイン向けの観点(差分が `.pen` とPNGに限定されているか、スナップショットとデザイン意図が読み取れるか、Issue要件を満たしているか)で評価する。
108
+ デザインPRのレビュー・マージ経路は `uiDesign.yolo` で切り替わる。`true` のときはデザインPRに `cc-triage-scope` が付き、Epic PR ではないため `cc-release-ready` によるマージ保留の対象外で、`triage-pr` が通常どおりレビュー・マージする。`false`(既定)では `cc-triage-scope` を付けないためどのワーカーもデザインPRを拾わず、人がレビューしてマージするまで待つ(`apply-ui-design` はデザインPRが `MERGED` になるまでスキップし続ける)。デザインに人が介在したい場合は既定のままにする。`triage-pr` は `cc-ui-design` ラベル付きPRに対してコードレビューではなくデザイン向けの観点(差分が `.pen` とPNGに限定されているか、スナップショットとデザイン意図が読み取れるか、Issue要件を満たしているか)で評価する。
106
109
 
107
110
  デザインが不要と判明した場合は `create-ui-design` が理由をコメントして `cc-ui-design-ready` + `cc-exec-issue` を付与し、人手を介さず実装へ復帰する。Pencil が使えない環境やデザインPRが却下された場合は `cc-need-human-check` に落ちて停止する(共通除外ラベルのため無限リトライしない)。
108
111
 
@@ -506,7 +509,7 @@ advisor は main モデル以上の能力を持つモデルである必要があ
506
509
  - `claude-task-worker.json` の `uiDesign.enabled` が `true` の場合のみ起動する(`false` なら1行ログを出して即終了)
507
510
  - `cc-ui-design-pr-created` / `cc-ui-design-ready` が付いているIssueは除外
508
511
  - デザインPRは `cc-ui-design-<Issue番号>` の固定名ブランチを head とする(後段の `apply-ui-design` が一意に特定するため)
509
- - 完了後、デザインPRの実在を確認できた場合のみ、PRに `cc-ui-design` `cc-triage-scope`、Issueに `cc-ui-design-pr-created` を付与する
512
+ - 完了後、デザインPRの実在を確認できた場合のみ、PRに `cc-ui-design`(`uiDesign.yolo` `true` の場合は `cc-triage-scope` も)、Issueに `cc-ui-design-pr-created` を付与する
510
513
  - スキルが「デザイン不要」と判定した場合(`cc-ui-design-ready` 付与済み)は完了扱いとし、そのまま実装フェーズへ流す
511
514
  - PRの実在を確認できない場合は `cc-need-human-check` を付与してIssueにコメントを残す
512
515
 
@@ -581,7 +584,7 @@ claude-task-worker -v
581
584
  | キー | 型 | デフォルト | 説明 |
582
585
  |---|---|---|---|
583
586
  | `fixReviewPointCallbackCommentMessage` | string | - | fix-review-point 完了時にPRへ投稿するコメント(未設定の場合は投稿しない) |
584
- | `uiDesign` | object | `{ "enabled": false, "designDir": "designs" }` | UIデザイン先行ワークフローの設定(詳細は「[UIデザイン先行ワークフロー](#uiデザイン先行ワークフロー)」) |
587
+ | `uiDesign` | object | `{ "enabled": false, "designDir": "designs", "yolo": false }` | UIデザイン先行ワークフローの設定(詳細は「[UIデザイン先行ワークフロー](#uiデザイン先行ワークフロー)」) |
585
588
  | `workers` | object | `{}` | ワーカーごとに Claude CLI に渡すスキル、`--model` / `--advisor` / `--effort`、ポーリング間隔、クールダウン時間、最大同時実行数を上書きする設定(詳細は下記) |
586
589
 
587
590
  ### ワーカーごとの設定
package/dist/index.js CHANGED
@@ -1597,7 +1597,8 @@ import { readFileSync } from "node:fs";
1597
1597
  import { isAbsolute, join, normalize, sep as SEP } from "node:path";
1598
1598
  var DEFAULT_UI_DESIGN_CONFIG = {
1599
1599
  enabled: false,
1600
- designDir: "designs"
1600
+ designDir: "designs",
1601
+ yolo: false
1601
1602
  };
1602
1603
  var DEFAULT_WORKER_CONFIG = {
1603
1604
  skill: "",
@@ -1813,6 +1814,15 @@ function parseUiDesignEntry(val) {
1813
1814
  );
1814
1815
  }
1815
1816
  }
1817
+ if ("yolo" in entry) {
1818
+ if (typeof entry.yolo === "boolean") {
1819
+ result.yolo = entry.yolo;
1820
+ } else {
1821
+ console.warn(
1822
+ `[config] invalid uiDesign.yolo: ${String(entry.yolo)}, using default ${DEFAULT_UI_DESIGN_CONFIG.yolo}`
1823
+ );
1824
+ }
1825
+ }
1816
1826
  if ("designDir" in entry) {
1817
1827
  const normalized = typeof entry.designDir === "string" && entry.designDir.length > 0 ? normalize(entry.designDir) : null;
1818
1828
  const isContained = normalized !== null && !isAbsolute(normalized) && normalized !== ".." && !normalized.startsWith(`..${SEP}`);
@@ -3533,11 +3543,12 @@ function designReferenceMissingComment(issueNumber) {
3533
3543
  }
3534
3544
 
3535
3545
  // src/workers/create-ui-design.ts
3536
- function designPrLabelingFailedComment(issueNumber, prNumber, error) {
3546
+ function designPrLabelingFailedComment(issueNumber, prNumber, error, yolo = false) {
3537
3547
  const message = error instanceof Error ? error.message : String(error);
3548
+ const prLabels = yolo ? "`cc-ui-design` / `cc-triage-scope`" : "`cc-ui-design`";
3538
3549
  return [
3539
3550
  "## \u30C7\u30B6\u30A4\u30F3PR\u3078\u306E\u30E9\u30D9\u30EB\u4ED8\u4E0E\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u8981\u4EBA\u624B\u78BA\u8A8D\uFF09",
3540
- `\u30C7\u30B6\u30A4\u30F3PR #${prNumber}\uFF08\u30D6\u30E9\u30F3\u30C1 \`${designBranchName(issueNumber)}\`\uFF09\u306F\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F\u304C\u3001\u5F8C\u7D9A\u30E9\u30D9\u30EB\uFF08\`cc-ui-design\` / \`cc-triage-scope\` / \`cc-ui-design-pr-created\`\uFF09\u306E\u4ED8\u4E0E\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002`,
3551
+ `\u30C7\u30B6\u30A4\u30F3PR #${prNumber}\uFF08\u30D6\u30E9\u30F3\u30C1 \`${designBranchName(issueNumber)}\`\uFF09\u306F\u4F5C\u6210\u3055\u308C\u307E\u3057\u305F\u304C\u3001\u5F8C\u7D9A\u30E9\u30D9\u30EB\uFF08${prLabels} / \`cc-ui-design-pr-created\`\uFF09\u306E\u4ED8\u4E0E\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002`,
3541
3552
  "",
3542
3553
  "## \u8D77\u3053\u308A\u3046\u308B\u539F\u56E0",
3543
3554
  "- \u672C\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u8FFD\u52A0\u6642\u306E\u30E9\u30D9\u30EB\u304C\u672A\u4F5C\u6210\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`claude-task-worker init` \u3092\u518D\u5B9F\u884C\u3057\u3066\u30E9\u30D9\u30EB\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044",
@@ -3548,14 +3559,16 @@ function designPrLabelingFailedComment(issueNumber, prNumber, error) {
3548
3559
  "```",
3549
3560
  "",
3550
3561
  "## \u5BFE\u5FDC\u5F8C\u306E\u9032\u3081\u65B9",
3551
- "- \u30E9\u30D9\u30EB\u4F5C\u6210\u5F8C\u306B\u3084\u308A\u76F4\u3059\u5834\u5408: `cc-need-human-check` \u30E9\u30D9\u30EB\u3092\u5916\u3057\u3001`cc-ui-design`\u30FB`cc-triage-scope`\uFF08PR\u5074\uFF09\u3068 `cc-ui-design-pr-created`\uFF08Issue\u5074\uFF09\u3092\u624B\u52D5\u3067\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044"
3562
+ `- \u30E9\u30D9\u30EB\u4F5C\u6210\u5F8C\u306B\u3084\u308A\u76F4\u3059\u5834\u5408: \`cc-need-human-check\` \u30E9\u30D9\u30EB\u3092\u5916\u3057\u3001${yolo ? "`cc-ui-design`\u30FB`cc-triage-scope`" : "`cc-ui-design`"}\uFF08PR\u5074\uFF09\u3068 \`cc-ui-design-pr-created\`\uFF08Issue\u5074\uFF09\u3092\u624B\u52D5\u3067\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044`
3552
3563
  ].join("\n");
3553
3564
  }
3554
3565
  var createUiDesignWorker = async (opts = {}) => {
3555
- if (!getUiDesignConfig().enabled) {
3566
+ const uiDesignConfig = getUiDesignConfig();
3567
+ if (!uiDesignConfig.enabled) {
3556
3568
  console.log("[create-ui-design] uiDesign.enabled is false, skipping");
3557
3569
  return;
3558
3570
  }
3571
+ const yolo = uiDesignConfig.yolo;
3559
3572
  await createIssuePollingWorker({
3560
3573
  name: "create-ui-design",
3561
3574
  command: "/claude-task-worker:create-ui-design",
@@ -3586,12 +3599,18 @@ var createUiDesignWorker = async (opts = {}) => {
3586
3599
  }
3587
3600
  try {
3588
3601
  await addLabel("pr", prNumber, "cc-ui-design");
3589
- await addLabel("pr", prNumber, "cc-triage-scope");
3602
+ if (yolo) {
3603
+ await addLabel("pr", prNumber, "cc-triage-scope");
3604
+ } else {
3605
+ console.log(
3606
+ `[create-ui-design] #${issueNumber}: uiDesign.yolo is false, leaving design PR #${prNumber} for human review (no cc-triage-scope)`
3607
+ );
3608
+ }
3590
3609
  await addLabel("issue", issueNumber, "cc-ui-design-pr-created");
3591
3610
  } catch (err) {
3592
3611
  console.error(`[create-ui-design] #${issueNumber}: labeling design PR #${prNumber} failed: ${err}`);
3593
3612
  await addLabel("issue", issueNumber, "cc-need-human-check");
3594
- await commentOnIssue(issueNumber, designPrLabelingFailedComment(issueNumber, prNumber, err)).catch(
3613
+ await commentOnIssue(issueNumber, designPrLabelingFailedComment(issueNumber, prNumber, err, yolo)).catch(
3595
3614
  (commentErr) => console.error(`[create-ui-design] commentOnIssue failed for #${issueNumber}: ${commentErr}`)
3596
3615
  );
3597
3616
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-task-worker",
3
- "version": "0.47.0",
3
+ "version": "0.48.0",
4
4
  "description": "CLI tool that polls GitHub Issues/PRs and delegates work to Claude CLI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",