cawdev-cli 1.0.11-beta → 1.1.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.
- package/README.md +11 -1
- package/lib/finish-check.mjs +34 -1
- package/lib/harness-prompt.mjs +6 -0
- package/lib/order.mjs +7 -0
- package/lib/protected.mjs +225 -0
- package/lib/roadmap-format.mjs +25 -10
- package/lib/runner-config.mjs +9 -0
- package/lib/secrets.mjs +2 -2
- package/lib/sonar-analysis.mjs +52 -0
- package/lib/sonarqube-mcp.mjs +50 -0
- package/lib/stage-tools.mjs +54 -1
- package/mcp/README.md +48 -36
- package/mcp/server.mjs +263 -72
- package/package.json +1 -1
- package/runner/README.md +101 -25
- package/runner/attach.mjs +46 -1
- package/runner/cawdev.mjs +20 -2
- package/runner/configure.mjs +62 -0
- package/runner/git-host.mjs +298 -5
- package/runner/pause-note.mjs +104 -0
- package/runner/push-guard.mjs +333 -0
- package/runner/runner.mjs +675 -177
- package/runner/split.mjs +1 -1
package/mcp/README.md
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Plain Node, zero dependencies, stdio JSON-RPC — `server.mjs`, plus the shared
|
|
4
4
|
rule matcher in `tools/lib/tool-rules.mjs` that the runner uses too. It gives a coding
|
|
5
5
|
agent a project's roadmap and changelog — the same verbs a person gets in the
|
|
6
|
-
console, because the API was built to mirror these tools one-for-one.
|
|
6
|
+
console, because the API was built to mirror these tools one-for-one. This README says
|
|
7
|
+
**card** for the roadmap thing and **run** for the work on it, as the console does; the API and
|
|
8
|
+
the tool names say *entry* (`roadmap_list`, `propose_entry`, `EntryRef`) and keep doing so.
|
|
7
9
|
|
|
8
10
|
## Setting it up in a repository
|
|
9
11
|
|
|
@@ -59,45 +61,54 @@ four being different from what you assumed.
|
|
|
59
61
|
|
|
60
62
|
The sequence is fixed, and the second step is the one people skip:
|
|
61
63
|
|
|
62
|
-
1. Branch off an up-to-date `main`, named after the
|
|
63
|
-
2. **Move the
|
|
64
|
+
1. Branch off an up-to-date `main`, named after the card — `r4-roadmap-entries`.
|
|
65
|
+
2. **Move the card to `IN_DEVELOPMENT` naming the branch, before your first commit**
|
|
64
66
|
(`roadmap_set_status`). Not after. The roadmap should be able to answer
|
|
65
67
|
"what is being worked on right now" without asking anyone.
|
|
66
|
-
3. Build to the
|
|
68
|
+
3. Build to the card's "Done when" list.
|
|
67
69
|
4. Finish with a PR. Never push to `main`. As your session ends the platform
|
|
68
|
-
moves the *branch* on the development board, not the card: to `
|
|
70
|
+
moves the *branch* on the development board, not the card: to `TEST` (the board
|
|
71
|
+
column, not the TEST stage of a run) where
|
|
69
72
|
the project runs `require_review` and somebody is going to read it, and to
|
|
70
73
|
`DONE` where it does not — a finish nobody was asked about (R132), because
|
|
71
74
|
there is no reviewer coming.
|
|
72
|
-
5. When the PR merges, move the
|
|
73
|
-
be deleted — `
|
|
75
|
+
5. When the PR merges, move the card to `MERGED` naming it. The branch may then
|
|
76
|
+
be deleted — `IN_DEVELOPMENT` is for work somebody is doing, not work that is done.
|
|
74
77
|
|
|
75
78
|
### What a status must carry
|
|
76
79
|
|
|
77
80
|
`roadmap_statuses` will tell you, and it is worth reading rather than guessing:
|
|
78
|
-
`
|
|
81
|
+
`IN_DEVELOPMENT` needs a branch, `MERGED` needs the merge — a pull request, a merge
|
|
79
82
|
commit, or a sha — `SHIPPED` needs a version that is a real git tag, and
|
|
80
|
-
`DECLINED` needs a reason.
|
|
81
|
-
request it would otherwise carry belongs to the run, and a project that reviews
|
|
82
|
-
without opening pull requests has none to give it.
|
|
83
|
+
`DECLINED` needs a reason.
|
|
83
84
|
|
|
84
85
|
**A card you file may land in the `BACKLOG`** (R371). Where a new card goes
|
|
85
86
|
when you name no status is the project's rule, per door, and the default for a
|
|
86
87
|
card or issue an agent files is the backlog: waiting until a person or a sprint
|
|
87
88
|
brings it in, in no sprint and on no board column. Its origin names your
|
|
88
|
-
session and the card your run was on. A plan
|
|
89
|
+
session and the card your run was on. A plan run's card lands where the console's
|
|
89
90
|
do (R380). Name a status (`CONSIDERING`, `NEW`) when
|
|
90
91
|
you mean the pipeline. Giving a backlog card a sprint moves it to the first
|
|
91
92
|
status of its kind; moving a card to `BACKLOG` takes it out of its sprint.
|
|
92
93
|
|
|
93
|
-
**
|
|
94
|
+
**Sprints are a team's** (R474, R489). The `sprint` of `roadmap_create`,
|
|
95
|
+
`roadmap_update` and the filter of `roadmap_list` take an integer or a string:
|
|
96
|
+
`7` or `"S7"` when the project's teams have one S7, `"Core team · S7"` (or
|
|
97
|
+
`"Core team / S7"`) when two do — the API refuses an ambiguous `S7` naming both
|
|
98
|
+
spellings, so read the sentence and send the long one — a sprint id, and `0` or
|
|
99
|
+
`""` to take a card out. A completed sprint refuses a card that is not already
|
|
100
|
+
in it, and only a person can reopen one; do not retry. `sprint_list` says which
|
|
101
|
+
sprints there are. A card prints its sprint as `Core team · S7 Name (active)`.
|
|
102
|
+
Opening, starting, completing and renaming a sprint stay a person's.
|
|
103
|
+
|
|
104
|
+
**Any status may move to any other.** There is no transition diagram — a card
|
|
94
105
|
really can go from `CONSIDERING` straight to `SHIPPED` if that is what happened.
|
|
95
106
|
The rules are about what a status *carries*, not the path it took.
|
|
96
107
|
|
|
97
108
|
### The body is what we want; the plan is how; the comments are the argument
|
|
98
109
|
|
|
99
110
|
`roadmap_get` gives you all three, and `task_current` gives you them for the
|
|
100
|
-
|
|
111
|
+
card you are working on.
|
|
101
112
|
|
|
102
113
|
**The plan is the one to read before doing any of the work.** It was written by
|
|
103
114
|
a plan phase and agreed by somebody, and it names the files — R124. If you are
|
|
@@ -110,8 +121,8 @@ either. The first is the platform's — it stores what a plan phase reports when
|
|
|
110
121
|
the phase ends, so that a session which must not write is not handed a writer to
|
|
111
122
|
do its own bookkeeping with. The second is refused outright: *an agent cannot
|
|
112
123
|
start another agent*, which is `RunAccess.requireCanStart`'s rule and not an
|
|
113
|
-
omission here. **Read the discussion before you propose anything about
|
|
114
|
-
|
|
124
|
+
omission here. **Read the discussion before you propose anything about a
|
|
125
|
+
card.** It is where an objection was answered and where an obvious-looking
|
|
115
126
|
approach was ruled out with a reason — and re-proposing what was talked out
|
|
116
127
|
three months ago is precisely what it exists to stop.
|
|
117
128
|
|
|
@@ -123,7 +134,7 @@ that the next reader does not have to reconstruct it from the thread.
|
|
|
123
134
|
A comment you write is attributed to your run as well as to the account that
|
|
124
135
|
minted your token, so a person can tell an agent's reading from a colleague's.
|
|
125
136
|
|
|
126
|
-
### Read what the earlier
|
|
137
|
+
### Read what the earlier runs did before repeating it
|
|
127
138
|
|
|
128
139
|
`task_current` lists **every run this card has already had** — how each ended,
|
|
129
140
|
on what branch, with what model, whether the work was pushed, and the commits it
|
|
@@ -133,21 +144,21 @@ to know what the first tried.
|
|
|
133
144
|
|
|
134
145
|
No transcripts come with it, deliberately: the terminal log is on the run's own
|
|
135
146
|
page in the console, and nine of them would fill the context this call exists to
|
|
136
|
-
orient. If you need the detail, the discussion under the
|
|
137
|
-
previous
|
|
147
|
+
orient. If you need the detail, the discussion under the card is where a
|
|
148
|
+
previous run should have written down what it learned — and where yours
|
|
138
149
|
should.
|
|
139
150
|
|
|
140
151
|
### There is no delete
|
|
141
152
|
|
|
142
153
|
Not in these tools, not in the API. `roadmap_decline` with a reason is the only
|
|
143
|
-
exit
|
|
154
|
+
exit a card has, and the reason is the point: it is what stops the same idea
|
|
144
155
|
being proposed again in six months. Same for changelog entries — correct the
|
|
145
156
|
text, do not remove the record. Same for comments: nothing removes one, and the
|
|
146
157
|
most you can do to your own is correct its wording.
|
|
147
158
|
|
|
148
159
|
### Ids are permanent, and a card is named by its ref
|
|
149
160
|
|
|
150
|
-
|
|
161
|
+
A card's number never changes and is never reused. Commit messages and code
|
|
151
162
|
comments point at it. Since R221 a roadmap card and an issue each count on
|
|
152
163
|
their own sequence, so `R91` and `i91` are two cards: wherever a tool takes
|
|
153
164
|
`number`, `related`, `after` or `entryNumber`, pass the ref — `"i91"` for an
|
|
@@ -169,20 +180,21 @@ what you are allowed to do.
|
|
|
169
180
|
|---|---|
|
|
170
181
|
| `roadmap_where` | Which platform, which token, read from where, and who you are. Start here. |
|
|
171
182
|
| `roadmap_statuses` | The eight statuses, what they mean, what each requires. |
|
|
172
|
-
| `roadmap_list` |
|
|
173
|
-
| `
|
|
174
|
-
| `
|
|
175
|
-
| `
|
|
176
|
-
| `
|
|
183
|
+
| `roadmap_list` | Cards, optionally by status or `sprint` (any spelling below). `brief` omits bodies — use it to survey. |
|
|
184
|
+
| `sprint_list` | The project's sprints with how far each has got (R489): `Core team · S7 Notifications — active — 4 of 9 landed`. ACTIVE and UPCOMING unless `state` says otherwise. A read: PLAN and VERIFY have it. |
|
|
185
|
+
| `roadmap_get` | One card in full: its body, **the plan agreed for it**, and the discussion on it. |
|
|
186
|
+
| `roadmap_create` | Create a card; the platform allocates its permanent number. |
|
|
187
|
+
| `roadmap_update` | Title, body, section, sprint (R489: `7`, `S7`, `"Core team · S7"`, a sprint id; `0` or `""` takes the card out — see below), related ids, the cards it starts coding after (`after` — R181), when it is due and how big it is (`due` — R351: an ISO date, `""` clears; `estimate`: a positive number, `0` clears), the version it is meant for (`targetVersion` — R358, `""` clears; since R362 it must be one the project defined under Project settings → Versions, and any other name is refused), the versions an issue was found in (`affectedVersions` — R378, issues only: names the project defined or shipped in, `[]` clears), and who it is assigned to (`assignee` — R331: a username, `""` clears; `roadmap_list`/`issue_list` take `assignee` too, and `me` means the token's owner). |
|
|
188
|
+
| `roadmap_comment` | Say something *beside* a card rather than inside it. |
|
|
177
189
|
| `done_when_tick` | Tick (or untick) one numbered item of the card's Done-when checklist as built, with one line of evidence (R368). `task_current` lists the items. Defaults to the run's own card and refuses another; the reviewer's column is a person's and no token can set it. |
|
|
178
|
-
| `roadmap_set_status` | Move
|
|
190
|
+
| `roadmap_set_status` | Move a card, carrying whatever the status requires. |
|
|
179
191
|
| `roadmap_decline` | Decline with a reason. The only exit. |
|
|
180
|
-
| `backlog_file` | File **feedback**, not a card — something a person should decide about. A WRITER accepts it as a card or an issue, or refuses it (R199). Tagged `agent` as a source, plus any `tags` you pass — `customer` when you relay what a user said (R372). |
|
|
192
|
+
| `backlog_file` | File **feedback**, not a card — something a person should decide about. A WRITER accepts it as a card or an issue, or refuses it (R199). Tagged `agent` as a source, plus any `tags` you pass — `customer` when you relay what a user said (R372). Inside a run, what you find that is **not this card's** goes here, one item per suggestion: the platform stamps the item with the run, so the feedback page links the run and its card, and accepting it relates the new card to yours (R572). Every stage holds it, read-only ones included. |
|
|
181
193
|
| `changelog_list` | The changelog, grouped by release, newest first. |
|
|
182
194
|
| `changelog_get` | One entry. |
|
|
183
195
|
| `changelog_add` | Add an entry; no version means `Unreleased`. |
|
|
184
196
|
| `changelog_update` | Edit one, including moving it to a release when it ships. |
|
|
185
|
-
| `quality_get` | The SonarQube reading — the default branch's gate, a named branch's gate and new problems (inside a run, this run's branch by default), and the open findings with links. Read-only: nothing here refreshes, scans or files (R302). |
|
|
197
|
+
| `quality_get` | The SonarQube reading — the default branch's gate, a named branch's gate and new problems (inside a run, this run's branch by default), and the open findings with links (not those a person dismissed, R467). Read-only: nothing here refreshes, scans or files (R302). |
|
|
186
198
|
|
|
187
199
|
### Inside a run
|
|
188
200
|
|
|
@@ -192,8 +204,8 @@ token gets a refusal saying so.
|
|
|
192
204
|
|
|
193
205
|
| Tool | What it does |
|
|
194
206
|
|---|---|
|
|
195
|
-
| `task_current` | The
|
|
196
|
-
| `report` | `progress` as often as useful; `done` when finished, naming the branch and any PR; `blocked` when a person must resolve something. `done` and `blocked` end the run; on a coding run `done` is refused until everything is committed and pushed (R345). |
|
|
207
|
+
| `task_current` | The card you are working on, its branch, everything already said and asked on this run, **and every earlier run on the same card**. **Call it first**, and again whenever you are unsure where you are. |
|
|
208
|
+
| `report` | `progress` as often as useful; `done` when finished, naming the branch and any PR; `blocked` when a person must resolve something. `done` and `blocked` end the run; on a review run the `done` body is filed as the branch's review (R529), so write it for the person reading the thread; on a coding run `done` is refused until everything is committed and pushed (R345). |
|
|
197
209
|
| `ask_user` | Ask the person who started the run, and wait. Blocks up to ten minutes, then hands back a `question_id`. |
|
|
198
210
|
| `await_answer` | Resume waiting for a question `ask_user` handed back. |
|
|
199
211
|
| `ask_group` | Ask a **round** — up to twelve questions that belong together, under one title. Blocks until every one of them has been answered, then hands back a `group_id`. |
|
|
@@ -202,7 +214,7 @@ token gets a refusal saying so.
|
|
|
202
214
|
| `approve` | **Not yours to call.** Claude Code calls it itself, as `--permission-prompt-tool`, when no rule covers a tool call. |
|
|
203
215
|
|
|
204
216
|
**`ask_user` is for decisions that are genuinely theirs** — an architectural
|
|
205
|
-
choice, a trade-off with no right answer, something the
|
|
217
|
+
choice, a trade-off with no right answer, something the card does not settle.
|
|
206
218
|
Not for checking work you can check yourself. Every question stops the run and
|
|
207
219
|
costs somebody's attention.
|
|
208
220
|
|
|
@@ -213,7 +225,7 @@ asked because the decision was not yours. Call `await_answer`, or `report`
|
|
|
213
225
|
**`ask_group` is for when you have several questions at once** — R96. One
|
|
214
226
|
question at a time is right for a decision you hit halfway through a piece of
|
|
215
227
|
work; it is wrong when you are trying to understand something, because forty
|
|
216
|
-
separate
|
|
228
|
+
separate Waiting on you items arriving over an afternoon is not a conversation, it is an
|
|
217
229
|
interruption repeated forty times. A round arrives as one form under one title,
|
|
218
230
|
the person answers it in one sitting, and you are woken once when all of it is
|
|
219
231
|
answered.
|
|
@@ -259,9 +271,9 @@ Two smoke tests, both driving the server over real stdio.
|
|
|
259
271
|
CAWDEV_URL=http://localhost:4200 CAWDEV_TOKEN=cawd_… node tools/mcp/smoke.mjs scratch-project
|
|
260
272
|
```
|
|
261
273
|
|
|
262
|
-
**Name a scratch project.** The smoke test creates a roadmap
|
|
263
|
-
it, and
|
|
264
|
-
meant. It left two declined
|
|
274
|
+
**Name a scratch project.** The smoke test creates a roadmap card and declines
|
|
275
|
+
it, and cards cannot be deleted — so it refuses to guess which project you
|
|
276
|
+
meant. It left two declined cards in cawdev's own roadmap before it did.
|
|
265
277
|
|
|
266
278
|
It drives the server the way a client does — spawn, write lines to stdin, read
|
|
267
279
|
lines from stdout — rather than importing its functions, because the parts most
|