@quire-io/quire-cli 0.1.6 → 1.0.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/CHANGES.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.0 — 2026-09-22
4
+
5
+ First stable release, cut alongside `@quire-io/api-client` 1.0.0. The command surface has been additive since 0.1.0 — no flag or output shape has been removed — so it is now committed to under semver: a breaking change to a command, flag or `--json` shape needs a major bump.
6
+
7
+ - **Task follower management** (server release Sep 21 2026, api-client 1.0.0) — `task create` / `task subtask` gain repeatable `--follower <user>`; `task update` gains full-replace `--follower` (rejected when combined with the deltas) plus `--add-follower` / `--remove-follower`. Values are a user OID, ID or email, plus `me`, `app` (with the `app|team` / `app|team|channel` / `app|/path` hook-path forms), and the task-only `inherit` — on add it pulls in the parent task's followers, on remove it drops the ones inherited from the parent. `task get` now renders a Followers line, and `task search` gains a `--follower` filter to match the existing `--assignee` one.
8
+ - **`quire reminder` command group** wrapping the new Reminder API: `list <owner>` / `get <oid>` / `create <owner>` / `update <oid>` / `delete <oid>`. `--owner-type project|organization|folder|smart-folder|task` (default `project`) — unlike the other owner-scoped groups these endpoints have no implied owner, and `task` is a type of its own. Projects, organizations and tasks resolve from OID / slug / URL; folders and smart-folders must be OIDs. Pass `-` as the owner for your own Inbox.
9
+ - `--lead` takes `<n>m` (minutes, an absolute offset), `<n>d` (calendar days, keeping wall-clock time across a DST change) or `<n>d@HH:mm`, and repeats up to Quire's 30-lead ceiling. A bare number is minutes. There is deliberately no `h` or `w` unit — the wire format has only the two, so an hour is `60m` and a week `7d`. Omit the flag for one notification at the fire time.
10
+ - `--when` is required when the reminder has no task, or its task has neither a start nor a due date. A dated task supplies the fire time itself, and Quire rejects `--when` / `--recurrence-*` with 400 in that case.
11
+ - `update` changes only `--when` / `--lead` / `--name` / recurrence; `'null'` clears `--when` and `--name`, and `--clear-recurrence` stops it repeating. Members and partner are create-only.
12
+ - `delete` is permanent — reminders don't go to the trash, so the prompt does not offer an undo and there is no `undo-remove` subcommand.
13
+ - `list` writes a one-line stderr note that the order is by OID, not fire time.
14
+ - **`--member` on create** — `sublist create`, `doc create`, `chat create`, `insight create`, `dashboard create` and `reminder create` accept repeatable `--member <user>` (OID, ID, email, or `me`) plus `--members-admins-only`, so a record can be created visible only to chosen users. Tri-state: omit both for every member of the owner, `--members-admins-only` for the owner's admins, a `--member` list for just those users. Create-only — Quire has no endpoint to change it afterwards, so unlike `project approval-category add` the two flags are rejected together rather than one silently winning. `--member` with `--partner` is rejected up front (Quire 400s on the pair). The matching `get` output gains a Members line that tells `(everyone)` from `(admins only)`.
15
+ - `project update` / `org update` gain full-replace `--follower` alongside the `--add-follower` / `--remove-follower` deltas they already had.
16
+ - **New [COVERAGE.md](COVERAGE.md)** — every runnable command and flag on one page (120 commands, 315 flags across 22 groups), generated by `scripts/gen-coverage.ts` from the commander tree rather than hand-maintained. To make that possible the command tree moved out of `src/cli.ts` into a new `src/program.ts` exporting `buildProgram()`; `cli.ts` is now just the entry point, and `quire --help` output is byte-identical. `npm run gen-coverage` refreshes the doc and `npm run check-coverage` fails on a diff — CI runs the latter as a drift guard, matching the api-client repo. The doc also surfaces 31 flags that currently have no help text.
17
+ - Bumps `@quire-io/api-client` to `^1.0.0`. Its one breaking change — `members` returned as user objects rather than OID strings — doesn't reach this CLI: `project members` uses `listProjectMembers`, which was always `QuireUser[]`. The release's error-taxonomy split moves plan limits from `429` to `402`, which quietly improves the CLI's retry behaviour: a quota error no longer burns the one automatic retry in `withRetryOn429`, since that path keys off the `429` message prefix.
18
+
19
+ ## 0.1.7 — 2026-08-21
20
+
21
+ - New `quire dashboard` command group wrapping the Dashboard API (server release Jul 20 2026): `list <owner>` / `get <id>` / `create <owner>` / `update <oid>` / `delete <oid>` / `undo-remove <oid>`. `--owner-type project|organization|folder|smart-folder` (default `project`); projects and organizations resolve from OID / slug / URL, folders and smart-folders must be passed as OIDs (no resolution endpoint). `get` also accepts `"owner-id/<dashboard-id>"`. `update` clears dates via `--start null` / `--due null` (same convention as `task dates`) and archives via `--archive` / `--unarchive`. The API manages the dashboard container only — widget definitions aren't part of the public API yet.
22
+ - `quire undo dashboard <oid>` joins the generic undo command.
23
+ - Chat & doc follower management (server release Jun 4 2026): `chat create` / `doc create` gain repeatable `--follower <user>` (OID, ID, or email); `chat update` / `doc update` gain full-replace `--follower` (rejected when combined with `--add-follower` / `--remove-follower`), and `doc update` also gains `--add-follower` / `--remove-follower`. `chat get` / `doc get` now render a Followers line. Documents are followable only when project-owned — the server returns 400 otherwise.
24
+ - Bumps `@quire-io/api-client` to `^0.1.12`. No CLI change needed for the Jul 31 2026 Comment API URL-form removals — the client already uses only the surviving forms.
25
+
3
26
  ## 0.1.6 — 2026-05-28
4
27
 
5
28
  - `quire task approve <id>` accepts an optional companion comment: `--comment <text|-|@file>` posts a comment on the task as a side effect of the approval, server-prefixed with `**<stream>: <status>**`. `--comment-pinned` pins it and `--comment-as-user <user>` posts as another OID/id/email; both require `--comment`. `bulk-approve` is not extended — the server intentionally exposed this on the single-task endpoint only.
package/README.md CHANGED
@@ -49,7 +49,8 @@ quire task complete <task-id>
49
49
  quire mine --all-orgs --json | jq '.[].name' # script-friendly
50
50
  ```
51
51
 
52
- Run `quire --help` (or `quire <command> --help`) for the full command reference.
52
+ Run `quire --help` (or `quire <command> --help`) for the full command reference, or see
53
+ [COVERAGE.md](COVERAGE.md) for every command and flag on one page.
53
54
 
54
55
  ## Using with AI
55
56
 
@@ -97,6 +98,9 @@ refresh token server-side.
97
98
 
98
99
  Open an issue to discuss before sending a PR.
99
100
 
101
+ If your change adds or renames a command or flag, run `npm run gen-coverage` and commit the
102
+ refreshed [COVERAGE.md](COVERAGE.md) — CI runs `npm run check-coverage` and fails on a diff.
103
+
100
104
  ## License
101
105
 
102
106
  [ISC](LICENSE) © Potix Corporation
package/dist/cli.js CHANGED
@@ -1,29 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import { Command } from "commander";
3
- import { registerChatCommand } from "./commands/chat.js";
4
- import { registerColorsCommand } from "./commands/colors.js";
5
- import { registerCommentCommand } from "./commands/comment.js";
6
- import { registerDocCommand } from "./commands/doc.js";
7
- import { registerInsightCommand } from "./commands/insight.js";
8
- import { registerLoginCommand } from "./commands/login.js";
9
- import { registerLogoutCommand } from "./commands/logout.js";
10
- import { registerMineCommand } from "./commands/mine.js";
11
- import { registerNotifyCommand } from "./commands/notify.js";
12
- import { registerOrgCommand } from "./commands/org.js";
13
- import { registerPartnerCommand } from "./commands/partner.js";
14
- import { registerProjectCommand } from "./commands/project.js";
15
- import { registerResolveCommand } from "./commands/resolve.js";
16
- import { registerStatusCommand } from "./commands/status.js";
17
- import { registerSublistCommand } from "./commands/sublist.js";
18
- import { registerTagCommand } from "./commands/tag.js";
19
- import { registerTaskCommand } from "./commands/task.js";
20
- import { registerUndoCommand } from "./commands/undo.js";
21
- import { registerUserCommand } from "./commands/user.js";
22
- import { registerWhoamiCommand } from "./commands/whoami.js";
23
2
  import { warnIfNonDefaultApiServer } from "./config.js";
24
3
  import { handleError } from "./errors.js";
25
4
  import { createLogger } from "./log.js";
26
- import { readVersion } from "./version.js";
5
+ import { buildProgram } from "./program.js";
27
6
  // Exit cleanly when the downstream pipe consumer dies (e.g. `quire … | head`).
28
7
  // Without this, the next stdout.write throws an unhandled EPIPE and Node
29
8
  // crashes loudly with a stack trace — bad UX for a CLI built to compose with
@@ -33,172 +12,7 @@ process.stdout.on("error", (err) => {
33
12
  process.exit(0);
34
13
  throw err;
35
14
  });
36
- const program = new Command();
37
- program
38
- .name("quire")
39
- .description("Command-line interface for the Quire API.")
40
- .version(readVersion(), "-v, --version", "Print the CLI version")
41
- .option("--verbose", "Enable verbose (debug) logging on stderr")
42
- .option("--json", "Emit raw API JSON (no human formatting)")
43
- .option("-q, --quiet", "Print only IDs (one per line) — designed for xargs pipelines")
44
- .option("--color-mode <mode>", "Color output mode: always|never|auto", "auto")
45
- .option("--profile <name>", "Use a named credential profile (default: $QUIRE_PROFILE or 'default')")
46
- .option("--yes", "Auto-confirm destructive prompts (required for non-interactive mutating commands)")
47
- .option("--no-truncate", "Disable per-cell truncation in human-readable tables");
48
- registerLoginCommand(program);
49
- registerLogoutCommand(program);
50
- registerWhoamiCommand(program);
51
- registerUserCommand(program);
52
- registerOrgCommand(program);
53
- registerProjectCommand(program);
54
- registerPartnerCommand(program);
55
- registerTaskCommand(program);
56
- registerMineCommand(program);
57
- registerTagCommand(program);
58
- registerSublistCommand(program);
59
- registerStatusCommand(program);
60
- registerCommentCommand(program);
61
- registerChatCommand(program);
62
- registerDocCommand(program);
63
- registerInsightCommand(program);
64
- registerResolveCommand(program);
65
- registerColorsCommand(program);
66
- registerNotifyCommand(program);
67
- registerUndoCommand(program);
68
- program.addHelpText("after", `
69
- Auth:
70
- quire login Sign in via OAuth (loopback + PKCE)
71
- quire logout Remove local credentials (server-side token stays valid; revoke at quire.io/apps)
72
- quire whoami Show the signed-in user
73
- quire user get <oid> Show one user by OID
74
-
75
- Orgs / projects:
76
- quire org list List your organizations
77
- quire org get <id> Show one organization
78
- quire org update <id> Update name / description / followers
79
- quire org limit <id> Show API rate-limit usage for an organization
80
- quire project list List projects you can see (or --org <id> to scope)
81
- quire project get <id> Show one project
82
- quire project update <id> Update name / description / dates / archive / public / followers
83
- quire project members <id> List a project's members
84
- quire project export <id> Export the project as CSV (default) or JSON (--format json [--output file])
85
-
86
- Tasks (read):
87
- quire task list <project> List tasks in a project
88
- quire task get <id> Show task details (id = OID, slug/#N, or URL)
89
- quire task tree <id> Render the recursive subtree (default depth 3)
90
- quire task search <query> Search tasks; scope with --project / --org / --folder
91
- quire task subtasks <id> List a task's direct subtasks
92
- quire task comments <id> List a task's comments
93
- quire mine List tasks assigned to me; scope with --project / --inbox / --org / --all-orgs
94
-
95
- Tasks (write):
96
- quire task create <project> --name "..." Create a new task (--parent / --sibling+--position to nest)
97
- quire task subtask <parent> --name "..." Shorthand for "task create --parent"
98
- quire task update <id> Update fields: --name / --status / --priority / --add-tag / etc.
99
- quire task complete <id> / uncomplete <id> Toggle status to 100 / 0
100
- quire task move <id> --to <id|root> Re-parent within the same project
101
- quire task transfer <id> --to <project> Cross-project transfer (--keep-tags / --keep-status / --invite)
102
- quire task dates <id> --start ... --due ... Set / clear dates (pass 'null' to clear)
103
- quire task peekaboo <id> [--reshow-at ISO | --show] Hide or un-hide a task
104
- quire task delete <id> Delete a task (prompts unless --yes)
105
- quire task undo-remove <oid> Restore a deleted task
106
- quire task attach <id> <file> Attach a file to a task ('-' = stdin; --filename / --content-type optional)
107
-
108
- Tasks (bulk):
109
- quire task bulk-create <project> --from-file tasks.json Create up to 300 tasks atomically
110
- quire task bulk-subtasks <parent> --from-file tasks.json Create up to 300 subtasks under one parent
111
- quire task bulk-update <project> --from-file updates.json Update many tasks atomically (each item needs an oid)
112
- quire task bulk-delete <project> --from-file ids.txt Delete many (prompts unless --yes); refs one per line or JSON array
113
- quire task bulk-move <project> --to <id|root> --from-file ids.txt
114
- quire task bulk-transfer <project> --to <project> --from-file ids.txt
115
- quire task bulk-approve <project> --state request|approve|reject|change --from-file ids.txt
116
-
117
- Tasks (approval / timelogs / recurrence):
118
- quire task approve <id> --state ... Set a task's approval state
119
- Add --comment <text|-|@file> [--comment-pinned / --comment-as-user] to post a companion comment
120
- quire task revoke-approval <id> Revoke any approval state
121
- quire task timelog add <id> --start --end [--user / --billable / --note]
122
- quire task timelog update <id> --start --end [--new-start / --new-end / --note / ...]
123
- quire task timelog remove <id> --start --end (prompts unless --yes)
124
- --recurrence-freq / --recurrence-interval / --recurrence-byweekday / --recurrence-until
125
- Add / clear recurrence on "task create" / "task subtask" / "task update"
126
-
127
- Project metadata (approval categories):
128
- quire project approval-category add <project> --id ... --name ... [--claimer / --approver]
129
- quire project approval-category update <project> <id> [--name / --claimer / --approver / --claimers-anyone / --claimers-admins-only / ...]
130
- quire project approval-category remove <project> <id> (prompts unless --yes)
131
-
132
- Project metadata (custom-field definitions):
133
- quire project field add <project> --name --type [--hidden / --private / --percent / --multiple / --clear-on-dup / --extra k=v]
134
- quire project field update <project> <name> [--type / --hidden / --private / --percent / --multiple / --extra k=v]
135
- quire project field rename <project> <name> --new-name ...
136
- quire project field move <project> <name> [--before <name>] [--to-end]
137
- quire project field remove <project> <name> (prompts unless --yes)
138
- quire insight field add <insight-oid> --name --type [...] (formula / lookup only)
139
- quire insight field {update / rename / move / remove} (same flag shape as project field)
140
-
141
- Project metadata (read):
142
- quire tag list <project> List tags defined on a project (also: 'tag get <oid>')
143
- quire sublist list <project> List sublists on a project (also: 'sublist get <oid>')
144
- quire status list <project> List custom statuses on a project (also: 'status get <project> <value>')
145
- quire partner list <project> List partner orgs (external teams) on a project
146
- quire partner get <oid> Show one partner organization
147
-
148
- Project metadata (write):
149
- quire tag create <project> Create a tag (--name / --color)
150
- quire tag update <oid> Update tag --name / --color
151
- quire tag delete <oid> Delete a tag (prompts unless --yes)
152
- quire sublist create <project> Create a sublist (--name / --description)
153
- quire sublist update <oid> Update sublist (--name / --description / --start / --due / --archive / --unarchive)
154
- quire sublist add-task <oid> <task> Add a task to a sublist
155
- quire sublist remove-task <oid> <task> Remove a task from a sublist
156
- quire sublist delete <oid> Delete a sublist (prompts unless --yes)
157
- quire sublist undo-remove <oid> Restore a deleted sublist
158
- quire status create <project> Create a status (--name / --value / --color)
159
- quire status update <project> <value> Update a status (--name / --color / --new-value)
160
- quire status delete <project> <value> Delete a status (prompts unless --yes)
161
-
162
- Comments / chats / docs / insights (read):
163
- quire comment list <task> List comments on a task (alias for "quire task comments"; also: 'comment get <oid>')
164
- quire chat list <project> List chats / chat get <id> / chat comments <id>
165
- quire doc list <project> List documents / doc get <id>
166
- quire insight list <project> List insights / insight get <id>
167
-
168
- Comments (write):
169
- quire comment add <task> --text "..." Add a comment ('-' = stdin, '@file' = read file)
170
- quire comment update <oid> Update --text and/or --pin / --unpin
171
- quire comment attach <oid> <file> Attach a file to a comment ('-' = stdin; --filename / --content-type optional)
172
- quire comment delete <oid> Delete a comment (prompts unless --yes)
173
-
174
- Chats / docs / insights (write):
175
- quire chat create <project> --name [--description / --partner]
176
- quire chat update <oid> [--name / --description / --archive / --unarchive / --add-follower / --remove-follower]
177
- quire chat delete <oid> (prompts unless --yes)
178
- quire chat undo-remove <oid>
179
- quire chat comment add <chat-id> --text [--pin]
180
- quire doc create <project> --name [--description]
181
- quire doc update <oid> [--name / --description / --archive / --unarchive]
182
- quire doc delete <oid> (prompts unless --yes)
183
- quire doc undo-remove <oid>
184
- quire insight create <project> --name [--id / --description / --icon-color / --image]
185
- quire insight update <oid> [--name / --description / --icon-color / --image / --archive / --unarchive]
186
- quire insight delete <oid> (prompts unless --yes)
187
- quire insight undo-remove <oid>
188
- quire insight run <oid> Run an insight and print the aggregated rows ([--group-by member|section] [--status active|completed|all])
189
-
190
- Generic undo:
191
- quire undo <kind> <oid> kind = task | chat | comment | document | insight | sublist
192
-
193
- URL resolver:
194
- quire resolve <url> Paste any Quire URL, get the typed resource back
195
-
196
- Notifications:
197
- quire notify --message ... Send an in-app notification to yourself ('-' / '@file' for stdin / file)
198
-
199
- Reference:
200
- quire colors List Quire's 48-slot palette (code, hex, name)
201
- `);
15
+ const program = buildProgram();
202
16
  async function main() {
203
17
  warnIfNonDefaultApiServer();
204
18
  await program.parseAsync(process.argv);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,+EAA+E;AAC/E,yEAAyE;AACzE,6EAA6E;AAC7E,+CAA+C;AAC/C,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;IACxD,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,MAAM,GAAG,CAAC;AACZ,CAAC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;AAE/B,KAAK,UAAU,IAAI;IACjB,yBAAyB,EAAE,CAAC;IAC5B,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,GAAG,GAAG,YAAY,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,KAAK,IAAI;QACxC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,SAAoD;KAC3E,CAAC,CAAC;IACH,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC"}
@@ -2,6 +2,7 @@ import { looksLikeOid, parseQuireUrl } from "@quire-io/api-client";
2
2
  import { ValidationError } from "../errors.js";
3
3
  import { renderList, renderObject } from "../output/render.js";
4
4
  import { createQuireClient } from "../quire-client.js";
5
+ import { addMemberOptions, formatMembers, resolveMembers } from "../util/member-flags.js";
5
6
  import { confirmDestructive } from "../util/confirm.js";
6
7
  import { resolveTextInput } from "../util/text-input.js";
7
8
  const append = (val, prev) => [...(prev ?? []), val];
@@ -10,6 +11,8 @@ const CHAT_FIELDS = [
10
11
  { label: "ID", get: (c) => c.id },
11
12
  { label: "OID", get: (c) => c.oid },
12
13
  { label: "Description", get: (c) => c.descriptionText },
14
+ { label: "Members", get: (c) => formatMembers(c.members) },
15
+ { label: "Followers", get: (c) => c.followers?.map((f) => f.name).join(", ") },
13
16
  { label: "URL", get: (c) => c.url },
14
17
  ];
15
18
  const CHAT_COMMENT_FIELDS = [
@@ -93,21 +96,28 @@ export function registerChatCommand(program) {
93
96
  toId: (c) => c.oid,
94
97
  });
95
98
  });
96
- chat
99
+ addMemberOptions(chat
97
100
  .command("create <project>")
98
101
  .description("Create a chat in a project.")
99
102
  .requiredOption("--name <name>", "Chat name (required)")
100
103
  .option("--description <text>", "Description; '-' for stdin or '@file' for a file")
101
104
  .option("--partner <oid>", "Partner OID, if this is a partner chat")
105
+ .option("--follower <user>", "Follower (OID, ID, or email); repeat for multiple", append, []))
102
106
  .action(async (project, cmdOpts) => {
103
107
  const root = program.opts();
104
108
  const client = createQuireClient({ profile: root.profile });
109
+ const members = resolveMembers(cmdOpts);
110
+ if (members !== undefined && cmdOpts.partner !== undefined) {
111
+ throw new ValidationError("Cannot combine --member / --members-admins-only with --partner — Quire rejects the pair with 400.");
112
+ }
105
113
  const projectOid = await client.resolveProjectOid(project);
106
114
  const description = cmdOpts.description !== undefined ? await resolveTextInput(cmdOpts.description) : undefined;
107
115
  const c = await client.createChat("project", projectOid, {
108
116
  name: cmdOpts.name,
109
117
  ...(description !== undefined ? { description } : {}),
110
118
  ...(cmdOpts.partner !== undefined ? { partner: cmdOpts.partner } : {}),
119
+ ...((cmdOpts.follower?.length ?? 0) > 0 ? { followers: cmdOpts.follower } : {}),
120
+ ...(members !== undefined ? { members } : {}),
111
121
  });
112
122
  renderObject(c, root, { fields: CHAT_FIELDS, toId: (c) => c.oid });
113
123
  });
@@ -118,6 +128,7 @@ export function registerChatCommand(program) {
118
128
  .option("--description <text>", "New description ('-' = stdin, '@file' = file)")
119
129
  .option("--archive", "Archive the chat")
120
130
  .option("--unarchive", "Unarchive the chat")
131
+ .option("--follower <user>", "Replace the full follower list; repeat for multiple", append, [])
121
132
  .option("--add-follower <user>", "Add follower; repeat for multiple", append, [])
122
133
  .option("--remove-follower <user>", "Remove follower; repeat for multiple", append, [])
123
134
  .action(async (oid, cmdOpts) => {
@@ -126,6 +137,9 @@ export function registerChatCommand(program) {
126
137
  if (cmdOpts.archive === true && cmdOpts.unarchive === true) {
127
138
  throw new ValidationError("Cannot combine --archive and --unarchive.");
128
139
  }
140
+ if ((cmdOpts.follower?.length ?? 0) > 0 && ((cmdOpts.addFollower?.length ?? 0) > 0 || (cmdOpts.removeFollower?.length ?? 0) > 0)) {
141
+ throw new ValidationError("Cannot combine --follower (full replace) with --add-follower / --remove-follower.");
142
+ }
129
143
  const description = cmdOpts.description !== undefined ? await resolveTextInput(cmdOpts.description) : undefined;
130
144
  const body = {};
131
145
  if (cmdOpts.name !== undefined)
@@ -136,12 +150,14 @@ export function registerChatCommand(program) {
136
150
  body.archived = true;
137
151
  if (cmdOpts.unarchive === true)
138
152
  body.archived = false;
153
+ if ((cmdOpts.follower?.length ?? 0) > 0)
154
+ body.followers = cmdOpts.follower;
139
155
  if ((cmdOpts.addFollower?.length ?? 0) > 0)
140
156
  body.addFollowers = cmdOpts.addFollower;
141
157
  if ((cmdOpts.removeFollower?.length ?? 0) > 0)
142
158
  body.removeFollowers = cmdOpts.removeFollower;
143
159
  if (Object.keys(body).length === 0) {
144
- throw new ValidationError("`chat update` requires at least one of --name / --description / --archive / --unarchive / --add-follower / --remove-follower.");
160
+ throw new ValidationError("`chat update` requires at least one of --name / --description / --archive / --unarchive / --follower / --add-follower / --remove-follower.");
145
161
  }
146
162
  const c = await client.updateChat(oid, body);
147
163
  renderObject(c, root, { fields: CHAT_FIELDS, toId: (c) => c.oid });
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,203 @@
1
+ import { looksLikeOid, resolveColor } from "@quire-io/api-client";
2
+ import { ValidationError } from "../errors.js";
3
+ import { renderList, renderObject } from "../output/render.js";
4
+ import { createQuireClient } from "../quire-client.js";
5
+ import { addMemberOptions, formatMembers, resolveMembers } from "../util/member-flags.js";
6
+ import { confirmDestructive } from "../util/confirm.js";
7
+ import { resolveTextInput } from "../util/text-input.js";
8
+ const OWNER_TYPES = ["project", "organization", "folder", "smart-folder"];
9
+ function parseOwnerType(input) {
10
+ const type = input ?? "project";
11
+ if (!OWNER_TYPES.includes(type)) {
12
+ throw new ValidationError(`--owner-type must be one of ${OWNER_TYPES.join(", ")}; got "${type}".`);
13
+ }
14
+ return type;
15
+ }
16
+ // Folders and smart-folders have no slug-resolution endpoint, so those owners
17
+ // must be passed as OIDs.
18
+ async function resolveOwnerOid(client, ownerType, input) {
19
+ if (ownerType === "project")
20
+ return client.resolveProjectOid(input);
21
+ if (ownerType === "organization")
22
+ return client.resolveOrgOid(input);
23
+ if (!looksLikeOid(input)) {
24
+ throw new ValidationError(`Owner type "${ownerType}" requires an OID; got "${input}".`);
25
+ }
26
+ return input;
27
+ }
28
+ function normalizeDashboardColor(input) {
29
+ if (input === undefined)
30
+ return undefined;
31
+ const code = resolveColor(input);
32
+ if (code === undefined) {
33
+ throw new ValidationError(`Color "${input}" is not a recognized palette name or code. Use a name like 'red'/'blue' or a 2-digit code '00'..'57'.`);
34
+ }
35
+ return code;
36
+ }
37
+ const DASHBOARD_FIELDS = [
38
+ { label: "Name", get: (d) => d.nameText ?? d.name },
39
+ { label: "ID", get: (d) => d.id },
40
+ { label: "OID", get: (d) => d.oid },
41
+ { label: "Description", get: (d) => d.descriptionText },
42
+ { label: "Icon color", get: (d) => d.iconColor },
43
+ { label: "Start", get: (d) => d.start },
44
+ { label: "Due", get: (d) => d.due },
45
+ { label: "Archived at", get: (d) => d.archivedAt },
46
+ { label: "Members", get: (d) => formatMembers(d.members) },
47
+ { label: "URL", get: (d) => d.url },
48
+ ];
49
+ export function registerDashboardCommand(program) {
50
+ const dashboard = program.command("dashboard").description("Quire dashboards.");
51
+ dashboard
52
+ .command("list <owner>")
53
+ .description("List dashboards on an owner. <owner> = OID, slug, or URL (projects / orgs); folders need an OID.")
54
+ .option("--owner-type <type>", `Owner type: ${OWNER_TYPES.join(" | ")} (default: project)`)
55
+ .action(async (owner, cmdOpts) => {
56
+ const root = program.opts();
57
+ const client = createQuireClient({ profile: root.profile });
58
+ const ownerType = parseOwnerType(cmdOpts.ownerType);
59
+ const ownerOid = await resolveOwnerOid(client, ownerType, owner);
60
+ const dashboards = await client.listDashboards(ownerType, ownerOid);
61
+ renderList(dashboards, root, {
62
+ columns: [
63
+ { header: "ID", get: (d) => d.id },
64
+ { header: "NAME", get: (d) => d.nameText ?? d.name },
65
+ { header: "OID", get: (d) => d.oid },
66
+ ],
67
+ toId: (d) => d.oid,
68
+ });
69
+ });
70
+ dashboard
71
+ .command("get <id>")
72
+ .description("Show dashboard details. <id> = OID or \"owner-id/<dashboard-id>\" (owner id per --owner-type).")
73
+ .option("--owner-type <type>", `Owner type for the slug form: ${OWNER_TYPES.join(" | ")} (default: project)`)
74
+ .action(async (id, cmdOpts) => {
75
+ const root = program.opts();
76
+ const client = createQuireClient({ profile: root.profile });
77
+ if (looksLikeOid(id)) {
78
+ const d = await client.getDashboard(id);
79
+ renderObject(d, root, { fields: DASHBOARD_FIELDS, toId: (d) => d.oid });
80
+ return;
81
+ }
82
+ const slug = id.match(/^([^/]+)\/(.+)$/);
83
+ if (slug) {
84
+ const ownerType = parseOwnerType(cmdOpts.ownerType);
85
+ const d = await client.getDashboardById(ownerType, slug[1], slug[2]);
86
+ renderObject(d, root, { fields: DASHBOARD_FIELDS, toId: (d) => d.oid });
87
+ return;
88
+ }
89
+ throw new ValidationError(`Cannot resolve dashboard: "${id}". Expected a dashboard OID or "owner-id/<dashboard-id>".`);
90
+ });
91
+ addMemberOptions(dashboard
92
+ .command("create <owner>")
93
+ .description("Create a dashboard on an owner (project by default).")
94
+ .requiredOption("--name <name>", "Dashboard name (required)")
95
+ .option("--owner-type <type>", `Owner type: ${OWNER_TYPES.join(" | ")} (default: project)`)
96
+ .option("--id <id>", "Caller-supplied id (must pass Quire's isValidId)")
97
+ .option("--description <text>", "Description; '-' for stdin or '@file' for a file")
98
+ .option("--icon-color <color>", "Color: name like 'red'/'blue' or 2-digit code")
99
+ .option("--image <url>", "Icon image URL")
100
+ .option("--partner <oid>", "Partner OID, if this is a partner dashboard")
101
+ .option("--start <date>", "Start date")
102
+ .option("--due <date>", "Due date"))
103
+ .action(async (owner, cmdOpts) => {
104
+ const root = program.opts();
105
+ const client = createQuireClient({ profile: root.profile });
106
+ const members = resolveMembers(cmdOpts);
107
+ if (members !== undefined && cmdOpts.partner !== undefined) {
108
+ throw new ValidationError("Cannot combine --member / --members-admins-only with --partner — Quire rejects the pair with 400.");
109
+ }
110
+ const ownerType = parseOwnerType(cmdOpts.ownerType);
111
+ const ownerOid = await resolveOwnerOid(client, ownerType, owner);
112
+ const description = cmdOpts.description !== undefined ? await resolveTextInput(cmdOpts.description) : undefined;
113
+ const iconColor = normalizeDashboardColor(cmdOpts.iconColor);
114
+ const d = await client.createDashboard(ownerType, ownerOid, {
115
+ name: cmdOpts.name,
116
+ ...(cmdOpts.id !== undefined ? { id: cmdOpts.id } : {}),
117
+ ...(description !== undefined ? { description } : {}),
118
+ ...(iconColor !== undefined ? { iconColor } : {}),
119
+ ...(cmdOpts.image !== undefined ? { image: cmdOpts.image } : {}),
120
+ ...(cmdOpts.partner !== undefined ? { partner: cmdOpts.partner } : {}),
121
+ ...(cmdOpts.start !== undefined ? { start: cmdOpts.start } : {}),
122
+ ...(cmdOpts.due !== undefined ? { due: cmdOpts.due } : {}),
123
+ ...(members !== undefined ? { members } : {}),
124
+ });
125
+ renderObject(d, root, { fields: DASHBOARD_FIELDS, toId: (d) => d.oid });
126
+ });
127
+ dashboard
128
+ .command("update <oid>")
129
+ .description("Update a dashboard. Pass 'null' to --start / --due to clear the date.")
130
+ .option("--id <id>", "New id")
131
+ .option("--name <name>", "New name")
132
+ .option("--description <text>", "New description ('-' = stdin, '@file' = file)")
133
+ .option("--icon-color <color>")
134
+ .option("--image <url>")
135
+ .option("--start <date>", "Start date or 'null' to clear")
136
+ .option("--due <date>", "Due date or 'null' to clear")
137
+ .option("--archive", "Archive the dashboard")
138
+ .option("--unarchive", "Unarchive the dashboard")
139
+ .action(async (oid, cmdOpts) => {
140
+ const root = program.opts();
141
+ const client = createQuireClient({ profile: root.profile });
142
+ if (cmdOpts.archive === true && cmdOpts.unarchive === true) {
143
+ throw new ValidationError("Cannot combine --archive and --unarchive.");
144
+ }
145
+ const description = cmdOpts.description !== undefined ? await resolveTextInput(cmdOpts.description) : undefined;
146
+ const iconColor = normalizeDashboardColor(cmdOpts.iconColor);
147
+ const body = {};
148
+ if (cmdOpts.id !== undefined)
149
+ body.id = cmdOpts.id;
150
+ if (cmdOpts.name !== undefined)
151
+ body.name = cmdOpts.name;
152
+ if (description !== undefined)
153
+ body.description = description;
154
+ if (iconColor !== undefined)
155
+ body.iconColor = iconColor;
156
+ if (cmdOpts.image !== undefined)
157
+ body.image = cmdOpts.image;
158
+ if (cmdOpts.start !== undefined)
159
+ body.start = cmdOpts.start === "null" ? null : cmdOpts.start;
160
+ if (cmdOpts.due !== undefined)
161
+ body.due = cmdOpts.due === "null" ? null : cmdOpts.due;
162
+ if (cmdOpts.archive === true)
163
+ body.archived = true;
164
+ if (cmdOpts.unarchive === true)
165
+ body.archived = false;
166
+ if (Object.keys(body).length === 0) {
167
+ throw new ValidationError("`dashboard update` requires at least one change-flag.");
168
+ }
169
+ const d = await client.updateDashboard(oid, body);
170
+ renderObject(d, root, { fields: DASHBOARD_FIELDS, toId: (d) => d.oid });
171
+ });
172
+ dashboard
173
+ .command("delete <oid>")
174
+ .description("Delete a dashboard. Prompts unless --yes.")
175
+ .action(async (oid) => {
176
+ const root = program.opts();
177
+ const client = createQuireClient({ profile: root.profile });
178
+ await confirmDestructive({
179
+ question: `Delete dashboard ${oid}? Run \`quire dashboard undo-remove ${oid}\` (or \`quire undo dashboard ${oid}\`) to restore.`,
180
+ yes: root.yes,
181
+ });
182
+ await client.deleteDashboard(oid);
183
+ if (root.json === true) {
184
+ process.stdout.write(`${JSON.stringify({ oid, deleted: true })}\n`);
185
+ }
186
+ else if (root.quiet === true) {
187
+ process.stdout.write(`${oid}\n`);
188
+ }
189
+ else {
190
+ process.stderr.write(`Deleted dashboard ${oid}.\n`);
191
+ }
192
+ });
193
+ dashboard
194
+ .command("undo-remove <oid>")
195
+ .description("Restore a deleted dashboard.")
196
+ .action(async (oid) => {
197
+ const root = program.opts();
198
+ const client = createQuireClient({ profile: root.profile });
199
+ const d = await client.undoRemoveDashboard(oid);
200
+ renderObject(d, root, { fields: DASHBOARD_FIELDS, toId: (d) => d.oid });
201
+ });
202
+ }
203
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}