claude-task-worker 0.115.0 → 0.117.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.
Files changed (64) hide show
  1. package/README.md +53 -7
  2. package/dist/chunk-3RY43CYR.js +41 -0
  3. package/dist/chunk-FAD5CNP4.js +3396 -0
  4. package/dist/chunk-N42YU3GJ.js +184 -0
  5. package/dist/claude-args.d.ts +62 -0
  6. package/dist/commands/cloud-setup.d.ts +14 -0
  7. package/dist/commands/codegraph.d.ts +39 -0
  8. package/dist/commands/design-md.d.ts +11 -0
  9. package/dist/commands/init.d.ts +17 -0
  10. package/dist/commands/install.d.ts +14 -0
  11. package/dist/commands/pen.d.ts +15 -0
  12. package/dist/commands/playwright.d.ts +27 -0
  13. package/dist/commands/run-command.d.ts +10 -0
  14. package/dist/commands/update.d.ts +1 -0
  15. package/dist/commands/version.d.ts +4 -0
  16. package/dist/config.d.ts +77 -0
  17. package/dist/custom-workers.d.ts +16 -0
  18. package/dist/dispatch-args.d.ts +13 -0
  19. package/dist/dispatcher-JKUMXTJ2.js +410 -0
  20. package/dist/dispatcher.d.ts +77 -0
  21. package/dist/gh.d.ts +112 -0
  22. package/dist/git.d.ts +7 -0
  23. package/dist/herdr-NDLUM6JF.js +309 -0
  24. package/dist/herdr-runner-33D6C2KI.js +307 -0
  25. package/dist/herdr-runner.d.ts +136 -0
  26. package/dist/herdr.d.ts +85 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.js +855 -4984
  29. package/dist/last-run-pr.d.ts +16 -0
  30. package/dist/lib.d.ts +20 -0
  31. package/dist/lib.js +123 -0
  32. package/dist/process-manager.d.ts +38 -0
  33. package/dist/random-name.d.ts +2 -0
  34. package/dist/run-command-O2TMRPZK.js +8 -0
  35. package/dist/runcat.d.ts +23 -0
  36. package/dist/slack.d.ts +46 -0
  37. package/dist/table-DWVMNDS3.js +32 -0
  38. package/dist/table.d.ts +55 -0
  39. package/dist/task-result.d.ts +25 -0
  40. package/dist/transcript.d.ts +27 -0
  41. package/dist/user-config.d.ts +30 -0
  42. package/dist/workers/answer-issue-questions.d.ts +1 -0
  43. package/dist/workers/apply-ui-design.d.ts +1 -0
  44. package/dist/workers/check-dependabot.d.ts +1 -0
  45. package/dist/workers/create-issue.d.ts +1 -0
  46. package/dist/workers/create-ui-design.d.ts +2 -0
  47. package/dist/workers/epic-issue.d.ts +2 -0
  48. package/dist/workers/exec-issue.d.ts +15 -0
  49. package/dist/workers/fix-review-point.d.ts +1 -0
  50. package/dist/workers/issue-worker.d.ts +18 -0
  51. package/dist/workers/pr-worker.d.ts +18 -0
  52. package/dist/workers/registry.d.ts +8 -0
  53. package/dist/workers/resolve-conflict.d.ts +2 -0
  54. package/dist/workers/scheduled-worker.d.ts +8 -0
  55. package/dist/workers/triage-created-issue.d.ts +1 -0
  56. package/dist/workers/triage-pr.d.ts +5 -0
  57. package/dist/workers/ui-design.d.ts +14 -0
  58. package/dist/workers/update-coding-guidelines.d.ts +1 -0
  59. package/dist/workers/update-design-md.d.ts +1 -0
  60. package/dist/workers/update-issue.d.ts +1 -0
  61. package/dist/workers/update-requirement-rules.d.ts +1 -0
  62. package/dist/workers/worker-definition.d.ts +18 -0
  63. package/dist/worktree.d.ts +21 -0
  64. package/package.json +14 -3
package/README.md CHANGED
@@ -99,8 +99,11 @@ claude-task-worker update
99
99
  ```bash
100
100
  claude-task-worker init # 既存ファイルは保護
101
101
  claude-task-worker init --force # 強制上書き
102
+ claude-task-worker apply-labels # ラベルだけを作成(冪等)
102
103
  ```
103
104
 
105
+ `claude-task-worker.json` のトップレベル `labels`(文字列配列)にカスタムワーカー用のラベル名を書くと、`init` / `apply-labels` がプリセットのラベルに加えて作成する。色は名前から一意に決まり、プリセットと同名ならプリセットの色を使う。
106
+
104
107
  作成されるラベル:
105
108
 
106
109
  | ラベル | 用途 |
@@ -131,8 +134,10 @@ claude-task-worker <command> [--epic <issue-number>]... [--label <label>]... [--
131
134
  | `all` | 通常ワーカー9つ + 定期ワーカー3つ(`triage-created-issue` / `triage-pr` / `check-dependabot` を除く) |
132
135
  | `yolo` | 全ワーカーを同時にポーリング |
133
136
  | `init` | ラベル・テンプレート・設定ファイルの作成と CodeGraph セットアップ |
137
+ | `apply-labels` | プリセットと `labels` 宣言のラベルだけを作成 |
134
138
  | `install` / `update` | 上記「セットアップ」を参照 |
135
139
  | `cloud-setup [--force]` | クラウド VM 側の準備(下記「`--cloud`」を参照) |
140
+ | `list-workers` | プリセットとカスタムの全ワーカーを名前・種別・有効/無効・ロード元で表示(`workerFiles` のロード失敗時は exit 1) |
136
141
  | `usage` | Claude API 使用状況(5時間/7日間の利用率とリセット時刻)を表示し、Slack にも通知 |
137
142
  | `version` | CLI のバージョンを表示(`--version` / `-v` も可) |
138
143
 
@@ -165,7 +170,7 @@ claude-task-worker exec-issue --project app-a --epic 100
165
170
 
166
171
  プロジェクト名・グループ名は `config.json` で定義する(下記「設定ファイル」)。`all` は全プロジェクトを指す予約語。
167
172
 
168
- `--project` と併用できないコマンド: `init` / `install` / `update` / `usage` / `version`
173
+ `--project` と併用できないコマンド: `init` / `apply-labels` / `install` / `update` / `cloud-setup` / `usage` / `version` / `list-workers`
169
174
 
170
175
  ### `--cloud`
171
176
 
@@ -205,7 +210,7 @@ npx claude-task-worker cloud-setup
205
210
  - クラウド実行のタスクは worktree を作らない(VM が自前でリポジトリを持つため)
206
211
  - 完了は `cc-cloud-done` ラベルで検知する。4時間で応答がなければ打ち切り、`cc-need-human-check` を付けて失敗通知する
207
212
  - `--project` と併用した場合、`--cloud` は各プロジェクトへそのまま転送される
208
- - `--cloud` と併用できないコマンド: `init` / `install` / `update` / `usage` / `version`
213
+ - `--cloud` と併用できないコマンド: `init` / `apply-labels` / `install` / `update` / `cloud-setup` / `usage` / `version` / `list-workers`
209
214
  - `--cloud` は `mode`(`default` / `herdr`)に依存しない。クラウドセッションの作成は `script` コマンドの疑似 pty で完結し、herdr のペインを使わないため、どちらの `mode` でも同じ経路を通る
210
215
 
211
216
  詳細は [`docs/prd-cloud-worker-execution.md`](./docs/prd-cloud-worker-execution.md) を参照。
@@ -223,6 +228,22 @@ claude-task-worker exec-issue --cloud --debug
223
228
 
224
229
  投稿の担当は実行形態で違う。ローカルはワーカーが報告そのもの(`claude -p` の stdout / transcript)を持っているのでワーカーが投稿し、クラウドはワーカーに報告が届かないのでセッション自身に投稿させる(ワーカーはそれを回収して Slack へ載せる)。定期ワーカー(`update-*`)の投稿先は実行記録PR(`ctw-last-run-<ワーカー名>`)。クラウド実行の完了検知(`cc-cloud-done`)はフラグの有無に関わらず従来どおり動く。
225
230
 
231
+ ### `--inherit-config <path>`
232
+
233
+ 指定した設定ファイルを土台として読み、その上に起動ディレクトリ(cwd)直下の `claude-task-worker.json` → `claude-task-worker.local.json` を重ねる(後が勝つ。マージ規則は下記「ローカル上書き」と同じ)。複数リポジトリで共通の設定を1ファイルにまとめ、リポジトリごとの差分だけを各リポジトリに置く用途。
234
+
235
+ ```bash
236
+ claude-task-worker all --inherit-config ~/ctw/shared.json
237
+ claude-task-worker init --inherit-config ~/ctw/shared.json # 指定パスへ設定ファイルを生成する
238
+ ```
239
+
240
+ - 未指定時は従来どおり cwd 直下の `claude-task-worker.json` / `claude-task-worker.local.json` だけを読む
241
+ - 値自体の相対パスは起動時の cwd 基準。ファイル内の相対パス(`workerFiles` / `uiDesign.designDir`)は**そのファイルの所在ディレクトリ基準**で解決する
242
+ - `claude-task-worker.local.json` は常に cwd 直下のものを読む(指定ファイルと同じディレクトリのものは読まない)。cwd 直下の `claude-task-worker.json` は無くてもよい
243
+ - 指定ファイルが存在しなければエラー終了する(既定ファイルへは倒さない)。`--project` では絶対パスにして各プロジェクトへ転送する
244
+ - 定期ワーカーの `lastRun` は指定に関わらずリポジトリ直下の `claude-task-worker.json` で読み書きする。リポジトリ直下に同ファイルが無ければ `lastRun` だけを持つファイルが作られる(他のキーを持たないので土台の設定とは衝突しない)。`init` を `--inherit-config` 付きで実行した場合も、未記録のワーカーの `lastRun` はリポジトリ直下へ記録する(セットアップ直後に定期ワーカーが一斉に走らないようにするため)
245
+ - スキル(`create-ui-design` / `update-design-md` / `triage-created-issue`)はリポジトリ直下の `claude-task-worker.json` を直接読むため、**`uiDesign` の設定は `--inherit-config` のファイルに書いてもスキルには届かない**。`uiDesign` はリポジトリ直下に書くこと
246
+
226
247
  ### Pen CLI のログイン
227
248
 
228
249
  `.pen` を扱うスキルは Pen CLI の認証を必要とする。UIデザイン先行ワークフローを使うなら一度ログインしておく。
@@ -273,6 +294,8 @@ CI やクラウド VM など対話ログインできない環境では、環境
273
294
  |---|---|---|---|
274
295
  | `fixReviewPointCallbackCommentMessage` | string | - | `fix-review-point` 完了時に PR へ投稿するコメント(未設定なら投稿しない) |
275
296
  | `remoteEnvId` | string \| null | `null` | クラウド実行(`--cloud`)時に `--environment` へ渡すクラウド環境ID。`null` なら渡さず claude 側の既定解決に任せる(下記) |
297
+ | `labels` | string[] | `[]` | カスタムワーカー用の GitHub ラベル名。`init` / `apply-labels` が作成する(ローカル上書きでは配列ごと置き換え) |
298
+ | `workerFiles` | string[] | `[]` | カスタムワーカーを定義した TS ファイルのパス(下記「カスタムワーカー」。ローカル上書きでは配列ごと置き換え) |
276
299
  | `uiDesign` | object | `{ "enabled": false, "designDir": "designs", "yolo": false }` | UIデザイン先行ワークフロー(下記) |
277
300
  | `workers` | object | `{}` | ワーカーごとの上書き設定(下記) |
278
301
  | `lastRun` | object | `{}` | 定期ワーカーの最終実行時刻。ワーカーが自動更新するため手で編集しない |
@@ -300,21 +323,23 @@ CI やクラウド VM など対話ログインできない環境では、環境
300
323
  | `skill` | Claude CLI の `-p` に渡すスラッシュコマンド(`"<skill> <番号>"` の形で起動) |
301
324
  | `model` | `--model` の値(`sonnet` / `opus` / `haiku`) |
302
325
  | `advisorModel` | `--advisor` の値。空文字なら advisor なし。`config.json` の `advisor: true` のときだけ参照される |
303
- | `effort` | `--effort` の値(`high` / `medium` / `low`) |
326
+ | `effort` | `--effort` の値(`low` / `medium` / `high` / `xhigh` / `max`)。opus ワーカーの既定は `medium`(Opus 5.5 の既定。`medium` で Opus 5 の `high` 相当)。sonnet ワーカーは手順が確定したものが `medium`、コード変更の判断を伴うもの(`resolve-conflict` / `check-dependabot`)が `high`(Sonnet 5.5 ガイドの推奨) |
304
327
  | `pollingIntervalSeconds` | ポーリング間隔(秒) |
305
328
  | `cooldownSeconds` | タスク完了後にポーリングを止める時間(秒)。既定 `0` |
306
329
  | `maxConcurrentTasks` | 同時実行できるタスクの最大数。既定 `1` |
330
+ | `enabled` | `false` で無効化する。`all` / `yolo` では起動せず除外したワーカー名を1行ログに出し、個別起動(`claude-task-worker <name>`)ではタスクを起動せず exit 1。既定 `true`(`claude-task-worker.local.json` でも上書きできる) |
307
331
 
308
332
  既定値:
309
333
 
310
334
  | ワーカー | `model` | `effort` | `pollingIntervalSeconds` |
311
335
  |---|---|---|---|
312
- | `exec-issue` / `fix-review-point` / `answer-issue-questions` / `create-issue` / `create-ui-design` / `triage-pr` | `opus` | `high` | 60 |
313
- | `update-issue` / `triage-created-issue` / `resolve-conflict` | `sonnet` | `high` | 60 |
336
+ | `exec-issue` / `fix-review-point` / `answer-issue-questions` / `create-issue` / `create-ui-design` / `triage-pr` | `opus` | `medium` | 60 |
337
+ | `update-issue` / `triage-created-issue` | `sonnet` | `medium` | 60 |
338
+ | `resolve-conflict` | `sonnet` | `high` | 60 |
314
339
  | `epic-issue` / `apply-ui-design` | `sonnet` | `medium` | 300 |
315
340
  | `check-dependabot` | `sonnet` | `high` | 3600 |
316
- | `update-coding-guidelines` / `update-requirement-rules` / `update-design-md` | `opus` | `high` | 3600 |
317
- | (未知のワーカー名) | `opus` | `high` | 60 |
341
+ | `update-coding-guidelines` / `update-requirement-rules` / `update-design-md` | `opus` | `medium` | 3600 |
342
+ | (未知のワーカー名) | `opus` | `medium` | 60 |
318
343
 
319
344
  `advisorModel` の既定は全ワーカー空文字(advisor なし)。
320
345
 
@@ -330,6 +355,27 @@ CI やクラウド VM など対話ログインできない環境では、環境
330
355
  }
331
356
  ```
332
357
 
358
+ ### カスタムワーカー
359
+
360
+ `workerFiles` に TS ファイルを列挙すると、起動時にロードしてプリセットと同じ扱いで起動できる(個別コマンド・`all`・`yolo`。`enabled` などの `workers.<name>` 設定も効く)。`--project` 指定時は読み込まない。
361
+
362
+ - パスは絶対パス、`~` / `~/...`(home 展開)、または設定ファイルのあるディレクトリからの相対パス
363
+ - TS は型を除去して読み込む(Node 22.13 以上。tsconfig・ビルド不要)。ファイル内の相対 import は拡張子付き(`./helper.ts`)で書く
364
+ - `claude-task-worker/lib` は実行中の CLI 自身の `lib` に解決される
365
+ - 1ファイルから複数の定義を export でき、`defineWorker` / `createIssuePollingWorker` / `createPrPollingWorker` / `createScheduledWorker` の戻り値だけが対象(それ以外の export は無視)
366
+
367
+ ```ts
368
+ import { createIssuePollingWorker } from "claude-task-worker/lib";
369
+
370
+ export const myWorker = createIssuePollingWorker({
371
+ name: "my-worker",
372
+ command: "my-skill",
373
+ triggerLabels: ["cc-my-worker"],
374
+ });
375
+ ```
376
+
377
+ 起動時に全件を検証し、次のいずれかがあればタスクを1件も起動せず exit 1 する(メッセージにファイルパスと直し方を含む): ファイルが存在しない/読み込み・トランスパイルに失敗/定義が1つも export されていない/`name` がプリセットと衝突/`name` がカスタム同士で衝突。`claude-task-worker list-workers` でロード結果を確認できる。
378
+
333
379
  ## ワークフロー
334
380
 
335
381
  ### Epic(親Issue)連携
@@ -0,0 +1,41 @@
1
+ // src/commands/run-command.ts
2
+ import { spawn } from "node:child_process";
3
+ function npmInstallGlobalLatest(pkg) {
4
+ return runCommand("npm", ["install", "-g", `${pkg}@latest`, "--prefer-online"]);
5
+ }
6
+ function runCommand(command, args) {
7
+ return new Promise((resolve, reject) => {
8
+ const child = spawn(command, args, {
9
+ stdio: "inherit",
10
+ shell: process.platform === "win32"
11
+ });
12
+ const forwardSignal = (signal) => {
13
+ child.kill(signal);
14
+ };
15
+ const onSigint = () => forwardSignal("SIGINT");
16
+ const onSigterm = () => forwardSignal("SIGTERM");
17
+ const cleanup = () => {
18
+ process.removeListener("SIGINT", onSigint);
19
+ process.removeListener("SIGTERM", onSigterm);
20
+ };
21
+ process.once("SIGINT", onSigint);
22
+ process.once("SIGTERM", onSigterm);
23
+ child.on("error", (err) => {
24
+ cleanup();
25
+ reject(err);
26
+ });
27
+ child.on("close", (code) => {
28
+ cleanup();
29
+ if (code === 0) {
30
+ resolve();
31
+ } else {
32
+ reject(new Error(`${command} ${args.join(" ")} exited with code ${code}`));
33
+ }
34
+ });
35
+ });
36
+ }
37
+
38
+ export {
39
+ npmInstallGlobalLatest,
40
+ runCommand
41
+ };