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.
- package/README.md +4 -1
- package/dist/bundle/clancy-once.js +50 -50
- package/package.json +5 -2
- package/src/roles/planner/commands/approve-plan.md +3 -0
- package/src/roles/planner/commands/plan.md +1 -0
- package/src/roles/planner/workflows/approve-plan.md +3 -1
- package/src/roles/planner/workflows/plan.md +5 -5
- package/src/roles/strategist/commands/approve-brief.md +1 -0
- package/src/roles/strategist/workflows/approve-brief.md +3 -1
- package/src/roles/strategist/workflows/brief.md +38 -20
- package/src/templates/.env.example.github +19 -1
- package/src/templates/.env.example.jira +25 -1
- package/src/templates/.env.example.linear +19 -1
- package/dist/schemas/bitbucket-pr.d.ts +0 -137
- package/dist/schemas/bitbucket-pr.d.ts.map +0 -1
- package/dist/schemas/bitbucket-pr.js +0 -75
- package/dist/schemas/bitbucket-pr.js.map +0 -1
- package/dist/schemas/env.d.ts +0 -170
- package/dist/schemas/env.d.ts.map +0 -1
- package/dist/schemas/env.js +0 -69
- package/dist/schemas/env.js.map +0 -1
- package/dist/schemas/github-issues.d.ts +0 -105
- package/dist/schemas/github-issues.d.ts.map +0 -1
- package/dist/schemas/github-issues.js +0 -54
- package/dist/schemas/github-issues.js.map +0 -1
- package/dist/schemas/gitlab-mr.d.ts +0 -73
- package/dist/schemas/gitlab-mr.d.ts.map +0 -1
- package/dist/schemas/gitlab-mr.js +0 -33
- package/dist/schemas/gitlab-mr.js.map +0 -1
- package/dist/schemas/jira.d.ts +0 -59
- package/dist/schemas/jira.d.ts.map +0 -1
- package/dist/schemas/jira.js +0 -56
- package/dist/schemas/jira.js.map +0 -1
- package/dist/schemas/linear.d.ts +0 -108
- package/dist/schemas/linear.d.ts.map +0 -1
- package/dist/schemas/linear.js +0 -84
- package/dist/schemas/linear.js.map +0 -1
- package/dist/scripts/afk/afk.d.ts +0 -21
- package/dist/scripts/afk/afk.d.ts.map +0 -1
- package/dist/scripts/afk/afk.js +0 -145
- package/dist/scripts/afk/afk.js.map +0 -1
- package/dist/scripts/afk/report/report.d.ts +0 -47
- package/dist/scripts/afk/report/report.d.ts.map +0 -1
- package/dist/scripts/afk/report/report.js +0 -194
- package/dist/scripts/afk/report/report.js.map +0 -1
- package/dist/scripts/board/github/github.d.ts +0 -104
- package/dist/scripts/board/github/github.d.ts.map +0 -1
- package/dist/scripts/board/github/github.js +0 -291
- package/dist/scripts/board/github/github.js.map +0 -1
- package/dist/scripts/board/jira/jira.d.ts +0 -139
- package/dist/scripts/board/jira/jira.d.ts.map +0 -1
- package/dist/scripts/board/jira/jira.js +0 -378
- package/dist/scripts/board/jira/jira.js.map +0 -1
- package/dist/scripts/board/linear/linear.d.ts +0 -129
- package/dist/scripts/board/linear/linear.d.ts.map +0 -1
- package/dist/scripts/board/linear/linear.js +0 -393
- package/dist/scripts/board/linear/linear.js.map +0 -1
- package/dist/scripts/once/board-ops/board-ops.d.ts +0 -26
- package/dist/scripts/once/board-ops/board-ops.d.ts.map +0 -1
- package/dist/scripts/once/board-ops/board-ops.js +0 -113
- package/dist/scripts/once/board-ops/board-ops.js.map +0 -1
- package/dist/scripts/once/cost/cost.d.ts +0 -10
- package/dist/scripts/once/cost/cost.d.ts.map +0 -1
- package/dist/scripts/once/cost/cost.js +0 -23
- package/dist/scripts/once/cost/cost.js.map +0 -1
- package/dist/scripts/once/deliver/deliver.d.ts +0 -37
- package/dist/scripts/once/deliver/deliver.d.ts.map +0 -1
- package/dist/scripts/once/deliver/deliver.js +0 -253
- package/dist/scripts/once/deliver/deliver.js.map +0 -1
- package/dist/scripts/once/fetch-ticket/fetch-ticket.d.ts +0 -22
- package/dist/scripts/once/fetch-ticket/fetch-ticket.d.ts.map +0 -1
- package/dist/scripts/once/fetch-ticket/fetch-ticket.js +0 -123
- package/dist/scripts/once/fetch-ticket/fetch-ticket.js.map +0 -1
- package/dist/scripts/once/git-token/git-token.d.ts +0 -13
- package/dist/scripts/once/git-token/git-token.d.ts.map +0 -1
- package/dist/scripts/once/git-token/git-token.js +0 -30
- package/dist/scripts/once/git-token/git-token.js.map +0 -1
- package/dist/scripts/once/lock/lock.d.ts +0 -17
- package/dist/scripts/once/lock/lock.d.ts.map +0 -1
- package/dist/scripts/once/lock/lock.js +0 -70
- package/dist/scripts/once/lock/lock.js.map +0 -1
- package/dist/scripts/once/once.d.ts +0 -12
- package/dist/scripts/once/once.d.ts.map +0 -1
- package/dist/scripts/once/once.js +0 -452
- package/dist/scripts/once/once.js.map +0 -1
- package/dist/scripts/once/pr-creation/pr-creation.d.ts +0 -11
- package/dist/scripts/once/pr-creation/pr-creation.d.ts.map +0 -1
- package/dist/scripts/once/pr-creation/pr-creation.js +0 -50
- package/dist/scripts/once/pr-creation/pr-creation.js.map +0 -1
- package/dist/scripts/once/resume/resume.d.ts +0 -24
- package/dist/scripts/once/resume/resume.d.ts.map +0 -1
- package/dist/scripts/once/resume/resume.js +0 -159
- package/dist/scripts/once/resume/resume.js.map +0 -1
- package/dist/scripts/once/rework/rework.d.ts +0 -32
- package/dist/scripts/once/rework/rework.d.ts.map +0 -1
- package/dist/scripts/once/rework/rework.js +0 -208
- package/dist/scripts/once/rework/rework.js.map +0 -1
- package/dist/scripts/once/types/types.d.ts +0 -13
- package/dist/scripts/once/types/types.d.ts.map +0 -1
- package/dist/scripts/once/types/types.js +0 -2
- package/dist/scripts/once/types/types.js.map +0 -1
- package/dist/scripts/shared/branch/branch.d.ts +0 -50
- package/dist/scripts/shared/branch/branch.d.ts.map +0 -1
- package/dist/scripts/shared/branch/branch.js +0 -61
- package/dist/scripts/shared/branch/branch.js.map +0 -1
- package/dist/scripts/shared/claude-cli/claude-cli.d.ts +0 -31
- package/dist/scripts/shared/claude-cli/claude-cli.d.ts.map +0 -1
- package/dist/scripts/shared/claude-cli/claude-cli.js +0 -60
- package/dist/scripts/shared/claude-cli/claude-cli.js.map +0 -1
- package/dist/scripts/shared/env-schema/env-schema.d.ts +0 -27
- package/dist/scripts/shared/env-schema/env-schema.d.ts.map +0 -1
- package/dist/scripts/shared/env-schema/env-schema.js +0 -47
- package/dist/scripts/shared/env-schema/env-schema.js.map +0 -1
- package/dist/scripts/shared/feasibility/feasibility.d.ts +0 -30
- package/dist/scripts/shared/feasibility/feasibility.d.ts.map +0 -1
- package/dist/scripts/shared/feasibility/feasibility.js +0 -68
- package/dist/scripts/shared/feasibility/feasibility.js.map +0 -1
- package/dist/scripts/shared/format/format.d.ts +0 -11
- package/dist/scripts/shared/format/format.d.ts.map +0 -1
- package/dist/scripts/shared/format/format.js +0 -23
- package/dist/scripts/shared/format/format.js.map +0 -1
- package/dist/scripts/shared/git-ops/git-ops.d.ts +0 -90
- package/dist/scripts/shared/git-ops/git-ops.d.ts.map +0 -1
- package/dist/scripts/shared/git-ops/git-ops.js +0 -190
- package/dist/scripts/shared/git-ops/git-ops.js.map +0 -1
- package/dist/scripts/shared/http/http.d.ts +0 -54
- package/dist/scripts/shared/http/http.d.ts.map +0 -1
- package/dist/scripts/shared/http/http.js +0 -76
- package/dist/scripts/shared/http/http.js.map +0 -1
- package/dist/scripts/shared/notify/notify.d.ts +0 -46
- package/dist/scripts/shared/notify/notify.d.ts.map +0 -1
- package/dist/scripts/shared/notify/notify.js +0 -88
- package/dist/scripts/shared/notify/notify.js.map +0 -1
- package/dist/scripts/shared/preflight/preflight.d.ts +0 -40
- package/dist/scripts/shared/preflight/preflight.d.ts.map +0 -1
- package/dist/scripts/shared/preflight/preflight.js +0 -96
- package/dist/scripts/shared/preflight/preflight.js.map +0 -1
- package/dist/scripts/shared/progress/progress.d.ts +0 -88
- package/dist/scripts/shared/progress/progress.d.ts.map +0 -1
- package/dist/scripts/shared/progress/progress.js +0 -210
- package/dist/scripts/shared/progress/progress.js.map +0 -1
- package/dist/scripts/shared/prompt/prompt.d.ts +0 -58
- package/dist/scripts/shared/prompt/prompt.d.ts.map +0 -1
- package/dist/scripts/shared/prompt/prompt.js +0 -123
- package/dist/scripts/shared/prompt/prompt.js.map +0 -1
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts +0 -82
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js +0 -301
- package/dist/scripts/shared/pull-request/bitbucket/bitbucket.js.map +0 -1
- package/dist/scripts/shared/pull-request/github/github.d.ts +0 -72
- package/dist/scripts/shared/pull-request/github/github.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/github/github.js +0 -226
- package/dist/scripts/shared/pull-request/github/github.js.map +0 -1
- package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts +0 -74
- package/dist/scripts/shared/pull-request/gitlab/gitlab.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/gitlab/gitlab.js +0 -220
- package/dist/scripts/shared/pull-request/gitlab/gitlab.js.map +0 -1
- package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts +0 -31
- package/dist/scripts/shared/pull-request/post-pr/post-pr.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/post-pr/post-pr.js +0 -61
- package/dist/scripts/shared/pull-request/post-pr/post-pr.js.map +0 -1
- package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts +0 -41
- package/dist/scripts/shared/pull-request/pr-body/pr-body.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/pr-body/pr-body.js +0 -93
- package/dist/scripts/shared/pull-request/pr-body/pr-body.js.map +0 -1
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts +0 -23
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.d.ts.map +0 -1
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js +0 -30
- package/dist/scripts/shared/pull-request/rework-comment/rework-comment.js.map +0 -1
- package/dist/scripts/shared/remote/remote.d.ts +0 -41
- package/dist/scripts/shared/remote/remote.d.ts.map +0 -1
- package/dist/scripts/shared/remote/remote.js +0 -227
- package/dist/scripts/shared/remote/remote.js.map +0 -1
- package/dist/types/board.d.ts +0 -13
- package/dist/types/board.d.ts.map +0 -1
- package/dist/types/board.js +0 -5
- package/dist/types/board.js.map +0 -1
- package/dist/types/index.d.ts +0 -4
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/remote.d.ts +0 -55
- package/dist/types/remote.d.ts.map +0 -1
- package/dist/types/remote.js +0 -5
- package/dist/types/remote.js.map +0 -1
- package/dist/utils/parse-json/parse-json.d.ts +0 -20
- package/dist/utils/parse-json/parse-json.d.ts.map +0 -1
- package/dist/utils/parse-json/parse-json.js +0 -27
- package/dist/utils/parse-json/parse-json.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chief-clancy",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "Autonomous, board-driven development for Claude Code — scaffolds docs, integrates Kanban boards, runs tickets in a loop.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -29,7 +29,10 @@
|
|
|
29
29
|
},
|
|
30
30
|
"main": "dist/installer/install.js",
|
|
31
31
|
"files": [
|
|
32
|
-
"dist/",
|
|
32
|
+
"dist/bundle/",
|
|
33
|
+
"dist/installer/",
|
|
34
|
+
"dist/scripts/shared/env-parser/",
|
|
35
|
+
"dist/utils/ansi/",
|
|
33
36
|
"hooks/*.js",
|
|
34
37
|
"hooks/package.json",
|
|
35
38
|
"src/roles/",
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Promote an approved Clancy plan to the ticket description. Accepts an optional ticket key argument (e.g. `/clancy:approve-plan PROJ-123`). When no key is provided, auto-selects the oldest planned-but-unapproved ticket.
|
|
4
4
|
|
|
5
|
+
Optional flags:
|
|
6
|
+
- **Skip confirmation:** `--afk` — auto-confirm without prompting (for automation)
|
|
7
|
+
|
|
5
8
|
@.claude/clancy/workflows/approve-plan.md
|
|
6
9
|
|
|
7
10
|
Follow the approve-plan workflow above. Fetch the plan comment, confirm with the user, append it to the ticket description, and transition the ticket to the implementation queue.
|
|
@@ -6,6 +6,7 @@ Accepts optional arguments:
|
|
|
6
6
|
- **Batch mode:** `/clancy:plan 3` — plan up to 3 tickets from the queue
|
|
7
7
|
- **Specific ticket:** `/clancy:plan PROJ-123`, `/clancy:plan #42`, `/clancy:plan ENG-42` — plan a single ticket by key
|
|
8
8
|
- **Fresh start:** `--fresh` — discard any existing plan and start over
|
|
9
|
+
- **Skip confirmations:** `--afk` — auto-confirm all prompts (for automation)
|
|
9
10
|
|
|
10
11
|
Examples:
|
|
11
12
|
- `/clancy:plan` — plan 1 ticket from queue
|
|
@@ -154,6 +154,8 @@ If the user picks [2], stop: `Cancelled. No changes made.`
|
|
|
154
154
|
|
|
155
155
|
**If the user already confirmed via auto-select in Step 2, SKIP this step entirely** (avoid double-confirmation).
|
|
156
156
|
|
|
157
|
+
**AFK mode:** If running in AFK mode (`--afk` flag or `CLANCY_MODE=afk`), skip the confirmation prompt and auto-confirm. Display the summary for logging purposes but proceed without waiting for input.
|
|
158
|
+
|
|
157
159
|
Display a summary and ask for confirmation:
|
|
158
160
|
|
|
159
161
|
```
|
|
@@ -166,7 +168,7 @@ Planned: {date from plan}
|
|
|
166
168
|
Promote this plan to the ticket description? [Y/n]
|
|
167
169
|
```
|
|
168
170
|
|
|
169
|
-
If the user declines, stop:
|
|
171
|
+
If the user declines (interactive only), stop:
|
|
170
172
|
```
|
|
171
173
|
Cancelled. No changes made.
|
|
172
174
|
```
|
|
@@ -66,7 +66,7 @@ Parse the arguments passed to the command:
|
|
|
66
66
|
|
|
67
67
|
If N > 10: `Maximum batch size is 10. Planning 10 tickets.`
|
|
68
68
|
|
|
69
|
-
If N >= 5: display a confirmation:
|
|
69
|
+
If N >= 5: display a confirmation (skip in AFK mode — `--afk` flag or `CLANCY_MODE=afk`):
|
|
70
70
|
```
|
|
71
71
|
Planning {N} tickets — each requires codebase exploration. Continue? [Y/n]
|
|
72
72
|
```
|
|
@@ -92,7 +92,7 @@ RESPONSE=$(curl -s \
|
|
|
92
92
|
|
|
93
93
|
Validate the response:
|
|
94
94
|
- If `pull_request` field is present (not null): `#{N} is a PR, not an issue.` Stop.
|
|
95
|
-
- If `state` is `closed`: warn `Issue #${N} is closed. Plan anyway? [y/N]`
|
|
95
|
+
- If `state` is `closed`: warn `Issue #${N} is closed. Plan anyway? [y/N]` (in AFK mode: skip this ticket — do not plan closed issues unattended)
|
|
96
96
|
|
|
97
97
|
#### Jira — Fetch specific ticket
|
|
98
98
|
|
|
@@ -104,7 +104,7 @@ RESPONSE=$(curl -s \
|
|
|
104
104
|
```
|
|
105
105
|
|
|
106
106
|
Validate the response:
|
|
107
|
-
- If `fields.status.statusCategory.key` is `done`: warn `Ticket is done. Plan anyway? [y/N]`
|
|
107
|
+
- If `fields.status.statusCategory.key` is `done`: warn `Ticket is done. Plan anyway? [y/N]` (in AFK mode: skip this ticket)
|
|
108
108
|
- If `fields.issuetype.name` is `Epic`: note `This is an epic.` (continue normally)
|
|
109
109
|
|
|
110
110
|
#### Linear — Fetch specific issue
|
|
@@ -124,8 +124,8 @@ query {
|
|
|
124
124
|
|
|
125
125
|
Validate the response:
|
|
126
126
|
- If `nodes` is empty: `Issue {KEY} not found on Linear.` Stop.
|
|
127
|
-
- If `state.type` is `completed`: warn `Issue is completed. Plan anyway? [y/N]`
|
|
128
|
-
- If `state.type` is `canceled`: warn `Issue is canceled. Plan anyway? [y/N]`
|
|
127
|
+
- If `state.type` is `completed`: warn `Issue is completed. Plan anyway? [y/N]` (in AFK mode: skip this ticket)
|
|
128
|
+
- If `state.type` is `canceled`: warn `Issue is canceled. Plan anyway? [y/N]` (in AFK mode: skip this ticket)
|
|
129
129
|
|
|
130
130
|
Then skip to Step 3b with this single ticket.
|
|
131
131
|
|
|
@@ -8,6 +8,7 @@ Accepts optional arguments:
|
|
|
8
8
|
- **By ticket:** `/clancy:approve-brief PROJ-123` — approve brief sourced from this ticket
|
|
9
9
|
- **Set parent:** `--epic PROJ-50` — override or set the parent epic
|
|
10
10
|
- **Preview:** `--dry-run` — show what would be created without making API calls
|
|
11
|
+
- **Skip confirmation:** `--afk` — auto-confirm without prompting (for automation)
|
|
11
12
|
|
|
12
13
|
Examples:
|
|
13
14
|
- `/clancy:approve-brief` — auto-select (if only 1 unapproved brief)
|
|
@@ -130,7 +130,9 @@ AFK-ready: {X} | Needs human: {Y}
|
|
|
130
130
|
Create {N} tickets? [Y/n]
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
-
If
|
|
133
|
+
**AFK mode:** If running in AFK mode (`--afk` flag OR `CLANCY_MODE=afk`), skip the confirmation prompt and auto-confirm. Display the ticket list for logging purposes but proceed without waiting for input.
|
|
134
|
+
|
|
135
|
+
If user declines (interactive only): `Cancelled. No changes made.` Stop.
|
|
134
136
|
|
|
135
137
|
---
|
|
136
138
|
|
|
@@ -50,7 +50,9 @@ Parse the arguments passed to the command. Arguments can appear in any order.
|
|
|
50
50
|
|
|
51
51
|
### Input modes
|
|
52
52
|
|
|
53
|
-
- **No input (no flags that consume arguments):** Interactive mode —
|
|
53
|
+
- **No input (no flags that consume arguments):** Interactive mode — but first check for `--afk`:
|
|
54
|
+
- If running in AFK mode (`--afk` flag OR `CLANCY_MODE=afk`): there is no human to answer. Display: `✗ Cannot run /clancy:brief in AFK mode without a ticket or idea. Use: /clancy:brief --afk #42 (GitHub) or PROJ-123 (Jira) or ENG-42 (Linear), or /clancy:brief --afk "Add dark mode", or /clancy:brief 3 (batch mode — implies --afk).` Stop.
|
|
55
|
+
- Otherwise: prompt `What's the idea?` and parse the response. If the response looks like a ticket reference (`#42`, `PROJ-123`, `ENG-42`), switch to board ticket mode. Otherwise treat as inline text.
|
|
54
56
|
- **Ticket key** (`PROJ-123`, `#42`, `ENG-42`): Board ticket mode — fetch the ticket from the board API. Validate format per platform:
|
|
55
57
|
- `#N` — valid for GitHub only. If board is Jira or Linear: `The #N format is for GitHub Issues. Use a ticket key like PROJ-123.` Stop.
|
|
56
58
|
- `PROJ-123` / `ENG-42` (letters-dash-number) — valid for Jira and Linear. If board is GitHub: `Use #N format for GitHub Issues (e.g. #42).` Stop.
|
|
@@ -355,7 +357,7 @@ Scan `.clancy/briefs/` for an existing brief matching this idea:
|
|
|
355
357
|
|
|
356
358
|
1. **Local brief file** — check for `## Feedback` section appended to `.clancy/briefs/{date}-{slug}.md`
|
|
357
359
|
2. **Companion file** — check for `.clancy/briefs/{date}-{slug}.feedback.md`
|
|
358
|
-
3. **Board comments** (board-sourced only) —
|
|
360
|
+
3. **Board comments** (board-sourced only) — fetch ALL comments on the source ticket. Scan each comment body for the text `Clancy Strategic Brief` (case-insensitive, match anywhere in the body — it may appear as `# Clancy Strategic Brief`, `## Clancy Strategic Brief`, or just the text). The most recent matching comment is the brief. Collect all comments posted AFTER it as feedback.
|
|
359
361
|
|
|
360
362
|
Board comment feedback filtering per platform:
|
|
361
363
|
- **GitHub:** comments where `created_at` > brief comment's `created_at` AND `user.login` != resolved username (via `GET /user`)
|
|
@@ -490,7 +492,7 @@ Using all gathered context (idea, grill output, research findings), generate the
|
|
|
490
492
|
- {Specific risk and mitigation strategy}
|
|
491
493
|
|
|
492
494
|
---
|
|
493
|
-
*Generated by [Clancy](https://github.com/Pushedskydiver/clancy). To request changes: comment on the source ticket or add a ## Feedback section to the brief file, then re-run `/clancy:brief` to revise. To approve: `/clancy:approve-brief`. To start over: `/clancy:brief --fresh`.*
|
|
495
|
+
*Generated by [Clancy](https://github.com/Pushedskydiver/clancy). To answer open questions or request changes: comment on the source ticket or add a ## Feedback section to the brief file, then re-run `/clancy:brief` to revise. To approve: `/clancy:approve-brief`. To start over: `/clancy:brief --fresh`.*
|
|
494
496
|
```
|
|
495
497
|
|
|
496
498
|
### Source field format
|
|
@@ -518,11 +520,18 @@ Using all gathered context (idea, grill output, research findings), generate the
|
|
|
518
520
|
|
|
519
521
|
### Re-brief revision
|
|
520
522
|
|
|
521
|
-
If revising from feedback (Step 5)
|
|
523
|
+
If revising from feedback (Step 5):
|
|
524
|
+
|
|
525
|
+
1. **Cross-reference feedback against Open Questions.** For each Open Question in the existing brief, check if the feedback contains an answer (exact or paraphrased — match by intent, not syntax). Resolved questions move to `## Discovery` with `(Source: human)` tag. Unresolved questions stay in `## Open Questions`.
|
|
526
|
+
|
|
527
|
+
2. **Apply all other feedback** — changes to scope, goals, decomposition, user stories, etc.
|
|
528
|
+
|
|
529
|
+
3. **Prepend a section** before Problem Statement:
|
|
522
530
|
|
|
523
531
|
```markdown
|
|
524
532
|
### Changes From Previous Brief
|
|
525
|
-
{What feedback was addressed and how the brief changed
|
|
533
|
+
{What feedback was addressed and how the brief changed.
|
|
534
|
+
List resolved open questions explicitly.}
|
|
526
535
|
```
|
|
527
536
|
|
|
528
537
|
---
|
|
@@ -657,27 +666,36 @@ Print the full brief to stdout, followed by the sign-off:
|
|
|
657
666
|
### Next steps (board-sourced)
|
|
658
667
|
|
|
659
668
|
```
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
669
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
670
|
+
Next Steps
|
|
671
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
672
|
+
|
|
673
|
+
Answer open questions or request changes:
|
|
674
|
+
• Comment on {KEY} on your board
|
|
675
|
+
• Or add a ## Feedback section to the brief file
|
|
676
|
+
Then re-run: /clancy:brief {KEY}
|
|
677
|
+
|
|
678
|
+
Approve: /clancy:approve-brief {KEY}
|
|
679
|
+
Start over: /clancy:brief --fresh {KEY}
|
|
666
680
|
```
|
|
667
681
|
|
|
668
682
|
### Next steps (inline text / from file)
|
|
669
683
|
|
|
670
684
|
```
|
|
671
|
-
|
|
672
|
-
|
|
685
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
686
|
+
Next Steps
|
|
687
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
688
|
+
|
|
689
|
+
Answer open questions or request changes:
|
|
673
690
|
• Add a ## Feedback section to:
|
|
674
|
-
|
|
691
|
+
.clancy/briefs/{date}-{slug}.md
|
|
675
692
|
• Or create a companion file:
|
|
676
|
-
|
|
677
|
-
Then re-run /clancy:brief
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
693
|
+
.clancy/briefs/{date}-{slug}.feedback.md
|
|
694
|
+
Then re-run: /clancy:brief
|
|
695
|
+
|
|
696
|
+
Approve: /clancy:approve-brief {slug}
|
|
697
|
+
With parent: /clancy:approve-brief {slug} --epic {KEY}
|
|
698
|
+
Start over: /clancy:brief --fresh
|
|
681
699
|
```
|
|
682
700
|
|
|
683
701
|
---
|
|
@@ -726,7 +744,7 @@ Briefs saved to .clancy/briefs/. Run /clancy:approve-brief to create tickets.
|
|
|
726
744
|
- The `--list` flag is an inventory display only — no brief generated, no API calls beyond the local filesystem.
|
|
727
745
|
- Batch mode (`/clancy:brief 3`) implies AI-grill — each ticket is briefed autonomously.
|
|
728
746
|
- All board API calls are best-effort — if a comment fails to post, print the brief and warn. The local file is the source of truth.
|
|
729
|
-
- The
|
|
747
|
+
- The `Clancy Strategic Brief` text in comments is the marker used by both `/clancy:brief` (to detect existing briefs and feedback) and `/clancy:approve-brief` (to find the brief). Search case-insensitively and match regardless of heading level (`#`, `##`, or plain text).
|
|
730
748
|
- Jira uses ADF for comments (with `codeBlock` fallback). GitHub and Linear accept Markdown directly.
|
|
731
749
|
- Linear personal API keys do NOT use `Bearer` prefix.
|
|
732
750
|
- Jira uses the new `POST /rest/api/3/search/jql` endpoint (old GET `/search` removed Aug 2025).
|
|
@@ -19,7 +19,7 @@ CLANCY_BASE_BRANCH=main
|
|
|
19
19
|
# ─── Optional roles ─────────────────────────────────────────────────────────
|
|
20
20
|
# Comma-separated list of optional roles to enable (e.g. planner)
|
|
21
21
|
# Core roles (implementer, reviewer, setup) are always active.
|
|
22
|
-
# CLANCY_ROLES=planner
|
|
22
|
+
# CLANCY_ROLES=planner,strategist
|
|
23
23
|
|
|
24
24
|
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
25
25
|
# Max tickets to process per /clancy:run session (default: 20)
|
|
@@ -50,3 +50,21 @@ MAX_ITERATIONS=20
|
|
|
50
50
|
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
51
51
|
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
52
52
|
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
53
|
+
|
|
54
|
+
# ─── Optional: Strategist ──────────────────────────────────────────────────
|
|
55
|
+
# Default parent issue for text/file-sourced briefs
|
|
56
|
+
# CLANCY_BRIEF_EPIC=50
|
|
57
|
+
# Auto-set component label on created tickets
|
|
58
|
+
# CLANCY_COMPONENT=api
|
|
59
|
+
# Grill mode: "interactive" (human grill) or "afk" (AI-grill). Default: interactive
|
|
60
|
+
# CLANCY_MODE=interactive
|
|
61
|
+
|
|
62
|
+
# ─── Optional: Reliable autonomous mode ─────────────────────────────────────
|
|
63
|
+
# Max self-healing fix attempts before delivering with warnings (default: 2, 0 to disable)
|
|
64
|
+
# CLANCY_FIX_RETRIES=2
|
|
65
|
+
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
66
|
+
# CLANCY_TIME_LIMIT=30
|
|
67
|
+
# Block force push, protected branch push, destructive resets (default: true)
|
|
68
|
+
# CLANCY_BRANCH_GUARD=true
|
|
69
|
+
# Token estimation rate for cost logging (tokens/min, default: 6600)
|
|
70
|
+
# CLANCY_TOKEN_RATE=6600
|
|
@@ -29,7 +29,7 @@ CLANCY_BASE_BRANCH=main
|
|
|
29
29
|
# ─── Optional roles ─────────────────────────────────────────────────────────
|
|
30
30
|
# Comma-separated list of optional roles to enable (e.g. planner)
|
|
31
31
|
# Core roles (implementer, reviewer, setup) are always active.
|
|
32
|
-
# CLANCY_ROLES=planner
|
|
32
|
+
# CLANCY_ROLES=planner,strategist
|
|
33
33
|
|
|
34
34
|
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
35
35
|
# Max tickets to process per /clancy:run session (default: 5)
|
|
@@ -66,3 +66,27 @@ MAX_ITERATIONS=5
|
|
|
66
66
|
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
67
67
|
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
68
68
|
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
69
|
+
|
|
70
|
+
# ─── Optional: Strategist ──────────────────────────────────────────────────
|
|
71
|
+
# Issue type for tickets created by /clancy:approve-brief (default: Task)
|
|
72
|
+
# CLANCY_BRIEF_ISSUE_TYPE=Task
|
|
73
|
+
# Default parent epic for text/file-sourced briefs
|
|
74
|
+
# CLANCY_BRIEF_EPIC=PROJ-100
|
|
75
|
+
# Auto-set component on created tickets
|
|
76
|
+
# CLANCY_COMPONENT=api
|
|
77
|
+
# Grill mode: "interactive" (human grill) or "afk" (AI-grill). Default: interactive
|
|
78
|
+
# CLANCY_MODE=interactive
|
|
79
|
+
|
|
80
|
+
# ─── Optional: Reliable autonomous mode ─────────────────────────────────────
|
|
81
|
+
# Max self-healing fix attempts before delivering with warnings (default: 2, 0 to disable)
|
|
82
|
+
# CLANCY_FIX_RETRIES=2
|
|
83
|
+
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
84
|
+
# CLANCY_TIME_LIMIT=30
|
|
85
|
+
# Block force push, protected branch push, destructive resets (default: true)
|
|
86
|
+
# CLANCY_BRANCH_GUARD=true
|
|
87
|
+
# Token estimation rate for cost logging (tokens/min, default: 6600)
|
|
88
|
+
# CLANCY_TOKEN_RATE=6600
|
|
89
|
+
|
|
90
|
+
# ─── Optional: Status transitions (continued) ──────────────────────────────
|
|
91
|
+
# Status for PR review (falls back to CLANCY_STATUS_DONE if not set)
|
|
92
|
+
# CLANCY_STATUS_REVIEW="In Review"
|
|
@@ -19,7 +19,7 @@ CLANCY_BASE_BRANCH=main
|
|
|
19
19
|
# ─── Optional roles ─────────────────────────────────────────────────────────
|
|
20
20
|
# Comma-separated list of optional roles to enable (e.g. planner)
|
|
21
21
|
# Core roles (implementer, reviewer, setup) are always active.
|
|
22
|
-
# CLANCY_ROLES=planner
|
|
22
|
+
# CLANCY_ROLES=planner,strategist
|
|
23
23
|
|
|
24
24
|
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
25
25
|
# Max tickets to process per /clancy:run session (default: 20)
|
|
@@ -56,3 +56,21 @@ MAX_ITERATIONS=20
|
|
|
56
56
|
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
57
57
|
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
58
58
|
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
59
|
+
|
|
60
|
+
# ─── Optional: Strategist ──────────────────────────────────────────────────
|
|
61
|
+
# Default parent issue for text/file-sourced briefs
|
|
62
|
+
# CLANCY_BRIEF_EPIC=ENG-100
|
|
63
|
+
# Auto-set component label on created tickets
|
|
64
|
+
# CLANCY_COMPONENT=api
|
|
65
|
+
# Grill mode: "interactive" (human grill) or "afk" (AI-grill). Default: interactive
|
|
66
|
+
# CLANCY_MODE=interactive
|
|
67
|
+
|
|
68
|
+
# ─── Optional: Reliable autonomous mode ─────────────────────────────────────
|
|
69
|
+
# Max self-healing fix attempts before delivering with warnings (default: 2, 0 to disable)
|
|
70
|
+
# CLANCY_FIX_RETRIES=2
|
|
71
|
+
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
72
|
+
# CLANCY_TIME_LIMIT=30
|
|
73
|
+
# Block force push, protected branch push, destructive resets (default: true)
|
|
74
|
+
# CLANCY_BRANCH_GUARD=true
|
|
75
|
+
# Token estimation rate for cost logging (tokens/min, default: 6600)
|
|
76
|
+
# CLANCY_TOKEN_RATE=6600
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zod schemas for Bitbucket PR API responses (Cloud and Server).
|
|
3
|
-
*/
|
|
4
|
-
import * as z from 'zod/mini';
|
|
5
|
-
/** A single PR from the Cloud list endpoint. */
|
|
6
|
-
export declare const bitbucketPrSchema: z.ZodMiniObject<{
|
|
7
|
-
id: z.ZodMiniNumber<number>;
|
|
8
|
-
links: z.ZodMiniObject<{
|
|
9
|
-
html: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
10
|
-
href: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
11
|
-
}, z.core.$strip>>;
|
|
12
|
-
}, z.core.$strip>;
|
|
13
|
-
participants: z.ZodMiniArray<z.ZodMiniObject<{
|
|
14
|
-
state: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
15
|
-
role: z.ZodMiniString<string>;
|
|
16
|
-
}, z.core.$strip>>;
|
|
17
|
-
}, z.core.$strip>;
|
|
18
|
-
/** Response from `GET /repositories/{workspace}/{slug}/pullrequests` (paginated). */
|
|
19
|
-
export declare const bitbucketPrListSchema: z.ZodMiniObject<{
|
|
20
|
-
values: z.ZodMiniArray<z.ZodMiniObject<{
|
|
21
|
-
id: z.ZodMiniNumber<number>;
|
|
22
|
-
links: z.ZodMiniObject<{
|
|
23
|
-
html: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
24
|
-
href: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
25
|
-
}, z.core.$strip>>;
|
|
26
|
-
}, z.core.$strip>;
|
|
27
|
-
participants: z.ZodMiniArray<z.ZodMiniObject<{
|
|
28
|
-
state: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
29
|
-
role: z.ZodMiniString<string>;
|
|
30
|
-
}, z.core.$strip>>;
|
|
31
|
-
}, z.core.$strip>>;
|
|
32
|
-
}, z.core.$strip>;
|
|
33
|
-
/** A single inline comment on a Cloud PR. */
|
|
34
|
-
export declare const bitbucketCommentSchema: z.ZodMiniObject<{
|
|
35
|
-
content: z.ZodMiniObject<{
|
|
36
|
-
raw: z.ZodMiniString<string>;
|
|
37
|
-
}, z.core.$strip>;
|
|
38
|
-
inline: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
39
|
-
path: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
40
|
-
}, z.core.$strip>>;
|
|
41
|
-
created_on: z.ZodMiniString<string>;
|
|
42
|
-
user: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
43
|
-
nickname: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
44
|
-
}, z.core.$strip>>;
|
|
45
|
-
}, z.core.$strip>;
|
|
46
|
-
/** Response from `GET /repositories/{workspace}/{slug}/pullrequests/{id}/comments` (paginated). */
|
|
47
|
-
export declare const bitbucketCommentsSchema: z.ZodMiniObject<{
|
|
48
|
-
values: z.ZodMiniArray<z.ZodMiniObject<{
|
|
49
|
-
content: z.ZodMiniObject<{
|
|
50
|
-
raw: z.ZodMiniString<string>;
|
|
51
|
-
}, z.core.$strip>;
|
|
52
|
-
inline: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
53
|
-
path: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
54
|
-
}, z.core.$strip>>;
|
|
55
|
-
created_on: z.ZodMiniString<string>;
|
|
56
|
-
user: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
57
|
-
nickname: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
58
|
-
}, z.core.$strip>>;
|
|
59
|
-
}, z.core.$strip>>;
|
|
60
|
-
}, z.core.$strip>;
|
|
61
|
-
/** A single PR from the Server list endpoint. */
|
|
62
|
-
export declare const bitbucketServerPrSchema: z.ZodMiniObject<{
|
|
63
|
-
id: z.ZodMiniNumber<number>;
|
|
64
|
-
links: z.ZodMiniObject<{
|
|
65
|
-
self: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniObject<{
|
|
66
|
-
href: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
67
|
-
}, z.core.$strip>>>;
|
|
68
|
-
}, z.core.$strip>;
|
|
69
|
-
reviewers: z.ZodMiniArray<z.ZodMiniObject<{
|
|
70
|
-
status: z.ZodMiniString<string>;
|
|
71
|
-
}, z.core.$strip>>;
|
|
72
|
-
}, z.core.$strip>;
|
|
73
|
-
/** Response from `GET /rest/api/latest/projects/{key}/repos/{slug}/pull-requests` (paginated). */
|
|
74
|
-
export declare const bitbucketServerPrListSchema: z.ZodMiniObject<{
|
|
75
|
-
values: z.ZodMiniArray<z.ZodMiniObject<{
|
|
76
|
-
id: z.ZodMiniNumber<number>;
|
|
77
|
-
links: z.ZodMiniObject<{
|
|
78
|
-
self: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniObject<{
|
|
79
|
-
href: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
80
|
-
}, z.core.$strip>>>;
|
|
81
|
-
}, z.core.$strip>;
|
|
82
|
-
reviewers: z.ZodMiniArray<z.ZodMiniObject<{
|
|
83
|
-
status: z.ZodMiniString<string>;
|
|
84
|
-
}, z.core.$strip>>;
|
|
85
|
-
}, z.core.$strip>>;
|
|
86
|
-
}, z.core.$strip>;
|
|
87
|
-
/** A comment object nested inside a Server activity. */
|
|
88
|
-
export declare const bitbucketServerCommentSchema: z.ZodMiniObject<{
|
|
89
|
-
text: z.ZodMiniString<string>;
|
|
90
|
-
anchor: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
91
|
-
path: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
92
|
-
}, z.core.$strip>>;
|
|
93
|
-
createdDate: z.ZodMiniNumber<number>;
|
|
94
|
-
author: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
95
|
-
slug: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
96
|
-
}, z.core.$strip>>;
|
|
97
|
-
}, z.core.$strip>;
|
|
98
|
-
/** A single activity on a Server PR (from /activities endpoint). */
|
|
99
|
-
export declare const bitbucketServerActivitySchema: z.ZodMiniObject<{
|
|
100
|
-
action: z.ZodMiniString<string>;
|
|
101
|
-
comment: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
102
|
-
text: z.ZodMiniString<string>;
|
|
103
|
-
anchor: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
104
|
-
path: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
105
|
-
}, z.core.$strip>>;
|
|
106
|
-
createdDate: z.ZodMiniNumber<number>;
|
|
107
|
-
author: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
108
|
-
slug: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
109
|
-
}, z.core.$strip>>;
|
|
110
|
-
}, z.core.$strip>>;
|
|
111
|
-
}, z.core.$strip>;
|
|
112
|
-
/** Response from `GET /rest/api/latest/.../pull-requests/{id}/activities` (paginated). */
|
|
113
|
-
export declare const bitbucketServerActivitiesSchema: z.ZodMiniObject<{
|
|
114
|
-
values: z.ZodMiniArray<z.ZodMiniObject<{
|
|
115
|
-
action: z.ZodMiniString<string>;
|
|
116
|
-
comment: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
117
|
-
text: z.ZodMiniString<string>;
|
|
118
|
-
anchor: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
119
|
-
path: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
120
|
-
}, z.core.$strip>>;
|
|
121
|
-
createdDate: z.ZodMiniNumber<number>;
|
|
122
|
-
author: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
123
|
-
slug: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
124
|
-
}, z.core.$strip>>;
|
|
125
|
-
}, z.core.$strip>>;
|
|
126
|
-
}, z.core.$strip>>;
|
|
127
|
-
}, z.core.$strip>;
|
|
128
|
-
export type BitbucketPr = z.infer<typeof bitbucketPrSchema>;
|
|
129
|
-
export type BitbucketPrList = z.infer<typeof bitbucketPrListSchema>;
|
|
130
|
-
export type BitbucketComment = z.infer<typeof bitbucketCommentSchema>;
|
|
131
|
-
export type BitbucketComments = z.infer<typeof bitbucketCommentsSchema>;
|
|
132
|
-
export type BitbucketServerPr = z.infer<typeof bitbucketServerPrSchema>;
|
|
133
|
-
export type BitbucketServerPrList = z.infer<typeof bitbucketServerPrListSchema>;
|
|
134
|
-
export type BitbucketServerComment = z.infer<typeof bitbucketServerCommentSchema>;
|
|
135
|
-
export type BitbucketServerActivity = z.infer<typeof bitbucketServerActivitySchema>;
|
|
136
|
-
export type BitbucketServerActivities = z.infer<typeof bitbucketServerActivitiesSchema>;
|
|
137
|
-
//# sourceMappingURL=bitbucket-pr.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bitbucket-pr.d.ts","sourceRoot":"","sources":["../../src/schemas/bitbucket-pr.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAM9B,gDAAgD;AAChD,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAW5B,CAAC;AAEH,qFAAqF;AACrF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;iBAEhC,CAAC;AAEH,6CAA6C;AAC7C,eAAO,MAAM,sBAAsB;;;;;;;;;;;iBAajC,CAAC;AAEH,mGAAmG;AACnG,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;iBAElC,CAAC;AAMH,iDAAiD;AACjD,eAAO,MAAM,uBAAuB;;;;;;;;;;iBAUlC,CAAC;AAEH,kGAAkG;AAClG,eAAO,MAAM,2BAA2B;;;;;;;;;;;;iBAEtC,CAAC;AAEH,wDAAwD;AACxD,eAAO,MAAM,4BAA4B;;;;;;;;;iBAavC,CAAC;AAEH,oEAAoE;AACpE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;iBAGxC,CAAC;AAEH,0FAA0F;AAC1F,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;iBAE1C,CAAC;AAKH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAKxE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAChF,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAC1C,OAAO,4BAA4B,CACpC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAC3C,OAAO,6BAA6B,CACrC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,+BAA+B,CACvC,CAAC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zod schemas for Bitbucket PR API responses (Cloud and Server).
|
|
3
|
-
*/
|
|
4
|
-
import * as z from 'zod/mini';
|
|
5
|
-
// ---------------------------------------------------------------------------
|
|
6
|
-
// Bitbucket Cloud
|
|
7
|
-
// ---------------------------------------------------------------------------
|
|
8
|
-
/** A single PR from the Cloud list endpoint. */
|
|
9
|
-
export const bitbucketPrSchema = z.object({
|
|
10
|
-
id: z.number(),
|
|
11
|
-
links: z.object({
|
|
12
|
-
html: z.optional(z.object({ href: z.optional(z.string()) })),
|
|
13
|
-
}),
|
|
14
|
-
participants: z.array(z.object({
|
|
15
|
-
state: z.optional(z.string()),
|
|
16
|
-
role: z.string(),
|
|
17
|
-
})),
|
|
18
|
-
});
|
|
19
|
-
/** Response from `GET /repositories/{workspace}/{slug}/pullrequests` (paginated). */
|
|
20
|
-
export const bitbucketPrListSchema = z.object({
|
|
21
|
-
values: z.array(bitbucketPrSchema),
|
|
22
|
-
});
|
|
23
|
-
/** A single inline comment on a Cloud PR. */
|
|
24
|
-
export const bitbucketCommentSchema = z.object({
|
|
25
|
-
content: z.object({ raw: z.string() }),
|
|
26
|
-
inline: z.optional(z.object({
|
|
27
|
-
path: z.optional(z.string()),
|
|
28
|
-
})),
|
|
29
|
-
created_on: z.string(),
|
|
30
|
-
user: z.optional(z.object({
|
|
31
|
-
nickname: z.optional(z.string()),
|
|
32
|
-
})),
|
|
33
|
-
});
|
|
34
|
-
/** Response from `GET /repositories/{workspace}/{slug}/pullrequests/{id}/comments` (paginated). */
|
|
35
|
-
export const bitbucketCommentsSchema = z.object({
|
|
36
|
-
values: z.array(bitbucketCommentSchema),
|
|
37
|
-
});
|
|
38
|
-
// ---------------------------------------------------------------------------
|
|
39
|
-
// Bitbucket Server (Data Center)
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
/** A single PR from the Server list endpoint. */
|
|
42
|
-
export const bitbucketServerPrSchema = z.object({
|
|
43
|
-
id: z.number(),
|
|
44
|
-
links: z.object({
|
|
45
|
-
self: z.optional(z.array(z.object({ href: z.optional(z.string()) }))),
|
|
46
|
-
}),
|
|
47
|
-
reviewers: z.array(z.object({
|
|
48
|
-
status: z.string(),
|
|
49
|
-
})),
|
|
50
|
-
});
|
|
51
|
-
/** Response from `GET /rest/api/latest/projects/{key}/repos/{slug}/pull-requests` (paginated). */
|
|
52
|
-
export const bitbucketServerPrListSchema = z.object({
|
|
53
|
-
values: z.array(bitbucketServerPrSchema),
|
|
54
|
-
});
|
|
55
|
-
/** A comment object nested inside a Server activity. */
|
|
56
|
-
export const bitbucketServerCommentSchema = z.object({
|
|
57
|
-
text: z.string(),
|
|
58
|
-
anchor: z.optional(z.object({
|
|
59
|
-
path: z.optional(z.string()),
|
|
60
|
-
})),
|
|
61
|
-
createdDate: z.number(),
|
|
62
|
-
author: z.optional(z.object({
|
|
63
|
-
slug: z.optional(z.string()),
|
|
64
|
-
})),
|
|
65
|
-
});
|
|
66
|
-
/** A single activity on a Server PR (from /activities endpoint). */
|
|
67
|
-
export const bitbucketServerActivitySchema = z.object({
|
|
68
|
-
action: z.string(),
|
|
69
|
-
comment: z.optional(bitbucketServerCommentSchema),
|
|
70
|
-
});
|
|
71
|
-
/** Response from `GET /rest/api/latest/.../pull-requests/{id}/activities` (paginated). */
|
|
72
|
-
export const bitbucketServerActivitiesSchema = z.object({
|
|
73
|
-
values: z.array(bitbucketServerActivitySchema),
|
|
74
|
-
});
|
|
75
|
-
//# sourceMappingURL=bitbucket-pr.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bitbucket-pr.js","sourceRoot":"","sources":["../../src/schemas/bitbucket-pr.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAE9B,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,gDAAgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;KAC7D,CAAC;IACF,YAAY,EAAE,CAAC,CAAC,KAAK,CACnB,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;KACjB,CAAC,CACH;CACF,CAAC,CAAC;AAEH,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC;CACnC,CAAC,CAAC;AAEH,6CAA6C;AAC7C,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACtC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAChB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7B,CAAC,CACH;IACD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,IAAI,EAAE,CAAC,CAAC,QAAQ,CACd,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KACjC,CAAC,CACH;CACF,CAAC,CAAC;AAEH,mGAAmG;AACnG,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC;CACxC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,iDAAiD;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACtE,CAAC;IACF,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB,CAAC,CACH;CACF,CAAC,CAAC;AAEH,kGAAkG;AAClG,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;CACzC,CAAC,CAAC;AAEH,wDAAwD;AACxD,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAChB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7B,CAAC,CACH;IACD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAChB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC7B,CAAC,CACH;CACF,CAAC,CAAC;AAEH,oEAAoE;AACpE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CAClD,CAAC,CAAC;AAEH,0FAA0F;AAC1F,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC;IACtD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC;CAC/C,CAAC,CAAC"}
|