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.
- package/README.md +53 -7
- package/dist/chunk-3RY43CYR.js +41 -0
- package/dist/chunk-FAD5CNP4.js +3396 -0
- package/dist/chunk-N42YU3GJ.js +184 -0
- package/dist/claude-args.d.ts +62 -0
- package/dist/commands/cloud-setup.d.ts +14 -0
- package/dist/commands/codegraph.d.ts +39 -0
- package/dist/commands/design-md.d.ts +11 -0
- package/dist/commands/init.d.ts +17 -0
- package/dist/commands/install.d.ts +14 -0
- package/dist/commands/pen.d.ts +15 -0
- package/dist/commands/playwright.d.ts +27 -0
- package/dist/commands/run-command.d.ts +10 -0
- package/dist/commands/update.d.ts +1 -0
- package/dist/commands/version.d.ts +4 -0
- package/dist/config.d.ts +77 -0
- package/dist/custom-workers.d.ts +16 -0
- package/dist/dispatch-args.d.ts +13 -0
- package/dist/dispatcher-JKUMXTJ2.js +410 -0
- package/dist/dispatcher.d.ts +77 -0
- package/dist/gh.d.ts +112 -0
- package/dist/git.d.ts +7 -0
- package/dist/herdr-NDLUM6JF.js +309 -0
- package/dist/herdr-runner-33D6C2KI.js +307 -0
- package/dist/herdr-runner.d.ts +136 -0
- package/dist/herdr.d.ts +85 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +855 -4984
- package/dist/last-run-pr.d.ts +16 -0
- package/dist/lib.d.ts +20 -0
- package/dist/lib.js +123 -0
- package/dist/process-manager.d.ts +38 -0
- package/dist/random-name.d.ts +2 -0
- package/dist/run-command-O2TMRPZK.js +8 -0
- package/dist/runcat.d.ts +23 -0
- package/dist/slack.d.ts +46 -0
- package/dist/table-DWVMNDS3.js +32 -0
- package/dist/table.d.ts +55 -0
- package/dist/task-result.d.ts +25 -0
- package/dist/transcript.d.ts +27 -0
- package/dist/user-config.d.ts +30 -0
- package/dist/workers/answer-issue-questions.d.ts +1 -0
- package/dist/workers/apply-ui-design.d.ts +1 -0
- package/dist/workers/check-dependabot.d.ts +1 -0
- package/dist/workers/create-issue.d.ts +1 -0
- package/dist/workers/create-ui-design.d.ts +2 -0
- package/dist/workers/epic-issue.d.ts +2 -0
- package/dist/workers/exec-issue.d.ts +15 -0
- package/dist/workers/fix-review-point.d.ts +1 -0
- package/dist/workers/issue-worker.d.ts +18 -0
- package/dist/workers/pr-worker.d.ts +18 -0
- package/dist/workers/registry.d.ts +8 -0
- package/dist/workers/resolve-conflict.d.ts +2 -0
- package/dist/workers/scheduled-worker.d.ts +8 -0
- package/dist/workers/triage-created-issue.d.ts +1 -0
- package/dist/workers/triage-pr.d.ts +5 -0
- package/dist/workers/ui-design.d.ts +14 -0
- package/dist/workers/update-coding-guidelines.d.ts +1 -0
- package/dist/workers/update-design-md.d.ts +1 -0
- package/dist/workers/update-issue.d.ts +1 -0
- package/dist/workers/update-requirement-rules.d.ts +1 -0
- package/dist/workers/worker-definition.d.ts +18 -0
- package/dist/worktree.d.ts +21 -0
- package/package.json +14 -3
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare function lastRunBranchName(workerName: string): string;
|
|
2
|
+
export declare function hasLastRunChange(porcelain: string): boolean;
|
|
3
|
+
export declare function lastRunPrTitle(workerName: string): string;
|
|
4
|
+
export declare function lastRunPrBody(workerName: string, at: Date): string;
|
|
5
|
+
/**
|
|
6
|
+
* 定期ワーカーの最終実行時刻(`lastRun`)だけを更新するPRを作る。
|
|
7
|
+
*
|
|
8
|
+
* スキルの成果物PRとは独立させている。材料が無くてスキルがPRを作らなかった日でも
|
|
9
|
+
* `lastRun` をマージで恒久化する必要があり、それをスキル本文の手順(=モデルの遵守)に
|
|
10
|
+
* 依存させると、材料ゼロの早期終了パスで黙って落ちる。
|
|
11
|
+
*
|
|
12
|
+
* 返り値のPR番号は、クラウド実行の完了検知(cc-cloud-done)の置き先としても使う。
|
|
13
|
+
* 定期ワーカーは Issue/PR を起点に走らないため、他に検知対象になるものが無い。
|
|
14
|
+
* PRを作らなかった場合(差分なし・失敗)は null。
|
|
15
|
+
*/
|
|
16
|
+
export declare function publishLastRunPr(workerName: string, defaultBranch: string, at: Date): Promise<number | null>;
|
package/dist/lib.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export { createIssuePollingWorker } from "./workers/issue-worker";
|
|
2
|
+
export type { IssueWorkerConfig, PreflightResult } from "./workers/issue-worker";
|
|
3
|
+
export { createPrPollingWorker } from "./workers/pr-worker";
|
|
4
|
+
export type { PrWorkerConfig } from "./workers/pr-worker";
|
|
5
|
+
export { createScheduledWorker } from "./workers/scheduled-worker";
|
|
6
|
+
export type { ScheduledWorkerConfig } from "./workers/scheduled-worker";
|
|
7
|
+
export { defineWorker, isWorkerDefinition } from "./workers/worker-definition";
|
|
8
|
+
export type { WorkerDefinition, WorkerKind, WorkerStartOptions } from "./workers/worker-definition";
|
|
9
|
+
export { addAssignee, addLabel, closeIssue, commentOnIssue, commentOnPR, findOpenPrNumberByHeadRef, findPrNumberByHeadRef, findPrStateByHeadRef, getCurrentUser, getIssueBody, getIssueState, getIssueSubIssuesSummary, getPrDetail, getPrMergeable, getRepoInfo, hasLabel, hasOpenBlockers, linkClosingPr, listIssuesByLabel, listIssuesByNumbers, listPrsClosingIssue, listPrsCrossReferencingIssue, listPullRequestsWithChecks, parseClosingIssueNumbers, removeLabel, } from "./gh";
|
|
10
|
+
export type { ClosingPrRef, Issue, PullRequestWithChecks } from "./gh";
|
|
11
|
+
export { ensureEpicBranch, syncDefaultBranch } from "./git";
|
|
12
|
+
export { createWorktreeFromBranch, deleteLocalBranch, getWorktreePath, localBranchExists, removeWorktree, removeWorktreeByBranch, } from "./worktree";
|
|
13
|
+
export { isRunning, isShuttingDown, isWorkerAtCapacity, run } from "./process-manager";
|
|
14
|
+
export { notifyError, notifyTaskCompleted, notifyTaskFailed } from "./slack";
|
|
15
|
+
export { buildClaudeEnv, buildClaudeExecution } from "./claude-args";
|
|
16
|
+
export { CLOUD_DONE_LABEL, getLastRunAt, getRemoteEnvId, getUiDesignConfig, getWorkerConfig, isCloudWorker, loadConfig, } from "./config";
|
|
17
|
+
export type { WorkerRuntimeConfig } from "./config";
|
|
18
|
+
export { getPermissionMode, getRunMode, isAdvisorEnabled } from "./user-config";
|
|
19
|
+
export { publishLastRunPr } from "./last-run-pr";
|
|
20
|
+
export { generateWorktreeName } from "./random-name";
|
package/dist/lib.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CLOUD_DONE_LABEL,
|
|
3
|
+
addAssignee,
|
|
4
|
+
addLabel,
|
|
5
|
+
buildClaudeEnv,
|
|
6
|
+
buildClaudeExecution,
|
|
7
|
+
closeIssue,
|
|
8
|
+
commentOnIssue,
|
|
9
|
+
commentOnPR,
|
|
10
|
+
createIssuePollingWorker,
|
|
11
|
+
createPrPollingWorker,
|
|
12
|
+
createScheduledWorker,
|
|
13
|
+
createWorktreeFromBranch,
|
|
14
|
+
defineWorker,
|
|
15
|
+
deleteLocalBranch,
|
|
16
|
+
ensureEpicBranch,
|
|
17
|
+
findOpenPrNumberByHeadRef,
|
|
18
|
+
findPrNumberByHeadRef,
|
|
19
|
+
findPrStateByHeadRef,
|
|
20
|
+
generateWorktreeName,
|
|
21
|
+
getCurrentUser,
|
|
22
|
+
getIssueBody,
|
|
23
|
+
getIssueState,
|
|
24
|
+
getIssueSubIssuesSummary,
|
|
25
|
+
getLastRunAt,
|
|
26
|
+
getPermissionMode,
|
|
27
|
+
getPrDetail,
|
|
28
|
+
getPrMergeable,
|
|
29
|
+
getRemoteEnvId,
|
|
30
|
+
getRepoInfo,
|
|
31
|
+
getRunMode,
|
|
32
|
+
getUiDesignConfig,
|
|
33
|
+
getWorkerConfig,
|
|
34
|
+
getWorktreePath,
|
|
35
|
+
hasLabel,
|
|
36
|
+
hasOpenBlockers,
|
|
37
|
+
isAdvisorEnabled,
|
|
38
|
+
isCloudWorker,
|
|
39
|
+
isRunning,
|
|
40
|
+
isShuttingDown,
|
|
41
|
+
isWorkerAtCapacity,
|
|
42
|
+
isWorkerDefinition,
|
|
43
|
+
linkClosingPr,
|
|
44
|
+
listIssuesByLabel,
|
|
45
|
+
listIssuesByNumbers,
|
|
46
|
+
listPrsClosingIssue,
|
|
47
|
+
listPrsCrossReferencingIssue,
|
|
48
|
+
listPullRequestsWithChecks,
|
|
49
|
+
loadConfig,
|
|
50
|
+
localBranchExists,
|
|
51
|
+
notifyError,
|
|
52
|
+
notifyTaskCompleted,
|
|
53
|
+
notifyTaskFailed,
|
|
54
|
+
parseClosingIssueNumbers,
|
|
55
|
+
publishLastRunPr,
|
|
56
|
+
removeLabel,
|
|
57
|
+
removeWorktree,
|
|
58
|
+
removeWorktreeByBranch,
|
|
59
|
+
run,
|
|
60
|
+
syncDefaultBranch
|
|
61
|
+
} from "./chunk-FAD5CNP4.js";
|
|
62
|
+
import "./chunk-N42YU3GJ.js";
|
|
63
|
+
export {
|
|
64
|
+
CLOUD_DONE_LABEL,
|
|
65
|
+
addAssignee,
|
|
66
|
+
addLabel,
|
|
67
|
+
buildClaudeEnv,
|
|
68
|
+
buildClaudeExecution,
|
|
69
|
+
closeIssue,
|
|
70
|
+
commentOnIssue,
|
|
71
|
+
commentOnPR,
|
|
72
|
+
createIssuePollingWorker,
|
|
73
|
+
createPrPollingWorker,
|
|
74
|
+
createScheduledWorker,
|
|
75
|
+
createWorktreeFromBranch,
|
|
76
|
+
defineWorker,
|
|
77
|
+
deleteLocalBranch,
|
|
78
|
+
ensureEpicBranch,
|
|
79
|
+
findOpenPrNumberByHeadRef,
|
|
80
|
+
findPrNumberByHeadRef,
|
|
81
|
+
findPrStateByHeadRef,
|
|
82
|
+
generateWorktreeName,
|
|
83
|
+
getCurrentUser,
|
|
84
|
+
getIssueBody,
|
|
85
|
+
getIssueState,
|
|
86
|
+
getIssueSubIssuesSummary,
|
|
87
|
+
getLastRunAt,
|
|
88
|
+
getPermissionMode,
|
|
89
|
+
getPrDetail,
|
|
90
|
+
getPrMergeable,
|
|
91
|
+
getRemoteEnvId,
|
|
92
|
+
getRepoInfo,
|
|
93
|
+
getRunMode,
|
|
94
|
+
getUiDesignConfig,
|
|
95
|
+
getWorkerConfig,
|
|
96
|
+
getWorktreePath,
|
|
97
|
+
hasLabel,
|
|
98
|
+
hasOpenBlockers,
|
|
99
|
+
isAdvisorEnabled,
|
|
100
|
+
isCloudWorker,
|
|
101
|
+
isRunning,
|
|
102
|
+
isShuttingDown,
|
|
103
|
+
isWorkerAtCapacity,
|
|
104
|
+
isWorkerDefinition,
|
|
105
|
+
linkClosingPr,
|
|
106
|
+
listIssuesByLabel,
|
|
107
|
+
listIssuesByNumbers,
|
|
108
|
+
listPrsClosingIssue,
|
|
109
|
+
listPrsCrossReferencingIssue,
|
|
110
|
+
listPullRequestsWithChecks,
|
|
111
|
+
loadConfig,
|
|
112
|
+
localBranchExists,
|
|
113
|
+
notifyError,
|
|
114
|
+
notifyTaskCompleted,
|
|
115
|
+
notifyTaskFailed,
|
|
116
|
+
parseClosingIssueNumbers,
|
|
117
|
+
publishLastRunPr,
|
|
118
|
+
removeLabel,
|
|
119
|
+
removeWorktree,
|
|
120
|
+
removeWorktreeByBranch,
|
|
121
|
+
run,
|
|
122
|
+
syncDefaultBranch
|
|
123
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type CloudPromptTarget } from "./claude-args";
|
|
2
|
+
import type { AgentStatus } from "./herdr";
|
|
3
|
+
import { logLines } from "./table";
|
|
4
|
+
type TaskStatus = "running" | "completed" | "failed";
|
|
5
|
+
export interface TaskEntry {
|
|
6
|
+
id: number;
|
|
7
|
+
title: string;
|
|
8
|
+
status: TaskStatus;
|
|
9
|
+
workerName: string;
|
|
10
|
+
path?: string;
|
|
11
|
+
startedAt: Date;
|
|
12
|
+
finishedAt?: Date;
|
|
13
|
+
agentStatus?: AgentStatus;
|
|
14
|
+
}
|
|
15
|
+
export { logLines };
|
|
16
|
+
export declare function makeLogFeeder(id: number, stream: "stdout" | "stderr"): {
|
|
17
|
+
feed(chunk: Buffer): void;
|
|
18
|
+
flush(): void;
|
|
19
|
+
};
|
|
20
|
+
export declare function setShuttingDown(): void;
|
|
21
|
+
export declare function isShuttingDown(): boolean;
|
|
22
|
+
export declare function isRunning(id: number): boolean;
|
|
23
|
+
export declare function isWorktreeInUse(worktreeId: string): boolean;
|
|
24
|
+
export declare function isWorkerAtCapacity(workerName: string): boolean;
|
|
25
|
+
export declare function renderTable(): void;
|
|
26
|
+
export declare function ensureRenderInterval(): void;
|
|
27
|
+
type OnComplete = (status: "completed" | "failed", output: string, cloudSessionId?: string) => Promise<void>;
|
|
28
|
+
export declare function onCompleteWithDebugReport(onComplete?: OnComplete, target?: CloudTarget): OnComplete | undefined;
|
|
29
|
+
export declare function resolveProjectName(cwd?: string): string;
|
|
30
|
+
export declare const CLOUD_SESSION_TIMEOUT_MS: number;
|
|
31
|
+
export declare const CLOUD_SESSION_POLL_INTERVAL_MS = 1000;
|
|
32
|
+
export declare const CLOUD_POLL_INTERVAL_MS: number;
|
|
33
|
+
export declare const CLOUD_TASK_TIMEOUT_MS: number;
|
|
34
|
+
export type CloudTarget = CloudPromptTarget;
|
|
35
|
+
export declare function waitForCloudTask(id: number, target: CloudTarget): Promise<"completed" | "timeout" | "aborted">;
|
|
36
|
+
export declare function run(command: string, args: string[], id: number, title: string, workerName: string, path?: string, onComplete?: OnComplete, cwd?: string, env?: Record<string, string>, prompt?: string, cloud?: boolean, cloudTarget?: CloudTarget, model?: string): void;
|
|
37
|
+
export declare function waitForAllProcesses(): Promise<void>;
|
|
38
|
+
export declare function shutdown(signal?: NodeJS.Signals): void;
|
package/dist/runcat.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UsageInfo } from "./slack";
|
|
2
|
+
export interface RuncatMetric {
|
|
3
|
+
title: string;
|
|
4
|
+
formattedValue: string;
|
|
5
|
+
normalizedValue: number;
|
|
6
|
+
}
|
|
7
|
+
export interface RuncatSnapshot {
|
|
8
|
+
title: string;
|
|
9
|
+
symbol: string;
|
|
10
|
+
metrics: RuncatMetric[];
|
|
11
|
+
metricsBarValue?: string;
|
|
12
|
+
lastUpdatedDate: string;
|
|
13
|
+
}
|
|
14
|
+
/** 'HH:MM' 形式。日を跨ぐ場合は 'MM/DD HH:MM' として日付も付ける。不正値は空文字。 */
|
|
15
|
+
export declare function resetStamp(isoString: string, now?: Date): string;
|
|
16
|
+
/** 'HH' のみ。バーのように幅が限られる用途向け。不正値は空文字。 */
|
|
17
|
+
export declare function resetHour(isoString: string): string;
|
|
18
|
+
export declare function buildRuncatSnapshot(usage: UsageInfo, now?: Date): RuncatSnapshot;
|
|
19
|
+
/**
|
|
20
|
+
* RunCat Neo 用のスナップショットを書き出す。
|
|
21
|
+
* RunCat 側が読み取り中の中途半端な内容を掴まないよう、一時ファイルへ書いてから rename で差し替える。
|
|
22
|
+
*/
|
|
23
|
+
export declare function writeRuncatUsage(usage: UsageInfo, outFile?: string): void;
|
package/dist/slack.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare function send(payload: Record<string, unknown>): Promise<void>;
|
|
2
|
+
export interface UsageInfo {
|
|
3
|
+
fiveHourUtilization: number;
|
|
4
|
+
fiveHourResetsAt: string;
|
|
5
|
+
sevenDayUtilization: number;
|
|
6
|
+
sevenDayResetsAt: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 現在の利用状況を取得し、RunCat Neo 用スナップショットを更新したうえで通知に添えるテキストを返す。
|
|
10
|
+
* ワーカーの完了/失敗通知はすべてここを通るため、タスクが終わるたびに RunCat 側も最新化される
|
|
11
|
+
* (Slack webhook 未設定でも通知が no-op になるだけで、スナップショットの更新は行われる)。
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTokenLimitText(): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* 通知本文へ載せる output を末尾1000文字に切り詰める。
|
|
16
|
+
* 案内文(CLOUD_FAILURE_GUIDANCE)は appendCloudFailureGuidance が output の先頭に
|
|
17
|
+
* 付けるが、単純な末尾切り出しだと長いエラー本文で先頭の案内文ごと消えてしまう。
|
|
18
|
+
* 先頭一致で検出できた場合は案内文を切り出し領域の外に確保し、残りだけを末尾切り出しする。
|
|
19
|
+
*/
|
|
20
|
+
export declare function truncateOutputForNotification(output: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* 完了/失敗通知の本文を組み立てる純粋関数。
|
|
23
|
+
* cloud が渡された(=クラウド実行)場合のみ先頭行を出す: sessionId が非空ならセッションURL、
|
|
24
|
+
* 空ならID抽出失敗を明記する(Slack側で通知の最初の一行だけが折りたたみ表示でも見えるため、先頭に置く)。
|
|
25
|
+
* ローカル実行(cloud 省略)では先頭行を出さない。
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildTaskNotificationText(params: {
|
|
28
|
+
status: "completed" | "failed";
|
|
29
|
+
workerName: string;
|
|
30
|
+
repoName: string;
|
|
31
|
+
id: number;
|
|
32
|
+
title: string;
|
|
33
|
+
url: string;
|
|
34
|
+
tokenText: string;
|
|
35
|
+
output?: string;
|
|
36
|
+
cloud?: {
|
|
37
|
+
sessionId?: string;
|
|
38
|
+
};
|
|
39
|
+
}): string;
|
|
40
|
+
export declare function notifyTaskCompleted(workerName: string, repoName: string, id: number, title: string, url: string, output?: string, cloud?: {
|
|
41
|
+
sessionId?: string;
|
|
42
|
+
}): Promise<void>;
|
|
43
|
+
export declare function notifyTaskFailed(workerName: string, repoName: string, id: number, title: string, url: string, output?: string, cloud?: {
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
export declare function notifyError(workerName: string, repoName: string, error: unknown): Promise<void>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CLOUD_WORKTREE_LABEL,
|
|
3
|
+
CONTROL_CHARS,
|
|
4
|
+
LOG_DISPLAY_LIMIT,
|
|
5
|
+
TASK_DISPLAY_LIMIT,
|
|
6
|
+
buildLogTableLines,
|
|
7
|
+
buildTaskTableLines,
|
|
8
|
+
captureConsole,
|
|
9
|
+
getDisplayWidth,
|
|
10
|
+
logLines,
|
|
11
|
+
padToWidth,
|
|
12
|
+
pushLogLine,
|
|
13
|
+
selectRecentTasks,
|
|
14
|
+
truncateToWidth,
|
|
15
|
+
writeScreen
|
|
16
|
+
} from "./chunk-N42YU3GJ.js";
|
|
17
|
+
export {
|
|
18
|
+
CLOUD_WORKTREE_LABEL,
|
|
19
|
+
CONTROL_CHARS,
|
|
20
|
+
LOG_DISPLAY_LIMIT,
|
|
21
|
+
TASK_DISPLAY_LIMIT,
|
|
22
|
+
buildLogTableLines,
|
|
23
|
+
buildTaskTableLines,
|
|
24
|
+
captureConsole,
|
|
25
|
+
getDisplayWidth,
|
|
26
|
+
logLines,
|
|
27
|
+
padToWidth,
|
|
28
|
+
pushLogLine,
|
|
29
|
+
selectRecentTasks,
|
|
30
|
+
truncateToWidth,
|
|
31
|
+
writeScreen
|
|
32
|
+
};
|
package/dist/table.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export declare function getDisplayWidth(str: string): number;
|
|
2
|
+
export declare function truncateToWidth(str: string, maxWidth: number): string;
|
|
3
|
+
export declare function padToWidth(str: string, targetWidth: number): string;
|
|
4
|
+
/**
|
|
5
|
+
* クラウド実行(`--cloud`)のタスクは worktree を作らないため、Worktree 列にローカルの
|
|
6
|
+
* パスの代わりにこの表示を入れる(空欄だと「どこで動いているのか分からない」ため)。
|
|
7
|
+
* ANSI の色付きだが、getDisplayWidth がエスケープを除外するので桁揃えは崩れない。
|
|
8
|
+
*/
|
|
9
|
+
export declare const CLOUD_WORKTREE_LABEL = "\u001B[36m\u2601 running in cloud\u001B[0m";
|
|
10
|
+
/** ステータステーブル1行分のタスク情報。process-manager の TaskEntry を構造的に受け取る。 */
|
|
11
|
+
export interface TaskTableEntry {
|
|
12
|
+
id: number;
|
|
13
|
+
title: string;
|
|
14
|
+
status: string;
|
|
15
|
+
workerName: string;
|
|
16
|
+
path?: string;
|
|
17
|
+
startedAt: Date;
|
|
18
|
+
finishedAt?: Date;
|
|
19
|
+
agentStatus?: string;
|
|
20
|
+
}
|
|
21
|
+
/** タスクテーブル/ログテーブルで表示する既定の最大件数。 */
|
|
22
|
+
export declare const TASK_DISPLAY_LIMIT = 20;
|
|
23
|
+
export declare const LOG_DISPLAY_LIMIT = 20;
|
|
24
|
+
/**
|
|
25
|
+
* 表示するタスクを「直近 limit 件」に絞り込む純粋関数。同じ Issue/PR(id)は
|
|
26
|
+
* 呼び出し元の Map で既に一意化されている前提だが、二重登録に備えて id で重複排除し
|
|
27
|
+
* 最新のものだけを残す。実行中タスクを先頭に、その下を直近順(新しい順)に並べ、
|
|
28
|
+
* 合計 limit 件で打ち切る。
|
|
29
|
+
*/
|
|
30
|
+
export declare function selectRecentTasks(entries: TaskTableEntry[], limit?: number): TaskTableEntry[];
|
|
31
|
+
/** ステータステーブルの各行を組み立てる。副作用を持たないのでそのままテストできる。 */
|
|
32
|
+
export declare function buildTaskTableLines(entries: TaskTableEntry[], now?: Date): string[];
|
|
33
|
+
/** ログテーブル1行分。実行中タスクの標準出力/エラー出力、またはワーカー自身の console 出力の1行。 */
|
|
34
|
+
export interface LogTableEntry {
|
|
35
|
+
/** タスクの Issue/PR 番号。ワーカー自身の console 出力には無い。 */
|
|
36
|
+
id?: number;
|
|
37
|
+
stream: string;
|
|
38
|
+
text: string;
|
|
39
|
+
time: Date;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 実行中タスクのログとワーカー自身の console 出力を混ぜたローリングバッファ。
|
|
43
|
+
* 直近 LOG_DISPLAY_LIMIT 行だけ残す。
|
|
44
|
+
*/
|
|
45
|
+
export declare const logLines: LogTableEntry[];
|
|
46
|
+
export declare function pushLogLine(entry: LogTableEntry): void;
|
|
47
|
+
/** 画面全体をテーブルで差し替える。captureConsole() の影響を受けない。 */
|
|
48
|
+
export declare function writeScreen(lines: string[]): void;
|
|
49
|
+
export declare function captureConsole(): void;
|
|
50
|
+
export declare const CONTROL_CHARS: RegExp;
|
|
51
|
+
/**
|
|
52
|
+
* 実行中タスクの標準出力/エラー出力のログをテーブルに組み立てる純粋関数。
|
|
53
|
+
* 新しい行ほど上に来るよう時刻の降順で並べる(テーブル下端はステータス表示に隠れやすいため)。
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildLogTableLines(entries: LogTableEntry[]): string[];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const STDERR_TAIL_LIMIT: number;
|
|
2
|
+
export interface TaskResult {
|
|
3
|
+
status: "completed" | "failed";
|
|
4
|
+
output: string;
|
|
5
|
+
cloudSessionId?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const CLOUD_FAILURE_GUIDANCE: string;
|
|
8
|
+
/**
|
|
9
|
+
* クラウド実行の失敗結果にのみ、前提条件の案内を output へ追記する。
|
|
10
|
+
* ローカル実行(cloud が false)や完了結果には一切追記しない。
|
|
11
|
+
* 案内文は output の前に置く。Slack 通知は末尾1000文字を切り出すため、後ろに置くと
|
|
12
|
+
* 実際のエラー本文が案内文に押し出されて読めなくなる。
|
|
13
|
+
*/
|
|
14
|
+
export declare function appendCloudFailureGuidance(result: TaskResult, cloud: boolean | undefined): TaskResult;
|
|
15
|
+
/**
|
|
16
|
+
* 子プロセスの終了状態を completed / failed に分類し、通知用の出力文字列を組み立てる。
|
|
17
|
+
*
|
|
18
|
+
* exit 0 でも stdout が空の場合は失敗として扱う。claude -p は正常完了時に必ず最終
|
|
19
|
+
* レポートを stdout へ出力するため、空のままの exit 0 は「スキルプリアンブルの
|
|
20
|
+
* `!` コマンド失敗などでモデル未起動のままセッションが中断された」ことを意味する。
|
|
21
|
+
* これを完了扱いにするとワーカーがラベル遷移を進めてしまい、トリガーラベルが
|
|
22
|
+
* 再装填される triage-pr では毎ポーリングで空振りセッションを起動し続ける
|
|
23
|
+
* 無限リトライループになる。
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildTaskResult(code: number | null, stdout: string, stderrTail: string): TaskResult;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code のセッション transcript(JSONL)から最終レポートを取り出す。
|
|
3
|
+
*
|
|
4
|
+
* herdr モードには `claude -p` の stdout に相当するものが無いため、かつては
|
|
5
|
+
* `herdr pane read` で回収した端末内容をそのまま Slack 通知に載せていた。しかし
|
|
6
|
+
* TUI のペインは「会話ログ + 空行パディング + 入力ボックス + ステータスバー」で
|
|
7
|
+
* 構成されており、通知は末尾1000文字だけを切り出すため、実際に届くのは
|
|
8
|
+
* 罫線・`❯` プロンプト・`ctx 7% │ 5h 26%` といった TUI の装飾だけになる。
|
|
9
|
+
*
|
|
10
|
+
* 一方 Claude Code は会話を `~/.claude/projects/<エンコード済みcwd>/<session-id>.jsonl`
|
|
11
|
+
* へ書き出しており、そこには整形前の最終アシスタントメッセージがそのまま入っている。
|
|
12
|
+
* herdr は `agent get` でペインの claude セッションIDを返すため、それを鍵に
|
|
13
|
+
* transcript を引けば TUI をパースせずに正確な最終レポートが得られる。
|
|
14
|
+
*/
|
|
15
|
+
export declare function transcriptRoot(): string;
|
|
16
|
+
export declare function findTranscriptPath(sessionId: string, root?: string): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* transcript の最終アシスタント発言(テキスト部分)を返す。
|
|
19
|
+
*
|
|
20
|
+
* - サブエージェントの発言(`isSidechain: true`)は除外する。メインエージェントの
|
|
21
|
+
* 完了報告こそが `claude -p` の stdout 相当であり、サブエージェントの報告は途中経過
|
|
22
|
+
* - テキストブロックを持たないエントリ(tool_use だけのターン)は飛ばす
|
|
23
|
+
* - 壊れた行は無視する(書き込み途中の末尾行など)
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractFinalAssistantText(jsonl: string): string;
|
|
26
|
+
/** セッションIDから最終レポートを読む。見つからない・空なら空文字列を返す。 */
|
|
27
|
+
export declare function readFinalReport(sessionId: string | undefined, root?: string): string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type RunMode = "default" | "herdr";
|
|
2
|
+
export declare const DEFAULT_RUN_MODE: RunMode;
|
|
3
|
+
export declare const DEFAULT_ADVISOR_ENABLED = false;
|
|
4
|
+
export type PermissionMode = "manual" | "auto" | "acceptEdits" | "dontAsk" | "plan" | "bypassPermissions";
|
|
5
|
+
export declare const PERMISSION_MODES: readonly PermissionMode[];
|
|
6
|
+
export declare const DEFAULT_PERMISSION_MODE: PermissionMode;
|
|
7
|
+
export interface UserConfig {
|
|
8
|
+
mode: RunMode;
|
|
9
|
+
advisor: boolean;
|
|
10
|
+
permission: PermissionMode;
|
|
11
|
+
projects: Record<string, string>;
|
|
12
|
+
projectGroups: Record<string, string[]>;
|
|
13
|
+
}
|
|
14
|
+
export interface ResolvedProject {
|
|
15
|
+
name: string;
|
|
16
|
+
path: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class UserConfigError extends Error {
|
|
19
|
+
constructor(message: string);
|
|
20
|
+
}
|
|
21
|
+
export declare function getUserConfigPath(): string;
|
|
22
|
+
export declare function loadUserConfig(): UserConfig;
|
|
23
|
+
export declare function getRunMode(): RunMode;
|
|
24
|
+
export declare function resetRunModeCache(): void;
|
|
25
|
+
export declare function isAdvisorEnabled(): boolean;
|
|
26
|
+
export declare function resetAdvisorCache(): void;
|
|
27
|
+
export declare function getPermissionMode(): PermissionMode;
|
|
28
|
+
export declare function resetPermissionModeCache(): void;
|
|
29
|
+
export declare function findProjectNameByPath(path: string): string | undefined;
|
|
30
|
+
export declare function resolveTargetProjects(requested: string[], config: UserConfig): ResolvedProject[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const answerIssueQuestionsWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const applyUiDesignWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const checkDependabotWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createIssueWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ClosingPrRef } from "../gh";
|
|
2
|
+
export declare function formatSessionReport(output: string): string;
|
|
3
|
+
export declare function selectOwnedClosingPr(candidates: ClosingPrRef[], ctx: {
|
|
4
|
+
cloud: boolean;
|
|
5
|
+
expectedHeadRefName: string;
|
|
6
|
+
baseBranch: string;
|
|
7
|
+
startedAt: number;
|
|
8
|
+
now: number;
|
|
9
|
+
}): number | null;
|
|
10
|
+
export declare function verifyPrCreated(issueNumber: number, worktreeId: string, output: string, ctx: {
|
|
11
|
+
cloud: boolean;
|
|
12
|
+
baseBranch: string;
|
|
13
|
+
startedAt: number;
|
|
14
|
+
}): Promise<boolean | void>;
|
|
15
|
+
export declare const execIssueWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const fixReviewPointWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Issue } from "../gh";
|
|
2
|
+
import type { WorkerDefinition } from "./worker-definition";
|
|
3
|
+
export declare const consumableTriggerLabels: (triggerLabels: string[]) => string[];
|
|
4
|
+
export type PreflightResult = "proceed" | "skip" | "mark-pr-created";
|
|
5
|
+
export interface IssueWorkerConfig {
|
|
6
|
+
name: string;
|
|
7
|
+
command: string;
|
|
8
|
+
triggerLabels: string[];
|
|
9
|
+
excludeLabels?: string[];
|
|
10
|
+
epicFilterTarget?: "parent" | "self";
|
|
11
|
+
preflight?: (issue: Issue) => Promise<PreflightResult>;
|
|
12
|
+
onCompleted?: (issueNumber: number, worktreeId: string, output: string, ctx: {
|
|
13
|
+
cloud: boolean;
|
|
14
|
+
baseBranch: string;
|
|
15
|
+
startedAt: number;
|
|
16
|
+
}) => Promise<boolean | void>;
|
|
17
|
+
}
|
|
18
|
+
export declare function createIssuePollingWorker(config: IssueWorkerConfig): WorkerDefinition;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type PullRequestWithChecks } from "../gh";
|
|
2
|
+
import type { WorkerDefinition } from "./worker-definition";
|
|
3
|
+
export interface PrWorkerConfig {
|
|
4
|
+
name: string;
|
|
5
|
+
command: string;
|
|
6
|
+
triggerLabel: string;
|
|
7
|
+
excludeLabels?: string[];
|
|
8
|
+
/**
|
|
9
|
+
* 完了時にトリガーラベルを外さない。`dependencies` のように GitHub 側(Dependabot)が
|
|
10
|
+
* 付ける分類ラベルをトリガーに使うワーカー向け。ワーカーが外すとPRの分類情報が失われる。
|
|
11
|
+
* 使う場合、再ポーリングで無限に拾い続けないよう `onFinally` で `excludeLabels` に
|
|
12
|
+
* 含まれるラベルを必ず付けること。
|
|
13
|
+
*/
|
|
14
|
+
keepTriggerLabel?: boolean;
|
|
15
|
+
onCompleted?: (pr: PullRequestWithChecks, output: string) => Promise<void>;
|
|
16
|
+
onFinally?: (pr: PullRequestWithChecks) => Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
export declare function createPrPollingWorker(config: PrWorkerConfig): WorkerDefinition;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { WorkerDefinition } from "./worker-definition";
|
|
2
|
+
export declare const SCHEDULE_INTERVAL_HOURS = 24;
|
|
3
|
+
export interface ScheduledWorkerConfig {
|
|
4
|
+
name: string;
|
|
5
|
+
command: string;
|
|
6
|
+
enabled?: () => boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function createScheduledWorker(config: ScheduledWorkerConfig): WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const triageCreatedIssueWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const DESIGN_REFERENCE_HEADING = "## UI\u30C7\u30B6\u30A4\u30F3";
|
|
2
|
+
export declare function designBranchName(issueNumber: number): string;
|
|
3
|
+
export declare function extractDesignFilePath(body: string): string | null;
|
|
4
|
+
export declare function hasDesignReference(body: string): boolean;
|
|
5
|
+
export declare function shouldVerifyDesignFileExists(cloud: boolean): boolean;
|
|
6
|
+
export type DesignPrDisposition = "proceed" | "wait" | "needs-human";
|
|
7
|
+
export declare function classifyDesignPr(pr: {
|
|
8
|
+
state: string;
|
|
9
|
+
mergedAt: string | null;
|
|
10
|
+
} | null): DesignPrDisposition;
|
|
11
|
+
export declare function designPrMissingComment(issueNumber: number): string;
|
|
12
|
+
export declare function designPrNotCreatedComment(issueNumber: number): string;
|
|
13
|
+
export declare function designReferenceMissingComment(issueNumber: number): string;
|
|
14
|
+
export declare function designFileMissingComment(issueNumber: number, designFilePath: string): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const updateCodingGuidelinesWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const updateDesignMdWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const updateIssueWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const updateRequirementRulesWorker: import("./worker-definition").WorkerDefinition;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type WorkerKind = "issue" | "pr" | "scheduled";
|
|
2
|
+
export interface WorkerStartOptions {
|
|
3
|
+
epicFilters?: number[];
|
|
4
|
+
labelFilters?: string[];
|
|
5
|
+
}
|
|
6
|
+
export declare const WORKER_DEFINITION: unique symbol;
|
|
7
|
+
export interface WorkerDefinition {
|
|
8
|
+
readonly [WORKER_DEFINITION]: true;
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly kind: WorkerKind;
|
|
11
|
+
readonly start: (opts?: WorkerStartOptions) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare function defineWorker(def: {
|
|
14
|
+
name: string;
|
|
15
|
+
kind: WorkerKind;
|
|
16
|
+
start: (opts?: WorkerStartOptions) => Promise<void>;
|
|
17
|
+
}): WorkerDefinition;
|
|
18
|
+
export declare function isWorkerDefinition(value: unknown): value is WorkerDefinition;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ローカルブランチを削除する。worktree 削除後のブランチ残留(リーク)防止用。
|
|
3
|
+
* 存在しないブランチは黙って無視し、他の worktree で checkout 中などの失敗のみログする。
|
|
4
|
+
*/
|
|
5
|
+
export declare function deleteLocalBranch(branchName: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* ローカルブランチが存在するかを返す。
|
|
8
|
+
* deleteLocalBranch が「他の worktree で checkout 中」などの理由で削除に失敗しても
|
|
9
|
+
* エラーはログに留まるため、削除後に本当に消えたかはこの関数で確認する。
|
|
10
|
+
*/
|
|
11
|
+
export declare function localBranchExists(branchName: string): Promise<boolean>;
|
|
12
|
+
export declare function getWorktreePath(worktreeId: string): string;
|
|
13
|
+
export declare function createWorktreeFromBranch(worktreeId: string, baseBranch: string): Promise<void>;
|
|
14
|
+
export declare function removeWorktree(worktreeId: string): Promise<void>;
|
|
15
|
+
export declare function removeWorktreeByBranch(branchName: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* 前回のクラッシュ・強制終了などで残った worktree を起動時に一括回収する。
|
|
18
|
+
* generateWorktreeName() 形式(adj-noun-4桁)の名前だけを対象にすることで、
|
|
19
|
+
* ユーザーが対話セッションで使用中の claude worktree を誤って削除しない。
|
|
20
|
+
*/
|
|
21
|
+
export declare function removeStaleWorktrees(): Promise<void>;
|