claude-task-worker 0.107.0 → 0.109.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 +14 -1
- package/dist/index.js +65 -33
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -122,7 +122,7 @@ claude-task-worker init --force # 強制上書き
|
|
|
122
122
|
## コマンド
|
|
123
123
|
|
|
124
124
|
```bash
|
|
125
|
-
claude-task-worker <command> [--epic <issue-number>]... [--label <label>]... [--project <name>]... [--cloud]
|
|
125
|
+
claude-task-worker <command> [--epic <issue-number>]... [--label <label>]... [--project <name>]... [--cloud] [--debug]
|
|
126
126
|
```
|
|
127
127
|
|
|
128
128
|
| コマンド | 内容 |
|
|
@@ -210,6 +210,19 @@ npx claude-task-worker cloud-setup
|
|
|
210
210
|
|
|
211
211
|
詳細は [`docs/prd-cloud-worker-execution.md`](./docs/prd-cloud-worker-execution.md) を参照。
|
|
212
212
|
|
|
213
|
+
### `--debug`
|
|
214
|
+
|
|
215
|
+
各タスクの最終報告を対象 Issue/PR へコメントとして残す。ローカル実行(`default` / `herdr`)でもクラウド実行(`--cloud`)でも使える。
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
claude-task-worker exec-issue --debug
|
|
219
|
+
claude-task-worker exec-issue --cloud --debug
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
既定(`--debug` なし)では最終報告は Slack 通知にのみ載り、Issue/PR にはコメントされない。毎タスク投稿すると Issue/PR がワーカーの実行ログで埋まるため。
|
|
223
|
+
|
|
224
|
+
投稿の担当は実行形態で違う。ローカルはワーカーが報告そのもの(`claude -p` の stdout / transcript)を持っているのでワーカーが投稿し、クラウドはワーカーに報告が届かないのでセッション自身に投稿させる(ワーカーはそれを回収して Slack へ載せる)。定期ワーカー(`update-*`)の投稿先は実行記録PR(`ctw-last-run-<ワーカー名>`)。クラウド実行の完了検知(`cc-cloud-done`)はフラグの有無に関わらず従来どおり動く。
|
|
225
|
+
|
|
213
226
|
### Pen CLI のログイン
|
|
214
227
|
|
|
215
228
|
`.pen` を扱うスキルは Pen CLI の認証を必要とする。UIデザイン先行ワークフローを使うなら一度ログインしておく。
|
package/dist/index.js
CHANGED
|
@@ -1609,6 +1609,11 @@ async function addLabel(type, number, label) {
|
|
|
1609
1609
|
}
|
|
1610
1610
|
});
|
|
1611
1611
|
}
|
|
1612
|
+
async function addAssignee(type, number, login) {
|
|
1613
|
+
await withRetry(async () => {
|
|
1614
|
+
await execGh([type, "edit", String(number), "--add-assignee", login]);
|
|
1615
|
+
});
|
|
1616
|
+
}
|
|
1612
1617
|
async function hasLabel(type, number, label) {
|
|
1613
1618
|
return withRetry(async () => {
|
|
1614
1619
|
const output = await execGh([type, "view", String(number), "--json", "labels"]);
|
|
@@ -1668,10 +1673,8 @@ async function commentOnPR(prNumber, body) {
|
|
|
1668
1673
|
async function commentOnIssue(issueNumber, body) {
|
|
1669
1674
|
await execGh(["issue", "comment", String(issueNumber), "--body", body]);
|
|
1670
1675
|
}
|
|
1671
|
-
async function createPullRequest(base, head, title, body
|
|
1676
|
+
async function createPullRequest(base, head, title, body) {
|
|
1672
1677
|
const args = ["pr", "create", "--base", base, "--head", head, "--title", title, "--body", body];
|
|
1673
|
-
for (const label of options?.labels ?? []) args.push("--label", label);
|
|
1674
|
-
if (options?.assignee) args.push("--assignee", options.assignee);
|
|
1675
1678
|
const url = await execGh(args);
|
|
1676
1679
|
const matched = url.match(/\/pull\/(\d+)/);
|
|
1677
1680
|
if (!matched) throw new Error(`gh pr create returned an unexpected output: ${url}`);
|
|
@@ -1732,6 +1735,13 @@ function hasCloudFlag() {
|
|
|
1732
1735
|
}
|
|
1733
1736
|
return cachedCloudFlag;
|
|
1734
1737
|
}
|
|
1738
|
+
var cachedDebugFlag;
|
|
1739
|
+
function hasDebugFlag() {
|
|
1740
|
+
if (cachedDebugFlag === void 0) {
|
|
1741
|
+
cachedDebugFlag = process.argv.includes("--debug");
|
|
1742
|
+
}
|
|
1743
|
+
return cachedDebugFlag;
|
|
1744
|
+
}
|
|
1735
1745
|
function assertCloudCompatibleCommand(command) {
|
|
1736
1746
|
if (FLAG_INCOMPATIBLE_COMMANDS.includes(command)) {
|
|
1737
1747
|
console.error(`[worker] --cloud cannot be used with the "${command}" command`);
|
|
@@ -2585,12 +2595,12 @@ function buildClaudeArgs({
|
|
|
2585
2595
|
function buildCloudCreateArgs(commonArgs, prompt) {
|
|
2586
2596
|
return ["--cloud", prompt, ...commonArgs];
|
|
2587
2597
|
}
|
|
2588
|
-
function appendCloudDoneInstruction(prompt, target) {
|
|
2598
|
+
function appendCloudDoneInstruction(prompt, target, debug = false) {
|
|
2589
2599
|
const targetLabel = target.type === "issue" ? `Issue #${target.number}` : `PR #${target.number}`;
|
|
2590
2600
|
const checkoutInstruction = buildCloudCheckoutInstruction(target);
|
|
2591
2601
|
const worktreeInstruction = buildCloudWorktreeInstruction(prompt);
|
|
2592
|
-
const reportInstruction = `\`${CLOUD_DONE_LABEL}\` \u30E9\u30D9\u30EB\u3092\u4ED8\u3051\u308B\u76F4\u524D\u306B\u3001${targetLabel} \u3078 \`${CLOUD_REPORT_HEADING}\` \u3092\u898B\u51FA\u3057\u3068\u3059\u308B\u30B3\u30E1\u30F3\u30C8\u30921\u4EF6\u6295\u7A3F\u3057\u3001\u672C\u6587\u306B\u6700\u7D42\u5831\u544A\uFF08\u5B8C\u4E86\u30FB\u4E2D\u65AD\u306B\u304B\u304B\u308F\u3089\u305A\uFF09\u3092\u66F8\u304F\u3053\u3068\u3002GitHub MCP\uFF08\`add_issue_comment\`\uFF09\u3092\u512A\u5148\u3057\u3001\u5931\u6557\u3057\u305F\u5834\u5408\u306E\u307F \`gh ${target.type} comment ${target.number} --body-file -\` \u3078\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3059\u308B\u3053\u3068\uFF08\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u306F1\u56DE\u307E\u3067\uFF09\u3002\u30EF\u30FC\u30AB\u30FC\u306F\u3053\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u6700\u7D42\u30EC\u30DD\u30FC\u30C8\u3068\u3057\u3066\u56DE\u53CE\u3057 Slack \u901A\u77E5\u306B\u8F09\u305B\u308B\u3002
|
|
2593
|
-
const labelInstruction =
|
|
2602
|
+
const reportInstruction = debug ? `\`${CLOUD_DONE_LABEL}\` \u30E9\u30D9\u30EB\u3092\u4ED8\u3051\u308B\u76F4\u524D\u306B\u3001${targetLabel} \u3078 \`${CLOUD_REPORT_HEADING}\` \u3092\u898B\u51FA\u3057\u3068\u3059\u308B\u30B3\u30E1\u30F3\u30C8\u30921\u4EF6\u6295\u7A3F\u3057\u3001\u672C\u6587\u306B\u6700\u7D42\u5831\u544A\uFF08\u5B8C\u4E86\u30FB\u4E2D\u65AD\u306B\u304B\u304B\u308F\u3089\u305A\uFF09\u3092\u66F8\u304F\u3053\u3068\u3002GitHub MCP\uFF08\`add_issue_comment\`\uFF09\u3092\u512A\u5148\u3057\u3001\u5931\u6557\u3057\u305F\u5834\u5408\u306E\u307F \`gh ${target.type} comment ${target.number} --body-file -\` \u3078\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3059\u308B\u3053\u3068\uFF08\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u306F1\u56DE\u307E\u3067\uFF09\u3002\u30EF\u30FC\u30AB\u30FC\u306F\u3053\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u6700\u7D42\u30EC\u30DD\u30FC\u30C8\u3068\u3057\u3066\u56DE\u53CE\u3057 Slack \u901A\u77E5\u306B\u8F09\u305B\u308B\u3002` : "";
|
|
2603
|
+
const labelInstruction = `${debug ? "\u4E0A\u8A18\u30B3\u30E1\u30F3\u30C8\u306E\u6295\u7A3F\u5F8C\u3001" : ""}\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u6700\u5F8C\u306E\u64CD\u4F5C\u3068\u3057\u3066 ${targetLabel} \u306B \`${CLOUD_DONE_LABEL}\` \u30E9\u30D9\u30EB\u3092\u4ED8\u4E0E\u3059\u308B\u3053\u3068\u3002GitHub MCP\uFF08\`issue_write\` / method: \`update\`\uFF09\u3092\u512A\u5148\u3057\u3001\u5931\u6557\u3057\u305F\u5834\u5408\u306E\u307F \`gh ${target.type} edit ${target.number} --add-label ${CLOUD_DONE_LABEL}\` \u3078\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3059\u308B\u3053\u3068\uFF08\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u306F1\u56DE\u307E\u3067\uFF09\u3002\u30EF\u30FC\u30AB\u30FC\u306F\u3053\u306E\u30E9\u30D9\u30EB\u3067\u30BF\u30B9\u30AF\u306E\u7D42\u4E86\u3092\u691C\u77E5\u3057\u3066\u304A\u308A\u3001\u4ED8\u4E0E\u3055\u308C\u306A\u3044\u3068\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u307E\u3067\u5B8C\u4E86\u6271\u3044\u306B\u306A\u3089\u306A\u3044\u3002`;
|
|
2594
2604
|
return [prompt, checkoutInstruction, worktreeInstruction, reportInstruction, labelInstruction].filter((part) => part !== "").join("\n\n");
|
|
2595
2605
|
}
|
|
2596
2606
|
var CLOUD_WORKTREE_EXEMPT_SKILLS = ["exec-issue", "fix-review-point", "create-ui-design"];
|
|
@@ -2609,7 +2619,7 @@ function buildCloudGitHubAccessInstruction() {
|
|
|
2609
2619
|
function buildCloudToolRestriction() {
|
|
2610
2620
|
return `\u30AF\u30E9\u30A6\u30C9\u5B9F\u884C\u3067\u306F \`--disallowedTools\` \u30D5\u30E9\u30B0\u306B\u3088\u308B\u30C4\u30FC\u30EB\u5236\u9650\u304C\u53CD\u6620\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u4EE5\u4E0B\u306E\u30C4\u30FC\u30EB\u3092\u4F7F\u308F\u306A\u3044\u3053\u3068: ${DISALLOWED_TOOLS.join(", ")}`;
|
|
2611
2621
|
}
|
|
2612
|
-
function buildCloudPrompt(prompt, model, target) {
|
|
2622
|
+
function buildCloudPrompt(prompt, model, target, debug = false) {
|
|
2613
2623
|
const principles = `\u4EE5\u4E0B\u306F\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u5B9F\u884C\u539F\u5247\u3067\u3042\u308B\u3002\u30AF\u30E9\u30A6\u30C9\u5B9F\u884C\u3067\u306F\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u306B\u3088\u308B\u6CE8\u5165\u304C\u53CD\u6620\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u30D7\u30ED\u30F3\u30D7\u30C8\u672C\u6587\u3068\u3057\u3066\u6E21\u3057\u3066\u3044\u308B\u3002
|
|
2614
2624
|
|
|
2615
2625
|
${systemPromptFor(model)}
|
|
@@ -2620,7 +2630,7 @@ ${buildCloudGitHubAccessInstruction()}`;
|
|
|
2620
2630
|
const withPrinciples = `${prompt}
|
|
2621
2631
|
|
|
2622
2632
|
${principles}`;
|
|
2623
|
-
return target ? appendCloudDoneInstruction(withPrinciples, target) : withPrinciples;
|
|
2633
|
+
return target ? appendCloudDoneInstruction(withPrinciples, target, debug) : withPrinciples;
|
|
2624
2634
|
}
|
|
2625
2635
|
function shellQuote2(value) {
|
|
2626
2636
|
return `'${value.replace(/'/g, "'\\''")}'`;
|
|
@@ -2819,6 +2829,21 @@ async function finishTask(id, result, onComplete) {
|
|
|
2819
2829
|
pruneTaskHistory();
|
|
2820
2830
|
renderTable();
|
|
2821
2831
|
}
|
|
2832
|
+
function onCompleteWithDebugReport(onComplete, target) {
|
|
2833
|
+
if (!target || !hasDebugFlag()) return onComplete;
|
|
2834
|
+
return async (status, output, cloudSessionId) => {
|
|
2835
|
+
const body = output.trim();
|
|
2836
|
+
if (body !== "") {
|
|
2837
|
+
const comment = target.type === "issue" ? commentOnIssue : commentOnPR;
|
|
2838
|
+
await comment(target.number, `${CLOUD_REPORT_HEADING}
|
|
2839
|
+
|
|
2840
|
+
${body}`).catch(
|
|
2841
|
+
(err) => console.error(`[worker] failed to post the debug report to ${target.type} #${target.number}: ${err}`)
|
|
2842
|
+
);
|
|
2843
|
+
}
|
|
2844
|
+
await onComplete?.(status, output, cloudSessionId);
|
|
2845
|
+
};
|
|
2846
|
+
}
|
|
2822
2847
|
function resolveProjectName(cwd = process.cwd()) {
|
|
2823
2848
|
const injected = process.env.CTW_PROJECT_NAME;
|
|
2824
2849
|
if (injected && injected.length > 0) return injected;
|
|
@@ -2992,7 +3017,8 @@ async function createCloudSession(args, initialPrompt, cwd, env) {
|
|
|
2992
3017
|
}
|
|
2993
3018
|
async function runViaCloud(args, prompt, id, onComplete, cwd, env, cloudTarget, model) {
|
|
2994
3019
|
herdrTasks.set(id, { paneId: "", tabId: "" });
|
|
2995
|
-
const
|
|
3020
|
+
const debug = hasDebugFlag();
|
|
3021
|
+
const initialPrompt = buildCloudPrompt(prompt, model ?? "", cloudTarget, debug);
|
|
2996
3022
|
let result;
|
|
2997
3023
|
let cloudSessionId;
|
|
2998
3024
|
try {
|
|
@@ -3010,7 +3036,7 @@ async function runViaCloud(args, prompt, id, onComplete, cwd, env, cloudTarget,
|
|
|
3010
3036
|
});
|
|
3011
3037
|
let reportBody = null;
|
|
3012
3038
|
const startedAt = tasks.get(id)?.startedAt;
|
|
3013
|
-
if (startedAt) {
|
|
3039
|
+
if (debug && startedAt) {
|
|
3014
3040
|
try {
|
|
3015
3041
|
reportBody = await findCommentSince(targetNumber, startedAt, CLOUD_REPORT_HEADING);
|
|
3016
3042
|
} catch (err) {
|
|
@@ -3080,8 +3106,9 @@ function run(command, args, id, title, workerName, path2, onComplete, cwd, env,
|
|
|
3080
3106
|
void runViaCloud(args, prompt ?? "", id, onComplete, cwd, env, cloudTarget, model);
|
|
3081
3107
|
return;
|
|
3082
3108
|
}
|
|
3109
|
+
const onCompleteWithReport = onCompleteWithDebugReport(onComplete, cloudTarget);
|
|
3083
3110
|
if (getRunMode() === "herdr") {
|
|
3084
|
-
void runViaHerdr(args, prompt ?? "", id,
|
|
3111
|
+
void runViaHerdr(args, prompt ?? "", id, onCompleteWithReport, cwd, env);
|
|
3085
3112
|
return;
|
|
3086
3113
|
}
|
|
3087
3114
|
const child = spawn(command, args, {
|
|
@@ -3117,12 +3144,12 @@ function run(command, args, id, title, workerName, path2, onComplete, cwd, env,
|
|
|
3117
3144
|
Buffer.concat(outputChunks).toString("utf-8"),
|
|
3118
3145
|
Buffer.concat(stderrChunks).toString("utf-8").slice(-STDERR_TAIL_LIMIT)
|
|
3119
3146
|
);
|
|
3120
|
-
await finishTask(id, result,
|
|
3147
|
+
await finishTask(id, result, onCompleteWithReport);
|
|
3121
3148
|
childProcesses.delete(id);
|
|
3122
3149
|
});
|
|
3123
3150
|
child.on("error", async (err) => {
|
|
3124
3151
|
console.error(`[worker] failed to spawn process for #${id}: ${err.message}`);
|
|
3125
|
-
await finishTask(id, { status: "failed", output: err.message },
|
|
3152
|
+
await finishTask(id, { status: "failed", output: err.message }, onCompleteWithReport);
|
|
3126
3153
|
childProcesses.delete(id);
|
|
3127
3154
|
});
|
|
3128
3155
|
}
|
|
@@ -3656,11 +3683,12 @@ async function notifyError(workerName, repoName, error) {
|
|
|
3656
3683
|
}
|
|
3657
3684
|
|
|
3658
3685
|
// src/worktree.ts
|
|
3659
|
-
import {
|
|
3686
|
+
import { createRequire as createRequire3 } from "node:module";
|
|
3660
3687
|
import { promisify as promisify3 } from "node:util";
|
|
3661
3688
|
import { readdir, rm, stat } from "node:fs/promises";
|
|
3662
3689
|
import { basename as basename2, resolve as resolve2, sep } from "node:path";
|
|
3663
|
-
var
|
|
3690
|
+
var childProcess3 = createRequire3(import.meta.url)("node:child_process");
|
|
3691
|
+
var execFileAsync2 = (command, args) => promisify3(childProcess3.execFile)(command, args);
|
|
3664
3692
|
var WORKTREES_DIR = ".claude/worktrees";
|
|
3665
3693
|
function isManagedWorktreePath(path2) {
|
|
3666
3694
|
return resolve2(path2).startsWith(resolve2(WORKTREES_DIR) + sep);
|
|
@@ -3984,7 +4012,9 @@ function createIssuePollingWorker(config) {
|
|
|
3984
4012
|
buildClaudeEnv(mode, cloud),
|
|
3985
4013
|
execution.prompt,
|
|
3986
4014
|
cloud,
|
|
3987
|
-
|
|
4015
|
+
// クラウドでは cc-cloud-done の探索先、ローカルでは --debug の報告コメントの
|
|
4016
|
+
// 投稿先。どちらも対象は同じ Issue なので実行形態で出し分けない。
|
|
4017
|
+
{ type: "issue", number: issue.number },
|
|
3988
4018
|
model
|
|
3989
4019
|
);
|
|
3990
4020
|
} catch (err) {
|
|
@@ -4241,7 +4271,9 @@ function createPrPollingWorker(config) {
|
|
|
4241
4271
|
buildClaudeEnv(mode, isCloud),
|
|
4242
4272
|
execution.prompt,
|
|
4243
4273
|
isCloud,
|
|
4244
|
-
|
|
4274
|
+
// クラウドでは cc-cloud-done の探索先、ローカルでは --debug の報告コメントの
|
|
4275
|
+
// 投稿先。onBranch は `--on-branch` を渡したか(=クラウドのみ)を表す。
|
|
4276
|
+
{ type: "pr", number: pr.number, onBranch: isCloud },
|
|
4245
4277
|
model
|
|
4246
4278
|
);
|
|
4247
4279
|
} catch (err) {
|
|
@@ -4678,9 +4710,10 @@ var applyUiDesignWorker = async (opts = {}) => {
|
|
|
4678
4710
|
};
|
|
4679
4711
|
|
|
4680
4712
|
// src/last-run-pr.ts
|
|
4681
|
-
import {
|
|
4713
|
+
import { createRequire as createRequire4 } from "node:module";
|
|
4682
4714
|
import { promisify as promisify4 } from "node:util";
|
|
4683
|
-
var
|
|
4715
|
+
var childProcess4 = createRequire4(import.meta.url)("node:child_process");
|
|
4716
|
+
var execFileAsync3 = (command, args) => promisify4(childProcess4.execFile)(command, args);
|
|
4684
4717
|
var CONFIG_FILE = "claude-task-worker.json";
|
|
4685
4718
|
var LABEL_TRIAGE_SCOPE2 = "cc-triage-scope";
|
|
4686
4719
|
function lastRunBranchName(workerName) {
|
|
@@ -4720,18 +4753,14 @@ async function publishLastRunPr(workerName, defaultBranch, at) {
|
|
|
4720
4753
|
await git(cwd, ["commit", "-m", lastRunPrTitle(workerName)]);
|
|
4721
4754
|
await git(cwd, ["push", "--force", "origin", `HEAD:refs/heads/${branch}`]);
|
|
4722
4755
|
const existing = await findOpenPrNumberByHeadRef(branch);
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
4726
|
-
|
|
4727
|
-
|
|
4728
|
-
|
|
4729
|
-
|
|
4730
|
-
lastRunPrTitle(workerName),
|
|
4731
|
-
lastRunPrBody(workerName, at),
|
|
4732
|
-
{ labels: [LABEL_TRIAGE_SCOPE2], assignee: await getCurrentUser() }
|
|
4756
|
+
const prNumber = existing ?? await createPullRequest(defaultBranch, branch, lastRunPrTitle(workerName), lastRunPrBody(workerName, at));
|
|
4757
|
+
console.log(`[${workerName}] ${existing !== null ? "updated" : "opened"} lastRun PR #${prNumber}`);
|
|
4758
|
+
await addLabel("pr", prNumber, LABEL_TRIAGE_SCOPE2).catch(
|
|
4759
|
+
(err) => console.error(`[${workerName}] addLabel ${LABEL_TRIAGE_SCOPE2} failed for PR #${prNumber}: ${err}`)
|
|
4760
|
+
);
|
|
4761
|
+
await addAssignee("pr", prNumber, await getCurrentUser()).catch(
|
|
4762
|
+
(err) => console.error(`[${workerName}] addAssignee failed for PR #${prNumber}: ${err}`)
|
|
4733
4763
|
);
|
|
4734
|
-
console.log(`[${workerName}] opened lastRun PR #${prNumber}`);
|
|
4735
4764
|
return prNumber;
|
|
4736
4765
|
} finally {
|
|
4737
4766
|
await removeWorktree(branch).catch((err) => console.error(`[${workerName}] removeWorktree failed: ${err}`));
|
|
@@ -4837,7 +4866,9 @@ function createScheduledWorker(config) {
|
|
|
4837
4866
|
buildClaudeEnv(mode, cloud),
|
|
4838
4867
|
execution.prompt,
|
|
4839
4868
|
cloud,
|
|
4840
|
-
|
|
4869
|
+
// 定期ワーカーは Issue/PR を起点に走らないため、クラウドの cc-cloud-done も
|
|
4870
|
+
// ローカル --debug の報告コメントも実行記録PRを置き先にする。
|
|
4871
|
+
lastRunPr !== null ? { type: "pr", number: lastRunPr } : void 0,
|
|
4841
4872
|
model
|
|
4842
4873
|
);
|
|
4843
4874
|
} catch (err) {
|
|
@@ -5491,9 +5522,9 @@ function version() {
|
|
|
5491
5522
|
}
|
|
5492
5523
|
|
|
5493
5524
|
// src/index.ts
|
|
5494
|
-
import { execFile as
|
|
5525
|
+
import { execFile as execFile2 } from "node:child_process";
|
|
5495
5526
|
import { promisify as promisify5 } from "node:util";
|
|
5496
|
-
var execFileAsync4 = promisify5(
|
|
5527
|
+
var execFileAsync4 = promisify5(execFile2);
|
|
5497
5528
|
var WORKERS = {
|
|
5498
5529
|
"exec-issue": execIssueWorker,
|
|
5499
5530
|
"fix-review-point": fixReviewPointWorker,
|
|
@@ -5543,6 +5574,7 @@ Workers:
|
|
|
5543
5574
|
|
|
5544
5575
|
Options:
|
|
5545
5576
|
--project <name> Dispatch to project(s) via herdr instead of running the worker locally. Accepts a project name, a project group name, or "all". Repeatable.
|
|
5577
|
+
--debug Post each task's final report as a comment on the target Issue/PR (off by default; the report is only sent to Slack). Works in both local and --cloud runs.
|
|
5546
5578
|
--epic <number> Limit issue-based workers to sub-issues of the specified epic issue. Repeatable: any matching parent (OR).
|
|
5547
5579
|
--label <name> Limit issue-based workers to issues that also carry the specified label. Repeatable: all must be present (AND).
|
|
5548
5580
|
|