linmux 0.1.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/LICENSE +21 -0
- package/README.md +240 -0
- package/bin/run.js +4 -0
- package/dist/commands/comment/create.js +94 -0
- package/dist/commands/comment/delete.js +74 -0
- package/dist/commands/comment/list.js +84 -0
- package/dist/commands/comment/update.js +80 -0
- package/dist/commands/cycle/current.js +78 -0
- package/dist/commands/cycle/list.js +84 -0
- package/dist/commands/cycle/move.js +91 -0
- package/dist/commands/describe.js +65 -0
- package/dist/commands/graphql/index.js +92 -0
- package/dist/commands/install-skill.js +54 -0
- package/dist/commands/issue/archive.js +75 -0
- package/dist/commands/issue/create.js +115 -0
- package/dist/commands/issue/get.js +84 -0
- package/dist/commands/issue/list.js +93 -0
- package/dist/commands/issue/purge.js +81 -0
- package/dist/commands/issue/search.js +109 -0
- package/dist/commands/issue/transition.js +91 -0
- package/dist/commands/issue/trash.js +75 -0
- package/dist/commands/issue/update.js +126 -0
- package/dist/commands/label/create.js +91 -0
- package/dist/commands/label/list.js +76 -0
- package/dist/commands/list-tools.js +47 -0
- package/dist/commands/me.js +71 -0
- package/dist/commands/project/create.js +101 -0
- package/dist/commands/project/get.js +83 -0
- package/dist/commands/project/list.js +75 -0
- package/dist/commands/project/update-status.js +99 -0
- package/dist/commands/project/update.js +99 -0
- package/dist/commands/raw/batch.js +85 -0
- package/dist/commands/raw/index.js +72 -0
- package/dist/commands/schema.js +69 -0
- package/dist/commands/state/list.js +77 -0
- package/dist/commands/team/get.js +73 -0
- package/dist/commands/team/list.js +73 -0
- package/dist/commands/whoami.js +71 -0
- package/dist/commands/workspace/add.js +97 -0
- package/dist/commands/workspace/list.js +47 -0
- package/dist/commands/workspace/remove.js +63 -0
- package/dist/commands/workspace/replace-token.js +89 -0
- package/dist/commands/workspace/use.js +54 -0
- package/dist/core/client/factory.js +28 -0
- package/dist/core/client/index.js +2 -0
- package/dist/core/config/index.js +4 -0
- package/dist/core/config/paths.js +30 -0
- package/dist/core/config/schema.js +36 -0
- package/dist/core/config/store.js +149 -0
- package/dist/core/errors/error.js +142 -0
- package/dist/core/errors/exit-codes.js +70 -0
- package/dist/core/output/envelope.js +53 -0
- package/dist/core/output/format.js +42 -0
- package/dist/core/output/index.js +3 -0
- package/dist/core/pagination/flags.js +29 -0
- package/dist/core/pagination/index.js +2 -0
- package/dist/core/projection/presets.js +116 -0
- package/dist/core/projection/project.js +282 -0
- package/dist/core/redact/redact.js +45 -0
- package/dist/core/resolvers/cycle.js +60 -0
- package/dist/core/resolvers/index.js +7 -0
- package/dist/core/resolvers/label.js +54 -0
- package/dist/core/resolvers/project-status.js +42 -0
- package/dist/core/resolvers/project.js +43 -0
- package/dist/core/resolvers/state.js +46 -0
- package/dist/core/resolvers/team.js +50 -0
- package/dist/core/transport/fetch-interceptor.js +109 -0
- package/dist/core/transport/index.js +3 -0
- package/dist/core/transport/rate-limit.js +167 -0
- package/dist/core/workspace/resolver.js +70 -0
- package/dist/core/workspace/write-guard.js +43 -0
- package/dist/generated/graphql.js +89428 -0
- package/dist/generated/operations.js +3013 -0
- package/dist/lib/comment-create-runtime.js +96 -0
- package/dist/lib/comment-delete-runtime.js +46 -0
- package/dist/lib/comment-list-runtime.js +182 -0
- package/dist/lib/comment-update-runtime.js +93 -0
- package/dist/lib/cycle-current-runtime.js +90 -0
- package/dist/lib/cycle-list-runtime.js +151 -0
- package/dist/lib/cycle-move-runtime.js +142 -0
- package/dist/lib/describe-runtime.js +180 -0
- package/dist/lib/filter-heuristics.js +59 -0
- package/dist/lib/graphql-runtime.js +202 -0
- package/dist/lib/include-fragments.js +73 -0
- package/dist/lib/install-skill-runtime.js +228 -0
- package/dist/lib/introspection-registry.js +488 -0
- package/dist/lib/issue-archive-runtime.js +89 -0
- package/dist/lib/issue-create-runtime.js +175 -0
- package/dist/lib/issue-get-runtime.js +153 -0
- package/dist/lib/issue-list-runtime.js +164 -0
- package/dist/lib/issue-purge-runtime.js +89 -0
- package/dist/lib/issue-search-runtime.js +114 -0
- package/dist/lib/issue-transition-runtime.js +131 -0
- package/dist/lib/issue-trash-runtime.js +84 -0
- package/dist/lib/issue-update-runtime.js +164 -0
- package/dist/lib/label-create-runtime.js +113 -0
- package/dist/lib/label-list-runtime.js +97 -0
- package/dist/lib/levenshtein.js +42 -0
- package/dist/lib/list-tools-runtime.js +38 -0
- package/dist/lib/me-runtime.js +55 -0
- package/dist/lib/project-create-runtime.js +103 -0
- package/dist/lib/project-get-runtime.js +134 -0
- package/dist/lib/project-list-runtime.js +84 -0
- package/dist/lib/project-update-runtime.js +110 -0
- package/dist/lib/project-update-status-runtime.js +91 -0
- package/dist/lib/raw-batch-runtime.js +229 -0
- package/dist/lib/raw-runtime.js +171 -0
- package/dist/lib/schema-loader.js +41 -0
- package/dist/lib/schema-runtime.js +65 -0
- package/dist/lib/state-list-runtime.js +93 -0
- package/dist/lib/team-get-runtime.js +55 -0
- package/dist/lib/team-list-runtime.js +52 -0
- package/dist/lib/workspace-runtime.js +112 -0
- package/dist/operations/_registry.zod.js +5337 -0
- package/oclif.manifest.json +3631 -0
- package/package.json +99 -0
- package/schema.graphql +30772 -0
- package/skills/linmux/SKILL.md +186 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../../lib/workspace-runtime.js";
|
|
2
|
+
import { PAGINATION_FLAGS } from "../../core/pagination/flags.js";
|
|
3
|
+
import "../../core/pagination/index.js";
|
|
4
|
+
import { labelListRuntime } from "../../lib/label-list-runtime.js";
|
|
5
|
+
import { Command, Flags } from "@oclif/core";
|
|
6
|
+
//#region src/commands/label/list.ts
|
|
7
|
+
/**
|
|
8
|
+
* `linmux label list` -- Phase 2 PLAN 02-09 Task 2, LBL-01.list.
|
|
9
|
+
*
|
|
10
|
+
* Read command. Lists issue labels either workspace-wide or scoped to one
|
|
11
|
+
* team via `--team` (UUID, key, or name). Implementation lives in
|
|
12
|
+
* `src/lib/label-list-runtime.ts`.
|
|
13
|
+
*
|
|
14
|
+
* Exports BOTH the default Command class AND a named `runLabelList(args)`
|
|
15
|
+
* function.
|
|
16
|
+
*/
|
|
17
|
+
async function runLabelList(args) {
|
|
18
|
+
const runArgs = {
|
|
19
|
+
commandPath: "label list",
|
|
20
|
+
pretty: args.pretty,
|
|
21
|
+
handler: async (retryOpts) => {
|
|
22
|
+
const runtimeFlags = {};
|
|
23
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
24
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
25
|
+
if (args.limit !== void 0) runtimeFlags.limit = args.limit;
|
|
26
|
+
if (args.cursor !== void 0) runtimeFlags.cursor = args.cursor;
|
|
27
|
+
if (args.team !== void 0) runtimeFlags.team = args.team;
|
|
28
|
+
const result = await labelListRuntime({
|
|
29
|
+
flags: runtimeFlags,
|
|
30
|
+
env: process.env,
|
|
31
|
+
retryOptsOverride: retryOpts
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
data: result.data,
|
|
35
|
+
meta: result.meta
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
40
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
41
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
42
|
+
return runCommand(runArgs);
|
|
43
|
+
}
|
|
44
|
+
var LabelList = class LabelList extends Command {
|
|
45
|
+
static description = "List Linear issue labels. Pass --team <UUID|key|name> to scope to one team.";
|
|
46
|
+
static enableJsonFlag = true;
|
|
47
|
+
static flags = {
|
|
48
|
+
...BASE_FLAGS,
|
|
49
|
+
...PAGINATION_FLAGS,
|
|
50
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
51
|
+
fields: Flags.string({
|
|
52
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
53
|
+
default: "defaults"
|
|
54
|
+
}),
|
|
55
|
+
team: Flags.string({ description: "Optional team filter (UUID, key, or name)" })
|
|
56
|
+
};
|
|
57
|
+
async run() {
|
|
58
|
+
const { flags } = await this.parse(LabelList);
|
|
59
|
+
const callArgs = { pretty: flags.pretty };
|
|
60
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
61
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
62
|
+
if (flags.limit !== void 0) callArgs.limit = flags.limit;
|
|
63
|
+
if (flags.cursor !== void 0) callArgs.cursor = flags.cursor;
|
|
64
|
+
if (flags.team !== void 0) callArgs.team = flags.team;
|
|
65
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
66
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
67
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
68
|
+
const out = await runLabelList(callArgs);
|
|
69
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
70
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
71
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
72
|
+
return JSON.parse(out.stdout);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
//#endregion
|
|
76
|
+
export { LabelList as default, runLabelList };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../lib/workspace-runtime.js";
|
|
2
|
+
import { listToolsRuntime } from "../lib/list-tools-runtime.js";
|
|
3
|
+
import { Command } from "@oclif/core";
|
|
4
|
+
//#region src/commands/list-tools.ts
|
|
5
|
+
/**
|
|
6
|
+
* `linmux list-tools` — Phase 4 PLAN 04-02, INT-01.
|
|
7
|
+
*
|
|
8
|
+
* Enumerates every curated and raw command, marking curated→raw mappings.
|
|
9
|
+
* Zero network calls — all data is assembled from static registries.
|
|
10
|
+
*
|
|
11
|
+
* Two-export pattern (S1): default oclif class + named `runListTools` wrapper.
|
|
12
|
+
*/
|
|
13
|
+
async function runListTools(args) {
|
|
14
|
+
const runArgs = {
|
|
15
|
+
commandPath: "list-tools",
|
|
16
|
+
pretty: args.pretty,
|
|
17
|
+
handler: async (_retryOpts) => {
|
|
18
|
+
return {
|
|
19
|
+
data: (await listToolsRuntime({ flags: {} })).data,
|
|
20
|
+
meta: {}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
25
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
26
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
27
|
+
return runCommand(runArgs);
|
|
28
|
+
}
|
|
29
|
+
var ListTools = class ListTools extends Command {
|
|
30
|
+
static description = "Enumerate every curated and raw command with curated→raw mappings.";
|
|
31
|
+
static enableJsonFlag = true;
|
|
32
|
+
static flags = { ...BASE_FLAGS };
|
|
33
|
+
async run() {
|
|
34
|
+
const { flags } = await this.parse(ListTools);
|
|
35
|
+
const callArgs = { pretty: flags.pretty };
|
|
36
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
37
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
38
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
39
|
+
const out = await runListTools(callArgs);
|
|
40
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
41
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
42
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
43
|
+
return JSON.parse(out.stdout);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ListTools as default, runListTools };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../lib/workspace-runtime.js";
|
|
2
|
+
import { meRuntime } from "../lib/me-runtime.js";
|
|
3
|
+
import { Command, Flags } from "@oclif/core";
|
|
4
|
+
//#region src/commands/me.ts
|
|
5
|
+
/**
|
|
6
|
+
* `linmux me` -- Phase 2 PLAN 02-09 Task 1, WHO-01.
|
|
7
|
+
*
|
|
8
|
+
* Read command. Prints the resolved viewer (current user) and their
|
|
9
|
+
* organization for the active workspace. Shares `src/lib/me-runtime.ts`
|
|
10
|
+
* with `whoami` -- both commands emit IDENTICAL envelopes except for
|
|
11
|
+
* `meta.command` (`'me'` vs `'whoami'`). `whoami` exists purely for
|
|
12
|
+
* discoverability per CONTEXT § Specifics line 65.
|
|
13
|
+
*
|
|
14
|
+
* Exports BOTH the default Command class AND a named `runMe(args)`
|
|
15
|
+
* function.
|
|
16
|
+
*/
|
|
17
|
+
async function runMe(args) {
|
|
18
|
+
const runArgs = {
|
|
19
|
+
commandPath: "me",
|
|
20
|
+
pretty: args.pretty,
|
|
21
|
+
handler: async (retryOpts) => {
|
|
22
|
+
const runtimeFlags = {};
|
|
23
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
24
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
25
|
+
const meInput = {
|
|
26
|
+
flags: runtimeFlags,
|
|
27
|
+
env: process.env,
|
|
28
|
+
retryOptsOverride: retryOpts
|
|
29
|
+
};
|
|
30
|
+
if (args.loadConfigOverride !== void 0) meInput.loadConfigOverride = args.loadConfigOverride;
|
|
31
|
+
if (args.clientFactoryOverride !== void 0) meInput.clientFactoryOverride = args.clientFactoryOverride;
|
|
32
|
+
const result = await meRuntime(meInput);
|
|
33
|
+
return {
|
|
34
|
+
data: result.data,
|
|
35
|
+
meta: result.meta
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
40
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
41
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
42
|
+
return runCommand(runArgs);
|
|
43
|
+
}
|
|
44
|
+
var Me = class Me extends Command {
|
|
45
|
+
static description = "Print the resolved viewer (user) and organization for the current workspace.";
|
|
46
|
+
static enableJsonFlag = true;
|
|
47
|
+
static flags = {
|
|
48
|
+
...BASE_FLAGS,
|
|
49
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
50
|
+
fields: Flags.string({
|
|
51
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
52
|
+
default: "defaults"
|
|
53
|
+
})
|
|
54
|
+
};
|
|
55
|
+
async run() {
|
|
56
|
+
const { flags } = await this.parse(Me);
|
|
57
|
+
const callArgs = { pretty: flags.pretty };
|
|
58
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
59
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
60
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
61
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
62
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
63
|
+
const out = await runMe(callArgs);
|
|
64
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
65
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
66
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
67
|
+
return JSON.parse(out.stdout);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
//#endregion
|
|
71
|
+
export { Me as default, runMe };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../../lib/workspace-runtime.js";
|
|
2
|
+
import { projectCreateRuntime } from "../../lib/project-create-runtime.js";
|
|
3
|
+
import { Command, Flags } from "@oclif/core";
|
|
4
|
+
//#region src/commands/project/create.ts
|
|
5
|
+
/**
|
|
6
|
+
* `linmux project create` -- Phase 2 PLAN 02-07 Task 2, PRJ-01.create.
|
|
7
|
+
*
|
|
8
|
+
* Write command. Required: `--name` + `--teams` (comma-separated team
|
|
9
|
+
* keys/UUIDs/names; >=1). Optional: --description, --state, --lead,
|
|
10
|
+
* --start-date, --target-date.
|
|
11
|
+
*
|
|
12
|
+
* Implementation lives in `src/lib/project-create-runtime.ts` per the Phase 1
|
|
13
|
+
* PLAN-04 invariant. This file exports BOTH the oclif Command class AND a
|
|
14
|
+
* named `runProjectCreate(args)` async function so tests can call the runtime
|
|
15
|
+
* without spawning a subprocess.
|
|
16
|
+
*/
|
|
17
|
+
async function runProjectCreate(args) {
|
|
18
|
+
const runArgs = {
|
|
19
|
+
commandPath: "project create",
|
|
20
|
+
pretty: args.pretty,
|
|
21
|
+
handler: async (retryOpts) => {
|
|
22
|
+
const runtimeFlags = {};
|
|
23
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
24
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
25
|
+
if (args.allowActiveWorkspaceWrite !== void 0) runtimeFlags.allowActiveWorkspaceWrite = args.allowActiveWorkspaceWrite;
|
|
26
|
+
if (args.name !== void 0) runtimeFlags.name = args.name;
|
|
27
|
+
if (args.teams !== void 0) runtimeFlags.teams = args.teams;
|
|
28
|
+
if (args.description !== void 0) runtimeFlags.description = args.description;
|
|
29
|
+
if (args.state !== void 0) runtimeFlags.state = args.state;
|
|
30
|
+
if (args.lead !== void 0) runtimeFlags.lead = args.lead;
|
|
31
|
+
if (args.startDate !== void 0) runtimeFlags.startDate = args.startDate;
|
|
32
|
+
if (args.targetDate !== void 0) runtimeFlags.targetDate = args.targetDate;
|
|
33
|
+
const result = await projectCreateRuntime({
|
|
34
|
+
args: {},
|
|
35
|
+
flags: runtimeFlags,
|
|
36
|
+
env: process.env,
|
|
37
|
+
retryOptsOverride: retryOpts
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
data: result.data,
|
|
41
|
+
meta: result.meta
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
46
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
47
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
48
|
+
return runCommand(runArgs);
|
|
49
|
+
}
|
|
50
|
+
var ProjectCreate = class ProjectCreate extends Command {
|
|
51
|
+
static description = "Create a Linear project (--name + --teams required; --description, --state, --lead, --start-date, --target-date optional).";
|
|
52
|
+
static enableJsonFlag = true;
|
|
53
|
+
static flags = {
|
|
54
|
+
...BASE_FLAGS,
|
|
55
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
56
|
+
"allow-active-workspace-write": Flags.boolean({ description: "Per-invocation opt-in to use the active default workspace for this write (WSP-06)" }),
|
|
57
|
+
fields: Flags.string({
|
|
58
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
59
|
+
default: "defaults"
|
|
60
|
+
}),
|
|
61
|
+
name: Flags.string({
|
|
62
|
+
required: true,
|
|
63
|
+
description: "Project name (required)"
|
|
64
|
+
}),
|
|
65
|
+
teams: Flags.string({
|
|
66
|
+
required: true,
|
|
67
|
+
description: "Comma-separated team keys (ENG), names (Engineering), or UUIDs; at least one required"
|
|
68
|
+
}),
|
|
69
|
+
description: Flags.string({ description: "Project description (markdown)" }),
|
|
70
|
+
state: Flags.string({ description: "Project state ('planned' | 'started' | 'paused' | 'completed' | 'canceled' | 'backlog')" }),
|
|
71
|
+
lead: Flags.string({ description: "\"me\", email, name, or user UUID" }),
|
|
72
|
+
"start-date": Flags.string({ description: "Project start date (ISO 8601, e.g. 2026-10-01)" }),
|
|
73
|
+
"target-date": Flags.string({ description: "Project target date (ISO 8601, e.g. 2026-12-31)" })
|
|
74
|
+
};
|
|
75
|
+
async run() {
|
|
76
|
+
const { flags } = await this.parse(ProjectCreate);
|
|
77
|
+
const callArgs = {
|
|
78
|
+
pretty: flags.pretty,
|
|
79
|
+
allowActiveWorkspaceWrite: flags["allow-active-workspace-write"]
|
|
80
|
+
};
|
|
81
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
82
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
83
|
+
if (flags.name !== void 0) callArgs.name = flags.name;
|
|
84
|
+
if (flags.teams !== void 0) callArgs.teams = flags.teams;
|
|
85
|
+
if (flags.description !== void 0) callArgs.description = flags.description;
|
|
86
|
+
if (flags.state !== void 0) callArgs.state = flags.state;
|
|
87
|
+
if (flags.lead !== void 0) callArgs.lead = flags.lead;
|
|
88
|
+
if (flags["start-date"] !== void 0) callArgs.startDate = flags["start-date"];
|
|
89
|
+
if (flags["target-date"] !== void 0) callArgs.targetDate = flags["target-date"];
|
|
90
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
91
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
92
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
93
|
+
const out = await runProjectCreate(callArgs);
|
|
94
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
95
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
96
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
97
|
+
return JSON.parse(out.stdout);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
//#endregion
|
|
101
|
+
export { ProjectCreate as default, runProjectCreate };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../../lib/workspace-runtime.js";
|
|
2
|
+
import { projectGetRuntime } from "../../lib/project-get-runtime.js";
|
|
3
|
+
import { Args, Command, Flags } from "@oclif/core";
|
|
4
|
+
//#region src/commands/project/get.ts
|
|
5
|
+
/**
|
|
6
|
+
* `linmux project get <ref>` -- Phase 2 PLAN 02-07 Task 1, PRJ-01.get.
|
|
7
|
+
*
|
|
8
|
+
* Single-entity read. Accepts a project name or UUID. UUIDs short-circuit
|
|
9
|
+
* resolveProjectId; names go through the workspace-scoped resolver from
|
|
10
|
+
* Plan 02-02. NO WSP-06 enforcement -- reads are allowed against the active
|
|
11
|
+
* default workspace.
|
|
12
|
+
*
|
|
13
|
+
* Implementation lives in `src/lib/project-get-runtime.ts` per the Phase 1
|
|
14
|
+
* PLAN-04 invariant. This file exports BOTH the oclif Command class AND a
|
|
15
|
+
* named `runProjectGet(args)` async function so tests can call the runtime
|
|
16
|
+
* without spawning a subprocess.
|
|
17
|
+
*/
|
|
18
|
+
async function runProjectGet(args) {
|
|
19
|
+
const runArgs = {
|
|
20
|
+
commandPath: "project get",
|
|
21
|
+
pretty: args.pretty,
|
|
22
|
+
handler: async (retryOpts) => {
|
|
23
|
+
const runtimeFlags = {};
|
|
24
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
25
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
26
|
+
if (args.include !== void 0) runtimeFlags.include = args.include;
|
|
27
|
+
const result = await projectGetRuntime({
|
|
28
|
+
args: { ref: args.ref },
|
|
29
|
+
flags: runtimeFlags,
|
|
30
|
+
env: process.env,
|
|
31
|
+
retryOptsOverride: retryOpts
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
data: result.data,
|
|
35
|
+
meta: result.meta
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
40
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
41
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
42
|
+
return runCommand(runArgs);
|
|
43
|
+
}
|
|
44
|
+
var ProjectGet = class ProjectGet extends Command {
|
|
45
|
+
static description = "Get a single Linear project by name or UUID.";
|
|
46
|
+
static enableJsonFlag = true;
|
|
47
|
+
static args = { ref: Args.string({
|
|
48
|
+
required: true,
|
|
49
|
+
description: "Project name or UUID"
|
|
50
|
+
}) };
|
|
51
|
+
static flags = {
|
|
52
|
+
...BASE_FLAGS,
|
|
53
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
54
|
+
fields: Flags.string({
|
|
55
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
56
|
+
default: "defaults"
|
|
57
|
+
}),
|
|
58
|
+
include: Flags.string({
|
|
59
|
+
description: "Hydrate related entities in a single GraphQL round-trip (e.g. members, teams). Available: members, teams, projectMilestones, documents.",
|
|
60
|
+
multiple: true
|
|
61
|
+
})
|
|
62
|
+
};
|
|
63
|
+
async run() {
|
|
64
|
+
const { args, flags } = await this.parse(ProjectGet);
|
|
65
|
+
const callArgs = {
|
|
66
|
+
ref: args.ref,
|
|
67
|
+
pretty: flags.pretty
|
|
68
|
+
};
|
|
69
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
70
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
71
|
+
if (flags.include !== void 0) callArgs.include = flags.include;
|
|
72
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
73
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
74
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
75
|
+
const out = await runProjectGet(callArgs);
|
|
76
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
77
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
78
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
79
|
+
return JSON.parse(out.stdout);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
//#endregion
|
|
83
|
+
export { ProjectGet as default, runProjectGet };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../../lib/workspace-runtime.js";
|
|
2
|
+
import { PAGINATION_FLAGS } from "../../core/pagination/flags.js";
|
|
3
|
+
import "../../core/pagination/index.js";
|
|
4
|
+
import { projectListRuntime } from "../../lib/project-list-runtime.js";
|
|
5
|
+
import { Command, Flags } from "@oclif/core";
|
|
6
|
+
//#region src/commands/project/list.ts
|
|
7
|
+
/**
|
|
8
|
+
* `linmux project list` -- Phase 2 PLAN 02-07 Task 1, PRJ-01.list.
|
|
9
|
+
*
|
|
10
|
+
* Read command. Lists workspace-wide projects with --fields, --limit, and
|
|
11
|
+
* --cursor. NO WSP-06 enforcement -- reads are allowed against the active
|
|
12
|
+
* default workspace.
|
|
13
|
+
*
|
|
14
|
+
* Implementation lives in `src/lib/project-list-runtime.ts` per the Phase 1
|
|
15
|
+
* PLAN-04 invariant. This file exports BOTH the oclif Command class AND a
|
|
16
|
+
* named `runProjectList(args)` async function so tests can call the runtime
|
|
17
|
+
* without spawning a subprocess.
|
|
18
|
+
*/
|
|
19
|
+
async function runProjectList(args) {
|
|
20
|
+
const runArgs = {
|
|
21
|
+
commandPath: "project list",
|
|
22
|
+
pretty: args.pretty,
|
|
23
|
+
handler: async (retryOpts) => {
|
|
24
|
+
const runtimeFlags = {};
|
|
25
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
26
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
27
|
+
if (args.limit !== void 0) runtimeFlags.limit = args.limit;
|
|
28
|
+
if (args.cursor !== void 0) runtimeFlags.cursor = args.cursor;
|
|
29
|
+
const result = await projectListRuntime({
|
|
30
|
+
flags: runtimeFlags,
|
|
31
|
+
env: process.env,
|
|
32
|
+
retryOptsOverride: retryOpts
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
data: result.data,
|
|
36
|
+
meta: result.meta
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
41
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
42
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
43
|
+
return runCommand(runArgs);
|
|
44
|
+
}
|
|
45
|
+
var ProjectList = class ProjectList extends Command {
|
|
46
|
+
static description = "List Linear projects in the active workspace, with --fields, --limit, --cursor.";
|
|
47
|
+
static enableJsonFlag = true;
|
|
48
|
+
static flags = {
|
|
49
|
+
...BASE_FLAGS,
|
|
50
|
+
...PAGINATION_FLAGS,
|
|
51
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
52
|
+
fields: Flags.string({
|
|
53
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
54
|
+
default: "defaults"
|
|
55
|
+
})
|
|
56
|
+
};
|
|
57
|
+
async run() {
|
|
58
|
+
const { flags } = await this.parse(ProjectList);
|
|
59
|
+
const callArgs = { pretty: flags.pretty };
|
|
60
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
61
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
62
|
+
if (flags.limit !== void 0) callArgs.limit = flags.limit;
|
|
63
|
+
if (flags.cursor !== void 0) callArgs.cursor = flags.cursor;
|
|
64
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
65
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
66
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
67
|
+
const out = await runProjectList(callArgs);
|
|
68
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
69
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
70
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
71
|
+
return JSON.parse(out.stdout);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
//#endregion
|
|
75
|
+
export { ProjectList as default, runProjectList };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../../lib/workspace-runtime.js";
|
|
2
|
+
import { projectUpdateStatusRuntime } from "../../lib/project-update-status-runtime.js";
|
|
3
|
+
import { Args, Command, Flags } from "@oclif/core";
|
|
4
|
+
//#region src/commands/project/update-status.ts
|
|
5
|
+
/**
|
|
6
|
+
* `linmux project update-status <ref> <status>` --
|
|
7
|
+
* Phase 2 PLAN 02-07 Task 2, PRJ-01.update-status.
|
|
8
|
+
*
|
|
9
|
+
* **Multi-word command file**: oclif resolves
|
|
10
|
+
* `src/commands/project/update-status.ts` to `linmux project update-status`
|
|
11
|
+
* (filename-to-command separator is space; the dash inside the filename is
|
|
12
|
+
* preserved verbatim per RESEARCH 02-07 line 252).
|
|
13
|
+
*
|
|
14
|
+
* Sets a project's CURRENT status by calling
|
|
15
|
+
* `client.updateProject(projectId, { statusId })`. The SDK's status-
|
|
16
|
+
* DEFINITION mutator (an admin operation that would rename / recolor /
|
|
17
|
+
* reposition the status row workspace-wide) is explicitly NOT called from
|
|
18
|
+
* this code path -- see RESEARCH § Pitfall 5. The runtime file's header
|
|
19
|
+
* documents the trap; this command is the agent-meaningful "set this
|
|
20
|
+
* project to <status>" path.
|
|
21
|
+
*
|
|
22
|
+
* Implementation lives in `src/lib/project-update-status-runtime.ts` per the
|
|
23
|
+
* Phase 1 PLAN-04 invariant. This file exports BOTH the oclif Command class
|
|
24
|
+
* AND a named `runProjectUpdateStatus(args)` async function so tests can call
|
|
25
|
+
* the runtime without spawning a subprocess.
|
|
26
|
+
*/
|
|
27
|
+
async function runProjectUpdateStatus(args) {
|
|
28
|
+
const runArgs = {
|
|
29
|
+
commandPath: "project update-status",
|
|
30
|
+
pretty: args.pretty,
|
|
31
|
+
handler: async (retryOpts) => {
|
|
32
|
+
const runtimeFlags = {};
|
|
33
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
34
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
35
|
+
if (args.allowActiveWorkspaceWrite !== void 0) runtimeFlags.allowActiveWorkspaceWrite = args.allowActiveWorkspaceWrite;
|
|
36
|
+
const result = await projectUpdateStatusRuntime({
|
|
37
|
+
args: {
|
|
38
|
+
ref: args.ref,
|
|
39
|
+
status: args.status
|
|
40
|
+
},
|
|
41
|
+
flags: runtimeFlags,
|
|
42
|
+
env: process.env,
|
|
43
|
+
retryOptsOverride: retryOpts
|
|
44
|
+
});
|
|
45
|
+
return {
|
|
46
|
+
data: result.data,
|
|
47
|
+
meta: result.meta
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
52
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
53
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
54
|
+
return runCommand(runArgs);
|
|
55
|
+
}
|
|
56
|
+
var ProjectUpdateStatus = class ProjectUpdateStatus extends Command {
|
|
57
|
+
static description = "Set a Linear project's current status (e.g. \"On Track\" -> \"At Risk\"). Calls updateProject({ statusId }); does NOT mutate the workspace-level status definition.";
|
|
58
|
+
static enableJsonFlag = true;
|
|
59
|
+
static args = {
|
|
60
|
+
ref: Args.string({
|
|
61
|
+
required: true,
|
|
62
|
+
description: "Project name or UUID"
|
|
63
|
+
}),
|
|
64
|
+
status: Args.string({
|
|
65
|
+
required: true,
|
|
66
|
+
description: "Status name (e.g. \"At Risk\") or UUID"
|
|
67
|
+
})
|
|
68
|
+
};
|
|
69
|
+
static flags = {
|
|
70
|
+
...BASE_FLAGS,
|
|
71
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
72
|
+
"allow-active-workspace-write": Flags.boolean({ description: "Per-invocation opt-in to use the active default workspace for this write (WSP-06)" }),
|
|
73
|
+
fields: Flags.string({
|
|
74
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
75
|
+
default: "defaults"
|
|
76
|
+
})
|
|
77
|
+
};
|
|
78
|
+
async run() {
|
|
79
|
+
const { args, flags } = await this.parse(ProjectUpdateStatus);
|
|
80
|
+
const callArgs = {
|
|
81
|
+
ref: args.ref,
|
|
82
|
+
status: args.status,
|
|
83
|
+
pretty: flags.pretty,
|
|
84
|
+
allowActiveWorkspaceWrite: flags["allow-active-workspace-write"]
|
|
85
|
+
};
|
|
86
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
87
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
88
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
89
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
90
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
91
|
+
const out = await runProjectUpdateStatus(callArgs);
|
|
92
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
93
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
94
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
95
|
+
return JSON.parse(out.stdout);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
export { ProjectUpdateStatus as default, runProjectUpdateStatus };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { BASE_FLAGS, runCommand } from "../../lib/workspace-runtime.js";
|
|
2
|
+
import { projectUpdateRuntime } from "../../lib/project-update-runtime.js";
|
|
3
|
+
import { Args, Command, Flags } from "@oclif/core";
|
|
4
|
+
//#region src/commands/project/update.ts
|
|
5
|
+
/**
|
|
6
|
+
* `linmux project update <ref>` -- Phase 2 PLAN 02-07 Task 2,
|
|
7
|
+
* PRJ-01.update.
|
|
8
|
+
*
|
|
9
|
+
* Write command. Resolves a project ref (name or UUID) and applies any subset
|
|
10
|
+
* of partial field flags via `client.updateProject`. WSP-06 enforcement and
|
|
11
|
+
* VALIDATION_NO_FIELDS guard both run BEFORE any SDK call.
|
|
12
|
+
*
|
|
13
|
+
* NOTE: To change a project's CURRENT status, use the dedicated
|
|
14
|
+
* `linmux project update-status <ref> <status>` sub-command -- it
|
|
15
|
+
* routes through the same `updateProject({ statusId })` mutation, but the
|
|
16
|
+
* dedicated command keeps the load-bearing operation discoverable + the input
|
|
17
|
+
* shape un-ambiguous (per RESEARCH § Pitfall 5).
|
|
18
|
+
*/
|
|
19
|
+
async function runProjectUpdate(args) {
|
|
20
|
+
const runArgs = {
|
|
21
|
+
commandPath: "project update",
|
|
22
|
+
pretty: args.pretty,
|
|
23
|
+
handler: async (retryOpts) => {
|
|
24
|
+
const runtimeFlags = {};
|
|
25
|
+
if (args.workspace !== void 0) runtimeFlags.workspace = args.workspace;
|
|
26
|
+
if (args.fields !== void 0) runtimeFlags.fields = args.fields;
|
|
27
|
+
if (args.allowActiveWorkspaceWrite !== void 0) runtimeFlags.allowActiveWorkspaceWrite = args.allowActiveWorkspaceWrite;
|
|
28
|
+
if (args.name !== void 0) runtimeFlags.name = args.name;
|
|
29
|
+
if (args.description !== void 0) runtimeFlags.description = args.description;
|
|
30
|
+
if (args.state !== void 0) runtimeFlags.state = args.state;
|
|
31
|
+
if (args.lead !== void 0) runtimeFlags.lead = args.lead;
|
|
32
|
+
if (args.startDate !== void 0) runtimeFlags.startDate = args.startDate;
|
|
33
|
+
if (args.targetDate !== void 0) runtimeFlags.targetDate = args.targetDate;
|
|
34
|
+
const result = await projectUpdateRuntime({
|
|
35
|
+
args: { ref: args.ref },
|
|
36
|
+
flags: runtimeFlags,
|
|
37
|
+
env: process.env,
|
|
38
|
+
retryOptsOverride: retryOpts
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
data: result.data,
|
|
42
|
+
meta: result.meta
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
if (args.noMeta !== void 0) runArgs.noMeta = args.noMeta;
|
|
47
|
+
if (args.quiet !== void 0) runArgs.quiet = args.quiet;
|
|
48
|
+
if (args.retry !== void 0) runArgs.retry = args.retry;
|
|
49
|
+
return runCommand(runArgs);
|
|
50
|
+
}
|
|
51
|
+
var ProjectUpdate = class ProjectUpdate extends Command {
|
|
52
|
+
static description = "Update a Linear project. At least one field flag is required. Use `project update-status` to change the project's current status.";
|
|
53
|
+
static enableJsonFlag = true;
|
|
54
|
+
static args = { ref: Args.string({
|
|
55
|
+
required: true,
|
|
56
|
+
description: "Project name or UUID"
|
|
57
|
+
}) };
|
|
58
|
+
static flags = {
|
|
59
|
+
...BASE_FLAGS,
|
|
60
|
+
workspace: Flags.string({ description: "Workspace name (overrides active default and LINEAR_WORKSPACE)" }),
|
|
61
|
+
"allow-active-workspace-write": Flags.boolean({ description: "Per-invocation opt-in to use the active default workspace for this write (WSP-06)" }),
|
|
62
|
+
fields: Flags.string({
|
|
63
|
+
description: "Field preset (ids|defaults|full) or comma-separated list",
|
|
64
|
+
default: "defaults"
|
|
65
|
+
}),
|
|
66
|
+
name: Flags.string({ description: "New project name" }),
|
|
67
|
+
description: Flags.string({ description: "New project description (markdown). Pass \"\" to clear." }),
|
|
68
|
+
state: Flags.string({ description: "Project state ('planned' | 'started' | 'paused' | 'completed' | 'canceled' | 'backlog')" }),
|
|
69
|
+
lead: Flags.string({ description: "\"me\", email, name, or user UUID" }),
|
|
70
|
+
"start-date": Flags.string({ description: "Project start date (ISO 8601, e.g. 2026-10-01)" }),
|
|
71
|
+
"target-date": Flags.string({ description: "Project target date (ISO 8601, e.g. 2026-12-31)" })
|
|
72
|
+
};
|
|
73
|
+
async run() {
|
|
74
|
+
const { args, flags } = await this.parse(ProjectUpdate);
|
|
75
|
+
const callArgs = {
|
|
76
|
+
ref: args.ref,
|
|
77
|
+
pretty: flags.pretty,
|
|
78
|
+
allowActiveWorkspaceWrite: flags["allow-active-workspace-write"]
|
|
79
|
+
};
|
|
80
|
+
if (flags.workspace !== void 0) callArgs.workspace = flags.workspace;
|
|
81
|
+
if (flags.fields !== void 0) callArgs.fields = flags.fields;
|
|
82
|
+
if (flags.name !== void 0) callArgs.name = flags.name;
|
|
83
|
+
if (flags.description !== void 0) callArgs.description = flags.description;
|
|
84
|
+
if (flags.state !== void 0) callArgs.state = flags.state;
|
|
85
|
+
if (flags.lead !== void 0) callArgs.lead = flags.lead;
|
|
86
|
+
if (flags["start-date"] !== void 0) callArgs.startDate = flags["start-date"];
|
|
87
|
+
if (flags["target-date"] !== void 0) callArgs.targetDate = flags["target-date"];
|
|
88
|
+
if (flags.quiet !== void 0) callArgs.quiet = flags.quiet;
|
|
89
|
+
if (flags.noMeta !== void 0) callArgs.noMeta = flags.noMeta;
|
|
90
|
+
if (flags.retry !== void 0) callArgs.retry = flags.retry;
|
|
91
|
+
const out = await runProjectUpdate(callArgs);
|
|
92
|
+
if (!flags.json) process.stdout.write(out.stdout);
|
|
93
|
+
if (out.stderr) process.stderr.write(out.stderr);
|
|
94
|
+
if (out.exitCode !== 0) process.exitCode = out.exitCode;
|
|
95
|
+
return JSON.parse(out.stdout);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
//#endregion
|
|
99
|
+
export { ProjectUpdate as default, runProjectUpdate };
|