claude-task-worker 0.21.0 → 0.22.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 (2) hide show
  1. package/dist/index.js +30 -21
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -595,12 +595,12 @@ async function getIssueState(issueNumber) {
595
595
  const parsed = JSON.parse(output);
596
596
  return parsed.state;
597
597
  }
598
- async function findPrNumberClosingIssue(issueNumber) {
598
+ async function findPrNumberClosingIssue(issueNumber, expectedHeadRefName) {
599
599
  const { owner, name } = await getRepoInfo();
600
600
  const query = `query($owner: String!, $name: String!, $number: Int!) {
601
601
  repository(owner: $owner, name: $name) {
602
602
  issue(number: $number) {
603
- closedByPullRequestsReferences(first: 10, includeClosedPrs: true) { nodes { number state } }
603
+ closedByPullRequestsReferences(first: 10, includeClosedPrs: true) { nodes { number state headRefName } }
604
604
  }
605
605
  }
606
606
  }`;
@@ -618,7 +618,9 @@ async function findPrNumberClosingIssue(issueNumber) {
618
618
  ]);
619
619
  const parsed = JSON.parse(output);
620
620
  const nodes = parsed?.data?.repository?.issue?.closedByPullRequestsReferences?.nodes ?? [];
621
- const validPr = nodes.find((node) => node.state === "MERGED" || node.state === "OPEN");
621
+ const validPr = nodes.find(
622
+ (node) => (node.state === "MERGED" || node.state === "OPEN") && node.headRefName === expectedHeadRefName
623
+ );
622
624
  return validPr ? validPr.number : null;
623
625
  }
624
626
  async function getIssueSubIssuesSummary(issueNumber) {
@@ -745,14 +747,10 @@ async function createLabel(name, color, force) {
745
747
 
746
748
  // src/claude-args.ts
747
749
  var DISALLOWED_TOOLS = [
748
- // 遅延 / yield: 後続ウェイクアップ前提。print モードには再起動ループが無いため、
750
+ // 遅延 / yield: 後続ウェイクアップ前提。print モードではウェイクアップが発火せず、
749
751
  // 呼ぶと処理未完のままプロセスが終了する。
750
752
  "Monitor",
751
753
  "ScheduleWakeup",
752
- // SendMessage は過去に起動したサブエージェントをバックグラウンドでしか再開できず、
753
- // 「完了通知を待ちます」でターンを終える誘因になる。未完のサブエージェントへの追加指示は
754
- // フォアグラウンドの新規 Agent 起動で代替させる。
755
- "SendMessage",
756
754
  // 対話 / 承認: 自律実行セッションには回答・承認するユーザーが存在しない。
757
755
  "AskUserQuestion",
758
756
  "EnterPlanMode",
@@ -768,15 +766,17 @@ var DISALLOWED_TOOLS = [
768
766
  "EnterWorktree"
769
767
  ];
770
768
  var DISALLOWED_TOOLS_ARG = DISALLOWED_TOOLS.join(",");
771
- var SUBAGENT_SYSTEM_PROMPT = `\u3042\u306A\u305F\u306F claude-task-worker \u306E\u30EF\u30FC\u30AB\u30FC\u304C \`claude -p\`\uFF08\u975E\u5BFE\u8A71 print \u30E2\u30FC\u30C9\uFF09\u3067\u81EA\u52D5\u8D77\u52D5\u3057\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u5185\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3067\u3059\u3002print \u30E2\u30FC\u30C9\u306B\u306F\u518D\u8D77\u52D5\u30EB\u30FC\u30D7\u304C\u7121\u304F\u3001\u89AA\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u30BF\u30FC\u30F3\u3092\u7D42\u3048\u305F\u6642\u70B9\u3067\u30D7\u30ED\u30BB\u30B9\u304C\u6B63\u5E38\u7D42\u4E86\u3057\u307E\u3059\u3002\u3042\u306A\u305F\u304C\u51E6\u7406\u3092\u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u5316\u3057\u3066\u672A\u5B8C\u306E\u307E\u307E\u5236\u5FA1\u3092\u8FD4\u3059\u3068\u3001\u5916\u5074\u306E\u30EF\u30FC\u30AB\u30FC\u304C\u300C\u6B63\u5E38\u5B8C\u4E86\u300D\u3068\u8AA4\u8A8D\u3057\u3066 GitHub Issue/PR \u306E\u30E9\u30D9\u30EB\u72B6\u614B\u304C\u58CA\u308C\u307E\u3059\u3002\u4EE5\u4E0B\u306E\u30EB\u30FC\u30EB\u3092\u5FC5\u305A\u9075\u5B88\u3057\u3066\u304F\u3060\u3055\u3044\u3002
769
+ var CLAUDE_SPAWN_ENV = {
770
+ CLAUDE_CODE_DISABLE_BACKGROUND_TASKS: "1",
771
+ CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS: "0"
772
+ };
773
+ var SYSTEM_PROMPT = `\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306F \`claude-task-worker\` \u306E\u30EF\u30FC\u30AB\u30FC\u304B\u3089 \`claude -p\`\uFF08\u975E\u5BFE\u8A71 print \u30E2\u30FC\u30C9\uFF09\u3067\u81EA\u52D5\u8D77\u52D5\u3055\u308C\u3066\u3044\u308B\u3002\u30E6\u30FC\u30B6\u30FC\u3078\u306E\u78BA\u8A8D\u30FB\u8CEA\u554F\u306F\u884C\u308F\u305A\uFF08\u56DE\u7B54\u3059\u308B\u30E6\u30FC\u30B6\u30FC\u306F\u5B58\u5728\u3057\u306A\u3044\uFF09\u3001\u8D77\u52D5\u3055\u308C\u305F\u30B9\u30AD\u30EB\u306E\u30EB\u30FC\u30EB\u306B\u5F93\u3063\u3066\u81EA\u5F8B\u7684\u306B\u5224\u65AD\u3057\u3001\u5168\u30B9\u30C6\u30C3\u30D7\u3092\u5B8C\u9042\u3057\u3066\u304B\u3089\uFF08\u307E\u305F\u306F\u4E2D\u65AD\u6761\u4EF6\u306B\u8A72\u5F53\u3057\u305F\u5834\u5408\u306F\u7406\u7531\u3092\u51FA\u529B\u3057\u3066\uFF09\u7D42\u4E86\u3059\u308B\u3053\u3068\u3002\u66D6\u6627\u306A\u5834\u5408\u306F\u300C\u3088\u308A\u5B89\u5168\u306A\u5074\uFF08\u7834\u58CA\u7684\u3067\u306A\u3044\u5074\uFF09\u300D\u3092\u9078\u629E\u3057\u3001\u305D\u306E\u5224\u65AD\u3068\u6839\u62E0\u3092\u6700\u7D42\u5831\u544A\u306B\u660E\u8A18\u3059\u308B\u3002`;
774
+ var SUBAGENT_SYSTEM_PROMPT = `\u3042\u306A\u305F\u306F claude-task-worker \u306E\u30EF\u30FC\u30AB\u30FC\u304C \`claude -p\`\uFF08\u975E\u5BFE\u8A71 print \u30E2\u30FC\u30C9\uFF09\u3067\u81EA\u52D5\u8D77\u52D5\u3057\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u5185\u306E\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u3067\u3059\u3002\u4EE5\u4E0B\u306E\u81EA\u5F8B\u5B9F\u884C\u539F\u5247\u3092\u5FC5\u305A\u9075\u5B88\u3057\u3066\u304F\u3060\u3055\u3044\u3002
772
775
 
773
- - \`Bash\` \u3092 \`run_in_background: true\` \u3067\u547C\u3070\u306A\u3044\u3002\u30B3\u30DE\u30F3\u30C9\u672B\u5C3E\u306B \`&\` \u3092\u4ED8\u3051\u305A\u3001\`nohup\` / \`disown\` / \`setsid\` \u3067\u30D7\u30ED\u30BB\u30B9\u3092\u30C7\u30BF\u30C3\u30C1\u3057\u306A\u3044
774
- - \`Agent\` \u30C4\u30FC\u30EB\u306F\u65E2\u5B9A\u304C\u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u5B9F\u884C\u306E\u305F\u3081\u3001\u547C\u3073\u51FA\u3057\u3054\u3068\u306B\u5FC5\u305A \`run_in_background: false\` \u3092\u660E\u793A\u3057\u3001\u30D5\u30A9\u30A2\u30B0\u30E9\u30A6\u30F3\u30C9\u3067\u5B8C\u4E86\u3092\u5F85\u3063\u3066\u304B\u3089\u6B21\u3078\u9032\u3080
775
- - \`Skill\` \u30C4\u30FC\u30EB\u306B \`run_in_background: true\` \u3092\u6307\u5B9A\u3057\u306A\u3044
776
- - \`Monitor\` / \`ScheduleWakeup\` / \`SendMessage\` \u306A\u3069\u3067\u51E6\u7406\u3092\u5F8C\u56DE\u3057\u306B\u3057\u306A\u3044\u3002\u300C\u5B8C\u4E86\u901A\u77E5\u3092\u5F85\u3061\u307E\u3059\u300D\u306E\u3088\u3046\u306A\u901A\u77E5\u5F85\u3061\u72B6\u614B\u3067\u30BF\u30FC\u30F3\u3092\u7D42\u3048\u306A\u3044
777
- - E2E \u30C6\u30B9\u30C8\u306E\u3088\u3046\u306B\u6642\u9593\u306E\u304B\u304B\u308B\u51E6\u7406\u3082\u3001\u540C\u671F\u5B9F\u884C\u3067\u5B8C\u4E86\u3092\u5F85\u3064\u306E\u304C\u6B63\u3057\u3044\u6319\u52D5\u3067\u3042\u308A\u3001\u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u5316\u3057\u3066\u5F85\u305F\u305A\u306B\u9032\u3093\u3067\u306F\u306A\u3089\u306A\u3044
778
- - \u30D0\u30C3\u30AF\u30B0\u30E9\u30A6\u30F3\u30C9\u30BF\u30B9\u30AF\u304C\u6B8B\u3063\u305F\u72B6\u614B\u3067\u5B8C\u4E86\u5831\u544A\u3057\u3066\u30BF\u30FC\u30F3\u3092\u7D42\u3048\u306A\u3044\u3002\u672A\u5B8C\u306E\u51E6\u7406\u306F\u30D5\u30A9\u30A2\u30B0\u30E9\u30A6\u30F3\u30C9\u3067\u5B8C\u4E86\u307E\u3067\u5B9F\u884C\u3057\u5207\u3063\u3066\u304B\u3089\u5831\u544A\u3059\u308B
779
- - \u30E6\u30FC\u30B6\u30FC\u3078\u306E\u78BA\u8A8D\u30FB\u8CEA\u554F\u306F\u884C\u308F\u306A\u3044\uFF08\u56DE\u7B54\u3059\u308B\u30E6\u30FC\u30B6\u30FC\u306F\u5B58\u5728\u3057\u306A\u3044\uFF09\u3002\u66D6\u6627\u306A\u5834\u5408\u306F\u7834\u58CA\u7684\u3067\u306A\u3044\u5074\u3092\u9078\u3073\u3001\u305D\u306E\u5224\u65AD\u3068\u6839\u62E0\u3092\u6700\u7D42\u5831\u544A\u306B\u660E\u8A18\u3059\u308B`;
776
+ - \u30E6\u30FC\u30B6\u30FC\u3078\u306E\u78BA\u8A8D\u30FB\u8CEA\u554F\u306F\u884C\u308F\u306A\u3044\uFF08\u56DE\u7B54\u3059\u308B\u30E6\u30FC\u30B6\u30FC\u306F\u5B58\u5728\u3057\u306A\u3044\uFF09\u3002\u5224\u65AD\u306F\u3059\u3079\u3066\u59D4\u8B72\u3055\u308C\u305F\u6307\u793A\uFF08\u30D7\u30ED\u30F3\u30D7\u30C8\u3067\u660E\u793A\u7684\u306B\u6E21\u3055\u308C\u305F\u5185\u5BB9\uFF09\u306B\u5F93\u3063\u3066\u81EA\u52D5\u3067\u6C7A\u5B9A\u3059\u308B
777
+ - \u66D6\u6627\u306A\u5834\u5408\u306F\u300C\u3088\u308A\u5B89\u5168\u306A\u5074\uFF08\u7834\u58CA\u7684\u3067\u306A\u3044\u5074\uFF09\u300D\u3092\u9078\u629E\u3057\u3001\u305D\u306E\u5224\u65AD\u3068\u6839\u62E0\u3092\u6700\u7D42\u5831\u544A\u306B\u660E\u8A18\u3059\u308B
778
+ - \u59D4\u8B72\u3055\u308C\u305F\u30BF\u30B9\u30AF\u306F\u6700\u5F8C\u307E\u3067\u5B8C\u9042\u3057\u3066\u304B\u3089\u6700\u7D42\u5831\u544A\u3059\u308B\u3002\u6307\u793A\u306B\u5B9A\u7FA9\u3055\u308C\u305F\u4E2D\u65AD\u6761\u4EF6\u306B\u8A72\u5F53\u3057\u305F\u5834\u5408\u306E\u307F\u3001\u7406\u7531\u3092\u51FA\u529B\u3057\u3066\u7D42\u4E86\u3059\u308B
779
+ - \u5B50\u30B5\u30D6\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u4F5C\u696D\u3092\u59D4\u8B72\u3057\u305F\u5834\u5408\u3001\u305D\u306E\u5B8C\u4E86\u5831\u544A\u3092\u9D5C\u5451\u307F\u306B\u3057\u306A\u3044\u3002\`git diff\` \u7B49\u3067\u5B9F\u969B\u306E\u6210\u679C\u7269\u3092\u691C\u8A3C\u3057\u3066\u304B\u3089\u5B8C\u4E86\u6271\u3044\u306B\u3059\u308B`;
780
780
 
781
781
  // src/config.ts
782
782
  import { readFileSync } from "node:fs";
@@ -1162,7 +1162,7 @@ function ensureRenderInterval() {
1162
1162
  renderInterval = setInterval(renderTable, 1e3);
1163
1163
  renderInterval.unref();
1164
1164
  }
1165
- function run(command, args, id, title, workerName, path, onComplete, cwd) {
1165
+ function run(command, args, id, title, workerName, path, onComplete, cwd, env) {
1166
1166
  tasks.set(id, {
1167
1167
  id,
1168
1168
  title,
@@ -1176,7 +1176,8 @@ function run(command, args, id, title, workerName, path, onComplete, cwd) {
1176
1176
  const child = spawn(command, args, {
1177
1177
  stdio: ["ignore", "pipe", "pipe"],
1178
1178
  detached: true,
1179
- ...cwd ? { cwd } : {}
1179
+ ...cwd ? { cwd } : {},
1180
+ ...env ? { env: { ...process.env, ...env } } : {}
1180
1181
  });
1181
1182
  childProcesses.set(id, child);
1182
1183
  const outputChunks = [];
@@ -1870,8 +1871,11 @@ function createIssuePollingWorker(config) {
1870
1871
  "-p",
1871
1872
  `${command} ${issue.number}`,
1872
1873
  "--dangerously-skip-permissions",
1874
+ "--chrome",
1873
1875
  "--disallowedTools",
1874
1876
  DISALLOWED_TOOLS_ARG,
1877
+ "--append-system-prompt",
1878
+ SYSTEM_PROMPT,
1875
1879
  "--append-subagent-system-prompt",
1876
1880
  SUBAGENT_SYSTEM_PROMPT,
1877
1881
  "--model",
@@ -1933,7 +1937,8 @@ function createIssuePollingWorker(config) {
1933
1937
  );
1934
1938
  }
1935
1939
  },
1936
- cwd
1940
+ cwd,
1941
+ { ...CLAUDE_SPAWN_ENV }
1937
1942
  );
1938
1943
  } catch (err) {
1939
1944
  console.error(`[${config.name}] setup error for #${issue.number}: ${err}`);
@@ -1983,7 +1988,7 @@ var execIssueWorker = (opts = {}) => createIssuePollingWorker({
1983
1988
  console.log(`[exec-issue] #${issueNumber}: issue closed by skill (no-change path), skip cc-pr-created`);
1984
1989
  return;
1985
1990
  }
1986
- const prNumber = await findPrNumberByHeadRef(worktreeId, "all") ?? await findPrNumberClosingIssue(issueNumber);
1991
+ const prNumber = await findPrNumberByHeadRef(worktreeId, "all") ?? await findPrNumberClosingIssue(issueNumber, worktreeId);
1987
1992
  if (prNumber !== null) {
1988
1993
  await addLabel("issue", issueNumber, "cc-pr-created");
1989
1994
  return;
@@ -2048,8 +2053,11 @@ function createPrPollingWorker(config) {
2048
2053
  "-p",
2049
2054
  `${command} ${pr.number}`,
2050
2055
  "--dangerously-skip-permissions",
2056
+ "--chrome",
2051
2057
  "--disallowedTools",
2052
2058
  DISALLOWED_TOOLS_ARG,
2059
+ "--append-system-prompt",
2060
+ SYSTEM_PROMPT,
2053
2061
  "--append-subagent-system-prompt",
2054
2062
  SUBAGENT_SYSTEM_PROMPT,
2055
2063
  "--model",
@@ -2098,7 +2106,8 @@ function createPrPollingWorker(config) {
2098
2106
  );
2099
2107
  }
2100
2108
  },
2101
- cwd
2109
+ cwd,
2110
+ { ...CLAUDE_SPAWN_ENV }
2102
2111
  );
2103
2112
  } catch (err) {
2104
2113
  console.error(`[${config.name}] setup error for PR #${pr.number}: ${err}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-task-worker",
3
- "version": "0.21.0",
3
+ "version": "0.22.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",