chief-clancy 0.6.0 → 0.7.1

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 (181) hide show
  1. package/README.md +3 -2
  2. package/dist/bundle/clancy-afk.js +6 -2
  3. package/dist/bundle/clancy-once.js +49 -48
  4. package/dist/installer/hook-installer/hook-installer.d.ts +2 -0
  5. package/dist/installer/hook-installer/hook-installer.d.ts.map +1 -1
  6. package/dist/installer/hook-installer/hook-installer.js +36 -1
  7. package/dist/installer/hook-installer/hook-installer.js.map +1 -1
  8. package/dist/installer/install.js +8 -0
  9. package/dist/installer/install.js.map +1 -1
  10. package/hooks/clancy-branch-guard.js +129 -0
  11. package/hooks/clancy-context-monitor.js +134 -46
  12. package/hooks/clancy-post-compact.js +53 -0
  13. package/hooks/package.json +3 -0
  14. package/package.json +7 -3
  15. package/src/agents/verification-gate.md +128 -0
  16. package/src/roles/setup/workflows/init.md +45 -0
  17. package/src/roles/setup/workflows/scaffold.md +30 -0
  18. package/src/roles/setup/workflows/settings.md +56 -0
  19. package/src/templates/.env.example.github +19 -1
  20. package/src/templates/.env.example.jira +25 -1
  21. package/src/templates/.env.example.linear +19 -1
  22. package/dist/schemas/bitbucket-pr.d.ts +0 -137
  23. package/dist/schemas/bitbucket-pr.d.ts.map +0 -1
  24. package/dist/schemas/bitbucket-pr.js +0 -75
  25. package/dist/schemas/bitbucket-pr.js.map +0 -1
  26. package/dist/schemas/env.d.ts +0 -150
  27. package/dist/schemas/env.d.ts.map +0 -1
  28. package/dist/schemas/env.js +0 -63
  29. package/dist/schemas/env.js.map +0 -1
  30. package/dist/schemas/github-issues.d.ts +0 -105
  31. package/dist/schemas/github-issues.d.ts.map +0 -1
  32. package/dist/schemas/github-issues.js +0 -54
  33. package/dist/schemas/github-issues.js.map +0 -1
  34. package/dist/schemas/gitlab-mr.d.ts +0 -73
  35. package/dist/schemas/gitlab-mr.d.ts.map +0 -1
  36. package/dist/schemas/gitlab-mr.js +0 -33
  37. package/dist/schemas/gitlab-mr.js.map +0 -1
  38. package/dist/schemas/jira.d.ts +0 -59
  39. package/dist/schemas/jira.d.ts.map +0 -1
  40. package/dist/schemas/jira.js +0 -56
  41. package/dist/schemas/jira.js.map +0 -1
  42. package/dist/schemas/linear.d.ts +0 -108
  43. package/dist/schemas/linear.d.ts.map +0 -1
  44. package/dist/schemas/linear.js +0 -84
  45. package/dist/schemas/linear.js.map +0 -1
  46. package/dist/scripts/afk/afk.d.ts +0 -21
  47. package/dist/scripts/afk/afk.d.ts.map +0 -1
  48. package/dist/scripts/afk/afk.js +0 -118
  49. package/dist/scripts/afk/afk.js.map +0 -1
  50. package/dist/scripts/board/github/github.d.ts +0 -104
  51. package/dist/scripts/board/github/github.d.ts.map +0 -1
  52. package/dist/scripts/board/github/github.js +0 -291
  53. package/dist/scripts/board/github/github.js.map +0 -1
  54. package/dist/scripts/board/jira/jira.d.ts +0 -139
  55. package/dist/scripts/board/jira/jira.d.ts.map +0 -1
  56. package/dist/scripts/board/jira/jira.js +0 -378
  57. package/dist/scripts/board/jira/jira.js.map +0 -1
  58. package/dist/scripts/board/linear/linear.d.ts +0 -129
  59. package/dist/scripts/board/linear/linear.d.ts.map +0 -1
  60. package/dist/scripts/board/linear/linear.js +0 -393
  61. package/dist/scripts/board/linear/linear.js.map +0 -1
  62. package/dist/scripts/once/board-ops/board-ops.d.ts +0 -26
  63. package/dist/scripts/once/board-ops/board-ops.d.ts.map +0 -1
  64. package/dist/scripts/once/board-ops/board-ops.js +0 -113
  65. package/dist/scripts/once/board-ops/board-ops.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 -236
  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/once.d.ts +0 -12
  79. package/dist/scripts/once/once.d.ts.map +0 -1
  80. package/dist/scripts/once/once.js +0 -356
  81. package/dist/scripts/once/once.js.map +0 -1
  82. package/dist/scripts/once/pr-creation/pr-creation.d.ts +0 -11
  83. package/dist/scripts/once/pr-creation/pr-creation.d.ts.map +0 -1
  84. package/dist/scripts/once/pr-creation/pr-creation.js +0 -50
  85. package/dist/scripts/once/pr-creation/pr-creation.js.map +0 -1
  86. package/dist/scripts/once/rework/rework.d.ts +0 -32
  87. package/dist/scripts/once/rework/rework.d.ts.map +0 -1
  88. package/dist/scripts/once/rework/rework.js +0 -208
  89. package/dist/scripts/once/rework/rework.js.map +0 -1
  90. package/dist/scripts/once/types/types.d.ts +0 -13
  91. package/dist/scripts/once/types/types.d.ts.map +0 -1
  92. package/dist/scripts/once/types/types.js +0 -2
  93. package/dist/scripts/once/types/types.js.map +0 -1
  94. package/dist/scripts/shared/branch/branch.d.ts +0 -50
  95. package/dist/scripts/shared/branch/branch.d.ts.map +0 -1
  96. package/dist/scripts/shared/branch/branch.js +0 -61
  97. package/dist/scripts/shared/branch/branch.js.map +0 -1
  98. package/dist/scripts/shared/claude-cli/claude-cli.d.ts +0 -31
  99. package/dist/scripts/shared/claude-cli/claude-cli.d.ts.map +0 -1
  100. package/dist/scripts/shared/claude-cli/claude-cli.js +0 -60
  101. package/dist/scripts/shared/claude-cli/claude-cli.js.map +0 -1
  102. package/dist/scripts/shared/env-schema/env-schema.d.ts +0 -27
  103. package/dist/scripts/shared/env-schema/env-schema.d.ts.map +0 -1
  104. package/dist/scripts/shared/env-schema/env-schema.js +0 -47
  105. package/dist/scripts/shared/env-schema/env-schema.js.map +0 -1
  106. package/dist/scripts/shared/feasibility/feasibility.d.ts +0 -30
  107. package/dist/scripts/shared/feasibility/feasibility.d.ts.map +0 -1
  108. package/dist/scripts/shared/feasibility/feasibility.js +0 -68
  109. package/dist/scripts/shared/feasibility/feasibility.js.map +0 -1
  110. package/dist/scripts/shared/format/format.d.ts +0 -11
  111. package/dist/scripts/shared/format/format.d.ts.map +0 -1
  112. package/dist/scripts/shared/format/format.js +0 -18
  113. package/dist/scripts/shared/format/format.js.map +0 -1
  114. package/dist/scripts/shared/git-ops/git-ops.d.ts +0 -90
  115. package/dist/scripts/shared/git-ops/git-ops.d.ts.map +0 -1
  116. package/dist/scripts/shared/git-ops/git-ops.js +0 -190
  117. package/dist/scripts/shared/git-ops/git-ops.js.map +0 -1
  118. package/dist/scripts/shared/http/http.d.ts +0 -54
  119. package/dist/scripts/shared/http/http.d.ts.map +0 -1
  120. package/dist/scripts/shared/http/http.js +0 -76
  121. package/dist/scripts/shared/http/http.js.map +0 -1
  122. package/dist/scripts/shared/notify/notify.d.ts +0 -46
  123. package/dist/scripts/shared/notify/notify.d.ts.map +0 -1
  124. package/dist/scripts/shared/notify/notify.js +0 -88
  125. package/dist/scripts/shared/notify/notify.js.map +0 -1
  126. package/dist/scripts/shared/preflight/preflight.d.ts +0 -40
  127. package/dist/scripts/shared/preflight/preflight.d.ts.map +0 -1
  128. package/dist/scripts/shared/preflight/preflight.js +0 -96
  129. package/dist/scripts/shared/preflight/preflight.js.map +0 -1
  130. package/dist/scripts/shared/progress/progress.d.ts +0 -75
  131. package/dist/scripts/shared/progress/progress.d.ts.map +0 -1
  132. package/dist/scripts/shared/progress/progress.js +0 -210
  133. package/dist/scripts/shared/progress/progress.js.map +0 -1
  134. package/dist/scripts/shared/prompt/prompt.d.ts +0 -58
  135. package/dist/scripts/shared/prompt/prompt.d.ts.map +0 -1
  136. package/dist/scripts/shared/prompt/prompt.js +0 -123
  137. package/dist/scripts/shared/prompt/prompt.js.map +0 -1
  138. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts +0 -82
  139. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts.map +0 -1
  140. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js +0 -301
  141. package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js.map +0 -1
  142. package/dist/scripts/shared/pull-request/github/github.d.ts +0 -72
  143. package/dist/scripts/shared/pull-request/github/github.d.ts.map +0 -1
  144. package/dist/scripts/shared/pull-request/github/github.js +0 -226
  145. package/dist/scripts/shared/pull-request/github/github.js.map +0 -1
  146. package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts +0 -74
  147. package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts.map +0 -1
  148. package/dist/scripts/shared/pull-request/gitlab/gitlab.js +0 -220
  149. package/dist/scripts/shared/pull-request/gitlab/gitlab.js.map +0 -1
  150. package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts +0 -31
  151. package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts.map +0 -1
  152. package/dist/scripts/shared/pull-request/post-pr/post-pr.js +0 -61
  153. package/dist/scripts/shared/pull-request/post-pr/post-pr.js.map +0 -1
  154. package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts +0 -40
  155. package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts.map +0 -1
  156. package/dist/scripts/shared/pull-request/pr-body/pr-body.js +0 -84
  157. package/dist/scripts/shared/pull-request/pr-body/pr-body.js.map +0 -1
  158. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts +0 -23
  159. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts.map +0 -1
  160. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js +0 -30
  161. package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js.map +0 -1
  162. package/dist/scripts/shared/remote/remote.d.ts +0 -41
  163. package/dist/scripts/shared/remote/remote.d.ts.map +0 -1
  164. package/dist/scripts/shared/remote/remote.js +0 -227
  165. package/dist/scripts/shared/remote/remote.js.map +0 -1
  166. package/dist/types/board.d.ts +0 -13
  167. package/dist/types/board.d.ts.map +0 -1
  168. package/dist/types/board.js +0 -5
  169. package/dist/types/board.js.map +0 -1
  170. package/dist/types/index.d.ts +0 -4
  171. package/dist/types/index.d.ts.map +0 -1
  172. package/dist/types/index.js +0 -2
  173. package/dist/types/index.js.map +0 -1
  174. package/dist/types/remote.d.ts +0 -55
  175. package/dist/types/remote.d.ts.map +0 -1
  176. package/dist/types/remote.js +0 -5
  177. package/dist/types/remote.js.map +0 -1
  178. package/dist/utils/parse-json/parse-json.d.ts +0 -20
  179. package/dist/utils/parse-json/parse-json.d.ts.map +0 -1
  180. package/dist/utils/parse-json/parse-json.js +0 -27
  181. package/dist/utils/parse-json/parse-json.js.map +0 -1
@@ -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"}
@@ -1,60 +0,0 @@
1
- /**
2
- * Claude CLI invocation for ticket implementation.
3
- *
4
- * Spawns `claude --dangerously-skip-permissions` with the prompt piped
5
- * to stdin. Output streams live to the user's terminal.
6
- */
7
- import { spawnSync } from 'node:child_process';
8
- /**
9
- * Invoke Claude in print mode and capture the response.
10
- *
11
- * Uses `claude -p` for a single-prompt, non-interactive invocation.
12
- * Stdout is captured (not streamed) so the caller can parse it.
13
- *
14
- * @param prompt - The prompt to send.
15
- * @param model - Optional model override.
16
- * @returns The captured stdout and whether the process succeeded.
17
- */
18
- export function invokeClaudePrint(prompt, model) {
19
- const args = ['-p', '--dangerously-skip-permissions'];
20
- if (model) {
21
- args.push('--model', model);
22
- }
23
- const result = spawnSync('claude', args, {
24
- input: prompt,
25
- stdio: ['pipe', 'pipe', 'pipe'],
26
- encoding: 'utf8',
27
- });
28
- return {
29
- stdout: result.stdout ?? '',
30
- ok: result.status === 0 && !result.error,
31
- };
32
- }
33
- /**
34
- * Invoke a Claude Code session with the given prompt.
35
- *
36
- * Pipes the prompt to stdin and streams stdout/stderr live.
37
- * Uses `--dangerously-skip-permissions` for autonomous operation.
38
- *
39
- * @param prompt - The full implementation prompt.
40
- * @param model - Optional model override (e.g., `'opus'`, `'sonnet'`).
41
- * @returns `true` if Claude exited successfully (code 0), `false` otherwise.
42
- *
43
- * @example
44
- * ```ts
45
- * invokeClaudeSession('You are implementing PROJ-123...', 'opus');
46
- * ```
47
- */
48
- export function invokeClaudeSession(prompt, model) {
49
- const args = ['--dangerously-skip-permissions'];
50
- if (model) {
51
- args.push('--model', model);
52
- }
53
- const result = spawnSync('claude', args, {
54
- input: prompt,
55
- stdio: ['pipe', 'inherit', 'inherit'],
56
- encoding: 'utf8',
57
- });
58
- return result.status === 0 && !result.error;
59
- }
60
- //# sourceMappingURL=claude-cli.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../../../../src/scripts/shared/claude-cli/claude-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,KAAc;IAEd,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC;IAEtD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;QACvC,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAC/B,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;QAC3B,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAc;IAChE,MAAM,IAAI,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAEhD,IAAI,KAAK,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;QACvC,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;QACrC,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9C,CAAC"}
@@ -1,27 +0,0 @@
1
- /**
2
- * Board detection from raw `.clancy/.env` variables.
3
- *
4
- * Validates env vars against Zod schemas and returns a typed
5
- * discriminated union for the detected board provider.
6
- */
7
- import type { BoardConfig } from '../../../schemas/env.js';
8
- export type { BoardConfig, GitHubEnv, JiraEnv, LinearEnv, SharedEnv, } from '../../../schemas/env.js';
9
- /**
10
- * Detect which board is configured from raw env vars and return a typed config.
11
- *
12
- * Detection priority: Jira → GitHub → Linear (checked by presence of
13
- * board-specific required keys). Returns the first match.
14
- *
15
- * @param raw - The raw key-value record from `.clancy/.env`.
16
- * @returns A typed `BoardConfig` or an error string if no board is detected
17
- * or validation fails.
18
- *
19
- * @example
20
- * ```ts
21
- * const result = detectBoard({ GITHUB_TOKEN: 'ghp_xxx', GITHUB_REPO: 'acme/app' });
22
- * if (typeof result === 'string') console.error(result);
23
- * else console.log(result.provider); // 'github'
24
- * ```
25
- */
26
- export declare function detectBoard(raw: Record<string, string>): BoardConfig | string;
27
- //# sourceMappingURL=env-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-schema.d.ts","sourceRoot":"","sources":["../../../../src/scripts/shared/env-schema/env-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQpD,YAAY,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,GAAG,MAAM,CAoC7E"}
@@ -1,47 +0,0 @@
1
- import { githubEnvSchema, jiraEnvSchema, linearEnvSchema, } from '../../../schemas/env.js';
2
- /**
3
- * Detect which board is configured from raw env vars and return a typed config.
4
- *
5
- * Detection priority: Jira → GitHub → Linear (checked by presence of
6
- * board-specific required keys). Returns the first match.
7
- *
8
- * @param raw - The raw key-value record from `.clancy/.env`.
9
- * @returns A typed `BoardConfig` or an error string if no board is detected
10
- * or validation fails.
11
- *
12
- * @example
13
- * ```ts
14
- * const result = detectBoard({ GITHUB_TOKEN: 'ghp_xxx', GITHUB_REPO: 'acme/app' });
15
- * if (typeof result === 'string') console.error(result);
16
- * else console.log(result.provider); // 'github'
17
- * ```
18
- */
19
- export function detectBoard(raw) {
20
- // Jira — check for JIRA_BASE_URL as the distinguishing key
21
- if (raw.JIRA_BASE_URL) {
22
- const parsed = jiraEnvSchema.safeParse(raw);
23
- if (!parsed.success) {
24
- return `✗ Jira env validation failed: ${parsed.error.message}`;
25
- }
26
- return { provider: 'jira', env: parsed.data };
27
- }
28
- // GitHub — check for GITHUB_TOKEN + GITHUB_REPO (GITHUB_TOKEN alone may be
29
- // a git host token for Jira/Linear users, not a GitHub Issues board)
30
- if (raw.GITHUB_TOKEN && raw.GITHUB_REPO) {
31
- const parsed = githubEnvSchema.safeParse(raw);
32
- if (!parsed.success) {
33
- return `✗ GitHub env validation failed: ${parsed.error.message}`;
34
- }
35
- return { provider: 'github', env: parsed.data };
36
- }
37
- // Linear — check for LINEAR_API_KEY as the distinguishing key
38
- if (raw.LINEAR_API_KEY) {
39
- const parsed = linearEnvSchema.safeParse(raw);
40
- if (!parsed.success) {
41
- return `✗ Linear env validation failed: ${parsed.error.message}`;
42
- }
43
- return { provider: 'linear', env: parsed.data };
44
- }
45
- return '✗ No board detected — set Jira, GitHub, or Linear credentials in .clancy/.env';
46
- }
47
- //# sourceMappingURL=env-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"env-schema.js","sourceRoot":"","sources":["../../../../src/scripts/shared/env-schema/env-schema.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,eAAe,EACf,aAAa,EACb,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAW1B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,GAA2B;IACrD,2DAA2D;IAC3D,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,iCAAiC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACjE,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,2EAA2E;IAC3E,qEAAqE;IACrE,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnE,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,8DAA8D;IAC9D,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnE,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IAED,OAAO,+EAA+E,CAAC;AACzF,CAAC"}
@@ -1,30 +0,0 @@
1
- export type FeasibilityResult = {
2
- feasible: boolean;
3
- reason?: string;
4
- };
5
- /**
6
- * Build the feasibility evaluation prompt.
7
- */
8
- export declare function buildFeasibilityPrompt(ticket: {
9
- key: string;
10
- title: string;
11
- description: string;
12
- }): string;
13
- /**
14
- * Parse the raw Claude output into a feasibility result.
15
- *
16
- * Fails open — malformed or empty output is treated as feasible.
17
- */
18
- export declare function parseFeasibilityResponse(stdout: string): FeasibilityResult;
19
- /**
20
- * Run a feasibility check for a ticket.
21
- *
22
- * @returns A result indicating whether the ticket is feasible and an
23
- * optional reason if not.
24
- */
25
- export declare function checkFeasibility(ticket: {
26
- key: string;
27
- title: string;
28
- description: string;
29
- }, model?: string): FeasibilityResult;
30
- //# sourceMappingURL=feasibility.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feasibility.d.ts","sourceRoot":"","sources":["../../../../src/scripts/shared/feasibility/feasibility.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAyBT;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAU1E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC3D,KAAK,CAAC,EAAE,MAAM,GACb,iBAAiB,CAQnB"}