chief-clancy 0.7.0 → 0.7.2

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 (189) hide show
  1. package/README.md +4 -1
  2. package/dist/bundle/clancy-once.js +50 -50
  3. package/package.json +5 -2
  4. package/src/roles/planner/commands/approve-plan.md +3 -0
  5. package/src/roles/planner/commands/plan.md +1 -0
  6. package/src/roles/planner/workflows/approve-plan.md +3 -1
  7. package/src/roles/planner/workflows/plan.md +5 -5
  8. package/src/roles/strategist/commands/approve-brief.md +1 -0
  9. package/src/roles/strategist/workflows/approve-brief.md +3 -1
  10. package/src/roles/strategist/workflows/brief.md +38 -20
  11. package/src/templates/.env.example.github +19 -1
  12. package/src/templates/.env.example.jira +25 -1
  13. package/src/templates/.env.example.linear +19 -1
  14. package/dist/schemas/bitbucket-pr.d.ts +0 -137
  15. package/dist/schemas/bitbucket-pr.d.ts.map +0 -1
  16. package/dist/schemas/bitbucket-pr.js +0 -75
  17. package/dist/schemas/bitbucket-pr.js.map +0 -1
  18. package/dist/schemas/env.d.ts +0 -170
  19. package/dist/schemas/env.d.ts.map +0 -1
  20. package/dist/schemas/env.js +0 -69
  21. package/dist/schemas/env.js.map +0 -1
  22. package/dist/schemas/github-issues.d.ts +0 -105
  23. package/dist/schemas/github-issues.d.ts.map +0 -1
  24. package/dist/schemas/github-issues.js +0 -54
  25. package/dist/schemas/github-issues.js.map +0 -1
  26. package/dist/schemas/gitlab-mr.d.ts +0 -73
  27. package/dist/schemas/gitlab-mr.d.ts.map +0 -1
  28. package/dist/schemas/gitlab-mr.js +0 -33
  29. package/dist/schemas/gitlab-mr.js.map +0 -1
  30. package/dist/schemas/jira.d.ts +0 -59
  31. package/dist/schemas/jira.d.ts.map +0 -1
  32. package/dist/schemas/jira.js +0 -56
  33. package/dist/schemas/jira.js.map +0 -1
  34. package/dist/schemas/linear.d.ts +0 -108
  35. package/dist/schemas/linear.d.ts.map +0 -1
  36. package/dist/schemas/linear.js +0 -84
  37. package/dist/schemas/linear.js.map +0 -1
  38. package/dist/scripts/afk/afk.d.ts +0 -21
  39. package/dist/scripts/afk/afk.d.ts.map +0 -1
  40. package/dist/scripts/afk/afk.js +0 -145
  41. package/dist/scripts/afk/afk.js.map +0 -1
  42. package/dist/scripts/afk/report/report.d.ts +0 -47
  43. package/dist/scripts/afk/report/report.d.ts.map +0 -1
  44. package/dist/scripts/afk/report/report.js +0 -194
  45. package/dist/scripts/afk/report/report.js.map +0 -1
  46. package/dist/scripts/board/github/github.d.ts +0 -104
  47. package/dist/scripts/board/github/github.d.ts.map +0 -1
  48. package/dist/scripts/board/github/github.js +0 -291
  49. package/dist/scripts/board/github/github.js.map +0 -1
  50. package/dist/scripts/board/jira/jira.d.ts +0 -139
  51. package/dist/scripts/board/jira/jira.d.ts.map +0 -1
  52. package/dist/scripts/board/jira/jira.js +0 -378
  53. package/dist/scripts/board/jira/jira.js.map +0 -1
  54. package/dist/scripts/board/linear/linear.d.ts +0 -129
  55. package/dist/scripts/board/linear/linear.d.ts.map +0 -1
  56. package/dist/scripts/board/linear/linear.js +0 -393
  57. package/dist/scripts/board/linear/linear.js.map +0 -1
  58. package/dist/scripts/once/board-ops/board-ops.d.ts +0 -26
  59. package/dist/scripts/once/board-ops/board-ops.d.ts.map +0 -1
  60. package/dist/scripts/once/board-ops/board-ops.js +0 -113
  61. package/dist/scripts/once/board-ops/board-ops.js.map +0 -1
  62. package/dist/scripts/once/cost/cost.d.ts +0 -10
  63. package/dist/scripts/once/cost/cost.d.ts.map +0 -1
  64. package/dist/scripts/once/cost/cost.js +0 -23
  65. package/dist/scripts/once/cost/cost.js.map +0 -1
  66. package/dist/scripts/once/deliver/deliver.d.ts +0 -37
  67. package/dist/scripts/once/deliver/deliver.d.ts.map +0 -1
  68. package/dist/scripts/once/deliver/deliver.js +0 -253
  69. package/dist/scripts/once/deliver/deliver.js.map +0 -1
  70. package/dist/scripts/once/fetch-ticket/fetch-ticket.d.ts +0 -22
  71. package/dist/scripts/once/fetch-ticket/fetch-ticket.d.ts.map +0 -1
  72. package/dist/scripts/once/fetch-ticket/fetch-ticket.js +0 -123
  73. package/dist/scripts/once/fetch-ticket/fetch-ticket.js.map +0 -1
  74. package/dist/scripts/once/git-token/git-token.d.ts +0 -13
  75. package/dist/scripts/once/git-token/git-token.d.ts.map +0 -1
  76. package/dist/scripts/once/git-token/git-token.js +0 -30
  77. package/dist/scripts/once/git-token/git-token.js.map +0 -1
  78. package/dist/scripts/once/lock/lock.d.ts +0 -17
  79. package/dist/scripts/once/lock/lock.d.ts.map +0 -1
  80. package/dist/scripts/once/lock/lock.js +0 -70
  81. package/dist/scripts/once/lock/lock.js.map +0 -1
  82. package/dist/scripts/once/once.d.ts +0 -12
  83. package/dist/scripts/once/once.d.ts.map +0 -1
  84. package/dist/scripts/once/once.js +0 -452
  85. package/dist/scripts/once/once.js.map +0 -1
  86. package/dist/scripts/once/pr-creation/pr-creation.d.ts +0 -11
  87. package/dist/scripts/once/pr-creation/pr-creation.d.ts.map +0 -1
  88. package/dist/scripts/once/pr-creation/pr-creation.js +0 -50
  89. package/dist/scripts/once/pr-creation/pr-creation.js.map +0 -1
  90. package/dist/scripts/once/resume/resume.d.ts +0 -24
  91. package/dist/scripts/once/resume/resume.d.ts.map +0 -1
  92. package/dist/scripts/once/resume/resume.js +0 -159
  93. package/dist/scripts/once/resume/resume.js.map +0 -1
  94. package/dist/scripts/once/rework/rework.d.ts +0 -32
  95. package/dist/scripts/once/rework/rework.d.ts.map +0 -1
  96. package/dist/scripts/once/rework/rework.js +0 -208
  97. package/dist/scripts/once/rework/rework.js.map +0 -1
  98. package/dist/scripts/once/types/types.d.ts +0 -13
  99. package/dist/scripts/once/types/types.d.ts.map +0 -1
  100. package/dist/scripts/once/types/types.js +0 -2
  101. package/dist/scripts/once/types/types.js.map +0 -1
  102. package/dist/scripts/shared/branch/branch.d.ts +0 -50
  103. package/dist/scripts/shared/branch/branch.d.ts.map +0 -1
  104. package/dist/scripts/shared/branch/branch.js +0 -61
  105. package/dist/scripts/shared/branch/branch.js.map +0 -1
  106. package/dist/scripts/shared/claude-cli/claude-cli.d.ts +0 -31
  107. package/dist/scripts/shared/claude-cli/claude-cli.d.ts.map +0 -1
  108. package/dist/scripts/shared/claude-cli/claude-cli.js +0 -60
  109. package/dist/scripts/shared/claude-cli/claude-cli.js.map +0 -1
  110. package/dist/scripts/shared/env-schema/env-schema.d.ts +0 -27
  111. package/dist/scripts/shared/env-schema/env-schema.d.ts.map +0 -1
  112. package/dist/scripts/shared/env-schema/env-schema.js +0 -47
  113. package/dist/scripts/shared/env-schema/env-schema.js.map +0 -1
  114. package/dist/scripts/shared/feasibility/feasibility.d.ts +0 -30
  115. package/dist/scripts/shared/feasibility/feasibility.d.ts.map +0 -1
  116. package/dist/scripts/shared/feasibility/feasibility.js +0 -68
  117. package/dist/scripts/shared/feasibility/feasibility.js.map +0 -1
  118. package/dist/scripts/shared/format/format.d.ts +0 -11
  119. package/dist/scripts/shared/format/format.d.ts.map +0 -1
  120. package/dist/scripts/shared/format/format.js +0 -23
  121. package/dist/scripts/shared/format/format.js.map +0 -1
  122. package/dist/scripts/shared/git-ops/git-ops.d.ts +0 -90
  123. package/dist/scripts/shared/git-ops/git-ops.d.ts.map +0 -1
  124. package/dist/scripts/shared/git-ops/git-ops.js +0 -190
  125. package/dist/scripts/shared/git-ops/git-ops.js.map +0 -1
  126. package/dist/scripts/shared/http/http.d.ts +0 -54
  127. package/dist/scripts/shared/http/http.d.ts.map +0 -1
  128. package/dist/scripts/shared/http/http.js +0 -76
  129. package/dist/scripts/shared/http/http.js.map +0 -1
  130. package/dist/scripts/shared/notify/notify.d.ts +0 -46
  131. package/dist/scripts/shared/notify/notify.d.ts.map +0 -1
  132. package/dist/scripts/shared/notify/notify.js +0 -88
  133. package/dist/scripts/shared/notify/notify.js.map +0 -1
  134. package/dist/scripts/shared/preflight/preflight.d.ts +0 -40
  135. package/dist/scripts/shared/preflight/preflight.d.ts.map +0 -1
  136. package/dist/scripts/shared/preflight/preflight.js +0 -96
  137. package/dist/scripts/shared/preflight/preflight.js.map +0 -1
  138. package/dist/scripts/shared/progress/progress.d.ts +0 -88
  139. package/dist/scripts/shared/progress/progress.d.ts.map +0 -1
  140. package/dist/scripts/shared/progress/progress.js +0 -210
  141. package/dist/scripts/shared/progress/progress.js.map +0 -1
  142. package/dist/scripts/shared/prompt/prompt.d.ts +0 -58
  143. package/dist/scripts/shared/prompt/prompt.d.ts.map +0 -1
  144. package/dist/scripts/shared/prompt/prompt.js +0 -123
  145. package/dist/scripts/shared/prompt/prompt.js.map +0 -1
  146. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts +0 -82
  147. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts.map +0 -1
  148. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js +0 -301
  149. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js.map +0 -1
  150. package/dist/scripts/shared/pull-request/github/github.d.ts +0 -72
  151. package/dist/scripts/shared/pull-request/github/github.d.ts.map +0 -1
  152. package/dist/scripts/shared/pull-request/github/github.js +0 -226
  153. package/dist/scripts/shared/pull-request/github/github.js.map +0 -1
  154. package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts +0 -74
  155. package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts.map +0 -1
  156. package/dist/scripts/shared/pull-request/gitlab/gitlab.js +0 -220
  157. package/dist/scripts/shared/pull-request/gitlab/gitlab.js.map +0 -1
  158. package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts +0 -31
  159. package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts.map +0 -1
  160. package/dist/scripts/shared/pull-request/post-pr/post-pr.js +0 -61
  161. package/dist/scripts/shared/pull-request/post-pr/post-pr.js.map +0 -1
  162. package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts +0 -41
  163. package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts.map +0 -1
  164. package/dist/scripts/shared/pull-request/pr-body/pr-body.js +0 -93
  165. package/dist/scripts/shared/pull-request/pr-body/pr-body.js.map +0 -1
  166. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts +0 -23
  167. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts.map +0 -1
  168. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js +0 -30
  169. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js.map +0 -1
  170. package/dist/scripts/shared/remote/remote.d.ts +0 -41
  171. package/dist/scripts/shared/remote/remote.d.ts.map +0 -1
  172. package/dist/scripts/shared/remote/remote.js +0 -227
  173. package/dist/scripts/shared/remote/remote.js.map +0 -1
  174. package/dist/types/board.d.ts +0 -13
  175. package/dist/types/board.d.ts.map +0 -1
  176. package/dist/types/board.js +0 -5
  177. package/dist/types/board.js.map +0 -1
  178. package/dist/types/index.d.ts +0 -4
  179. package/dist/types/index.d.ts.map +0 -1
  180. package/dist/types/index.js +0 -2
  181. package/dist/types/index.js.map +0 -1
  182. package/dist/types/remote.d.ts +0 -55
  183. package/dist/types/remote.d.ts.map +0 -1
  184. package/dist/types/remote.js +0 -5
  185. package/dist/types/remote.js.map +0 -1
  186. package/dist/utils/parse-json/parse-json.d.ts +0 -20
  187. package/dist/utils/parse-json/parse-json.d.ts.map +0 -1
  188. package/dist/utils/parse-json/parse-json.js +0 -27
  189. package/dist/utils/parse-json/parse-json.js.map +0 -1
@@ -1,159 +0,0 @@
1
- /**
2
- * Resume detection and execution for crash recovery.
3
- *
4
- * After a stale lock is cleaned up, checks if the ticket branch exists
5
- * locally with uncommitted or unpushed work. If so, offers to resume
6
- * (automatic in AFK mode, interactive otherwise).
7
- */
8
- import { execFileSync } from 'node:child_process';
9
- import { branchExists, checkout, hasUncommittedChanges, pushBranch, } from '../../../scripts/shared/git-ops/git-ops.js';
10
- import { appendProgress } from '../../../scripts/shared/progress/progress.js';
11
- import { buildPrBody } from '../../../scripts/shared/pull-request/pr-body/pr-body.js';
12
- import { detectRemote } from '../../../scripts/shared/remote/remote.js';
13
- import { dim, green, yellow } from '../../../utils/ansi/ansi.js';
14
- import { sharedEnv } from '../board-ops/board-ops.js';
15
- import { attemptPrCreation } from '../pr-creation/pr-creation.js';
16
- // ─── Detection ───────────────────────────────────────────────────────────────
17
- /**
18
- * Check if the ticket branch from a stale lock has recoverable work.
19
- *
20
- * @param lock - The stale lock data.
21
- * @returns Resume info if the branch has work to recover, undefined otherwise.
22
- */
23
- export function detectResume(lock) {
24
- const branch = lock.ticketBranch;
25
- if (!branchExists(branch)) {
26
- return undefined;
27
- }
28
- // Save current branch, switch to the ticket branch to inspect it
29
- let previousBranch;
30
- try {
31
- previousBranch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
32
- encoding: 'utf8',
33
- }).trim();
34
- }
35
- catch {
36
- return undefined;
37
- }
38
- try {
39
- checkout(branch);
40
- }
41
- catch {
42
- return undefined;
43
- }
44
- let uncommitted = false;
45
- let unpushed = false;
46
- try {
47
- uncommitted = hasUncommittedChanges();
48
- }
49
- catch {
50
- // Ignore — treat as no uncommitted changes
51
- }
52
- try {
53
- // Check for unpushed commits (commits on branch not on remote)
54
- const log = execFileSync('git', ['log', `origin/${branch}..${branch}`, '--oneline'], { encoding: 'utf8' }).trim();
55
- unpushed = log.length > 0;
56
- }
57
- catch {
58
- // Remote branch may not exist — check if there are any commits ahead of target
59
- try {
60
- const log = execFileSync('git', ['log', `origin/${lock.targetBranch}..${branch}`, '--oneline'], { encoding: 'utf8' }).trim();
61
- unpushed = log.length > 0;
62
- }
63
- catch {
64
- // Ignore — treat as no unpushed commits
65
- }
66
- }
67
- // Restore original branch
68
- try {
69
- checkout(previousBranch);
70
- }
71
- catch {
72
- // Best-effort
73
- }
74
- if (!uncommitted && !unpushed) {
75
- return undefined;
76
- }
77
- return { branch, hasUncommitted: uncommitted, hasUnpushed: unpushed };
78
- }
79
- // ─── Execution ───────────────────────────────────────────────────────────────
80
- /**
81
- * Resume a crashed session: commit uncommitted changes, push, and create a PR.
82
- *
83
- * @param config - Board configuration.
84
- * @param lock - The stale lock data.
85
- * @param resumeInfo - The resume detection result.
86
- * @returns `true` if resume succeeded.
87
- */
88
- export async function executeResume(config, lock, resumeInfo) {
89
- try {
90
- checkout(resumeInfo.branch);
91
- // Commit uncommitted changes
92
- // Note: git add -A stages everything. The credential guard hook doesn't
93
- // run here (direct git, not via Claude). Acceptable for crash recovery —
94
- // the branch was already in-flight from a Claude session.
95
- if (resumeInfo.hasUncommitted) {
96
- try {
97
- execFileSync('git', ['add', '-A'], { encoding: 'utf8' });
98
- execFileSync('git', ['commit', '-m', `fix(${lock.ticketKey}): resume after crash`], { encoding: 'utf8' });
99
- console.log(green(` ✓ Committed in-progress work for ${lock.ticketKey}`));
100
- }
101
- catch {
102
- console.log(yellow(` ⚠ Could not commit changes on ${resumeInfo.branch}`));
103
- return false;
104
- }
105
- }
106
- // Push
107
- const pushed = pushBranch(resumeInfo.branch);
108
- if (!pushed) {
109
- console.log(yellow(` ⚠ Could not push ${resumeInfo.branch} to origin`));
110
- return false;
111
- }
112
- console.log(green(` ✓ Pushed ${resumeInfo.branch}`));
113
- // Attempt PR creation
114
- const platformOverride = sharedEnv(config).CLANCY_GIT_PLATFORM;
115
- const remote = detectRemote(platformOverride);
116
- const prTitle = `feat(${lock.ticketKey}): ${lock.ticketTitle}`;
117
- const prBody = buildPrBody(config, {
118
- key: lock.ticketKey,
119
- title: lock.ticketTitle,
120
- description: '',
121
- provider: config.provider,
122
- }, lock.targetBranch);
123
- if (remote.host !== 'none' &&
124
- remote.host !== 'unknown' &&
125
- remote.host !== 'azure') {
126
- const pr = await attemptPrCreation(config, remote, resumeInfo.branch, lock.targetBranch, prTitle, prBody);
127
- if (pr?.ok) {
128
- console.log(green(` ✓ PR created: ${pr.url}`));
129
- appendProgress(process.cwd(), lock.ticketKey, lock.ticketTitle, 'RESUMED', pr.number, lock.parentKey && lock.parentKey !== 'none'
130
- ? lock.parentKey
131
- : undefined);
132
- }
133
- else {
134
- console.log(dim(' Branch pushed — create a PR manually.'));
135
- appendProgress(process.cwd(), lock.ticketKey, lock.ticketTitle, 'RESUMED', undefined, lock.parentKey && lock.parentKey !== 'none'
136
- ? lock.parentKey
137
- : undefined);
138
- }
139
- }
140
- else {
141
- appendProgress(process.cwd(), lock.ticketKey, lock.ticketTitle, 'RESUMED', undefined, lock.parentKey && lock.parentKey !== 'none'
142
- ? lock.parentKey
143
- : undefined);
144
- }
145
- // Switch back to target branch
146
- try {
147
- checkout(lock.targetBranch);
148
- }
149
- catch {
150
- // Best-effort
151
- }
152
- return true;
153
- }
154
- catch (err) {
155
- console.log(yellow(` ⚠ Resume failed: ${err instanceof Error ? err.message : String(err)}`));
156
- return false;
157
- }
158
- }
159
- //# sourceMappingURL=resume.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/scripts/once/resume/resume.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- import type { BoardConfig } from '../../../scripts/shared/env-schema/env-schema.js';
2
- import type { FetchedTicket } from '../types/types.js';
3
- /**
4
- * Check open PRs for review feedback requesting changes.
5
- *
6
- * Scans progress.txt for tickets with status PR_CREATED, then checks
7
- * the corresponding PR's review state on the detected remote platform.
8
- * If a reviewer has requested changes, returns the ticket and feedback.
9
- *
10
- * This is best-effort — errors are swallowed so the orchestrator
11
- * can fall through to fresh ticket fetch.
12
- */
13
- export declare function fetchReworkFromPrReview(config: BoardConfig): Promise<{
14
- ticket: FetchedTicket;
15
- feedback: string[];
16
- prNumber: number;
17
- discussionIds?: string[];
18
- reviewers: string[];
19
- } | undefined>;
20
- /**
21
- * Build a rework comment to post on the PR after pushing fixes.
22
- *
23
- * Prefixed with `[clancy]` (not `Rework:`) so it does NOT trigger
24
- * rework detection on the next cycle.
25
- */
26
- export declare function buildReworkComment(feedback: string[]): string;
27
- /**
28
- * Perform post-rework actions: comment on PR, re-request review (GitHub),
29
- * resolve threads (GitLab). All best-effort — failures warn but don't block.
30
- */
31
- export declare function postReworkActions(config: BoardConfig, prNumber: number, feedback: string[], discussionIds?: string[], reviewers?: string[]): Promise<void>;
32
- //# sourceMappingURL=rework.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rework.d.ts","sourceRoot":"","sources":["../../../../src/scripts/once/rework/rework.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AA8B7E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAIvD;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CACvE;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,GACD,SAAS,CACZ,CA8KA;AAID;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAW7D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,CAAC,EAAE,MAAM,EAAE,EACxB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,OAAO,CAAC,IAAI,CAAC,CAiHf"}
@@ -1,208 +0,0 @@
1
- import { resolveUsername } from '../../../scripts/board/github/github.js';
2
- import { computeTicketBranch } from '../../../scripts/shared/branch/branch.js';
3
- import { findEntriesWithStatus } from '../../../scripts/shared/progress/progress.js';
4
- import { checkPrReviewState as checkBitbucketPrReviewState, checkServerPrReviewState as checkBitbucketServerPrReviewState, fetchPrReviewComments as fetchBitbucketPrReviewComments, fetchServerPrReviewComments as fetchBitbucketServerPrReviewComments, postCloudPrComment, postServerPrComment, } from '../../../scripts/shared/pull-request/bitbucket/bitbucket.js';
5
- import { checkPrReviewState as checkGitHubPrReviewState, fetchPrReviewComments as fetchGitHubPrReviewComments, postPrComment as postGitHubPrComment, requestReview as requestGitHubReview, } from '../../../scripts/shared/pull-request/github/github.js';
6
- import { checkMrReviewState as checkGitLabMrReviewState, fetchMrReviewComments as fetchGitLabMrReviewComments, postMrNote, resolveDiscussions, } from '../../../scripts/shared/pull-request/gitlab/gitlab.js';
7
- import { buildApiBaseUrl, detectRemote, } from '../../../scripts/shared/remote/remote.js';
8
- import { dim } from '../../../utils/ansi/ansi.js';
9
- import { sharedEnv } from '../board-ops/board-ops.js';
10
- import { resolveGitToken } from '../git-token/git-token.js';
11
- // ─── PR-based rework detection ────────────────────────────────────────────────
12
- /**
13
- * Check open PRs for review feedback requesting changes.
14
- *
15
- * Scans progress.txt for tickets with status PR_CREATED, then checks
16
- * the corresponding PR's review state on the detected remote platform.
17
- * If a reviewer has requested changes, returns the ticket and feedback.
18
- *
19
- * This is best-effort — errors are swallowed so the orchestrator
20
- * can fall through to fresh ticket fetch.
21
- */
22
- export async function fetchReworkFromPrReview(config) {
23
- const prCreated = findEntriesWithStatus(process.cwd(), 'PR_CREATED');
24
- const reworked = findEntriesWithStatus(process.cwd(), 'REWORK');
25
- const pushed = findEntriesWithStatus(process.cwd(), 'PUSHED');
26
- const pushFailed = findEntriesWithStatus(process.cwd(), 'PUSH_FAILED');
27
- const candidates = [...prCreated, ...reworked, ...pushed, ...pushFailed];
28
- if (candidates.length === 0)
29
- return undefined;
30
- const platformOverride = sharedEnv(config).CLANCY_GIT_PLATFORM;
31
- const remote = detectRemote(platformOverride);
32
- if (remote.host === 'none' ||
33
- remote.host === 'unknown' ||
34
- remote.host === 'azure') {
35
- return undefined;
36
- }
37
- const creds = resolveGitToken(config, remote);
38
- if (!creds)
39
- return undefined;
40
- const apiBase = buildApiBaseUrl(remote, sharedEnv(config).CLANCY_GIT_API_URL);
41
- if (!apiBase)
42
- return undefined;
43
- // Resolve GitHub username for author filtering (GitHub only)
44
- let ghUsername;
45
- if (remote.host === 'github') {
46
- try {
47
- ghUsername = await resolveUsername(creds.token, apiBase);
48
- }
49
- catch {
50
- // Best-effort — skip author filtering if username resolution fails
51
- }
52
- }
53
- // Limit to first 5 candidates to avoid rate limits
54
- const toCheck = candidates.slice(0, 5);
55
- for (const entry of toCheck) {
56
- const branch = computeTicketBranch(config.provider, entry.key);
57
- // Convert progress timestamp (YYYY-MM-DD HH:MM) to ISO 8601 for API filtering.
58
- // Only comments created AFTER this timestamp should trigger rework,
59
- // preventing stale inline comments from causing infinite rework loops.
60
- // Parse UTC timestamp (YYYY-MM-DD HH:MM) to ISO 8601.
61
- // Falls back to undefined if timestamp is invalid (skips filtering).
62
- let since;
63
- if (entry.timestamp) {
64
- const date = new Date(entry.timestamp.replace(' ', 'T') + 'Z');
65
- since = Number.isNaN(date.getTime()) ? undefined : date.toISOString();
66
- }
67
- let reviewState;
68
- switch (remote.host) {
69
- case 'github':
70
- reviewState = await checkGitHubPrReviewState(creds.token, `${remote.owner}/${remote.repo}`, branch, remote.owner, apiBase, since, ghUsername);
71
- break;
72
- case 'gitlab':
73
- reviewState = await checkGitLabMrReviewState(creds.token, apiBase, remote.projectPath, branch, since);
74
- break;
75
- case 'bitbucket':
76
- reviewState = await checkBitbucketPrReviewState(creds.username, creds.token, remote.workspace, remote.repoSlug, branch, since);
77
- break;
78
- case 'bitbucket-server':
79
- reviewState = await checkBitbucketServerPrReviewState(creds.token, apiBase, remote.projectKey, remote.repoSlug, branch, since);
80
- break;
81
- }
82
- if (reviewState?.changesRequested) {
83
- // Fetch review comments for the PR
84
- let feedback = [];
85
- let discussionIds;
86
- switch (remote.host) {
87
- case 'github':
88
- feedback = await fetchGitHubPrReviewComments(creds.token, `${remote.owner}/${remote.repo}`, reviewState.prNumber, apiBase, since, ghUsername);
89
- break;
90
- case 'gitlab': {
91
- const mrResult = await fetchGitLabMrReviewComments(creds.token, apiBase, remote.projectPath, reviewState.prNumber, since);
92
- feedback = mrResult.comments;
93
- discussionIds = mrResult.discussionIds;
94
- break;
95
- }
96
- case 'bitbucket':
97
- feedback = await fetchBitbucketPrReviewComments(creds.username, creds.token, remote.workspace, remote.repoSlug, reviewState.prNumber, since);
98
- break;
99
- case 'bitbucket-server':
100
- feedback = await fetchBitbucketServerPrReviewComments(creds.token, apiBase, remote.projectKey, remote.repoSlug, reviewState.prNumber, since);
101
- break;
102
- }
103
- const ticket = {
104
- key: entry.key,
105
- title: entry.summary,
106
- description: entry.summary,
107
- parentInfo: entry.parent ?? 'none',
108
- blockers: 'None',
109
- };
110
- return {
111
- ticket,
112
- feedback,
113
- prNumber: reviewState.prNumber,
114
- discussionIds,
115
- reviewers: reviewState.reviewers ?? [],
116
- };
117
- }
118
- }
119
- return undefined;
120
- }
121
- // ─── Post-rework actions ──────────────────────────────────────────────────
122
- /**
123
- * Build a rework comment to post on the PR after pushing fixes.
124
- *
125
- * Prefixed with `[clancy]` (not `Rework:`) so it does NOT trigger
126
- * rework detection on the next cycle.
127
- */
128
- export function buildReworkComment(feedback) {
129
- if (feedback.length === 0) {
130
- return '[clancy] Rework pushed addressing reviewer feedback.';
131
- }
132
- const count = feedback.length;
133
- const summary = feedback
134
- .slice(0, 3)
135
- .map((f) => `- ${f.slice(0, 80)}`)
136
- .join('\n');
137
- const suffix = feedback.length > 3 ? '\n- ...' : '';
138
- return `[clancy] Rework pushed addressing ${count} feedback item${count !== 1 ? 's' : ''}.\n\n${summary}${suffix}`;
139
- }
140
- /**
141
- * Perform post-rework actions: comment on PR, re-request review (GitHub),
142
- * resolve threads (GitLab). All best-effort — failures warn but don't block.
143
- */
144
- export async function postReworkActions(config, prNumber, feedback, discussionIds, reviewers) {
145
- const platformOverride = sharedEnv(config).CLANCY_GIT_PLATFORM;
146
- const remote = detectRemote(platformOverride);
147
- if (remote.host === 'none' ||
148
- remote.host === 'unknown' ||
149
- remote.host === 'azure') {
150
- return;
151
- }
152
- const creds = resolveGitToken(config, remote);
153
- if (!creds)
154
- return;
155
- const apiBase = buildApiBaseUrl(remote, sharedEnv(config).CLANCY_GIT_API_URL);
156
- if (!apiBase)
157
- return;
158
- const comment = buildReworkComment(feedback);
159
- // 1. Post rework comment
160
- try {
161
- let posted = false;
162
- switch (remote.host) {
163
- case 'github':
164
- posted = await postGitHubPrComment(creds.token, `${remote.owner}/${remote.repo}`, prNumber, comment, apiBase);
165
- break;
166
- case 'gitlab':
167
- posted = await postMrNote(creds.token, apiBase, remote.projectPath, prNumber, comment);
168
- break;
169
- case 'bitbucket':
170
- posted = await postCloudPrComment(creds.username, creds.token, remote.workspace, remote.repoSlug, prNumber, comment);
171
- break;
172
- case 'bitbucket-server':
173
- posted = await postServerPrComment(creds.token, apiBase, remote.projectKey, remote.repoSlug, prNumber, comment);
174
- break;
175
- }
176
- if (posted) {
177
- console.log(dim(' ✓ Posted rework comment'));
178
- }
179
- }
180
- catch {
181
- // Best-effort
182
- }
183
- // 2. GitLab: resolve addressed discussion threads
184
- if (remote.host === 'gitlab' && discussionIds && discussionIds.length > 0) {
185
- try {
186
- const resolved = await resolveDiscussions(creds.token, apiBase, remote.projectPath, prNumber, discussionIds);
187
- if (resolved > 0) {
188
- console.log(dim(` ✓ Resolved ${resolved} discussion thread${resolved !== 1 ? 's' : ''}`));
189
- }
190
- }
191
- catch {
192
- // Best-effort
193
- }
194
- }
195
- // 3. GitHub: re-request review from reviewers who requested changes
196
- if (remote.host === 'github' && reviewers && reviewers.length > 0) {
197
- try {
198
- const ok = await requestGitHubReview(creds.token, `${remote.owner}/${remote.repo}`, prNumber, reviewers, apiBase);
199
- if (ok) {
200
- console.log(dim(` ✓ Re-requested review from ${reviewers.join(', ')}`));
201
- }
202
- }
203
- catch {
204
- // Best-effort
205
- }
206
- }
207
- }
208
- //# sourceMappingURL=rework.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rework.js","sourceRoot":"","sources":["../../../../src/scripts/once/rework/rework.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /** Normalised ticket representation used within the once orchestrator. */
2
- export type FetchedTicket = {
3
- key: string;
4
- title: string;
5
- description: string;
6
- parentInfo: string;
7
- blockers: string;
8
- /** Linear internal issue ID — needed for state transitions. */
9
- linearIssueId?: string;
10
- /** Board-specific issue ID — needed for feedback fetching (e.g., Linear UUID). */
11
- issueId?: string;
12
- };
13
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/scripts/once/types/types.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/scripts/once/types/types.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- /**
2
- * Branch name computation for ticket workflows.
3
- *
4
- * Pure functions that compute feature and target branch names
5
- * based on the board provider and ticket metadata.
6
- */
7
- import type { BoardProvider } from '../../../types/index.js';
8
- /**
9
- * Compute the feature branch name for a ticket.
10
- *
11
- * - Jira/Linear: `feature/{key-lowercase}` (e.g., `feature/proj-123`)
12
- * - GitHub: `feature/issue-{number}` (e.g., `feature/issue-42`)
13
- *
14
- * @param provider - The board provider.
15
- * @param key - The ticket key (e.g., `'PROJ-123'`, `'#42'`, `'ENG-123'`).
16
- * @returns The feature branch name.
17
- *
18
- * @example
19
- * ```ts
20
- * computeTicketBranch('jira', 'PROJ-123'); // 'feature/proj-123'
21
- * computeTicketBranch('github', '#42'); // 'feature/issue-42'
22
- * computeTicketBranch('linear', 'ENG-123'); // 'feature/eng-123'
23
- * ```
24
- */
25
- export declare function computeTicketBranch(provider: BoardProvider, key: string): string;
26
- /**
27
- * Compute the target branch for merging.
28
- *
29
- * If the ticket has a parent (epic/milestone), branches from that parent's
30
- * branch. Otherwise falls back to the base branch.
31
- *
32
- * - Jira: epic key → `epic/{key-lowercase}`
33
- * - GitHub: milestone → `milestone/{slug}`
34
- * - Linear: parent identifier → `epic/{id-lowercase}`
35
- *
36
- * @param provider - The board provider.
37
- * @param baseBranch - The default base branch (e.g., `'main'`).
38
- * @param parent - Optional parent identifier (epic key, milestone title, parent ID).
39
- * @returns The target branch name.
40
- *
41
- * @example
42
- * ```ts
43
- * computeTargetBranch('jira', 'main', 'PROJ-100'); // 'epic/proj-100'
44
- * computeTargetBranch('github', 'main', 'Sprint 3'); // 'milestone/sprint-3'
45
- * computeTargetBranch('linear', 'main', 'ENG-50'); // 'epic/eng-50'
46
- * computeTargetBranch('jira', 'main'); // 'main'
47
- * ```
48
- */
49
- export declare function computeTargetBranch(provider: BoardProvider, baseBranch: string, parent?: string): string;
50
- //# sourceMappingURL=branch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../../../src/scripts/shared/branch/branch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,MAAM,GACV,MAAM,CAOR;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAaR"}
@@ -1,61 +0,0 @@
1
- /**
2
- * Compute the feature branch name for a ticket.
3
- *
4
- * - Jira/Linear: `feature/{key-lowercase}` (e.g., `feature/proj-123`)
5
- * - GitHub: `feature/issue-{number}` (e.g., `feature/issue-42`)
6
- *
7
- * @param provider - The board provider.
8
- * @param key - The ticket key (e.g., `'PROJ-123'`, `'#42'`, `'ENG-123'`).
9
- * @returns The feature branch name.
10
- *
11
- * @example
12
- * ```ts
13
- * computeTicketBranch('jira', 'PROJ-123'); // 'feature/proj-123'
14
- * computeTicketBranch('github', '#42'); // 'feature/issue-42'
15
- * computeTicketBranch('linear', 'ENG-123'); // 'feature/eng-123'
16
- * ```
17
- */
18
- export function computeTicketBranch(provider, key) {
19
- if (provider === 'github') {
20
- const number = key.replace('#', '');
21
- return `feature/issue-${number}`;
22
- }
23
- return `feature/${key.toLowerCase()}`;
24
- }
25
- /**
26
- * Compute the target branch for merging.
27
- *
28
- * If the ticket has a parent (epic/milestone), branches from that parent's
29
- * branch. Otherwise falls back to the base branch.
30
- *
31
- * - Jira: epic key → `epic/{key-lowercase}`
32
- * - GitHub: milestone → `milestone/{slug}`
33
- * - Linear: parent identifier → `epic/{id-lowercase}`
34
- *
35
- * @param provider - The board provider.
36
- * @param baseBranch - The default base branch (e.g., `'main'`).
37
- * @param parent - Optional parent identifier (epic key, milestone title, parent ID).
38
- * @returns The target branch name.
39
- *
40
- * @example
41
- * ```ts
42
- * computeTargetBranch('jira', 'main', 'PROJ-100'); // 'epic/proj-100'
43
- * computeTargetBranch('github', 'main', 'Sprint 3'); // 'milestone/sprint-3'
44
- * computeTargetBranch('linear', 'main', 'ENG-50'); // 'epic/eng-50'
45
- * computeTargetBranch('jira', 'main'); // 'main'
46
- * ```
47
- */
48
- export function computeTargetBranch(provider, baseBranch, parent) {
49
- if (!parent)
50
- return baseBranch;
51
- if (provider === 'github') {
52
- const slug = parent
53
- .toLowerCase()
54
- .replace(/\s+/g, '-')
55
- .replace(/[^a-z0-9-]/g, '');
56
- return `milestone/${slug}`;
57
- }
58
- // Jira and Linear both use epic/ prefix
59
- return `epic/${parent.toLowerCase()}`;
60
- }
61
- //# sourceMappingURL=branch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../../src/scripts/shared/branch/branch.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,GAAW;IAEX,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpC,OAAO,iBAAiB,MAAM,EAAE,CAAC;IACnC,CAAC;IAED,OAAO,WAAW,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,UAAkB,EAClB,MAAe;IAEf,IAAI,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC;IAE/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,MAAM;aAChB,WAAW,EAAE;aACb,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC9B,OAAO,aAAa,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,wCAAwC;IACxC,OAAO,QAAQ,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AACxC,CAAC"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Invoke Claude in print mode and capture the response.
3
- *
4
- * Uses `claude -p` for a single-prompt, non-interactive invocation.
5
- * Stdout is captured (not streamed) so the caller can parse it.
6
- *
7
- * @param prompt - The prompt to send.
8
- * @param model - Optional model override.
9
- * @returns The captured stdout and whether the process succeeded.
10
- */
11
- export declare function invokeClaudePrint(prompt: string, model?: string): {
12
- stdout: string;
13
- ok: boolean;
14
- };
15
- /**
16
- * Invoke a Claude Code session with the given prompt.
17
- *
18
- * Pipes the prompt to stdin and streams stdout/stderr live.
19
- * Uses `--dangerously-skip-permissions` for autonomous operation.
20
- *
21
- * @param prompt - The full implementation prompt.
22
- * @param model - Optional model override (e.g., `'opus'`, `'sonnet'`).
23
- * @returns `true` if Claude exited successfully (code 0), `false` otherwise.
24
- *
25
- * @example
26
- * ```ts
27
- * invokeClaudeSession('You are implementing PROJ-123...', 'opus');
28
- * ```
29
- */
30
- export declare function invokeClaudeSession(prompt: string, model?: string): boolean;
31
- //# sourceMappingURL=claude-cli.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-cli.d.ts","sourceRoot":"","sources":["../../../../src/scripts/shared/claude-cli/claude-cli.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAiBjC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAc3E"}