@opvs-ai/cli 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -0
- package/dist/.build-stamp.json +4 -4
- package/dist/commands/boards.d.ts +44 -0
- package/dist/commands/boards.js +389 -0
- package/dist/commands/boards.js.map +1 -1
- package/dist/commands/columns.d.ts +40 -0
- package/dist/commands/columns.js +230 -8
- package/dist/commands/columns.js.map +1 -1
- package/dist/commands/projects.js +59 -1
- package/dist/commands/projects.js.map +1 -1
- package/dist/commands/tasks.js +82 -13
- package/dist/commands/tasks.js.map +1 -1
- package/dist/lib/health.d.ts +54 -0
- package/dist/lib/health.js +126 -0
- package/dist/lib/health.js.map +1 -0
- package/dist/lib/routing.d.ts +41 -0
- package/dist/lib/routing.js +61 -0
- package/dist/lib/routing.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -118,6 +118,32 @@ Override workspace selection and settings without modifying config:
|
|
|
118
118
|
opvs boards list # List all boards
|
|
119
119
|
opvs boards get <id> # Board details + columns
|
|
120
120
|
opvs boards create -n "Sprint 1" # Create a board
|
|
121
|
+
opvs boards templates --board-type factory # Presets + each column's claim wiring
|
|
122
|
+
opvs boards create -n "Build" --board-type factory --column-preset factory-full
|
|
123
|
+
opvs boards set-routing ASP --harness codex # Board routing defaults ('none' clears)
|
|
124
|
+
opvs boards projects ASP # Projects claiming the board (none|resolved|ambiguous)
|
|
125
|
+
opvs boards add-to-project ASP <project-uuid> # Additive
|
|
126
|
+
opvs boards move-to-project ASP <project-uuid> --yes # REMOVES it from every other project — previews first
|
|
127
|
+
opvs boards health ASP --profile factory # Unsupplied thresholds print NOT CHECKED
|
|
128
|
+
opvs boards apply-preset ASP factory-full # DRY RUN by default; --yes applies
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Columns
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
opvs columns list <boardId>
|
|
135
|
+
opvs columns update <columnId> --claimable-by-roles builder # REPLACES the role set
|
|
136
|
+
opvs columns update <columnId> --on-claim-move-to executing --sla-minutes 120 --sla-action comment
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
> ⚠️ A role on ANY column changes the whole board: role-less workers are then held to
|
|
140
|
+
> declared columns only. `--on-done-move-to` is advisory — nothing moves a card by it today.
|
|
141
|
+
|
|
142
|
+
### Projects
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
opvs projects set-routing <project-uuid> --model claude-opus-5
|
|
146
|
+
opvs projects health <project-uuid> --profile planner-orchestration
|
|
121
147
|
```
|
|
122
148
|
|
|
123
149
|
### Tasks
|
|
@@ -129,6 +155,8 @@ opvs tasks get <id> # Task details
|
|
|
129
155
|
opvs tasks create --board <id> -t "Title" # Create task
|
|
130
156
|
opvs tasks update <id> --status review # Update status
|
|
131
157
|
opvs tasks update <id> --result-file out.md # Attach result from file
|
|
158
|
+
opvs tasks search -q OSB-78 # By ref, PR number (#1256), title, description
|
|
159
|
+
opvs tasks search -q deploy --board OSB,ASP --status pending --column Review --offset 20
|
|
132
160
|
```
|
|
133
161
|
|
|
134
162
|
### Comments
|
package/dist/.build-stamp.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"stamp_version": 1,
|
|
3
3
|
"package": "@opvs-ai/cli",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"source_digest": "
|
|
6
|
-
"source_files":
|
|
7
|
-
"built_at": "2026-09-
|
|
4
|
+
"version": "0.15.0",
|
|
5
|
+
"source_digest": "ec116d2848d892fe1100f3e36b23292c46f234943e1a05070c64b5c596202f0f",
|
|
6
|
+
"source_files": 40,
|
|
7
|
+
"built_at": "2026-09-15T08:12:04.325Z",
|
|
8
8
|
"node": "v22.22.0"
|
|
9
9
|
}
|
|
@@ -2,4 +2,48 @@
|
|
|
2
2
|
* opvs boards — board CRUD
|
|
3
3
|
*/
|
|
4
4
|
import { Command } from "commander";
|
|
5
|
+
interface ColumnChange {
|
|
6
|
+
slug: string;
|
|
7
|
+
name: string;
|
|
8
|
+
action: string;
|
|
9
|
+
changes?: Record<string, unknown[]>;
|
|
10
|
+
cards_affected?: number;
|
|
11
|
+
notes?: string[];
|
|
12
|
+
}
|
|
13
|
+
interface PresetConflict {
|
|
14
|
+
slug: string;
|
|
15
|
+
code: string;
|
|
16
|
+
detail: string;
|
|
17
|
+
blocking?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface ApplyPresetPlan {
|
|
20
|
+
preset?: string;
|
|
21
|
+
board_type?: string;
|
|
22
|
+
mode?: string;
|
|
23
|
+
applied?: boolean;
|
|
24
|
+
columns?: ColumnChange[];
|
|
25
|
+
conflicts?: PresetConflict[];
|
|
26
|
+
summary?: Record<string, number>;
|
|
27
|
+
extra_columns?: string[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Print an apply-preset plan: one line per column with the card count it puts
|
|
31
|
+
* in scope, then conflicts and the columns the preset leaves alone. The card
|
|
32
|
+
* count is the number an operator reads to decide whether to apply, so it is
|
|
33
|
+
* on every row rather than only in the summary.
|
|
34
|
+
*/
|
|
35
|
+
export declare function renderPresetPlan(plan: ApplyPresetPlan): string;
|
|
5
36
|
export declare function registerBoardCommands(program: Command): void;
|
|
37
|
+
/**
|
|
38
|
+
* Parse repeatable `--manager slug=type:id` into the `managers` map
|
|
39
|
+
* `ApplyPresetRequest` takes. The shape is checked here because the server's
|
|
40
|
+
* coherence rule (a `user` needs `managed_by_user_id`, an `agent` needs
|
|
41
|
+
* `managed_by_agent_id`) is exactly what a hand-typed flag gets wrong, and a
|
|
42
|
+
* whole-request 422 names the field path rather than the flag.
|
|
43
|
+
*/
|
|
44
|
+
export declare function parseManagers(raw: string[]): Record<string, {
|
|
45
|
+
managed_by_type: "user" | "agent";
|
|
46
|
+
managed_by_user_id?: string;
|
|
47
|
+
managed_by_agent_id?: string;
|
|
48
|
+
}>;
|
|
49
|
+
export {};
|
package/dist/commands/boards.js
CHANGED
|
@@ -3,6 +3,59 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { getEffectiveConfig, createClient } from "@opvs-ai/core";
|
|
5
5
|
import { buildUrl, printResponse, printJson } from "../lib/format.js";
|
|
6
|
+
import { confirm } from "../lib/confirm.js";
|
|
7
|
+
import { isUuid } from "../lib/board-refs.js";
|
|
8
|
+
import { healthParams, renderHealthReport, withHealthOptions } from "../lib/health.js";
|
|
9
|
+
import { buildRoutingBody, withRoutingOptions } from "../lib/routing.js";
|
|
10
|
+
function fmtProject(p) {
|
|
11
|
+
return `${p.name} (${p.id})${p.is_archived ? " [archived]" : ""}`;
|
|
12
|
+
}
|
|
13
|
+
function fmtValue(v) {
|
|
14
|
+
if (v === null || v === undefined)
|
|
15
|
+
return "—";
|
|
16
|
+
if (Array.isArray(v))
|
|
17
|
+
return `[${v.join(",")}]`;
|
|
18
|
+
return String(v);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Print an apply-preset plan: one line per column with the card count it puts
|
|
22
|
+
* in scope, then conflicts and the columns the preset leaves alone. The card
|
|
23
|
+
* count is the number an operator reads to decide whether to apply, so it is
|
|
24
|
+
* on every row rather than only in the summary.
|
|
25
|
+
*/
|
|
26
|
+
export function renderPresetPlan(plan) {
|
|
27
|
+
const lines = [];
|
|
28
|
+
lines.push(`Preset ${plan.preset ?? "?"} on a ${plan.board_type ?? "?"} board — ${plan.applied ? "APPLIED" : "DRY RUN, nothing written"}`);
|
|
29
|
+
lines.push("");
|
|
30
|
+
for (const c of plan.columns ?? []) {
|
|
31
|
+
const cards = `${c.cards_affected ?? 0} card(s)`;
|
|
32
|
+
lines.push(` ${c.action.toUpperCase().padEnd(9)} ${c.slug.padEnd(16)} ${cards.padStart(10)} ${c.name}`);
|
|
33
|
+
for (const [field, pair] of Object.entries(c.changes ?? {})) {
|
|
34
|
+
const [before, after] = pair ?? [];
|
|
35
|
+
lines.push(` ${"".padEnd(9)} ${field}: ${fmtValue(before)} → ${fmtValue(after)}`);
|
|
36
|
+
}
|
|
37
|
+
for (const n of c.notes ?? [])
|
|
38
|
+
lines.push(` ${"".padEnd(9)} note: ${n}`);
|
|
39
|
+
}
|
|
40
|
+
const extra = plan.extra_columns ?? [];
|
|
41
|
+
if (extra.length) {
|
|
42
|
+
lines.push("");
|
|
43
|
+
lines.push(`Left in place (not in the preset, cards untouched): ${extra.join(", ")}`);
|
|
44
|
+
}
|
|
45
|
+
const conflicts = plan.conflicts ?? [];
|
|
46
|
+
if (conflicts.length) {
|
|
47
|
+
lines.push("");
|
|
48
|
+
lines.push("Conflicts:");
|
|
49
|
+
for (const k of conflicts) {
|
|
50
|
+
lines.push(` ${k.blocking === false ? "NON-BLOCKING" : "BLOCKING"} ${k.slug} ${k.code} — ${k.detail}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const s = plan.summary ?? {};
|
|
54
|
+
lines.push("");
|
|
55
|
+
lines.push(`Summary: ${s.created ?? 0} created · ${s.updated ?? 0} updated · ${s.unchanged ?? 0} unchanged · ` +
|
|
56
|
+
`${s.cards_affected ?? 0} card(s) affected. No card is moved or deleted.`);
|
|
57
|
+
return lines.join("\n");
|
|
58
|
+
}
|
|
6
59
|
export function registerBoardCommands(program) {
|
|
7
60
|
const boards = program.command("boards").description("AgentBoard management");
|
|
8
61
|
boards
|
|
@@ -52,6 +105,9 @@ export function registerBoardCommands(program) {
|
|
|
52
105
|
.option("-d, --description <desc>", "Board description")
|
|
53
106
|
.option("--visibility <vis>", "Visibility: public or private", "public")
|
|
54
107
|
.option("--board-type <type>", "Board type: tasks, emails, contacts, companies, deals, content_calendar, factory")
|
|
108
|
+
.option("--column-preset <preset>", "Seed the columns from a named preset instead of the board type's default — see `opvs boards templates`. " +
|
|
109
|
+
"The preset must belong to --board-type (a mismatch is a 422 naming the valid ones). " +
|
|
110
|
+
"e.g. --board-type factory --column-preset factory-full for the fully claim-wired pipeline.")
|
|
55
111
|
.action(async (opts) => {
|
|
56
112
|
const wsSlug = program.opts().workspace;
|
|
57
113
|
try {
|
|
@@ -63,6 +119,8 @@ export function registerBoardCommands(program) {
|
|
|
63
119
|
body.visibility = opts.visibility;
|
|
64
120
|
if (opts.boardType)
|
|
65
121
|
body.board_type = opts.boardType;
|
|
122
|
+
if (opts.columnPreset)
|
|
123
|
+
body.column_preset = opts.columnPreset;
|
|
66
124
|
const res = await client.post("/api/v1/board/boards", body);
|
|
67
125
|
const data = await res.json();
|
|
68
126
|
printJson(data);
|
|
@@ -140,6 +198,285 @@ export function registerBoardCommands(program) {
|
|
|
140
198
|
process.exit(1);
|
|
141
199
|
}
|
|
142
200
|
});
|
|
201
|
+
// ── Templates (ASP-25, plan §B) ───────────────────────────────────
|
|
202
|
+
// Every preset `boards create --column-preset` accepts, WITH its claim
|
|
203
|
+
// wiring. Before ASP-4 the template read dropped the wiring, so a wired
|
|
204
|
+
// preset and an unwired one rendered identically — that is why the roles
|
|
205
|
+
// and move-to slugs are on every column line here, not behind a flag.
|
|
206
|
+
boards
|
|
207
|
+
.command("templates")
|
|
208
|
+
.description("List the column presets a board can be created with, including each column's claim wiring")
|
|
209
|
+
.option("--board-type <type>", "Only presets for this board type, e.g. factory")
|
|
210
|
+
.option("--json", "Print the raw JSON instead of the text listing")
|
|
211
|
+
.action(async (opts) => {
|
|
212
|
+
const wsSlug = program.opts().workspace;
|
|
213
|
+
try {
|
|
214
|
+
const client = createClient(wsSlug);
|
|
215
|
+
const res = await client.get("/api/v1/board/boards/templates");
|
|
216
|
+
const data = (await res.json());
|
|
217
|
+
let templates = data.templates ?? [];
|
|
218
|
+
if (opts.boardType)
|
|
219
|
+
templates = templates.filter((t) => t.board_type === opts.boardType);
|
|
220
|
+
if (opts.json) {
|
|
221
|
+
printJson({ templates });
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (templates.length === 0) {
|
|
225
|
+
console.log(opts.boardType ? `No presets for board type '${opts.boardType}'.` : "No presets.");
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
for (const t of templates) {
|
|
229
|
+
const cols = t.columns ?? [];
|
|
230
|
+
const wired = cols.some((c) => (c.claimable_by_roles?.length ?? 0) > 0);
|
|
231
|
+
console.log(`${t.preset} [${t.board_type}] ${cols.length} column(s) ${wired ? "claim-wired" : "NO claim wiring"}` +
|
|
232
|
+
(t.display_name && t.display_name !== t.preset ? ` — ${t.display_name}` : ""));
|
|
233
|
+
if (t.summary)
|
|
234
|
+
console.log(` ${t.summary}`);
|
|
235
|
+
for (const c of cols) {
|
|
236
|
+
const bits = [];
|
|
237
|
+
if (c.mapped_status)
|
|
238
|
+
bits.push(`status=${c.mapped_status}`);
|
|
239
|
+
if (c.is_default)
|
|
240
|
+
bits.push("default");
|
|
241
|
+
if (c.is_done_column)
|
|
242
|
+
bits.push("done");
|
|
243
|
+
if (c.claimable_by_roles?.length)
|
|
244
|
+
bits.push(`roles=${c.claimable_by_roles.join(",")}`);
|
|
245
|
+
if (c.on_claim_move_to)
|
|
246
|
+
bits.push(`on_claim→${c.on_claim_move_to}`);
|
|
247
|
+
if (c.on_done_move_to)
|
|
248
|
+
bits.push(`on_done→${c.on_done_move_to}`);
|
|
249
|
+
console.log(` - ${c.slug}${bits.length ? ` (${bits.join(" · ")})` : ""}`);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch (err) {
|
|
254
|
+
const e = err;
|
|
255
|
+
console.error(`Error: ${e.detail || "Failed to list board templates"}`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
// ── Routing defaults (ASP-25, plan §C / migration 062) ────────────
|
|
260
|
+
withRoutingOptions(boards
|
|
261
|
+
.command("set-routing <board>")
|
|
262
|
+
.description("Set the board's routing defaults (model / provider / harness / claimable-by). Only the flags you pass change."), "board").action(async (board, opts) => {
|
|
263
|
+
const wsSlug = program.opts().workspace;
|
|
264
|
+
try {
|
|
265
|
+
const body = buildRoutingBody(opts);
|
|
266
|
+
if (Object.keys(body).length === 0) {
|
|
267
|
+
console.error("Nothing to set. Provide --model, --provider, --harness, or --claimable-by");
|
|
268
|
+
process.exit(1);
|
|
269
|
+
}
|
|
270
|
+
const client = createClient(wsSlug);
|
|
271
|
+
const res = await client.patch(`/api/v1/board/boards/${board}`, body);
|
|
272
|
+
const data = (await res.json());
|
|
273
|
+
// Report the SERVER's values, not our request: a blank is normalised to
|
|
274
|
+
// null on the way in, and an echo of our own body would hide that.
|
|
275
|
+
printJson({
|
|
276
|
+
id: data.id,
|
|
277
|
+
ref: data.ref,
|
|
278
|
+
default_model: data.default_model ?? null,
|
|
279
|
+
default_provider: data.default_provider ?? null,
|
|
280
|
+
default_harness: data.default_harness ?? null,
|
|
281
|
+
default_claimable_by: data.default_claimable_by ?? null,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
const e = err;
|
|
286
|
+
console.error(`Error: ${e.detail || "Failed to set board routing"}`);
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
// ── Board ↔ project membership (ASP-25, plan §F) ──────────────────
|
|
291
|
+
// Membership is many-to-many by design, and a board claimed by TWO active
|
|
292
|
+
// projects resolves no bundle at all (`resolution: ambiguous`) — both
|
|
293
|
+
// projects' rules silently stop applying to its cards. `add` can create that
|
|
294
|
+
// state; `move` can silently take a board out of projects the operator is
|
|
295
|
+
// not looking at. Both say what they did.
|
|
296
|
+
boards
|
|
297
|
+
.command("projects <board>")
|
|
298
|
+
.description("List the projects that actively claim this board, and whether that resolves (none | resolved | ambiguous)")
|
|
299
|
+
.action(async (board) => {
|
|
300
|
+
const wsSlug = program.opts().workspace;
|
|
301
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
302
|
+
try {
|
|
303
|
+
const client = createClient(wsSlug);
|
|
304
|
+
const url = buildUrl(`/api/v1/board/boards/${board}/projects`, undefined, cfg.format);
|
|
305
|
+
const res = await client.get(url);
|
|
306
|
+
await printResponse(res);
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
const e = err;
|
|
310
|
+
console.error(`Error: ${e.detail || "Failed to list board projects"}`);
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
boards
|
|
315
|
+
.command("add-to-project <board> <projectId>")
|
|
316
|
+
.description("Add this board to a project (additive — it stays in any other project). " +
|
|
317
|
+
"If it is already in another active project the board becomes AMBIGUOUS and inherits NO project's rules.")
|
|
318
|
+
.action(async (board, projectId) => {
|
|
319
|
+
const wsSlug = program.opts().workspace;
|
|
320
|
+
try {
|
|
321
|
+
requireProjectUuid(projectId);
|
|
322
|
+
const client = createClient(wsSlug);
|
|
323
|
+
const res = await client.post(`/api/v1/board/boards/${board}/projects`, {
|
|
324
|
+
project_id: projectId,
|
|
325
|
+
mode: "add",
|
|
326
|
+
});
|
|
327
|
+
const data = (await res.json());
|
|
328
|
+
printJson(data);
|
|
329
|
+
if (data.resolution === "ambiguous") {
|
|
330
|
+
console.error(`Warning: this board is now claimed by ${data.projects?.length ?? "several"} active projects ` +
|
|
331
|
+
"(resolution: ambiguous), so its cards inherit NO project bundle or routing default. " +
|
|
332
|
+
"Use `opvs boards move-to-project` if it should belong to one.");
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
const e = err;
|
|
337
|
+
console.error(`Error: ${e.detail || "Failed to add board to project"}`);
|
|
338
|
+
process.exit(1);
|
|
339
|
+
}
|
|
340
|
+
});
|
|
341
|
+
boards
|
|
342
|
+
.command("move-to-project <board> <projectId>")
|
|
343
|
+
.description("Move this board into a project: adds it there AND REMOVES it from every other project that claims it, " +
|
|
344
|
+
"in one transaction. Prints the projects it will leave first; requires --yes (or a y at a terminal prompt).")
|
|
345
|
+
.option("--yes", "Confirm the removal from the projects listed. Without it nothing is sent.")
|
|
346
|
+
.action(async (board, projectId, opts) => {
|
|
347
|
+
const wsSlug = program.opts().workspace;
|
|
348
|
+
try {
|
|
349
|
+
requireProjectUuid(projectId);
|
|
350
|
+
const client = createClient(wsSlug);
|
|
351
|
+
// Preview from the same read `opvs boards projects` uses. The POST has
|
|
352
|
+
// no dry-run, so this is the only way to name the casualties BEFORE
|
|
353
|
+
// they happen.
|
|
354
|
+
const before = await client.get(`/api/v1/board/boards/${board}/projects`);
|
|
355
|
+
const current = (await before.json()).projects ?? [];
|
|
356
|
+
const target = projectId.toLowerCase();
|
|
357
|
+
const leaving = current.filter((p) => p.id.toLowerCase() !== target);
|
|
358
|
+
const alreadyIn = current.some((p) => p.id.toLowerCase() === target);
|
|
359
|
+
if (leaving.length === 0) {
|
|
360
|
+
console.error(alreadyIn
|
|
361
|
+
? `Board ${board} is already only in project ${projectId}. The move removes it from no other project.`
|
|
362
|
+
: `Board ${board} is in no other project. The move removes it from nothing.`);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
console.error(`Moving board ${board} to project ${projectId} will REMOVE it from ${leaving.length} project(s):`);
|
|
366
|
+
for (const p of leaving)
|
|
367
|
+
console.error(` - ${fmtProject(p)}`);
|
|
368
|
+
console.error("Its cards stop inheriting those projects' commands, skills, rules and routing defaults.");
|
|
369
|
+
}
|
|
370
|
+
const ok = await confirm(`Move board ${board} to project ${projectId}?`, !!opts.yes, leaving.length
|
|
371
|
+
? `This removes the board from ${leaving.length} other project(s)`
|
|
372
|
+
: "This changes the board's project membership");
|
|
373
|
+
if (!ok) {
|
|
374
|
+
process.exit(1);
|
|
375
|
+
}
|
|
376
|
+
const res = await client.post(`/api/v1/board/boards/${board}/projects`, {
|
|
377
|
+
project_id: projectId,
|
|
378
|
+
mode: "move",
|
|
379
|
+
});
|
|
380
|
+
const data = (await res.json());
|
|
381
|
+
printJson(data);
|
|
382
|
+
// The server's `removed_from` is the truth; the preview was a read that
|
|
383
|
+
// another session could have overtaken. Say so when they differ.
|
|
384
|
+
const removed = new Set((data.removed_from ?? []).map((p) => p.id.toLowerCase()));
|
|
385
|
+
const previewed = new Set(leaving.map((p) => p.id.toLowerCase()));
|
|
386
|
+
const differs = removed.size !== previewed.size || [...removed].some((id) => !previewed.has(id));
|
|
387
|
+
if (differs) {
|
|
388
|
+
console.error("Warning: the projects actually removed differ from the preview above (membership changed in between). " +
|
|
389
|
+
"`removed_from` in the output is what happened.");
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
catch (err) {
|
|
393
|
+
const e = err;
|
|
394
|
+
console.error(`Error: ${e.detail || "Failed to move board to project"}`);
|
|
395
|
+
process.exit(1);
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
// ── Health (ASP-25, plan §J4) ─────────────────────────────────────
|
|
399
|
+
withHealthOptions(boards
|
|
400
|
+
.command("health <board>")
|
|
401
|
+
.description("Structural health of a board and its cards. OPVS reports structure; YOU supply the thresholds. " +
|
|
402
|
+
"A check whose threshold you did not pass prints NOT CHECKED and makes the verdict INCOMPLETE — never a pass.")).action(async (board, opts) => {
|
|
403
|
+
const wsSlug = program.opts().workspace;
|
|
404
|
+
try {
|
|
405
|
+
const client = createClient(wsSlug);
|
|
406
|
+
// JSON always — the text rendering below needs the structure, and a
|
|
407
|
+
// yaml/md workspace format would hand us text we cannot re-render.
|
|
408
|
+
const url = buildUrl(`/api/v1/board/boards/${board}/health`, healthParams(opts));
|
|
409
|
+
const res = await client.get(url);
|
|
410
|
+
const report = (await res.json());
|
|
411
|
+
if (opts.json)
|
|
412
|
+
printJson(report);
|
|
413
|
+
else
|
|
414
|
+
console.log(renderHealthReport(report));
|
|
415
|
+
}
|
|
416
|
+
catch (err) {
|
|
417
|
+
const e = err;
|
|
418
|
+
console.error(`Error: ${e.detail || "Failed to get board health"}`);
|
|
419
|
+
process.exit(1);
|
|
420
|
+
}
|
|
421
|
+
});
|
|
422
|
+
// ── Apply a preset to an existing board (ASP-25, plan §J1) ────────
|
|
423
|
+
boards
|
|
424
|
+
.command("apply-preset <board> <preset>")
|
|
425
|
+
.description("Reshape an EXISTING board's columns to a preset. DRY RUN BY DEFAULT: prints what each column would become " +
|
|
426
|
+
"and how many cards each change puts in scope, and writes nothing. Add --yes to apply. " +
|
|
427
|
+
"Cards are never moved or deleted; columns the preset lacks are left in place.")
|
|
428
|
+
.option("--yes", "Apply the plan printed by the dry run. Without it this command only previews.")
|
|
429
|
+
.option("--manager <slug=type:id>", "Assign a column's owner, e.g. review=user:<ab_user uuid> or deploy=agent:<agent uuid> (repeatable). " +
|
|
430
|
+
"A preset cannot carry an owner, so without this the column is reported unowned — never given one OPVS invented.", (val, prev) => prev.concat([val]), [])
|
|
431
|
+
.option("--json", "Print the raw JSON plan instead of the text rendering.")
|
|
432
|
+
.action(async (board, preset, opts) => {
|
|
433
|
+
const wsSlug = program.opts().workspace;
|
|
434
|
+
let client;
|
|
435
|
+
try {
|
|
436
|
+
client = createClient(wsSlug);
|
|
437
|
+
}
|
|
438
|
+
catch (err) {
|
|
439
|
+
reportPresetError(err, "Failed to preview preset");
|
|
440
|
+
return;
|
|
441
|
+
}
|
|
442
|
+
const url = `/api/v1/board/boards/${board}/apply-preset`;
|
|
443
|
+
const managers = parseManagers(opts.manager ?? []);
|
|
444
|
+
// Only send `managers` when given, so the body without the flag is
|
|
445
|
+
// byte-identical to what the route documents as its default.
|
|
446
|
+
const request = (mode) => Object.keys(managers).length ? { preset, mode, managers } : { preset, mode };
|
|
447
|
+
const show = (plan) => (opts.json ? printJson(plan) : console.log(renderPresetPlan(plan)));
|
|
448
|
+
let plan;
|
|
449
|
+
try {
|
|
450
|
+
// Always dry-run first, even with --yes: the operator sees the per-column
|
|
451
|
+
// card counts for THIS run before anything is written.
|
|
452
|
+
const res = await client.post(url, request("dry_run"));
|
|
453
|
+
plan = (await res.json());
|
|
454
|
+
}
|
|
455
|
+
catch (err) {
|
|
456
|
+
reportPresetError(err, "Failed to preview preset");
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
show(plan);
|
|
460
|
+
if (!opts.yes) {
|
|
461
|
+
console.error("Dry run only — nothing was written. Re-run with --yes to apply this plan.");
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
try {
|
|
465
|
+
const res = await client.post(url, request("apply"));
|
|
466
|
+
const applied = (await res.json());
|
|
467
|
+
if (!applied.applied) {
|
|
468
|
+
show(applied);
|
|
469
|
+
console.error("Error: the server did not apply the preset (applied: false).");
|
|
470
|
+
process.exit(1);
|
|
471
|
+
}
|
|
472
|
+
console.error(`Applied preset ${preset} to board ${board}.`);
|
|
473
|
+
if (opts.json)
|
|
474
|
+
printJson(applied);
|
|
475
|
+
}
|
|
476
|
+
catch (err) {
|
|
477
|
+
reportPresetError(err, "Failed to apply preset");
|
|
478
|
+
}
|
|
479
|
+
});
|
|
143
480
|
// ── Export (A.15) ──────────────────────────────────────────────
|
|
144
481
|
// Read-only board → Markdown snapshot. Output is deterministic — same
|
|
145
482
|
// board state → same bytes — so it's safe to commit and diff.
|
|
@@ -178,4 +515,56 @@ export function registerBoardCommands(program) {
|
|
|
178
515
|
}
|
|
179
516
|
});
|
|
180
517
|
}
|
|
518
|
+
/**
|
|
519
|
+
* A project id must be a UUID: the body field is `project_id: UUID` and no hop
|
|
520
|
+
* resolves anything else, so a name would be a bare 422. Say what to run instead.
|
|
521
|
+
*/
|
|
522
|
+
function requireProjectUuid(projectId) {
|
|
523
|
+
if (!isUuid(projectId)) {
|
|
524
|
+
console.error(`Error: project must be a UUID (got '${projectId}'). Find it with \`opvs projects list\`.`);
|
|
525
|
+
process.exit(1);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* A blocking preset conflict is a 409 in BOTH modes, carrying the conflict list
|
|
530
|
+
* in `detail`. Print the list — "409 Conflict" alone tells the operator nothing
|
|
531
|
+
* about which column to fix.
|
|
532
|
+
*/
|
|
533
|
+
function reportPresetError(err, fallback) {
|
|
534
|
+
const e = err;
|
|
535
|
+
const detail = e.body?.detail;
|
|
536
|
+
if (e.status === 409 && detail && typeof detail === "object" && Array.isArray(detail.conflicts)) {
|
|
537
|
+
console.error(`Error: ${detail.message ?? "preset cannot be applied"}`);
|
|
538
|
+
for (const k of detail.conflicts) {
|
|
539
|
+
console.error(` ${k.blocking === false ? "NON-BLOCKING" : "BLOCKING"} ${k.slug} ${k.code} — ${k.detail}`);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
console.error(`Error: ${e.detail || fallback}`);
|
|
544
|
+
}
|
|
545
|
+
process.exit(1);
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Parse repeatable `--manager slug=type:id` into the `managers` map
|
|
549
|
+
* `ApplyPresetRequest` takes. The shape is checked here because the server's
|
|
550
|
+
* coherence rule (a `user` needs `managed_by_user_id`, an `agent` needs
|
|
551
|
+
* `managed_by_agent_id`) is exactly what a hand-typed flag gets wrong, and a
|
|
552
|
+
* whole-request 422 names the field path rather than the flag.
|
|
553
|
+
*/
|
|
554
|
+
export function parseManagers(raw) {
|
|
555
|
+
const out = {};
|
|
556
|
+
for (const item of raw) {
|
|
557
|
+
const m = /^([a-z0-9_-]+)=(user|agent):(.+)$/.exec(item.trim());
|
|
558
|
+
if (!m || !isUuid(m[3])) {
|
|
559
|
+
console.error(`Error: --manager expects <slug>=<user|agent>:<uuid>, e.g. review=user:<uuid> (got '${item}')`);
|
|
560
|
+
process.exit(1);
|
|
561
|
+
}
|
|
562
|
+
const [, slug, type, id] = m;
|
|
563
|
+
out[slug] =
|
|
564
|
+
type === "user"
|
|
565
|
+
? { managed_by_type: "user", managed_by_user_id: id }
|
|
566
|
+
: { managed_by_type: "agent", managed_by_agent_id: id };
|
|
567
|
+
}
|
|
568
|
+
return out;
|
|
569
|
+
}
|
|
181
570
|
//# sourceMappingURL=boards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/commands/boards.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"boards.js","sourceRoot":"","sources":["../../src/commands/boards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,45 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* opvs columns — board column management
|
|
3
|
+
*
|
|
4
|
+
* ── Column wiring (ASP-25, plan §A) ─────────────────────────────────────────
|
|
5
|
+
* `claimable_by_roles`, `on_claim_move_to` and `on_done_move_to` are the three
|
|
6
|
+
* fields that turn a board into a factory. The API has accepted all of them
|
|
7
|
+
* since migration 040, and until this slice the only way to write them was raw
|
|
8
|
+
* REST — seeded once at board create, unreachable after. The same was true of
|
|
9
|
+
* `mapped_status`, `is_done_column`, `is_default`, `description` and the five
|
|
10
|
+
* `sla_*` fields.
|
|
11
|
+
*
|
|
12
|
+
* Every help string below states what the flag COSTS as well as what it does,
|
|
13
|
+
* because `--help` is the only place a terminal user reads that. Where a
|
|
14
|
+
* string makes a claim about server behaviour it names the code that makes it
|
|
15
|
+
* true, in a comment beside it — a help line is a claim, and a claim with no
|
|
16
|
+
* reader to check it goes stale silently (ASP-5 left one behind in tasks.ts).
|
|
3
17
|
*/
|
|
4
18
|
import { Command } from "commander";
|
|
19
|
+
/** `TaskStatus` (agentboard `models/task.py`). A column binds at most one. */
|
|
20
|
+
export declare const TASK_STATUSES: readonly ["pending", "assigned", "in_progress", "blocked", "review", "done", "cancelled", "failed"];
|
|
21
|
+
interface WiringOpts {
|
|
22
|
+
claimableByRoles?: string;
|
|
23
|
+
onClaimMoveTo?: string;
|
|
24
|
+
onDoneMoveTo?: string;
|
|
25
|
+
mappedStatus?: string;
|
|
26
|
+
isDoneColumn?: string;
|
|
27
|
+
isDefault?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
slaMinutes?: string;
|
|
30
|
+
slaAction?: string;
|
|
31
|
+
slaMoveTo?: string;
|
|
32
|
+
slaRecipient?: string;
|
|
33
|
+
slaTemplate?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the wiring half of a column body from flags.
|
|
37
|
+
*
|
|
38
|
+
* Only flags the caller actually gave become keys — the PATCH is
|
|
39
|
+
* `model_dump(exclude_unset=True)` (`ColumnService.update`), so an absent key
|
|
40
|
+
* leaves the field alone and an explicit `null` clears it. `clearable` is false
|
|
41
|
+
* on create, where there is nothing to clear: a clear verb there sends nothing.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildColumnWiring(opts: WiringOpts, clearable: boolean): Record<string, unknown>;
|
|
5
44
|
export declare function registerColumnCommands(program: Command): void;
|
|
45
|
+
export {};
|