@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 +23 -0
- package/README.md +5 -1
- package/dist/cli.js +2 -188
- package/dist/cli.js.map +1 -1
- package/dist/commands/chat.js +18 -2
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/dashboard.js +203 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/doc.js +22 -2
- package/dist/commands/doc.js.map +1 -1
- package/dist/commands/insight.js +6 -2
- package/dist/commands/insight.js.map +1 -1
- package/dist/commands/org.js +7 -1
- package/dist/commands/org.js.map +1 -1
- package/dist/commands/project.js +7 -1
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/reminder.js +207 -0
- package/dist/commands/reminder.js.map +1 -0
- package/dist/commands/sublist.js +6 -2
- package/dist/commands/sublist.js.map +1 -1
- package/dist/commands/task.js +23 -0
- package/dist/commands/task.js.map +1 -1
- package/dist/commands/undo.js +6 -0
- package/dist/commands/undo.js.map +1 -1
- package/dist/output/columns.js +1 -0
- package/dist/output/columns.js.map +1 -1
- package/dist/program.js +228 -0
- package/dist/program.js.map +1 -0
- package/dist/util/member-flags.js +40 -0
- package/dist/util/member-flags.js.map +1 -0
- package/dist/util/reminder-lead.js +60 -0
- package/dist/util/reminder-lead.js.map +1 -0
- package/package.json +4 -2
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 {
|
|
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 =
|
|
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":";AACA,OAAO,EAAE,
|
|
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"}
|
package/dist/commands/chat.js
CHANGED
|
@@ -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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"}
|