claude-task-worker 0.131.0 → 0.133.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
@@ -60,8 +60,7 @@ CLI が GitHub ラベルを検知してタスクを起動し、プラグイン
60
60
  | [Claude Code (`claude`)](https://docs.anthropic.com/en/docs/claude-code) | タスク実行エンジン |
61
61
  | [Git](https://git-scm.com/) / [jq](https://jqlang.org/) | worktree 操作 / スキル内での JSON 加工 |
62
62
  | [CodeGraph](https://www.npmjs.com/package/@colbymchenry/codegraph) | コード探索用インデックス(任意。未導入ならテキスト検索に落ちる) |
63
- | [Pen CLI](https://docs.pen.dev/for-developers/pen-cli) | `.pen` の編集・参照。UIデザイン先行ワークフロー使用時のみ(要ログイン) |
64
- | [Playwright](https://playwright.dev/) のブラウザ | Playwright MCP でのブラウザ確認 |
63
+ | [Playwright](https://playwright.dev/) のブラウザ | Playwright MCP でのブラウザ確認、`.pen` のスナップショット描画 |
65
64
  | [DESIGN.md CLI](https://github.com/google-labs-code/design.md) | `DESIGN.md` の lint。`update-design-md` 使用時のみ(未導入でも動く) |
66
65
  | [herdr](https://herdr.dev) | `--project` / `mode: "herdr"` 使用時のみ(`--cloud` は herdr に依存しない) |
67
66
  | [GitHub MCP](https://github.com/github/github-mcp-server) | GitHub アクセスの高速化・クラウド実行時のプロキシ制限回避(任意。Claude 側のコネクタで有効化) |
@@ -194,7 +193,6 @@ claude-task-worker all --cloud
194
193
  | 対象リポジトリの GitHub App 連携 | クラウド VM から push / PR 作成を行うため |
195
194
  | claude.ai の「プルリクエストを自動的に作成する」「プルリクエストの自動修正」が **OFF** | 下記 |
196
195
  | VM 側のセットアップスクリプト | 下記 |
197
- | `PEN_CLI_KEY` 環境変数 | UIデザイン先行ワークフローを使う場合のみ(下記「Pen CLI のログイン」) |
198
196
 
199
197
  claude.ai の設定にある **「プルリクエストを自動的に作成する」「プルリクエストの自動修正」は必ず OFF にする**。どちらもタスクワーカーの制御と競合する。前者はスキルの `create-pr`(`Closes #<N>`・ベースブランチ・ラベル付与)とは別に PR を作るため PR が重複し、後者はセッションが PR 作成後に終了せずレビューを待って修正を続けるため、`cc-cloud-done` による完了検知が 4 時間のタイムアウトまで効かない。
200
198
 
@@ -250,16 +248,16 @@ claude-task-worker init --inherit-config ~/ctw/shared.json # 指定パスへ
250
248
 
251
249
  設定・カスタムワーカー・スキルを1つのリポジトリにまとめて配る手順は [`docs/config-package.md`](./docs/config-package.md) を参照。
252
250
 
253
- ### Pen CLI のログイン
251
+ ### `.pen` の扱い
254
252
 
255
- `.pen` を扱うスキルは Pen CLI の認証を必要とする。UIデザイン先行ワークフローを使うなら一度ログインしておく。
253
+ `.pen`(pen.dev のデザインファイル)は平文JSONなので、スキルは pen.dev CLI を使わずに直接編集する(pen.dev CLI の `interactive` は無料プランでは利用日数に上限があるため)。整合性の検査・ID採番・画像出力はプラグイン同梱の `plugin/scripts/pen.mjs` が担う。
256
254
 
257
255
  ```bash
258
- pencil login # メールアドレス + パスワード、またはメールアドレス + OTP コード
259
- pencil status # 認証状態の確認
256
+ node plugin/scripts/pen.mjs validate design.pen # ID重複・参照切れ・未知プロパティなどの検査
257
+ node plugin/scripts/pen.mjs render design.pen --out out/ # Chromium で描画して PNG 出力
260
258
  ```
261
259
 
262
- CI やクラウド VM など対話ログインできない環境では、環境変数 `PEN_CLI_KEY`(pen.dev の組織設定 > Developer Keys で発行)を使う。保存済みトークンより優先される。
260
+ 画像は pen.dev 本体ではなく HTML/CSS へ変換して描画した近似で、描画しきれない表現(取得できなかったフォント・アイコン、shader など)は警告として出る。フォントは Google Fonts、アイコンは unpkg から取得する。
263
261
 
264
262
  ## 設定ファイル
265
263
 
@@ -2585,6 +2585,7 @@ function createIssuePollingWorker(config) {
2585
2585
  baseBranch = `cc-epic-${parentNumber}`;
2586
2586
  await ensureEpicBranch(baseBranch, defaultBranch);
2587
2587
  }
2588
+ const onBranch = cloud && config.cloudOnBranch ? await config.cloudOnBranch(issue, baseBranch) : void 0;
2588
2589
  const execution = buildClaudeExecution({
2589
2590
  mode,
2590
2591
  prompt: `${command} ${issue.number}`,
@@ -2593,12 +2594,16 @@ function createIssuePollingWorker(config) {
2593
2594
  // config.json の advisor が false なら advisorModel の指定に関わらず渡さない。
2594
2595
  advisorModel: isAdvisorEnabled() ? advisorModel : "",
2595
2596
  permissionMode: getPermissionMode(),
2596
- ...cloud ? { cloud: true, baseRef: baseBranch, remoteEnvId: getRemoteEnvId() ?? "" } : {}
2597
+ ...cloud ? {
2598
+ cloud: true,
2599
+ ...onBranch ? { onBranch } : { baseRef: baseBranch },
2600
+ remoteEnvId: getRemoteEnvId() ?? ""
2601
+ } : {}
2597
2602
  });
2598
2603
  let cwd;
2599
2604
  if (cloud) {
2600
2605
  console.log(
2601
- `[${config.name}] #${issue.number}: cloud execution, running without worktree on ${baseBranch}`
2606
+ `[${config.name}] #${issue.number}: cloud execution, running without worktree on ${onBranch ?? baseBranch}`
2602
2607
  );
2603
2608
  } else {
2604
2609
  await createWorktreeFromBranch(worktreeId, baseBranch);
package/dist/index.js CHANGED
@@ -26,6 +26,7 @@ import {
26
26
  defineWorker,
27
27
  deleteRemoteBranch,
28
28
  disabledWorkerMessage,
29
+ ensureEpicBranch,
29
30
  ensureRenderInterval,
30
31
  findOpenPrNumberByHeadRef,
31
32
  findPrNumberByHeadRef,
@@ -60,7 +61,7 @@ import {
60
61
  shutdown,
61
62
  waitForAllProcesses,
62
63
  writeLastRun
63
- } from "./chunk-UJJEOXZR.js";
64
+ } from "./chunk-QN2PCVKX.js";
64
65
  import {
65
66
  UserConfigError,
66
67
  assertCloudCompatibleCommand,
@@ -472,6 +473,13 @@ var createUiDesignWorker = defineWorker({
472
473
  command: "/claude-task-worker:create-ui-design",
473
474
  triggerLabels: ["cc-create-ui-design"],
474
475
  excludeLabels: ["cc-ui-design-pr-created", "cc-ui-design-ready", "cc-exec-issue", "cc-pr-created"],
476
+ // セッションの作業ブランチをスキルの固定ブランチに揃え、デザインPRの作り直しを不要にする。
477
+ // 既にある場合(デザインのやり直し)は作り直さず、スキルのフェーズ4と同じく既存先端から始める。
478
+ cloudOnBranch: async (issue, baseBranch) => {
479
+ const branch = designBranchName(issue.number);
480
+ await ensureEpicBranch(branch, baseBranch);
481
+ return branch;
482
+ },
475
483
  onCompleted: async (issueNumber, _worktreeId, _output, ctx) => {
476
484
  if (await hasLabel("issue", issueNumber, "cc-need-human-check")) {
477
485
  console.log(`[create-ui-design] #${issueNumber}: cc-need-human-check present, skip cc-ui-design-pr-created`);
@@ -1082,44 +1090,8 @@ async function installDesignMdCli(logPrefix) {
1082
1090
  }
1083
1091
  }
1084
1092
 
1085
- // src/commands/pen.ts
1086
- async function loadRunCommand3() {
1087
- return await import("./run-command-O2TMRPZK.js");
1088
- }
1089
- var PEN_PACKAGE = "@pen.dev/cli";
1090
- var LEGACY_PEN_PACKAGE = "@pencil.dev/cli";
1091
- async function installPenCli(logPrefix) {
1092
- console.log(`[${logPrefix}] Removing legacy Pen CLI (npm uninstall -g ${LEGACY_PEN_PACKAGE})...`);
1093
- const { runCommand: runCommand2, npmInstallGlobalLatest: npmInstallGlobalLatest2 } = await loadRunCommand3();
1094
- try {
1095
- await runCommand2("npm", ["uninstall", "-g", LEGACY_PEN_PACKAGE]);
1096
- } catch (err) {
1097
- console.error(`[${logPrefix}] Skipped removing legacy Pen CLI: ${err.message}`);
1098
- }
1099
- console.log(`[${logPrefix}] Installing Pen CLI (npm install -g ${PEN_PACKAGE}@latest)...`);
1100
- try {
1101
- await npmInstallGlobalLatest2(PEN_PACKAGE);
1102
- console.log(`[${logPrefix}] Pen CLI installed.`);
1103
- } catch (err) {
1104
- console.error(`[${logPrefix}] Failed to install Pen CLI: ${err.message}`);
1105
- return false;
1106
- }
1107
- await warnIfPenLoggedOut(logPrefix);
1108
- return true;
1109
- }
1110
- async function warnIfPenLoggedOut(logPrefix) {
1111
- const { runCommand: runCommand2 } = await loadRunCommand3();
1112
- try {
1113
- await runCommand2("pencil", ["status"]);
1114
- } catch {
1115
- console.log(
1116
- `[${logPrefix}] Pen CLI is not authenticated. Run \`pencil login\` (or set PEN_CLI_KEY) before using .pen designs.`
1117
- );
1118
- }
1119
- }
1120
-
1121
1093
  // src/commands/playwright.ts
1122
- async function loadRunCommand4() {
1094
+ async function loadRunCommand3() {
1123
1095
  return await import("./run-command-O2TMRPZK.js");
1124
1096
  }
1125
1097
  var PLAYWRIGHT_CORE_PACKAGE = "playwright-core";
@@ -1130,7 +1102,7 @@ function buildInstallDepsCommand(uid) {
1130
1102
  return uid === 0 ? { command: "npx", args: npxArgs } : { command: "sudo", args: ["npx", ...npxArgs] };
1131
1103
  }
1132
1104
  async function installPlaywrightBrowsers(logPrefix) {
1133
- const { runCommand: runCommand2 } = await loadRunCommand4();
1105
+ const { runCommand: runCommand2 } = await loadRunCommand3();
1134
1106
  console.log(`[${logPrefix}] Installing Playwright browsers (npx ${INSTALL_BROWSER_ARGS.join(" ")})...`);
1135
1107
  try {
1136
1108
  await runCommand2("npx", INSTALL_BROWSER_ARGS);
@@ -1159,7 +1131,7 @@ async function installPlaywrightBrowsers(logPrefix) {
1159
1131
  var PLUGIN_NAME = "claude-task-worker";
1160
1132
  var MARKETPLACE_NAME = "claude-task-worker";
1161
1133
  var MARKETPLACE_SOURCE = "getty104/claude-task-worker";
1162
- var GLOBAL_NPM_PACKAGES = [PLUGIN_NAME, CODEGRAPH_PACKAGE, DESIGN_MD_PACKAGE, PEN_PACKAGE];
1134
+ var GLOBAL_NPM_PACKAGES = [PLUGIN_NAME, CODEGRAPH_PACKAGE, DESIGN_MD_PACKAGE];
1163
1135
  async function printGlobalPackageVersions(logPrefix) {
1164
1136
  console.log(`[${logPrefix}] Installed versions:`);
1165
1137
  try {
@@ -1208,10 +1180,9 @@ async function install() {
1208
1180
  const cliOk = await installCli();
1209
1181
  const codegraphOk = await installCodegraphCli("install");
1210
1182
  const designMdOk = await installDesignMdCli("install");
1211
- const penOk = await installPenCli("install");
1212
1183
  const playwrightOk = await installPlaywrightBrowsers("install");
1213
1184
  await printGlobalPackageVersions("install");
1214
- if (!pluginOk || !cliOk || !codegraphOk || !designMdOk || !penOk || !playwrightOk) {
1185
+ if (!pluginOk || !cliOk || !codegraphOk || !designMdOk || !playwrightOk) {
1215
1186
  process.exitCode = 1;
1216
1187
  }
1217
1188
  console.log("[install] Done.");
@@ -1349,10 +1320,9 @@ async function update() {
1349
1320
  const cliOk = await updateCli();
1350
1321
  const codegraphOk = await upgradeCodegraphCli("update");
1351
1322
  const designMdOk = await installDesignMdCli("update");
1352
- const penOk = await installPenCli("update");
1353
1323
  const playwrightOk = await installPlaywrightBrowsers("update");
1354
1324
  await printGlobalPackageVersions("update");
1355
- if (!marketplaceOk || !pluginOk || !cliOk || !codegraphOk || !designMdOk || !penOk || !playwrightOk) {
1325
+ if (!marketplaceOk || !pluginOk || !cliOk || !codegraphOk || !designMdOk || !playwrightOk) {
1356
1326
  process.exitCode = 1;
1357
1327
  }
1358
1328
  console.log("[update] Done.");
package/dist/lib.js CHANGED
@@ -55,7 +55,7 @@ import {
55
55
  removeWorktreeByBranch,
56
56
  run,
57
57
  syncDefaultBranch
58
- } from "./chunk-UJJEOXZR.js";
58
+ } from "./chunk-QN2PCVKX.js";
59
59
  import {
60
60
  getPermissionMode,
61
61
  getRunMode,
@@ -14,5 +14,6 @@ export interface IssueWorkerConfig {
14
14
  baseBranch: string;
15
15
  startedAt: number;
16
16
  }) => Promise<boolean | void>;
17
+ cloudOnBranch?: (issue: Issue, baseBranch: string) => Promise<string>;
17
18
  }
18
19
  export declare function createIssuePollingWorker(config: IssueWorkerConfig): WorkerDefinition;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-task-worker",
3
- "version": "0.131.0",
3
+ "version": "0.133.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",
@@ -1,15 +0,0 @@
1
- export declare const PEN_PACKAGE = "@pen.dev/cli";
2
- export declare const LEGACY_PEN_PACKAGE = "@pencil.dev/cli";
3
- /**
4
- * Pen CLI(`@pen.dev/cli`)をグローバルインストール/更新する。
5
- *
6
- * DESIGN.md CLI と同じく self-upgrade 機構を持たないため、install も update も
7
- * `npm install -g <pkg>@latest` の同じ手段になる(冪等なので install/update で分岐しない)。
8
- *
9
- * 新パッケージの前に旧 `@pencil.dev/cli` を必ずアンインストールする。両者は同じ bin 名
10
- * `pencil` を提供するため同居させると解決先が不定になり、旧 0.2.x を掴んだ環境では
11
- * ツール構成が違う(`batch_design` 等の廃止済みツール)ため `edit-pencil-design` /
12
- * `inspect-pencil-node` / `resolve-pencil-conflict` の各スキルが動かない。削除 → 導入の順に
13
- * することで `pencil` が確実に新パッケージへリンクされる。
14
- */
15
- export declare function installPenCli(logPrefix: string): Promise<boolean>;