@opvs-ai/cli 0.13.3 → 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 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
@@ -0,0 +1,9 @@
1
+ {
2
+ "stamp_version": 1,
3
+ "package": "@opvs-ai/cli",
4
+ "version": "0.15.0",
5
+ "source_digest": "ec116d2848d892fe1100f3e36b23292c46f234943e1a05070c64b5c596202f0f",
6
+ "source_files": 40,
7
+ "built_at": "2026-09-15T08:12:04.325Z",
8
+ "node": "v22.22.0"
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 {};
@@ -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 {};