@opvs-ai/cli 0.6.4 → 0.7.5
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/commands/boards.js +44 -1
- package/dist/commands/boards.js.map +1 -1
- package/dist/commands/columns.js +12 -3
- package/dist/commands/columns.js.map +1 -1
- package/dist/commands/professions.d.ts +14 -0
- package/dist/commands/professions.js +156 -0
- package/dist/commands/professions.js.map +1 -0
- package/dist/commands/projects.d.ts +14 -0
- package/dist/commands/projects.js +222 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/report.d.ts +10 -0
- package/dist/commands/report.js +54 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/tasks.js +151 -2
- package/dist/commands/tasks.js.map +1 -1
- package/dist/commands/tools.d.ts +23 -0
- package/dist/commands/tools.js +336 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -176,6 +176,34 @@ opvs auth revoke # Revoke token
|
|
|
176
176
|
opvs auth list # List agent tokens (admin)
|
|
177
177
|
```
|
|
178
178
|
|
|
179
|
+
### Tools (Marketplace skills)
|
|
180
|
+
|
|
181
|
+
Mirrors the 6 always-on MCP tools from the skills-meta plugin so terminal
|
|
182
|
+
users can drive the marketplace runtime without going through an agent
|
|
183
|
+
session. All operations are pinned to the workspace's current brand.
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Discover
|
|
187
|
+
opvs tools search "find restaurants in Aarhus" # Semantic registry search
|
|
188
|
+
opvs tools help @opvs-ai/agentboard # Full registry descriptor
|
|
189
|
+
opvs tools help @opvs-ai/agentboard --section methods # Just the methods
|
|
190
|
+
|
|
191
|
+
# Operate
|
|
192
|
+
opvs tools list # Installed packages on this brand
|
|
193
|
+
opvs tools install @opvs-ai/agentboard \
|
|
194
|
+
--grants '{"vendor.opvs-ai.agentboard.read":true}' # Install with entitlements
|
|
195
|
+
opvs tools uninstall @opvs-ai/agentboard # Soft-uninstall
|
|
196
|
+
|
|
197
|
+
# Invoke
|
|
198
|
+
opvs tools call @opvs-ai/agentboard list_tasks \
|
|
199
|
+
--args '{"board_id":"abc-123"}' # Forward through runtime proxy
|
|
200
|
+
opvs tools call agentboard list_tasks --args-file ./params.json
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`opvs tools pin <skill>` is reserved for a CLI-facing pin endpoint that
|
|
204
|
+
ships in W2.1; until then it emits a stub error. For agent sessions, the
|
|
205
|
+
gateway plugin `skill_pin` tool is the canonical surface.
|
|
206
|
+
|
|
179
207
|
### Workspace
|
|
180
208
|
|
|
181
209
|
```bash
|
package/dist/commands/boards.js
CHANGED
|
@@ -51,6 +51,7 @@ export function registerBoardCommands(program) {
|
|
|
51
51
|
.requiredOption("-n, --name <name>", "Board name")
|
|
52
52
|
.option("-d, --description <desc>", "Board description")
|
|
53
53
|
.option("--visibility <vis>", "Visibility: public or private", "public")
|
|
54
|
+
.option("--board-type <type>", "Board type: tasks, emails, contacts, companies, deals, content_calendar, factory")
|
|
54
55
|
.action(async (opts) => {
|
|
55
56
|
const wsSlug = program.opts().workspace;
|
|
56
57
|
try {
|
|
@@ -60,6 +61,8 @@ export function registerBoardCommands(program) {
|
|
|
60
61
|
body.description = opts.description;
|
|
61
62
|
if (opts.visibility)
|
|
62
63
|
body.visibility = opts.visibility;
|
|
64
|
+
if (opts.boardType)
|
|
65
|
+
body.board_type = opts.boardType;
|
|
63
66
|
const res = await client.post("/api/v1/board/boards", body);
|
|
64
67
|
const data = await res.json();
|
|
65
68
|
printJson(data);
|
|
@@ -76,6 +79,7 @@ export function registerBoardCommands(program) {
|
|
|
76
79
|
.option("-n, --name <name>", "New name")
|
|
77
80
|
.option("-d, --description <desc>", "New description")
|
|
78
81
|
.option("--visibility <vis>", "Visibility: public or private")
|
|
82
|
+
.option("--board-type <type>", "Switch board type (tasks↔factory only; other values are rejected)")
|
|
79
83
|
.action(async (id, opts) => {
|
|
80
84
|
const wsSlug = program.opts().workspace;
|
|
81
85
|
try {
|
|
@@ -87,8 +91,10 @@ export function registerBoardCommands(program) {
|
|
|
87
91
|
body.description = opts.description;
|
|
88
92
|
if (opts.visibility)
|
|
89
93
|
body.visibility = opts.visibility;
|
|
94
|
+
if (opts.boardType)
|
|
95
|
+
body.board_type = opts.boardType;
|
|
90
96
|
if (Object.keys(body).length === 0) {
|
|
91
|
-
console.error("Nothing to update. Provide --name, --description, or --
|
|
97
|
+
console.error("Nothing to update. Provide --name, --description, --visibility, or --board-type");
|
|
92
98
|
process.exit(1);
|
|
93
99
|
}
|
|
94
100
|
const res = await client.patch(`/api/v1/board/boards/${id}`, body);
|
|
@@ -117,5 +123,42 @@ export function registerBoardCommands(program) {
|
|
|
117
123
|
process.exit(1);
|
|
118
124
|
}
|
|
119
125
|
});
|
|
126
|
+
// ── Export (A.15) ──────────────────────────────────────────────
|
|
127
|
+
// Read-only board → Markdown snapshot. Output is deterministic — same
|
|
128
|
+
// board state → same bytes — so it's safe to commit and diff.
|
|
129
|
+
// ``> board.md`` to capture; re-run to regen on demand. The
|
|
130
|
+
// companion RabbitMQ subscriber in api-gateway dispatches task.*
|
|
131
|
+
// events to outbound webhooks so external services (incl. the
|
|
132
|
+
// future GitHub PR auto-creator) can react to changes.
|
|
133
|
+
boards
|
|
134
|
+
.command("export-markdown <board_id>")
|
|
135
|
+
.description("Export a board as read-only Markdown to stdout (idempotent regen).")
|
|
136
|
+
.option("--detail <level>", "Render level: summary (compact table) | standard (nested plan doc, default) | full (+ links, attachments, custom fields, OPVS metadata)")
|
|
137
|
+
.option("--columns <list>", "Comma-separated column names or ids to include (default: all). Unknown token → 400 with the valid column list.")
|
|
138
|
+
.action(async (board_id, opts) => {
|
|
139
|
+
const wsSlug = program.opts().workspace;
|
|
140
|
+
try {
|
|
141
|
+
const client = createClient(wsSlug);
|
|
142
|
+
// Topic 1 / S1.3: forward `detail` + `columns` to the export
|
|
143
|
+
// endpoint (S1.1 added them; S1.2 made the gateway proxy relay the
|
|
144
|
+
// full query string). `format=md` stays fixed — these flags are
|
|
145
|
+
// MD-only and ignored for csv/json.
|
|
146
|
+
const params = new URLSearchParams({ format: "md" });
|
|
147
|
+
if (opts.detail)
|
|
148
|
+
params.set("detail", opts.detail);
|
|
149
|
+
if (opts.columns)
|
|
150
|
+
params.set("columns", opts.columns);
|
|
151
|
+
const url = `/api/v1/board/boards/${board_id}/export?${params.toString()}`;
|
|
152
|
+
const res = await client.get(url);
|
|
153
|
+
// The endpoint returns raw markdown text — emit verbatim.
|
|
154
|
+
const text = await res.text();
|
|
155
|
+
process.stdout.write(text);
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
const e = err;
|
|
159
|
+
console.error(`Error: ${e.detail || "Failed to export board"}`);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
120
163
|
}
|
|
121
164
|
//# 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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"}
|
package/dist/commands/columns.js
CHANGED
|
@@ -27,6 +27,7 @@ export function registerColumnCommands(program) {
|
|
|
27
27
|
.command("create <boardId>")
|
|
28
28
|
.description("Create a new column")
|
|
29
29
|
.requiredOption("--name <name>", "Column name")
|
|
30
|
+
.option("--slug <slug>", "URL-safe slug (auto-derived from --name if omitted)")
|
|
30
31
|
.option("--color <color>", "Column color (hex)")
|
|
31
32
|
.option("--wip-limit <n>", "Work-in-progress limit")
|
|
32
33
|
.option("--position <n>", "Position (0-based)")
|
|
@@ -34,7 +35,13 @@ export function registerColumnCommands(program) {
|
|
|
34
35
|
const wsSlug = program.opts().workspace;
|
|
35
36
|
try {
|
|
36
37
|
const client = createClient(wsSlug);
|
|
37
|
-
const
|
|
38
|
+
const slug = opts.slug ||
|
|
39
|
+
opts.name
|
|
40
|
+
.toLowerCase()
|
|
41
|
+
.trim()
|
|
42
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
43
|
+
.replace(/^-+|-+$/g, "");
|
|
44
|
+
const body = { name: opts.name, slug };
|
|
38
45
|
if (opts.color)
|
|
39
46
|
body.color = opts.color;
|
|
40
47
|
if (opts.wipLimit)
|
|
@@ -90,8 +97,10 @@ export function registerColumnCommands(program) {
|
|
|
90
97
|
const wsSlug = program.opts().workspace;
|
|
91
98
|
try {
|
|
92
99
|
const client = createClient(wsSlug);
|
|
93
|
-
const
|
|
94
|
-
|
|
100
|
+
const columns = opts.order
|
|
101
|
+
.split(",")
|
|
102
|
+
.map((id, position) => ({ id: id.trim(), position }));
|
|
103
|
+
const res = await client.post(`/api/v1/board/boards/${boardId}/columns/reorder`, { columns });
|
|
95
104
|
const data = await res.json();
|
|
96
105
|
printJson(data);
|
|
97
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../src/commands/columns.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IAElF,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC;QACxC,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,wBAAwB,OAAO,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACvF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,GAA0B,CAAC;YACrC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,IAAI,wBAAwB,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,qBAAqB,CAAC;SAClC,cAAc,CAAC,eAAe,EAAE,aAAa,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SAC/C,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;SACnD,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,OAAe,EAAE,IAAI,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,IAAI,GAA4B,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../../src/commands/columns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opvs profession — the profession guild hall (shared craft + workflow library)
|
|
3
|
+
*
|
|
4
|
+
* A hired agent that runs a profession is a MEMBER of that profession's shared
|
|
5
|
+
* "guild hall" (ADDRESS-DESIGN §5). These commands are the CLI face of the
|
|
6
|
+
* `/api/v1/professions/*` surface: pull the shared, PUBLISHED craft, contribute a
|
|
7
|
+
* learning back (→ pending, curated by D4 before it publishes), manage the live
|
|
8
|
+
* workflow library, and look up a profession's address profile.
|
|
9
|
+
*
|
|
10
|
+
* Auth is the CLI's stored PAT (brand-scoped). Membership + version-pinning are
|
|
11
|
+
* enforced server-side by the proxy — a non-member gets 403.
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from "commander";
|
|
14
|
+
export declare function registerProfessionCommands(program: Command): void;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opvs profession — the profession guild hall (shared craft + workflow library)
|
|
3
|
+
*
|
|
4
|
+
* A hired agent that runs a profession is a MEMBER of that profession's shared
|
|
5
|
+
* "guild hall" (ADDRESS-DESIGN §5). These commands are the CLI face of the
|
|
6
|
+
* `/api/v1/professions/*` surface: pull the shared, PUBLISHED craft, contribute a
|
|
7
|
+
* learning back (→ pending, curated by D4 before it publishes), manage the live
|
|
8
|
+
* workflow library, and look up a profession's address profile.
|
|
9
|
+
*
|
|
10
|
+
* Auth is the CLI's stored PAT (brand-scoped). Membership + version-pinning are
|
|
11
|
+
* enforced server-side by the proxy — a non-member gets 403.
|
|
12
|
+
*/
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
import { readFileSync } from "node:fs";
|
|
15
|
+
import { getEffectiveConfig, createClient } from "@opvs-ai/core";
|
|
16
|
+
import { buildUrl, printResponse, printJson } from "../lib/format.js";
|
|
17
|
+
export function registerProfessionCommands(program) {
|
|
18
|
+
const prof = program
|
|
19
|
+
.command("profession")
|
|
20
|
+
.description("Profession guild hall — shared craft + workflow library");
|
|
21
|
+
// ── Pull published craft (session-start read) ──────────────────
|
|
22
|
+
prof
|
|
23
|
+
.command("pull <code>")
|
|
24
|
+
.description("Pull the profession's shared, PUBLISHED craft")
|
|
25
|
+
.option("--since <cursor>", "Forward cursor from a prior pull")
|
|
26
|
+
.option("--query <text>", "FTS search over body + tags (published only)")
|
|
27
|
+
.option("--limit <n>", "Max items", "100")
|
|
28
|
+
.action(async (code, opts) => {
|
|
29
|
+
const wsSlug = program.opts().workspace;
|
|
30
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
31
|
+
try {
|
|
32
|
+
const client = createClient(wsSlug);
|
|
33
|
+
const params = {};
|
|
34
|
+
if (opts.since)
|
|
35
|
+
params.since = opts.since;
|
|
36
|
+
if (opts.query)
|
|
37
|
+
params.query = opts.query;
|
|
38
|
+
if (opts.limit)
|
|
39
|
+
params.limit = opts.limit;
|
|
40
|
+
const url = buildUrl(`/api/v1/professions/${code}/craft`, params, cfg.format);
|
|
41
|
+
const res = await client.get(url);
|
|
42
|
+
await printResponse(res);
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const e = err;
|
|
46
|
+
console.error(`Error: ${e.detail || "Failed to pull craft"}`);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// ── Search the craft (FTS convenience over pull --query) ───────
|
|
51
|
+
prof
|
|
52
|
+
.command("search <code> <query>")
|
|
53
|
+
.description("Search the profession's published craft (FTS)")
|
|
54
|
+
.option("--limit <n>", "Max items", "25")
|
|
55
|
+
.action(async (code, query, opts) => {
|
|
56
|
+
const wsSlug = program.opts().workspace;
|
|
57
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
58
|
+
try {
|
|
59
|
+
const client = createClient(wsSlug);
|
|
60
|
+
const params = { query };
|
|
61
|
+
if (opts.limit)
|
|
62
|
+
params.limit = opts.limit;
|
|
63
|
+
const url = buildUrl(`/api/v1/professions/${code}/craft`, params, cfg.format);
|
|
64
|
+
const res = await client.get(url);
|
|
65
|
+
await printResponse(res);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const e = err;
|
|
69
|
+
console.error(`Error: ${e.detail || "Failed to search craft"}`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
// ── Contribute a craft learning (→ pending) ────────────────────
|
|
74
|
+
prof
|
|
75
|
+
.command("contribute <code>")
|
|
76
|
+
.description("Contribute an anonymized craft learning (→ pending; D4 publishes)")
|
|
77
|
+
.requiredOption("--body <text>", "The anonymized craft text (NO client data)")
|
|
78
|
+
.option("--kind <kind>", "learning | pattern", "learning")
|
|
79
|
+
.option("--tags <a,b,c>", "Comma-separated tags")
|
|
80
|
+
.option("--hash <hash>", "One-way provenance/dedup hash (NEVER a brand id). Defaults to sha256(body).")
|
|
81
|
+
.action(async (code, opts) => {
|
|
82
|
+
const wsSlug = program.opts().workspace;
|
|
83
|
+
try {
|
|
84
|
+
const client = createClient(wsSlug);
|
|
85
|
+
// The caller computes a one-way provenance hash (§7.1). Default to a
|
|
86
|
+
// sha256 of the body — a stable dedup key that carries no brand identity.
|
|
87
|
+
const hash = opts.hash || createHash("sha256").update(opts.body).digest("hex");
|
|
88
|
+
const body = {
|
|
89
|
+
kind: opts.kind,
|
|
90
|
+
body: opts.body,
|
|
91
|
+
source_engagement_hash: hash,
|
|
92
|
+
};
|
|
93
|
+
if (opts.tags) {
|
|
94
|
+
body.tags = String(opts.tags)
|
|
95
|
+
.split(",")
|
|
96
|
+
.map((t) => t.trim())
|
|
97
|
+
.filter(Boolean);
|
|
98
|
+
}
|
|
99
|
+
const res = await client.post(`/api/v1/professions/${code}/craft`, body);
|
|
100
|
+
const data = await res.json();
|
|
101
|
+
printJson(data);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
const e = err;
|
|
105
|
+
console.error(`Error: ${e.detail || "Failed to contribute craft"}`);
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
// ── Contribute a workflow to the live library (→ pending) ──────
|
|
110
|
+
prof
|
|
111
|
+
.command("add-workflow <code>")
|
|
112
|
+
.description("Contribute a workflow to the live library (→ pending)")
|
|
113
|
+
.requiredOption("-f, --file <path>", 'JSON file: {"workflow_code","version","body"(SMEAC JSON),"source"?}')
|
|
114
|
+
.action(async (code, opts) => {
|
|
115
|
+
const wsSlug = program.opts().workspace;
|
|
116
|
+
try {
|
|
117
|
+
const client = createClient(wsSlug);
|
|
118
|
+
let payload;
|
|
119
|
+
try {
|
|
120
|
+
payload = JSON.parse(readFileSync(opts.file, "utf-8"));
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
console.error(`Error: ${opts.file} is not valid JSON. Provide {workflow_code, version, body, source?}.`);
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
const res = await client.post(`/api/v1/professions/${code}/workflows`, payload);
|
|
127
|
+
const data = await res.json();
|
|
128
|
+
printJson(data);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const e = err;
|
|
132
|
+
console.error(`Error: ${e.detail || "Failed to add workflow"}`);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// ── Address profile (discovery, read-only) ─────────────────────
|
|
137
|
+
prof
|
|
138
|
+
.command("info <code>")
|
|
139
|
+
.description("Show a profession address profile (members, freshness)")
|
|
140
|
+
.action(async (code) => {
|
|
141
|
+
const wsSlug = program.opts().workspace;
|
|
142
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
143
|
+
try {
|
|
144
|
+
const client = createClient(wsSlug);
|
|
145
|
+
const url = buildUrl(`/api/v1/professions/${code}`, undefined, cfg.format);
|
|
146
|
+
const res = await client.get(url);
|
|
147
|
+
await printResponse(res);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
const e = err;
|
|
151
|
+
console.error(`Error: ${e.detail || "Failed to get profession info"}`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=professions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"professions.js","sourceRoot":"","sources":["../../src/commands/professions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opvs projects — Project (BoardGroup kind="project") lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* A Project is a named container that groups many boards (many-to-many), with
|
|
5
|
+
* its own lifecycle: a status (active | on_hold | completed), an orthogonal
|
|
6
|
+
* archive flag, and a free-text closing handoff captured on completion. See
|
|
7
|
+
* the agentboard skill `references/projects.md` for the full mental model.
|
|
8
|
+
*
|
|
9
|
+
* Every command goes through the gateway proxy at
|
|
10
|
+
* `/api/v1/board/board-groups/projects*` (Topic 2, S2.2). Brand is pinned
|
|
11
|
+
* server-side from the PAT — never passed here.
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from "commander";
|
|
14
|
+
export declare function registerProjectCommands(program: Command): void;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* opvs projects — Project (BoardGroup kind="project") lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* A Project is a named container that groups many boards (many-to-many), with
|
|
5
|
+
* its own lifecycle: a status (active | on_hold | completed), an orthogonal
|
|
6
|
+
* archive flag, and a free-text closing handoff captured on completion. See
|
|
7
|
+
* the agentboard skill `references/projects.md` for the full mental model.
|
|
8
|
+
*
|
|
9
|
+
* Every command goes through the gateway proxy at
|
|
10
|
+
* `/api/v1/board/board-groups/projects*` (Topic 2, S2.2). Brand is pinned
|
|
11
|
+
* server-side from the PAT — never passed here.
|
|
12
|
+
*/
|
|
13
|
+
import { getEffectiveConfig, createClient } from "@opvs-ai/core";
|
|
14
|
+
import { buildUrl, printResponse, printJson } from "../lib/format.js";
|
|
15
|
+
const BASE = "/api/v1/board/board-groups/projects";
|
|
16
|
+
export function registerProjectCommands(program) {
|
|
17
|
+
const projects = program
|
|
18
|
+
.command("projects")
|
|
19
|
+
.description("Project lifecycle (group many boards under one container)");
|
|
20
|
+
// ── list ───────────────────────────────────────────────────────────
|
|
21
|
+
projects
|
|
22
|
+
.command("list")
|
|
23
|
+
.description("List projects with member-board + task roll-ups")
|
|
24
|
+
.option("--archived", "Include archived projects (hidden by default)")
|
|
25
|
+
.action(async (opts) => {
|
|
26
|
+
const wsSlug = program.opts().workspace;
|
|
27
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
28
|
+
try {
|
|
29
|
+
const client = createClient(wsSlug);
|
|
30
|
+
const params = {};
|
|
31
|
+
if (opts.archived)
|
|
32
|
+
params.include_archived = "true";
|
|
33
|
+
const url = buildUrl(BASE, params, cfg.format);
|
|
34
|
+
const res = await client.get(url);
|
|
35
|
+
await printResponse(res);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
const e = err;
|
|
39
|
+
console.error(`Error: ${e.detail || "Failed to list projects"}`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
// ── get ────────────────────────────────────────────────────────────
|
|
44
|
+
projects
|
|
45
|
+
.command("get <id>")
|
|
46
|
+
.description("Get a project with its member boards + roll-up")
|
|
47
|
+
.action(async (id) => {
|
|
48
|
+
const wsSlug = program.opts().workspace;
|
|
49
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
50
|
+
try {
|
|
51
|
+
const client = createClient(wsSlug);
|
|
52
|
+
const url = buildUrl(`${BASE}/${id}`, undefined, cfg.format);
|
|
53
|
+
const res = await client.get(url);
|
|
54
|
+
await printResponse(res);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const e = err;
|
|
58
|
+
console.error(`Error: ${e.detail || "Failed to get project"}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
// ── create ─────────────────────────────────────────────────────────
|
|
63
|
+
// A project provisions NO boards — boards are attached later (or via
|
|
64
|
+
// repeated --board on create). Brand is injected by the proxy.
|
|
65
|
+
projects
|
|
66
|
+
.command("create")
|
|
67
|
+
.description("Create an empty project container")
|
|
68
|
+
.requiredOption("-n, --name <name>", "Project name")
|
|
69
|
+
.option("-b, --board <id>", "Initial member board id (repeatable)", (val, acc) => {
|
|
70
|
+
acc.push(val);
|
|
71
|
+
return acc;
|
|
72
|
+
}, [])
|
|
73
|
+
.action(async (opts) => {
|
|
74
|
+
const wsSlug = program.opts().workspace;
|
|
75
|
+
try {
|
|
76
|
+
const client = createClient(wsSlug);
|
|
77
|
+
const body = { name: opts.name };
|
|
78
|
+
if (opts.board && opts.board.length > 0)
|
|
79
|
+
body.board_ids = opts.board;
|
|
80
|
+
const res = await client.post(BASE, body);
|
|
81
|
+
const data = await res.json();
|
|
82
|
+
printJson(data);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
const e = err;
|
|
86
|
+
console.error(`Error: ${e.detail || "Failed to create project"}`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
// ── update (name / settings) ───────────────────────────────────────
|
|
91
|
+
projects
|
|
92
|
+
.command("update <id>")
|
|
93
|
+
.description("Update a project's name")
|
|
94
|
+
.option("-n, --name <name>", "New name")
|
|
95
|
+
.action(async (id, opts) => {
|
|
96
|
+
const wsSlug = program.opts().workspace;
|
|
97
|
+
try {
|
|
98
|
+
const client = createClient(wsSlug);
|
|
99
|
+
const body = {};
|
|
100
|
+
if (opts.name)
|
|
101
|
+
body.name = opts.name;
|
|
102
|
+
if (Object.keys(body).length === 0) {
|
|
103
|
+
console.error("Nothing to update. Provide --name");
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const res = await client.patch(`${BASE}/${id}`, body);
|
|
107
|
+
const data = await res.json();
|
|
108
|
+
printJson(data);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
const e = err;
|
|
112
|
+
console.error(`Error: ${e.detail || "Failed to update project"}`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// ── set-status (manual lifecycle transition) ───────────────────────
|
|
117
|
+
// status ∈ active | on_hold | completed. On `completed` an optional
|
|
118
|
+
// --handoff free-text is stored in settings.closing_handoff.
|
|
119
|
+
projects
|
|
120
|
+
.command("set-status <id> <status>")
|
|
121
|
+
.description("Set lifecycle status: active | on_hold | completed")
|
|
122
|
+
.option("--handoff <text>", "Closing handoff text (captured when status=completed)")
|
|
123
|
+
.action(async (id, status, opts) => {
|
|
124
|
+
const wsSlug = program.opts().workspace;
|
|
125
|
+
try {
|
|
126
|
+
const client = createClient(wsSlug);
|
|
127
|
+
const body = { status };
|
|
128
|
+
if (opts.handoff)
|
|
129
|
+
body.closing_handoff = opts.handoff;
|
|
130
|
+
const res = await client.patch(`${BASE}/${id}/status`, body);
|
|
131
|
+
const data = await res.json();
|
|
132
|
+
printJson(data);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
const e = err;
|
|
136
|
+
console.error(`Error: ${e.detail || "Failed to set project status"}`);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// ── archive / unarchive (container-only, orthogonal to status) ─────
|
|
141
|
+
projects
|
|
142
|
+
.command("archive <id>")
|
|
143
|
+
.description("Archive a project (hide from default list, still reachable)")
|
|
144
|
+
.option("--undo", "Unarchive instead (set is_archived=false)")
|
|
145
|
+
.action(async (id, opts) => {
|
|
146
|
+
const wsSlug = program.opts().workspace;
|
|
147
|
+
try {
|
|
148
|
+
const client = createClient(wsSlug);
|
|
149
|
+
const res = await client.post(`${BASE}/${id}/archive`, {
|
|
150
|
+
is_archived: !opts.undo,
|
|
151
|
+
});
|
|
152
|
+
const data = await res.json();
|
|
153
|
+
printJson(data);
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
const e = err;
|
|
157
|
+
console.error(`Error: ${e.detail || "Failed to archive project"}`);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
// ── add-board (many-to-many membership) ────────────────────────────
|
|
162
|
+
projects
|
|
163
|
+
.command("add-board <id> <board_id>")
|
|
164
|
+
.description("Add a board to a project (a board can be in many projects)")
|
|
165
|
+
.action(async (id, boardId) => {
|
|
166
|
+
const wsSlug = program.opts().workspace;
|
|
167
|
+
try {
|
|
168
|
+
const client = createClient(wsSlug);
|
|
169
|
+
const res = await client.post(`${BASE}/${id}/boards`, {
|
|
170
|
+
board_id: boardId,
|
|
171
|
+
});
|
|
172
|
+
const data = await res.json();
|
|
173
|
+
printJson(data);
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
const e = err;
|
|
177
|
+
console.error(`Error: ${e.detail || "Failed to add board to project"}`);
|
|
178
|
+
process.exit(1);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
// ── remove-board (membership only — board survives, O-P1) ──────────
|
|
182
|
+
projects
|
|
183
|
+
.command("remove-board <id> <board_id>")
|
|
184
|
+
.description("Remove a board from a project (the board itself stays live)")
|
|
185
|
+
.action(async (id, boardId) => {
|
|
186
|
+
const wsSlug = program.opts().workspace;
|
|
187
|
+
try {
|
|
188
|
+
const client = createClient(wsSlug);
|
|
189
|
+
const res = await client.delete(`${BASE}/${id}/boards/${boardId}`);
|
|
190
|
+
await printResponse(res, true);
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
const e = err;
|
|
194
|
+
console.error(`Error: ${e.detail || "Failed to remove board from project"}`);
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
// ── tasks (scoped all-tasks view across member boards) ─────────────
|
|
199
|
+
projects
|
|
200
|
+
.command("tasks <id>")
|
|
201
|
+
.description("Scoped all-tasks view across the project's member boards")
|
|
202
|
+
.option("--include-done", "Include completed tasks (hidden by default)")
|
|
203
|
+
.action(async (id, opts) => {
|
|
204
|
+
const wsSlug = program.opts().workspace;
|
|
205
|
+
const cfg = getEffectiveConfig(wsSlug);
|
|
206
|
+
try {
|
|
207
|
+
const client = createClient(wsSlug);
|
|
208
|
+
const params = {};
|
|
209
|
+
if (opts.includeDone)
|
|
210
|
+
params.include_done = "true";
|
|
211
|
+
const url = buildUrl(`${BASE}/${id}/tasks`, params, cfg.format);
|
|
212
|
+
const res = await client.get(url);
|
|
213
|
+
await printResponse(res);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
const e = err;
|
|
217
|
+
console.error(`Error: ${e.detail || "Failed to get project tasks"}`);
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/commands/projects.ts"],"names":[],"mappings":"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"}
|