@quire-io/quire-cli 0.1.2 → 0.1.3
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 +8 -0
- package/README.md +4 -0
- package/dist/cli.js +1 -1
- package/dist/commands/login.js +2 -2
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/mine.js +29 -26
- package/dist/commands/mine.js.map +1 -1
- package/dist/oauth/config.js +0 -10
- package/dist/oauth/config.js.map +1 -1
- package/dist/oauth/loopback.js +4 -1
- package/dist/oauth/loopback.js.map +1 -1
- package/package.json +2 -2
package/CHANGES.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.3 — 2026-05-11
|
|
4
|
+
|
|
5
|
+
- `quire mine` switched to the new `QuireClient.getMyTasks(scope, filter)` helper from `@quire-io/api-client` 0.1.7. Behaviour changes:
|
|
6
|
+
- `--all-orgs` now deduplicates tasks by OID. Previously a task that surfaced in two organizations (e.g. a guest in a shared project) appeared twice.
|
|
7
|
+
- `--all-orgs` now includes the user's private Inbox by default. Pass `--skip-inbox` to restore the old "orgs only" fan-out.
|
|
8
|
+
- New `--inbox` flag scopes to the private Inbox alone. Mutually exclusive with `--project` / `--org` / `--all-orgs`.
|
|
9
|
+
- Bumps `@quire-io/api-client` to `^0.1.7` (0.1.6 type re-exports were broken and never reached npm).
|
|
10
|
+
|
|
3
11
|
## 0.1.2 — 2026-05-09
|
|
4
12
|
|
|
5
13
|
- `quire task formula <project>` — evaluate all formula-type custom fields for every task in a project. Prints a table of task ID, name, and one column per formula field; use `--json` for structured output. Requires `@quire-io/api-client` 0.1.5 and uses the tiered loader (export JSON on paid plans, flat list fallback).
|
package/README.md
CHANGED
|
@@ -51,6 +51,10 @@ quire mine --all-orgs --json | jq '.[].name' # script-friendly
|
|
|
51
51
|
|
|
52
52
|
Run `quire --help` (or `quire <command> --help`) for the full command reference.
|
|
53
53
|
|
|
54
|
+
## Using with AI
|
|
55
|
+
|
|
56
|
+
See [AI_GUIDE.md](AI_GUIDE.md) for recipes pairing the CLI with an LLM (Claude, ChatGPT, etc.) — project digests, weekly standups, bulk task creation from meeting notes, and more.
|
|
57
|
+
|
|
54
58
|
## Updating
|
|
55
59
|
|
|
56
60
|
How you update depends on how you installed:
|
package/dist/cli.js
CHANGED
|
@@ -90,7 +90,7 @@ Tasks (read):
|
|
|
90
90
|
quire task search <query> Search tasks; scope with --project / --org / --folder
|
|
91
91
|
quire task subtasks <id> List a task's direct subtasks
|
|
92
92
|
quire task comments <id> List a task's comments
|
|
93
|
-
quire mine List tasks assigned to me; scope with --project / --org / --all-orgs
|
|
93
|
+
quire mine List tasks assigned to me; scope with --project / --inbox / --org / --all-orgs
|
|
94
94
|
|
|
95
95
|
Tasks (write):
|
|
96
96
|
quire task create <project> --name "..." Create a new task (--parent / --sibling+--position to nest)
|
package/dist/commands/login.js
CHANGED
|
@@ -3,7 +3,7 @@ import { getApiServer, resolveConfigPaths } from "../config.js";
|
|
|
3
3
|
import { writeCredentials } from "../credentials.js";
|
|
4
4
|
import { CliError, ExitCode } from "../errors.js";
|
|
5
5
|
import { createLogger } from "../log.js";
|
|
6
|
-
import { QUIRE_CLI_CLIENT_ID
|
|
6
|
+
import { QUIRE_CLI_CLIENT_ID } from "../oauth/config.js";
|
|
7
7
|
import { startLoopbackServer } from "../oauth/loopback.js";
|
|
8
8
|
import { generatePkce, generateState } from "../oauth/pkce.js";
|
|
9
9
|
import { openUrl } from "../util/open-url.js";
|
|
@@ -17,7 +17,7 @@ export function registerLoginCommand(program) {
|
|
|
17
17
|
const apiServer = getApiServer();
|
|
18
18
|
const { codeVerifier, codeChallenge } = generatePkce();
|
|
19
19
|
const state = generateState();
|
|
20
|
-
const server = await startLoopbackServer(
|
|
20
|
+
const server = await startLoopbackServer();
|
|
21
21
|
try {
|
|
22
22
|
const authorizeUrl = new URL(`${apiServer}/oauth`);
|
|
23
23
|
authorizeUrl.searchParams.set("response_type", "code");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/mine.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { ValidationError } from "../errors.js";
|
|
2
|
-
import { createLogger } from "../log.js";
|
|
3
2
|
import { TASK_LIST_COLUMNS } from "../output/columns.js";
|
|
4
3
|
import { renderList } from "../output/render.js";
|
|
5
4
|
import { createQuireClient } from "../quire-client.js";
|
|
@@ -17,44 +16,48 @@ function parseLimit(input) {
|
|
|
17
16
|
export function registerMineCommand(program) {
|
|
18
17
|
program
|
|
19
18
|
.command("mine")
|
|
20
|
-
.description("List tasks assigned to me. Scope with --project, --org, or --all-orgs.")
|
|
19
|
+
.description("List tasks assigned to me. Scope with --project, --inbox, --org, or --all-orgs.")
|
|
21
20
|
.option("--project <id>", "Restrict to one project.")
|
|
21
|
+
.option("--inbox", "Restrict to my private Inbox.")
|
|
22
22
|
.option("--org <id>", "Restrict to one organization.")
|
|
23
|
-
.option("--all-orgs", "Fan out across every organization you belong to.")
|
|
24
|
-
.option("--
|
|
23
|
+
.option("--all-orgs", "Fan out across every organization you belong to (includes Inbox; pass --skip-inbox to exclude).")
|
|
24
|
+
.option("--skip-inbox", "With --all-orgs, exclude the private Inbox from the fan-out.")
|
|
25
|
+
.option("--limit <n>", "Page size (positive integer or 'no' for unlimited).")
|
|
25
26
|
.action(async (cmdOpts) => {
|
|
26
27
|
const root = program.opts();
|
|
27
|
-
const
|
|
28
|
+
const scopeFlagCount = (cmdOpts.project ? 1 : 0) +
|
|
29
|
+
(cmdOpts.inbox === true ? 1 : 0) +
|
|
30
|
+
(cmdOpts.org ? 1 : 0) +
|
|
31
|
+
(cmdOpts.allOrgs === true ? 1 : 0);
|
|
32
|
+
if (scopeFlagCount === 0) {
|
|
33
|
+
throw new ValidationError("`quire mine` requires exactly one of --project, --inbox, --org, or --all-orgs.");
|
|
34
|
+
}
|
|
35
|
+
if (scopeFlagCount > 1) {
|
|
36
|
+
throw new ValidationError("`quire mine`: --project, --inbox, --org, and --all-orgs are mutually exclusive.");
|
|
37
|
+
}
|
|
38
|
+
if (cmdOpts.skipInbox === true && cmdOpts.allOrgs !== true) {
|
|
39
|
+
throw new ValidationError("--skip-inbox only applies with --all-orgs.");
|
|
40
|
+
}
|
|
28
41
|
const client = createQuireClient({ profile: root.profile });
|
|
29
|
-
|
|
30
|
-
mine: true,
|
|
31
|
-
...(cmdOpts.limit ? { limit: parseLimit(cmdOpts.limit) } : {}),
|
|
32
|
-
};
|
|
33
|
-
let tasks;
|
|
42
|
+
let scope;
|
|
34
43
|
if (cmdOpts.project) {
|
|
35
44
|
const oid = await client.resolveProjectOid(cmdOpts.project);
|
|
36
|
-
|
|
45
|
+
scope = { project: oid };
|
|
46
|
+
}
|
|
47
|
+
else if (cmdOpts.inbox === true) {
|
|
48
|
+
scope = { project: "-" };
|
|
37
49
|
}
|
|
38
50
|
else if (cmdOpts.org) {
|
|
39
51
|
const oid = await client.resolveOrgOid(cmdOpts.org);
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
else if (cmdOpts.allOrgs === true) {
|
|
43
|
-
const orgs = await client.listOrganizations();
|
|
44
|
-
if (orgs.length === 0) {
|
|
45
|
-
tasks = [];
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
if (orgs.length > 1) {
|
|
49
|
-
log.info(`Searching ${orgs.length} organizations…`);
|
|
50
|
-
}
|
|
51
|
-
const lists = await Promise.all(orgs.map((o) => client.searchTasksInOrganization(o.oid, params)));
|
|
52
|
-
tasks = lists.flat();
|
|
53
|
-
}
|
|
52
|
+
scope = { organization: oid };
|
|
54
53
|
}
|
|
55
54
|
else {
|
|
56
|
-
|
|
55
|
+
scope = { allOrganizations: true, inbox: cmdOpts.skipInbox !== true };
|
|
57
56
|
}
|
|
57
|
+
const filter = cmdOpts.limit
|
|
58
|
+
? { limit: parseLimit(cmdOpts.limit) }
|
|
59
|
+
: {};
|
|
60
|
+
const tasks = await client.getMyTasks(scope, filter);
|
|
58
61
|
renderList(tasks, root, { columns: TASK_LIST_COLUMNS, toId: (t) => t.oid });
|
|
59
62
|
});
|
|
60
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mine.js","sourceRoot":"","sources":["../../src/commands/mine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"mine.js","sourceRoot":"","sources":["../../src/commands/mine.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth/config.js
CHANGED
|
@@ -5,14 +5,4 @@
|
|
|
5
5
|
// <https://quire.io/apps/dev/quire_cli>; this constant is the published
|
|
6
6
|
// `client_id` from that page.
|
|
7
7
|
export const QUIRE_CLI_CLIENT_ID = "0mVxxApzA5wCng9iFk3Nzw0v";
|
|
8
|
-
// Fixed loopback port for the OAuth callback. The Quire OAuth app form
|
|
9
|
-
// requires an exact-match redirect URI (no RFC 8252 §7.3 port-wildcard
|
|
10
|
-
// support yet), so the CLI binds to a single known port and the OAuth app's
|
|
11
|
-
// registered redirect URI must exactly equal `http://127.0.0.1:<this>/callback`.
|
|
12
|
-
//
|
|
13
|
-
// Override via $QUIRE_CLI_LOOPBACK_PORT for testing against an OAuth app
|
|
14
|
-
// that registers a different port. Range-clamped to a non-privileged port
|
|
15
|
-
// (>1023) so the CLI never tries to bind 80/443 without root.
|
|
16
|
-
const ENV_PORT = Number.parseInt(process.env.QUIRE_CLI_LOOPBACK_PORT ?? "", 10);
|
|
17
|
-
export const QUIRE_CLI_LOOPBACK_PORT = Number.isInteger(ENV_PORT) && ENV_PORT > 1023 && ENV_PORT < 65536 ? ENV_PORT : 8866;
|
|
18
8
|
//# sourceMappingURL=config.js.map
|
package/dist/oauth/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/oauth/config.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,wEAAwE;AACxE,8BAA8B;AAC9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/oauth/config.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,wEAAwE;AACxE,8BAA8B;AAC9B,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC"}
|
package/dist/oauth/loopback.js
CHANGED
|
@@ -91,9 +91,12 @@ export async function startLoopbackServer(opts = {}) {
|
|
|
91
91
|
const server = createServer(handler);
|
|
92
92
|
const port = opts.port ?? 0;
|
|
93
93
|
await new Promise((resolve, reject) => {
|
|
94
|
+
// With port: 0 the kernel picks a free port, so EADDRINUSE is essentially
|
|
95
|
+
// unreachable from the production call site. Tests that pass an explicit
|
|
96
|
+
// port still get a clean error if the port is occupied.
|
|
94
97
|
server.once("error", (err) => {
|
|
95
98
|
if (err.code === "EADDRINUSE") {
|
|
96
|
-
reject(new Error(`Port ${port} is already in use
|
|
99
|
+
reject(new Error(`Port ${port} is already in use.`));
|
|
97
100
|
}
|
|
98
101
|
else {
|
|
99
102
|
reject(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loopback.js","sourceRoot":"","sources":["../../src/oauth/loopback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAiBpF,MAAM,YAAY,GAAG;;;;;CAKpB,CAAC;AAEF,0EAA0E;AAC1E,oEAAoE;AACpE,oEAAoE;AACpE,wEAAwE;AACxE,sEAAsE;AACtE,sEAAsE;AACtE,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC;SACL,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO;;;;sCAI6B,UAAU,CAAC,MAAM,CAAC;CACvD,CAAC;AACF,CAAC;
|
|
1
|
+
{"version":3,"file":"loopback.js","sourceRoot":"","sources":["../../src/oauth/loopback.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quire-io/quire-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Command-line interface for the Quire API.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"url": "https://github.com/quire-io/quire-cli/issues"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@quire-io/api-client": "^0.1.
|
|
51
|
+
"@quire-io/api-client": "^0.1.7",
|
|
52
52
|
"commander": "^12.1.0"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|