@cotal-ai/linear 0.90.1 → 0.92.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/dist/account.d.ts CHANGED
@@ -19,6 +19,8 @@ export declare function storedTokenPath(name: string): string;
19
19
  export declare function assertPrivateFile(path: string): void;
20
20
  export declare function saveAccount(account: LinearAccount, token?: string): void;
21
21
  export declare function loadAccount(name: string): LinearAccount;
22
+ /** Whether a {@link loadAccount} failure means no record exists under that name. */
23
+ export declare function accountMissing(error: unknown): boolean;
22
24
  /** Read the bearer fresh each time, so a rotated token file is picked up without a restart. */
23
25
  export declare function readAccountToken(account: Extract<LinearAccount, {
24
26
  auth: "token";
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,CAAC,yDAAyD;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9H;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAItD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAOD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;wGAEwG;AACxG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAaxE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAavD;AAED,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,CAK3F"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC,CAAC,yDAAyD;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC9H;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAItD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAOD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGpD;AAED;;wGAEwG;AACxG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAaxE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAavD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEtD;AAED,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GAAG,MAAM,CAK3F"}
package/dist/account.js CHANGED
@@ -71,7 +71,7 @@ export function loadAccount(name) {
71
71
  raw = JSON.parse(readFileSync(path, "utf8"));
72
72
  }
73
73
  catch (e) {
74
- throw new Error(`no Linear account "${name}" (${path}): ${e.message}. Add one with \`cotal linear account add\``);
74
+ throw new Error(`no Linear account "${name}" (${path}): ${e.message}. Add one with \`cotal linear account add\``, { cause: e });
75
75
  }
76
76
  const a = raw;
77
77
  if (a.name !== name || !isLinearMode(a.mode))
@@ -82,6 +82,10 @@ export function loadAccount(name) {
82
82
  return { name, mode: a.mode, auth: "oauth" };
83
83
  throw new Error(`${path} is not a valid Linear account record`);
84
84
  }
85
+ /** Whether a {@link loadAccount} failure means no record exists under that name. */
86
+ export function accountMissing(error) {
87
+ return error instanceof Error && error.cause?.code === "ENOENT";
88
+ }
85
89
  /** Read the bearer fresh each time, so a rotated token file is picked up without a restart. */
86
90
  export function readAccountToken(account) {
87
91
  assertPrivateFile(account.tokenFile);
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -1,4 +1,80 @@
1
1
  import { type ParsedArgs } from "@cotal-ai/core";
2
- export declare const USAGE = "cotal linear account add <name> --mode <write|readonly> (--token-stdin | --token-file <path>)\ncotal linear account login <name> --mode <write|readonly>\ncotal linear account show <name>\ncotal linear inventory <account> [--json]\ncotal linear call <account> <tool> [--args <json>] [--inventory <digest>] [--timeout <ms>]\ncotal linear resource <account> <uri> [--inventory <digest>] [--timeout <ms>]\ncotal linear prompt <account> <name> [--args <json>] [--inventory <digest>] [--timeout <ms>]\ncotal linear serve <account> --endpoint <reverse-dns-name> [--space <s>] [--server <url>]\ncotal linear caller <name> --endpoint <reverse-dns-name> --out <path> [--channels <a,b>] [--expires-in <s>] [--space <s>] [--server <url>]";
2
+ export declare const USAGE = "cotal linear account add <name> --mode <write|readonly> (--token-stdin | --token-file <path>)\ncotal linear account login <name> --mode <write|readonly>\ncotal linear account show <name>\ncotal linear inventory <account> [--json]\ncotal linear call <account> <tool> [--args <json>] [--inventory <digest>] [--timeout <ms>]\ncotal linear resource <account> <uri> [--inventory <digest>] [--timeout <ms>]\ncotal linear prompt <account> <name> [--args <json>] [--inventory <digest>] [--timeout <ms>]\ncotal linear serve <account> --endpoint <reverse-dns-name> [--space <s>] [--server <url>]\ncotal linear caller <name> --endpoint <reverse-dns-name> --out <path> [--channels <a,b>] [--expires-in <s>] [--space <s>] [--server <url>] [--json|--plain]";
3
+ export declare const linearForms: readonly [{
4
+ readonly path: readonly ["account", "add"];
5
+ readonly operands: 1;
6
+ readonly flags: readonly ["mode", "token-stdin", "token-file", "json", "plain"];
7
+ readonly outputs: readonly ["json", "plain"];
8
+ readonly summary: "save an explicit token-file or piped-token account";
9
+ readonly reads: false;
10
+ }, {
11
+ readonly path: readonly ["account", "login"];
12
+ readonly operands: 1;
13
+ readonly flags: readonly ["mode", "plain"];
14
+ readonly outputs: readonly ["plain"];
15
+ readonly summary: "run the native interactive Linear OAuth flow";
16
+ readonly reads: false;
17
+ }, {
18
+ readonly path: readonly ["account", "show"];
19
+ readonly operands: 1;
20
+ readonly flags: readonly ["json", "plain"];
21
+ readonly outputs: readonly ["json", "plain"];
22
+ readonly summary: "read recorded account metadata without credential contents";
23
+ readonly reads: true;
24
+ }, {
25
+ readonly path: readonly ["inventory"];
26
+ readonly operands: 1;
27
+ readonly flags: readonly ["json", "plain"];
28
+ readonly outputs: readonly ["json", "plain"];
29
+ readonly summary: "read the complete bounded native MCP inventory";
30
+ readonly reads: true;
31
+ }, {
32
+ readonly path: readonly ["call"];
33
+ readonly operands: 2;
34
+ readonly flags: readonly ["args", "inventory", "timeout", "json", "plain"];
35
+ readonly outputs: readonly ["json", "plain"];
36
+ readonly summary: "send one native tool request without replay";
37
+ readonly reads: false;
38
+ }, {
39
+ readonly path: readonly ["resource"];
40
+ readonly operands: 2;
41
+ readonly flags: readonly ["inventory", "timeout", "json", "plain"];
42
+ readonly outputs: readonly ["json", "plain"];
43
+ readonly summary: "read one native MCP resource without replay";
44
+ readonly reads: true;
45
+ }, {
46
+ readonly path: readonly ["prompt"];
47
+ readonly operands: 2;
48
+ readonly flags: readonly ["args", "inventory", "timeout", "json", "plain"];
49
+ readonly outputs: readonly ["json", "plain"];
50
+ readonly summary: "request one native MCP prompt without replay";
51
+ readonly reads: true;
52
+ }, {
53
+ readonly path: readonly ["serve"];
54
+ readonly operands: 1;
55
+ readonly flags: readonly ["endpoint", "space", "server"];
56
+ readonly outputs: readonly [];
57
+ readonly summary: "legacy native foreground service; independent lifecycle uses the Linear service preset";
58
+ readonly reads: false;
59
+ }, {
60
+ readonly path: readonly ["caller"];
61
+ readonly operands: 1;
62
+ readonly flags: readonly ["endpoint", "out", "channels", "expires-in", "space", "server", "json", "plain"];
63
+ readonly outputs: readonly ["json", "plain"];
64
+ readonly summary: "write a private native static caller without changing issuance authority";
65
+ readonly reads: false;
66
+ }];
67
+ /** Pure grammar preflight. No account, token, OAuth state, connection or handler is opened. */
68
+ export declare function validateLinearArguments(args: ParsedArgs): void;
69
+ /** The recorded account metadata, read without credential contents. An absent record is its own
70
+ * refusal with the route that creates one. */
71
+ export declare function accountForRead(name: string): import("./account.js").LinearAccount;
72
+ export interface LinearServeLifecycle {
73
+ readonly root: string;
74
+ readonly onInitialized: () => void | Promise<void>;
75
+ }
76
+ /** Register and serve until SIGINT/SIGTERM, renewing the serve credential at 75% of its life.
77
+ * The embedding callback observes initialization, not a current endpoint response or cleanup. */
78
+ export declare function serveLinearAccount(account: string, endpoint: string, v: Record<string, unknown>, lifecycle?: LinearServeLifecycle): Promise<void>;
3
79
  export declare function linear(args: ParsedArgs): Promise<void>;
4
80
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAQA,OAAO,EAA6B,KAAK,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AAQ5F,eAAO,MAAM,KAAK,0tBAQyH,CAAC;AA+I5I,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF5D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuD,KAAK,UAAU,EAAkB,MAAM,gBAAgB,CAAC;AAStH,eAAO,MAAM,KAAK,2uBAQ0I,CAAC;AAE7J,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUd,CAAC;AAEX,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAgC9D;AAED;+CAC+C;AAC/C,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,wCAM1C;AAmFD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;kGACkG;AAClG,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DvJ;AAkCD,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF5D"}
package/dist/cli.js CHANGED
@@ -1,18 +1,14 @@
1
- /**
2
- * `cotal linear …`: operator commands over {@link LinearUpstream}. Every reply is printed as JSON so
3
- * the upstream's content, `structuredContent` and `isError` reach the reader unchanged; what the
4
- * server sent is untrusted data and is never interpreted here. Exit status: 0 for an MCP result
5
- * (including a tool result with `isError: true`), 2 for a refusal before dispatch, 3 for a protocol
6
- * error or a failure after dispatch.
7
- */
8
- import { resolve } from "node:path";
9
- import { writeSecretFileCreateOnly } from "@cotal-ai/core";
10
- import { getSpaceAuth, hasUserAuthState, resolveMeshTarget, workspaceSecretStore } from "@cotal-ai/workspace";
11
- import { assertAccountName, loadAccount, saveAccount, storedTokenPath } from "./account.js";
1
+ /** Operator frontend over the native Linear client. No request or authority is substituted. */
2
+ import { lstatSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
+ import { acquireLock, credsClaims, writeSecretFileCreateOnly } from "@cotal-ai/core";
5
+ import { CommandFailure, recordOperationSpace, assertExternalCredentialExport, getSpaceAuth, hasUserAuthState, inputDisabledByFlag, isCommandFailure, presentationOf, protectedCredentialReference, protectedLocalDirectory, readLocalRecordSource, resolveMeshTarget, resolveNativeServiceTarget, workspaceSecretStore, writeResult } from "@cotal-ai/workspace";
6
+ import { accountMissing, assertAccountName, loadAccount, saveAccount, storedTokenPath } from "./account.js";
12
7
  import { loginAccount } from "./oauth.js";
13
8
  import { isLinearMode } from "./origin.js";
14
- import { LinearUpstream } from "./upstream.js";
15
- import { provisionLinearCaller, registerLinearEndpoint, renewalDelayMs, runLinearEndpoint } from "./serve.js";
9
+ import { DEFAULT_LIMITS, LinearUpstream } from "./upstream.js";
10
+ import { emitInventory, emitUpstream } from "./presentation.js";
11
+ import { assertLinearEndpointName, provisionLinearCaller, registerLinearEndpoint, renewalDelayMs, runLinearEndpoint } from "./serve.js";
16
12
  export const USAGE = `cotal linear account add <name> --mode <write|readonly> (--token-stdin | --token-file <path>)
17
13
  cotal linear account login <name> --mode <write|readonly>
18
14
  cotal linear account show <name>
@@ -21,18 +17,110 @@ cotal linear call <account> <tool> [--args <json>] [--inventory <digest>] [--tim
21
17
  cotal linear resource <account> <uri> [--inventory <digest>] [--timeout <ms>]
22
18
  cotal linear prompt <account> <name> [--args <json>] [--inventory <digest>] [--timeout <ms>]
23
19
  cotal linear serve <account> --endpoint <reverse-dns-name> [--space <s>] [--server <url>]
24
- cotal linear caller <name> --endpoint <reverse-dns-name> --out <path> [--channels <a,b>] [--expires-in <s>] [--space <s>] [--server <url>]`;
20
+ cotal linear caller <name> --endpoint <reverse-dns-name> --out <path> [--channels <a,b>] [--expires-in <s>] [--space <s>] [--server <url>] [--json|--plain]`;
21
+ export const linearForms = [
22
+ { path: ["account", "add"], operands: 1, flags: ["mode", "token-stdin", "token-file", "json", "plain"], outputs: ["json", "plain"], summary: "save an explicit token-file or piped-token account", reads: false },
23
+ { path: ["account", "login"], operands: 1, flags: ["mode", "plain"], outputs: ["plain"], summary: "run the native interactive Linear OAuth flow", reads: false },
24
+ { path: ["account", "show"], operands: 1, flags: ["json", "plain"], outputs: ["json", "plain"], summary: "read recorded account metadata without credential contents", reads: true },
25
+ { path: ["inventory"], operands: 1, flags: ["json", "plain"], outputs: ["json", "plain"], summary: "read the complete bounded native MCP inventory", reads: true },
26
+ { path: ["call"], operands: 2, flags: ["args", "inventory", "timeout", "json", "plain"], outputs: ["json", "plain"], summary: "send one native tool request without replay", reads: false },
27
+ { path: ["resource"], operands: 2, flags: ["inventory", "timeout", "json", "plain"], outputs: ["json", "plain"], summary: "read one native MCP resource without replay", reads: true },
28
+ { path: ["prompt"], operands: 2, flags: ["args", "inventory", "timeout", "json", "plain"], outputs: ["json", "plain"], summary: "request one native MCP prompt without replay", reads: true },
29
+ { path: ["serve"], operands: 1, flags: ["endpoint", "space", "server"], outputs: [], summary: "legacy native foreground service; independent lifecycle uses the Linear service preset", reads: false },
30
+ { path: ["caller"], operands: 1, flags: ["endpoint", "out", "channels", "expires-in", "space", "server", "json", "plain"], outputs: ["json", "plain"], summary: "write a private native static caller without changing issuance authority", reads: false },
31
+ ];
32
+ /** Pure grammar preflight. No account, token, OAuth state, connection or handler is opened. */
33
+ export function validateLinearArguments(args) {
34
+ presentationOf(args.values);
35
+ if (!args.positionals.length || args.positionals.length === 1 && args.positionals[0] === "account") {
36
+ if (Object.keys(args.values).some((name) => !["json", "plain"].includes(name)))
37
+ throw new CommandFailure("refused", "USAGE_INVALID", "choose a Linear operation before its options");
38
+ return;
39
+ }
40
+ const form = linearForms.find((row) => row.path.every((word, index) => args.positionals[index] === word));
41
+ if (!form || args.positionals.length !== form.path.length + form.operands)
42
+ throw new CommandFailure("refused", "USAGE_INVALID", "choose one complete declared Linear operation and its required operands");
43
+ if (Object.keys(args.values).some((name) => !form.flags.includes(name)))
44
+ throw new CommandFailure("refused", "USAGE_INVALID", "a supplied flag does not belong to this Linear operation; no account or request was opened");
45
+ for (const operand of args.positionals.slice(form.path.length))
46
+ if (!operand || operand.length > 8192 || /[\u0000-\u001f\u007f]/u.test(operand))
47
+ throw new CommandFailure("refused", "USAGE_INVALID", "Linear operands must be bounded nonempty text without terminal controls");
48
+ if (form.path[0] !== "caller") {
49
+ try {
50
+ assertAccountName(args.positionals[form.path.length]);
51
+ }
52
+ catch {
53
+ throw new CommandFailure("refused", "USAGE_INVALID", "the Linear account name must use 1 to 32 lowercase letters, digits or dashes and begin with a letter or digit");
54
+ }
55
+ }
56
+ if (form.path[0] === "account" && ["add", "login"].includes(args.positionals[1])) {
57
+ if (!isLinearMode(args.values.mode))
58
+ throw new CommandFailure("refused", "USAGE_INVALID", "choose --mode write or readonly explicitly");
59
+ if (args.positionals[1] === "add" && (args.values["token-stdin"] === true) === (args.values["token-file"] !== undefined))
60
+ throw new CommandFailure("refused", "USAGE_INVALID", "account add needs exactly one of --token-stdin or --token-file");
61
+ if (args.positionals[1] === "login" && (inputDisabledByFlag() || process.env.COTAL_NO_PROMPT === "1"))
62
+ throw new CommandFailure("refused", "USAGE_INVALID", "Linear OAuth login needs human authorization and cannot run with input disabled");
63
+ }
64
+ if (args.values.args !== undefined) {
65
+ const value = jsonArgs(args.values.args);
66
+ if (form.path[0] === "prompt" && value && Object.values(value).some((item) => typeof item !== "string"))
67
+ throw new CommandFailure("refused", "USAGE_INVALID", "prompt argument values must be strings; no argument contents were printed");
68
+ }
69
+ timeout(args.values.timeout);
70
+ if (form.path[0] === "serve" || form.path[0] === "caller") {
71
+ try {
72
+ if (typeof args.values.endpoint !== "string")
73
+ throw new Error();
74
+ assertLinearEndpointName(args.values.endpoint);
75
+ }
76
+ catch {
77
+ throw new CommandFailure("refused", "USAGE_INVALID", "choose --endpoint with the full native reverse-DNS Linear endpoint name");
78
+ }
79
+ if (form.path[0] === "caller") {
80
+ if (typeof args.values.out !== "string" || !args.values.out.trim() || /[\u0000-\u001f\u007f]/u.test(args.values.out))
81
+ throw new CommandFailure("refused", "USAGE_INVALID", "native Linear caller issuance requires --out with a private output path without terminal controls");
82
+ if (args.values["expires-in"] !== undefined && (!/^[0-9]+$/.test(String(args.values["expires-in"])) || !Number.isSafeInteger(Number(args.values["expires-in"])) || Number(args.values["expires-in"]) <= 0))
83
+ throw new CommandFailure("refused", "USAGE_INVALID", "--expires-in must be a positive integer of native seconds");
84
+ }
85
+ }
86
+ }
87
+ /** The recorded account metadata, read without credential contents. An absent record is its own
88
+ * refusal with the route that creates one. */
89
+ export function accountForRead(name) {
90
+ try {
91
+ return loadAccount(name);
92
+ }
93
+ catch (error) {
94
+ if (accountMissing(error))
95
+ throw new CommandFailure("refused", "TARGET_NOT_FOUND", "no Linear account with this name is recorded; nothing was opened or sent", { target: { account: name }, remedy: `record it first with cotal linear account add ${name} --mode <write|readonly> --token-file <path>, or cotal linear account login ${name} --mode <write|readonly>` });
96
+ throw new CommandFailure("refused", "DEPENDENCY_UNAVAILABLE", "the selected Linear account metadata could not be read; no token or account-file contents were printed", { target: { account: name } });
97
+ }
98
+ }
99
+ function emitAccount(args, account, saved) {
100
+ writeResult(presentationOf(args.values), { command: "linear", target: { account: account.name }, result: { kind: saved ? "linear-account-saved" : "linear-account-metadata", name: account.name, mode: account.mode, auth: account.auth, credentialReference: account.auth === "token" ? account.tokenFile : null, nativeSave: saved ? "acknowledged" : "not-requested", credentialContentsReadForReport: false, upstreamChecked: false } }, (row) => ({ sections: [{ title: saved ? "Linear account save acknowledged" : "Recorded Linear account", blocks: [{ kind: "fields", rows: [["Account", row.name], ["Mode", row.mode], ["Authentication", row.auth], ["Credential reference", row.credentialReference ?? "private native OAuth state"], ["Upstream", "not checked"]] }, { kind: "lines", lines: ["This is recorded configuration, not proof of current upstream access. Credential contents are not printed. Native OAuth or token persistence retains its own authority and lifetime rules."] }] }] }));
101
+ }
25
102
  function fail(msg) {
26
103
  console.error(msg);
27
104
  process.exit(1);
28
105
  }
29
106
  async function readStdin() {
30
107
  if (process.stdin.isTTY)
31
- fail("--token-stdin reads the token from a pipe, for example `cotal linear account add ro --mode readonly --token-stdin < token.txt`");
108
+ throw new CommandFailure("refused", "USAGE_INVALID", "--token-stdin requires a pipe; no secret should be typed into argv");
32
109
  const chunks = [];
33
- for await (const c of process.stdin)
34
- chunks.push(c);
35
- return Buffer.concat(chunks).toString("utf8");
110
+ let size = 0;
111
+ for await (const chunk of process.stdin) {
112
+ const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
113
+ size += bytes.length;
114
+ if (size > 1024 * 1024)
115
+ throw new CommandFailure("refused", "USAGE_INVALID", "the piped token exceeds 1 MiB; nothing was saved and no bytes were printed");
116
+ chunks.push(bytes);
117
+ }
118
+ try {
119
+ return new TextDecoder("utf-8", { fatal: true }).decode(Buffer.concat(chunks));
120
+ }
121
+ catch {
122
+ throw new CommandFailure("refused", "USAGE_INVALID", "the piped token is not UTF-8; nothing was saved and no bytes were printed");
123
+ }
36
124
  }
37
125
  function jsonArgs(raw) {
38
126
  if (raw === undefined)
@@ -41,28 +129,24 @@ function jsonArgs(raw) {
41
129
  try {
42
130
  v = JSON.parse(String(raw));
43
131
  }
44
- catch (e) {
45
- fail(`--args is not JSON: ${e.message}`);
132
+ catch {
133
+ throw new CommandFailure("refused", "USAGE_INVALID", "--args must contain valid JSON; argument values were not printed");
46
134
  }
47
135
  if (!v || typeof v !== "object" || Array.isArray(v))
48
- fail("--args must be a JSON object");
136
+ throw new CommandFailure("refused", "USAGE_INVALID", "--args must be a JSON object");
49
137
  return v;
50
138
  }
51
139
  function timeout(raw) {
52
140
  if (raw === undefined)
53
141
  return undefined;
54
142
  const n = Number(raw);
55
- if (!Number.isSafeInteger(n) || n <= 0)
56
- fail("--timeout must be a positive integer of milliseconds");
143
+ if (!Number.isSafeInteger(n) || n <= 0 || n > DEFAULT_LIMITS.maxTimeoutMs)
144
+ throw new CommandFailure("refused", "USAGE_INVALID", `--timeout must be a positive integer of milliseconds, at most ${DEFAULT_LIMITS.maxTimeoutMs}`);
57
145
  return n;
58
146
  }
59
- function emit(reply) {
60
- console.log(JSON.stringify(reply, null, 2));
61
- process.exitCode = reply.kind === "result" ? 0 : reply.kind === "refused" ? 2 : 3;
62
- }
63
147
  /** Run one request; SIGINT cancels it (reported as `unknown` once dispatched) and closes the session. */
64
148
  async function withUpstream(account, fn) {
65
- const upstream = new LinearUpstream(loadAccount(account));
149
+ const upstream = new LinearUpstream(accountForRead(account));
66
150
  const ctl = new AbortController();
67
151
  const onSignal = () => ctl.abort();
68
152
  process.once("SIGINT", onSignal);
@@ -76,31 +160,57 @@ async function withUpstream(account, fn) {
76
160
  await upstream.close();
77
161
  }
78
162
  }
163
+ async function forward(args, account, operation, run) {
164
+ let reply;
165
+ try {
166
+ reply = await withUpstream(account, run);
167
+ }
168
+ catch (error) {
169
+ if (isCommandFailure(error))
170
+ throw error;
171
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "the Linear request/session did not return a confirmed native outcome; the request was not retried", { target: { account, operation } });
172
+ }
173
+ emitUpstream(args, account, operation, reply);
174
+ }
79
175
  /** The static-auth mesh and the operator's own space authority, or a loud refusal. A per-user-auth
80
176
  * mesh issues endpoint credentials through its remote auth service, which this package has no
81
177
  * client for, so it is refused rather than signed locally. */
82
- async function staticAuthority(v) {
83
- const target = resolveMeshTarget(process.cwd(), { space: v.space, server: v.server });
84
- if (target.mode === "user" || hasUserAuthState(target.root, target.space))
85
- fail(`"${target.space}" is a per-user-auth mesh: its endpoint credentials come from the remote auth service, which \`cotal linear\` does not support yet. Nothing was registered or minted.`);
178
+ async function staticAuthority(v, root) {
179
+ const target = resolveMeshTarget(root ?? process.cwd(), { space: v.space, server: v.server, readOnly: true });
180
+ recordOperationSpace(target.space);
181
+ if (root)
182
+ resolveNativeServiceTarget(root, target.space, v.server);
183
+ if (target.mode === "user" || hasUserAuthState(target.root, target.space, { readOnly: true }))
184
+ throw new CommandFailure("refused", "UNSUPPORTED", "Linear's native local issuer does not support per-user-auth spaces; no remote or broader caller was substituted", { target: { space: target.space } });
86
185
  if (target.mode !== "auth")
87
- fail(`"${target.space}" is an open mesh: there is no credential system to scope a Linear endpoint or its callers. Use a static-auth mesh.`);
88
- const auth = await getSpaceAuth(workspaceSecretStore(target.root), target.space);
186
+ throw new CommandFailure("refused", "UNSUPPORTED", "an open space has no static credential system for this native Linear action", { target: { space: target.space } });
187
+ let auth;
188
+ try {
189
+ auth = await getSpaceAuth(workspaceSecretStore(target.root), target.space);
190
+ }
191
+ catch {
192
+ throw new CommandFailure("refused", "AUTH_REQUIRED", "the selected root's space authority could not be read; no native Linear authority action was submitted", { target: { space: target.space } });
193
+ }
89
194
  if (!auth)
90
- fail(`no space authority for "${target.space}" under ${target.root}; run this where the mesh was set up`);
195
+ throw new CommandFailure("refused", "AUTH_REQUIRED", "the selected root has no native static space authority; no other root was tried", { target: { space: target.space } });
91
196
  return { target, auth };
92
197
  }
93
- /** Register and serve until SIGINT/SIGTERM, renewing the serve credential at 75% of its life. */
94
- async function serve(account, endpoint, v) {
95
- const { target, auth } = await staticAuthority(v);
96
- const upstream = new LinearUpstream(loadAccount(account));
198
+ /** Register and serve until SIGINT/SIGTERM, renewing the serve credential at 75% of its life.
199
+ * The embedding callback observes initialization, not a current endpoint response or cleanup. */
200
+ export async function serveLinearAccount(account, endpoint, v, lifecycle) {
201
+ const { target, auth } = await staticAuthority(v, lifecycle?.root);
202
+ const upstream = new LinearUpstream(accountForRead(account));
97
203
  // Read the inventory first, so a broken account never becomes a registered endpoint.
98
204
  const inv = await upstream.inventory().catch(async (e) => {
99
205
  await upstream.close();
206
+ if (lifecycle)
207
+ throw new CommandFailure("refused", "DEPENDENCY_UNAVAILABLE", "the selected native Linear account did not complete inventory discovery; no service registration was requested");
100
208
  fail(`the Linear account "${account}" did not answer discovery: ${e.message}`);
101
209
  });
102
210
  const reg = await registerLinearEndpoint({ auth, servers: target.server, space: target.space, tls: target.tlsRequired, endpoint }).catch(async (e) => {
103
211
  await upstream.close();
212
+ if (lifecycle)
213
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "the native Linear registration did not return a confirmed result; no new registration was retried");
104
214
  fail(`registering ${endpoint} failed: ${e.message}`);
105
215
  });
106
216
  // The record is READY from registration on, so a start that fails after it must take the record
@@ -112,16 +222,19 @@ async function serve(account, endpoint, v) {
112
222
  new Promise((r) => setTimeout(() => r("its deregistration did not complete within 10 seconds and may still be pending; the record may still advertise this instance"), 10_000).unref()),
113
223
  ]);
114
224
  await upstream.close();
225
+ if (lifecycle)
226
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "the native Linear endpoint did not initialize; its original deregistration attempt was bounded and no registration was retried");
115
227
  fail(`${endpoint} did not start serving: ${e.message}; ${removal}`);
116
228
  });
117
- console.log(`serving ${handle.endpoint} (instance ${handle.instanceId}, epoch ${handle.epoch}) for Linear account ${account} (${inv.mode}, ${inv.tools.length} tools, inventory ${inv.digest})`);
229
+ if (!lifecycle)
230
+ console.log(`serving ${handle.endpoint} (instance ${handle.instanceId}, epoch ${handle.epoch}) for Linear account ${account} (${inv.mode}, ${inv.tools.length} tools, inventory ${inv.digest})`);
118
231
  let timer;
119
232
  const schedule = (ms) => {
120
233
  if (ms === undefined)
121
234
  return;
122
235
  timer = setTimeout(() => {
123
236
  reg.renew().then((creds) => schedule(renewalDelayMs(creds)), (e) => {
124
- console.error(`serve credential renewal failed (${e.message}); retrying in 30s`);
237
+ console.error(lifecycle ? "native Linear serve credential renewal failed; retaining its existing renewal policy" : `serve credential renewal failed (${e.message}); retrying in 30s`);
125
238
  schedule(30_000);
126
239
  });
127
240
  }, ms);
@@ -135,38 +248,74 @@ async function serve(account, endpoint, v) {
135
248
  if (timer)
136
249
  clearTimeout(timer);
137
250
  await handle.stop(10_000);
138
- await Promise.race([reg.deregister(), new Promise((r) => setTimeout(r, 10_000).unref())]).catch((e) => console.error(`deregistration failed (${e.message}); the record stays until the instance is registered again`));
251
+ await Promise.race([reg.deregister(), new Promise((r) => setTimeout(r, 10_000).unref())]).catch((e) => console.error(lifecycle ? "native Linear deregistration did not confirm completion; inspect the original registration" : `deregistration failed (${e.message}); the record stays until the instance is registered again`));
139
252
  process.exit(code);
140
253
  };
141
254
  process.once("SIGINT", () => void stop(0));
142
255
  process.once("SIGTERM", () => void stop(0));
256
+ if (lifecycle) {
257
+ try {
258
+ await lifecycle.onInitialized();
259
+ }
260
+ catch {
261
+ await stop(1);
262
+ return;
263
+ }
264
+ }
143
265
  const err = await handle.closed;
144
266
  if (!stopping) {
145
- console.error(`the serve connection closed${err ? `: ${err.message}` : ""}`);
267
+ console.error(lifecycle ? "the native Linear serve connection closed; no replacement was started" : `the serve connection closed${err ? `: ${err.message}` : ""}`);
146
268
  await stop(1);
147
269
  }
148
270
  }
149
- async function caller(name, endpoint, v) {
150
- if (v.out === undefined)
151
- fail("--out <path> is required: the credential is written there 0600 and never printed");
152
- const { target, auth } = await staticAuthority(v);
153
- const channels = v.channels === undefined ? [] : String(v.channels).split(",").map((c) => c.trim()).filter(Boolean);
154
- const expires = v["expires-in"] === undefined ? undefined : Number(v["expires-in"]);
155
- if (expires !== undefined && (!Number.isSafeInteger(expires) || expires <= 0))
156
- fail("--expires-in must be a positive integer of seconds");
157
- const out = resolve(String(v.out));
158
- const minted = await provisionLinearCaller(auth, { servers: target.server, space: target.space, tls: target.tlsRequired }, endpoint, {
159
- channels, ...(expires !== undefined ? { expiresInSeconds: expires } : {}),
160
- });
161
- writeSecretFileCreateOnly(out, minted.creds);
162
- console.log(`minted Linear caller "${name}" for ${endpoint} on ${target.space}: identity ${minted.identity}`);
163
- console.log(` credential ${out} (0600)`);
164
- console.log(` lifecycle ${minted.lifecycleUid}`);
165
- console.log(` launch a hand-driven seat with COTAL_SERVERS=${target.server} COTAL_SPACE=${target.space} COTAL_NAME=${name} COTAL_CREDS=${out} COTAL_LIFECYCLE_UID=${minted.lifecycleUid}`);
166
- console.log(" a Claude Code or jcode seat also needs COTAL_CONTROL_SOCKET=<socket path> and COTAL_CONTROL_TOKEN=<random secret>");
271
+ async function caller(args, name, endpoint) {
272
+ const v = args.values;
273
+ const { target: mesh, auth } = await staticAuthority(v);
274
+ const out = resolve(String(v.out)), target = { space: mesh.space, name, endpoint, path: out };
275
+ assertExternalCredentialExport(out, [mesh.root]);
276
+ protectedLocalDirectory(dirname(out));
277
+ const held = acquireLock(`${out}.mint.lock`, { label: "Linear caller output", waitMs: 0, onTimeout: () => new CommandFailure("refused", "CONFLICT", "another writer holds the caller output", { target }) });
278
+ let submitted = false;
279
+ const changed = [];
280
+ try {
281
+ if (lstatSync(out, { throwIfNoEntry: false }))
282
+ throw new CommandFailure("refused", "CONFLICT", "the selected caller output already exists; it was not replaced and no new caller was issued", { target });
283
+ const channels = v.channels === undefined ? [] : String(v.channels).split(",").map((channel) => channel.trim()).filter(Boolean);
284
+ submitted = true;
285
+ const minted = await provisionLinearCaller(auth, { servers: mesh.server, space: mesh.space, tls: mesh.tlsRequired }, endpoint, { channels, ...(v["expires-in"] !== undefined ? { expiresInSeconds: Number(v["expires-in"]) } : {}) });
286
+ changed.push({ kind: "native-caller-footprint", identity: minted.identity, lifecycleUid: minted.lifecycleUid, acknowledged: true });
287
+ protectedLocalDirectory(dirname(out));
288
+ writeSecretFileCreateOnly(out, minted.creds);
289
+ changed.push({ kind: "private-caller-file", path: out, acknowledged: true });
290
+ protectedCredentialReference(out);
291
+ const current = readLocalRecordSource(out, 1024 * 1024, true);
292
+ if (!current?.equals(Buffer.from(minted.creds, "utf8")))
293
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "the native caller file publication was acknowledged but its current private bytes could not be confirmed; issuance was not retried", { target, changed });
294
+ const claims = credsClaims(minted.creds);
295
+ const result = { kind: "linear-caller-written", name, space: mesh.space, endpoint, identity: minted.identity, lifecycleUid: minted.lifecycleUid, output: out, channels, expiresAt: claims.exp ?? null, nativeProvisioning: "acknowledged", secretOnStdout: false, seatStarted: false, managedSpawnSupport: false, changed };
296
+ writeResult(presentationOf(v), { command: "linear", target, result }, (row) => ({ sections: [{ title: "Private Linear caller written", blocks: [{ kind: "fields", rows: [["Label", row.name], ["Space", row.space], ["Endpoint", row.endpoint], ["Identity", row.identity], ["Lifecycle", row.lifecycleUid], ["Private file", row.output], ["Expiry", row.expiresAt === null ? "not reported" : `${row.expiresAt} native Unix seconds`], ["Provisioning", row.nativeProvisioning], ["Seat", "not started"]] }, { kind: "lines", lines: ["The existing native issuer created its standalone agent footprint and exact Linear command grants. It adds no spawn, run or admin capability. Provisioning is not presence or completed work. Managed static spawns still refuse endpoint capabilities; this is not a generic caller/launch adapter. No credential bytes or environment-export onboarding were printed."] }] }] }));
297
+ }
298
+ catch (error) {
299
+ if (!submitted && isCommandFailure(error))
300
+ throw error;
301
+ if (!submitted)
302
+ throw new CommandFailure("refused", "DEPENDENCY_UNAVAILABLE", "the selected private caller destination could not be prepared; no caller issuance was submitted", { target });
303
+ if (isCommandFailure(error) && error.outcome === "unknown")
304
+ throw error;
305
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "native caller provisioning or private publication did not confirm its final outcome; a caller footprint or output may exist. Issuance was not retried", { target, changed, remedy: "inspect this private output and any reported original identity/lifecycle before issuing another caller" });
306
+ }
307
+ finally {
308
+ held.release();
309
+ }
167
310
  }
168
311
  export async function linear(args) {
312
+ validateLinearArguments(args);
169
313
  const [sub, ...rest] = args.positionals;
314
+ if (sub === undefined || sub === "account" && rest.length === 0) {
315
+ const forms = sub === "account" ? linearForms.filter((form) => form.path[0] === "account") : linearForms;
316
+ writeResult(presentationOf(args.values), { command: "linear", target: sub === "account" ? { group: "account" } : null, result: { kind: "linear-commands", operations: forms.map((form) => ({ path: [...form.path], summary: form.summary })), upstreamChecked: false } }, (row) => ({ sections: [{ title: "Linear", blocks: [{ kind: "commands", items: row.operations.map((form) => ({ command: `cotal linear ${form.path.join(" ")}`, description: form.summary })) }, { kind: "lines", lines: ["No account was opened, token read or upstream request sent."] }] }] }));
317
+ return;
318
+ }
170
319
  const v = args.values;
171
320
  switch (sub) {
172
321
  case "account": {
@@ -175,15 +324,20 @@ export async function linear(args) {
175
324
  fail(USAGE);
176
325
  assertAccountName(name);
177
326
  if (action === "show") {
178
- console.log(JSON.stringify(loadAccount(name), null, 2));
327
+ emitAccount(args, accountForRead(name), false);
179
328
  return;
180
329
  }
181
330
  if (action === "login") {
182
331
  const mode = v.mode;
183
332
  if (!isLinearMode(mode))
184
333
  fail("--mode must be write or readonly");
185
- await loginAccount(name, mode);
186
- console.log(`saved Linear account ${name} (${mode}, oauth)`);
334
+ try {
335
+ await loginAccount(name, mode);
336
+ }
337
+ catch {
338
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "native Linear OAuth did not confirm its final local save; authorization or private state may have changed. Login was not retried", { target: { account: name } });
339
+ }
340
+ emitAccount(args, { name, mode, auth: "oauth" }, true);
187
341
  return;
188
342
  }
189
343
  if (action !== "add")
@@ -193,35 +347,31 @@ export async function linear(args) {
193
347
  fail("--mode must be write or readonly");
194
348
  if (Boolean(v["token-stdin"]) === (v["token-file"] !== undefined))
195
349
  fail("give exactly one of --token-stdin or --token-file");
196
- if (v["token-stdin"])
197
- saveAccount({ name, mode, auth: "token", tokenFile: storedTokenPath(name) }, await readStdin());
198
- else
199
- saveAccount({ name, mode, auth: "token", tokenFile: resolve(String(v["token-file"])) });
200
- console.log(`saved Linear account ${name} (${mode})`);
350
+ const account = { name, mode, auth: "token", tokenFile: v["token-stdin"] ? storedTokenPath(name) : resolve(String(v["token-file"])) };
351
+ const token = v["token-stdin"] ? await readStdin() : undefined;
352
+ try {
353
+ saveAccount(account, token);
354
+ }
355
+ catch {
356
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "the native Linear account save did not confirm completion; a private token or record may have changed. The save was not retried", { target: { account: name } });
357
+ }
358
+ emitAccount(args, account, true);
201
359
  return;
202
360
  }
203
361
  case "inventory": {
204
362
  const [account] = rest;
205
363
  if (!account)
206
364
  fail(USAGE);
207
- const inv = await withUpstream(account, (u) => u.inventory());
208
- if (v.json) {
209
- console.log(JSON.stringify(inv, null, 2));
210
- return;
365
+ let inventory;
366
+ try {
367
+ inventory = await withUpstream(account, (u, signal) => u.inventory({ signal }));
368
+ }
369
+ catch (error) {
370
+ if (isCommandFailure(error))
371
+ throw error;
372
+ throw new CommandFailure("refused", "DEPENDENCY_UNAVAILABLE", "the complete bounded Linear inventory was not obtained; no partial inventory was presented as complete", { target: { account } });
211
373
  }
212
- console.log(`endpoint ${inv.endpoint} (${inv.mode})`);
213
- console.log(`server ${inv.server.name ?? "?"} ${inv.server.version ?? ""}`.trimEnd());
214
- console.log(`digest ${inv.digest}`);
215
- console.log(`tools ${inv.tools.length}`);
216
- if (inv.resources)
217
- console.log(`resources ${inv.resources.length} (+${inv.resourceTemplates?.length ?? 0} templates)`);
218
- if (inv.prompts)
219
- console.log(`prompts ${inv.prompts.length}`);
220
- console.log(`discovery ${inv.pages} pages, ${inv.bytes} bytes`);
221
- if (inv.unsupported.length)
222
- console.log(`unsupported ${inv.unsupported.join(", ")}`);
223
- for (const t of inv.tools)
224
- console.log(` ${String(t.name)}`);
374
+ emitInventory(args, account, inventory);
225
375
  return;
226
376
  }
227
377
  case "call": {
@@ -229,14 +379,14 @@ export async function linear(args) {
229
379
  if (!account || !tool)
230
380
  fail(USAGE);
231
381
  const req = { name: tool, arguments: jsonArgs(v.args), inventoryDigest: v.inventory, timeoutMs: timeout(v.timeout) };
232
- emit(await withUpstream(account, (u, signal) => u.callTool({ ...req, signal })));
382
+ await forward(args, account, "call", (u, signal) => u.callTool({ ...req, signal }));
233
383
  return;
234
384
  }
235
385
  case "resource": {
236
386
  const [account, uri] = rest;
237
387
  if (!account || !uri)
238
388
  fail(USAGE);
239
- emit(await withUpstream(account, (u, signal) => u.readResource({ uri, inventoryDigest: v.inventory, timeoutMs: timeout(v.timeout), signal })));
389
+ await forward(args, account, "resource", (u, signal) => u.readResource({ uri, inventoryDigest: v.inventory, timeoutMs: timeout(v.timeout), signal }));
240
390
  return;
241
391
  }
242
392
  case "prompt": {
@@ -246,21 +396,21 @@ export async function linear(args) {
246
396
  const a = jsonArgs(v.args);
247
397
  if (a && Object.values(a).some((x) => typeof x !== "string"))
248
398
  fail("prompt --args values must be strings");
249
- emit(await withUpstream(account, (u, signal) => u.getPrompt({ name, arguments: a, inventoryDigest: v.inventory, timeoutMs: timeout(v.timeout), signal })));
399
+ await forward(args, account, "prompt", (u, signal) => u.getPrompt({ name, arguments: a, inventoryDigest: v.inventory, timeoutMs: timeout(v.timeout), signal }));
250
400
  return;
251
401
  }
252
402
  case "serve": {
253
403
  const [account] = rest;
254
404
  if (!account || typeof v.endpoint !== "string")
255
405
  fail(USAGE);
256
- await serve(account, v.endpoint, v);
406
+ await serveLinearAccount(account, v.endpoint, v);
257
407
  return;
258
408
  }
259
409
  case "caller": {
260
410
  const [name] = rest;
261
411
  if (!name || typeof v.endpoint !== "string")
262
412
  fail(USAGE);
263
- await caller(name, v.endpoint, v);
413
+ await caller(args, name, v.endpoint);
264
414
  return;
265
415
  }
266
416
  default:
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import "./service-adapter.js";
1
2
  export { LinearUpstream, DEFAULT_LIMITS, type LinearInventory, type LinearLimits, type UpstreamReply } from "./upstream.js";
2
3
  export { LINEAR_MCP_ORIGIN, LINEAR_MCP_PATHS, linearMcpUrl, type LinearMode } from "./origin.js";
3
4
  export { loadAccount, type LinearAccount } from "./account.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChO,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AA6C9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChO,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
+ import "./service-adapter.js"; // self-registers the native Linear service preset and child
1
2
  import { registry } from "@cotal-ai/core";
2
- import { serverFlag, spaceFlag } from "@cotal-ai/workspace";
3
- import { linear, USAGE } from "./cli.js";
3
+ import { jsonFlag, plainFlag, serverFlag, spaceFlag } from "@cotal-ai/workspace";
4
+ import { linear, linearForms, validateLinearArguments, USAGE } from "./cli.js";
4
5
  /**
5
6
  * `@cotal-ai/linear`: the official Linear MCP server as a registered Cotal endpoint, plus the
6
7
  * operator commands that set it up, as an operator-installed CLI extension. `cotal ext add
@@ -15,11 +16,18 @@ const linearCommand = {
15
16
  usage: USAGE,
16
17
  positionals: "<subcommand> …",
17
18
  prepareMeshTarget: false,
19
+ reads: true,
20
+ outputs: ["json", "plain"],
21
+ subcommands: [
22
+ { name: "account", summary: "record an explicit account or read its metadata", reads: true, prepareMeshTarget: false, outputs: ["json", "plain"], flagNames: ["json", "plain"], subcommands: linearForms.filter((form) => form.path[0] === "account").map((form) => ({ name: form.path[1], summary: form.summary, flagNames: [...form.flags], outputs: [...form.outputs], ...(form.reads ? { reads: true } : {}), prepareMeshTarget: false })) },
23
+ ...linearForms.filter((form) => form.path.length === 1).map((form) => ({ name: form.path[0], summary: form.summary, flagNames: [...form.flags], outputs: [...form.outputs], ...(form.reads ? { reads: true } : {}), prepareMeshTarget: false })),
24
+ ],
25
+ validate: validateLinearArguments,
18
26
  flags: [
19
27
  { name: "mode", type: "string", value: "<write|readonly>", description: "account add: which Linear MCP server the account uses" },
20
28
  { name: "token-stdin", type: "boolean", description: "account add: read the API key or OAuth token from stdin and store it 0600" },
21
29
  { name: "token-file", type: "string", value: "<path>", description: "account add: use an existing 0600 file holding the token" },
22
- { name: "json", type: "boolean", description: "inventory: print the full inventory" },
30
+ jsonFlag, plainFlag,
23
31
  { name: "args", type: "string", value: "<json>", description: "call/prompt: arguments as a JSON object" },
24
32
  { name: "inventory", type: "string", value: "<digest>", description: "refuse before dispatch unless the live inventory has this digest" },
25
33
  { name: "timeout", type: "string", value: "<ms>", description: "request deadline in milliseconds (default 30000, max 120000)" },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,aAAa,GAAY;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,cAAc;IACrB,OAAO,EAAE,0FAA0F;IACnG,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,gBAAgB;IAC7B,iBAAiB,EAAE,KAAK;IACxB,KAAK,EAAE;QACL,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,uDAAuD,EAAE;QACjI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,2EAA2E,EAAE;QAClI,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,0DAA0D,EAAE;QAChI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,qCAAqC,EAAE;QACrF,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,yCAAyC,EAAE;QACzG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,kEAAkE,EAAE;QACzI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,8DAA8D,EAAE;QAC/H,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,qEAAqE,EAAE;QACzI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;QAC/H,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,oDAAoD,EAAE;QACvH,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,wCAAwC,EAAE;QAC3G,SAAS;QACT,UAAU;KACX;IACD,GAAG,EAAE,MAAM;CACZ,CAAC;AACF,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,cAAc,EAA+D,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,WAAW,EAAsB,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChO,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,GAIlB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ParsedArgs } from "@cotal-ai/core";
2
+ import type { LinearInventory, UpstreamReply } from "./upstream.js";
3
+ /** The native MCP outcome remains separate from a tool's reported isError content. */
4
+ export declare function emitUpstream(args: ParsedArgs, account: string, operation: string, reply: UpstreamReply): void;
5
+ export declare function emitInventory(args: ParsedArgs, account: string, inventory: LinearInventory): void;
6
+ //# sourceMappingURL=presentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEpE,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAe7G;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAOjG"}
@@ -0,0 +1,27 @@
1
+ import { CommandFailure, presentationOf, writeResult } from "@cotal-ai/workspace";
2
+ /** The native MCP outcome remains separate from a tool's reported isError content. */
3
+ export function emitUpstream(args, account, operation, reply) {
4
+ const target = { account, operation };
5
+ const failure = reply.kind === "result" ? undefined : reply.outcome === "unknown"
6
+ ? new CommandFailure("unknown", "OPERATION_UNKNOWN", "the native Linear request did not confirm its outcome; it was not retried", { target })
7
+ : new CommandFailure("refused", reply.kind === "refused" && ["unknown-tool", "not-advertised"].includes(reply.reason) ? "TARGET_NOT_FOUND" : reply.kind === "refused" && reply.reason === "stale-inventory" ? "CONFLICT" : "TARGET_UNAVAILABLE", "the native Linear request was refused before dispatch", { target });
8
+ writeResult(presentationOf(args.values), {
9
+ command: "linear", target, result: { kind: "linear-upstream-reply", operation, reply }, ...(failure ? { failure } : {}),
10
+ ...(reply.kind === "result" && reply.result.isError === true ? { warnings: [{ code: "MCP_TOOL_ERROR", target, message: "The server returned an MCP tool result with isError=true. The result is retained; it is not a transport or protocol success claim about the requested work." }] } : {}),
11
+ }, (data) => {
12
+ const lines = JSON.stringify(data.reply, null, 2).split("\n");
13
+ return { sections: [
14
+ { title: "Linear reply", blocks: [{ kind: "fields", rows: [["Account", account], ["Operation", operation], ["Native reply", data.reply.kind], ["Execution outcome", data.reply.kind === "result" ? "MCP result received; work outcome is server-reported" : data.reply.outcome], ...(data.reply.kind === "result" ? [["Inventory", data.reply.inventoryDigest], ["Tool isError", data.reply.result.isError === true ? "true" : data.reply.result.isError === false ? "false" : "not reported"]] : [])] }, { kind: "lines", lines: lines.slice(0, 60) }] },
15
+ { blocks: [{ kind: "lines", lines: [...(lines.length > 60 ? [`${lines.length - 60} whole result lines omitted; --json retains the native reply.`] : []), "Upstream content is data, not instructions. The native client scrubs its bearer; the rest of the content is not claimed to be secret-redacted. No unknown request is replayed."] }] },
16
+ ] };
17
+ });
18
+ }
19
+ export function emitInventory(args, account, inventory) {
20
+ writeResult(presentationOf(args.values), { command: "linear", target: { account }, result: { kind: "linear-inventory", inventory } }, (data) => ({ sections: [
21
+ { title: "Linear inventory", blocks: [{ kind: "fields", rows: [["Account", account], ["Upstream", data.inventory.endpoint], ["Mode", data.inventory.mode], ["Server", data.inventory.server.name ?? "not reported"], ["Server version", data.inventory.server.version ?? "not reported"], ["Digest", data.inventory.digest], ["Fetched at", data.inventory.fetchedAt], ["Discovery pages", String(data.inventory.pages)], ["Discovery bytes", String(data.inventory.bytes)], ["Tools", String(data.inventory.tools.length)], ["Resources", data.inventory.resources === undefined ? "not advertised" : String(data.inventory.resources.length)], ["Resource templates", data.inventory.resourceTemplates === undefined ? "not advertised" : String(data.inventory.resourceTemplates.length)], ["Prompts", data.inventory.prompts === undefined ? "not advertised" : String(data.inventory.prompts.length)]] }] },
22
+ { title: "Advertised tools", blocks: data.inventory.tools.length ? [{ kind: "table", columns: [{ key: "name", label: "Tool" }, { key: "read", label: "Read-only hint" }], rows: data.inventory.tools.slice(0, 60).map((tool) => ({ name: typeof tool.name === "string" ? tool.name : "not reported", read: tool.annotations && typeof tool.annotations === "object" && !Array.isArray(tool.annotations) && typeof tool.annotations.readOnlyHint === "boolean" ? `reported ${tool.annotations.readOnlyHint}` : "not reported" })) }] : [{ kind: "lines", lines: ["No tools were advertised in this completed native inventory."] }] },
23
+ ...(data.inventory.unsupported.length ? [{ title: "Not represented by this client", blocks: [{ kind: "lines", lines: data.inventory.unsupported }] }] : []),
24
+ { blocks: [{ kind: "lines", lines: [...(data.inventory.tools.length > 60 ? [`${data.inventory.tools.length - 60} tool rows omitted; --json retains the full native inventory.`] : []), "Names, schemas and hints are upstream declarations, not authority or work progress. Pin the digest with --inventory before dispatch if that snapshot matters."] }] },
25
+ ] }));
26
+ }
27
+ //# sourceMappingURL=presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation.js","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Command } from "@cotal-ai/core";
2
+ import { type LocalProcess, type ServicePreset } from "@cotal-ai/workspace";
3
+ export declare const linearServicePreset: ServicePreset;
4
+ export declare const linearService: LocalProcess;
5
+ export declare const nativeLinearServiceCommand: Command;
6
+ //# sourceMappingURL=service-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-adapter.d.ts","sourceRoot":"","sources":["../src/service-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,OAAO,EAAmB,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAG2C,KAAK,YAAY,EAAE,KAAK,aAAa,EACtF,MAAM,qBAAqB,CAAC;AAmB7B,eAAO,MAAM,mBAAmB,EAAE,aAGjC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YA4B3B,CAAC;AASF,eAAO,MAAM,0BAA0B,EAAE,OAkBxC,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { registry } from "@cotal-ai/core";
3
+ import { CommandFailure, colorEnabled, hasUserAuthState, homeCotalDirFallbacks, observeServiceStartup, publishServiceStartup, resolveNativeServiceTarget, serviceOperationId, serviceStartupPath, validateServiceStartupPath, } from "@cotal-ai/workspace";
4
+ import { assertAccountName } from "./account.js";
5
+ import { accountForRead, serveLinearAccount } from "./cli.js";
6
+ import { assertLinearEndpointName } from "./serve.js";
7
+ function nativeTarget(root, space, server) {
8
+ const target = resolveNativeServiceTarget(root, space, server);
9
+ if (target.mode !== "auth" || hasUserAuthState(target.root, target.space, { readOnly: true }))
10
+ throw new CommandFailure("refused", "UNSUPPORTED", "the native Linear service requires its selected static-auth root; no user-auth issuer or open-space authority was substituted");
11
+ return target;
12
+ }
13
+ function inputs(account, endpoint) {
14
+ try {
15
+ if (typeof account !== "string" || typeof endpoint !== "string")
16
+ throw new Error();
17
+ assertAccountName(account);
18
+ assertLinearEndpointName(endpoint);
19
+ return { account, endpoint };
20
+ }
21
+ catch {
22
+ throw new CommandFailure("refused", "SCHEMA_INVALID", "the Linear service needs a native account name and full reverse-DNS endpoint class");
23
+ }
24
+ }
25
+ export const linearServicePreset = {
26
+ kind: "service-preset", name: "linear", adapter: "linear-service", timeoutMs: 120000,
27
+ summary: "native registered Linear MCP service using an existing account and static-auth root",
28
+ };
29
+ export const linearService = {
30
+ kind: "local-process", name: "linear-service", label: "Linear service", controllerOnly: true,
31
+ pidFile: "linear.{space}.pid",
32
+ service: {
33
+ abiVersion: 1, requiresCli: true, readiness: "process",
34
+ capabilities: { multiInstance: true, foreground: true, logs: true }, paths: { root: "directory" },
35
+ optionsSchema: { type: "object", additionalProperties: false, required: ["root", "account", "endpoint"], properties: {
36
+ root: { type: "string", minLength: 1, maxLength: 4096, description: "registered static-auth root; its native authority stays in the service process" },
37
+ account: { type: "string", minLength: 1, maxLength: 32, description: "existing native Linear account name; no OAuth flow runs at startup" },
38
+ endpoint: { type: "string", minLength: 1, maxLength: 253, description: "full reverse-DNS endpoint class in a namespace you own" },
39
+ server: { type: "string", minLength: 1, maxLength: 4096, description: "optional repeat of the registered broker; its TLS requirement is retained" },
40
+ } },
41
+ },
42
+ buildServiceLaunch(context) {
43
+ if (!context.cliInvocation?.length)
44
+ throw new CommandFailure("refused", "UNSUPPORTED", "the Linear service requires the verified cotal entry; no PATH binary was selected");
45
+ if (context.credentialRef)
46
+ throw new CommandFailure("refused", "UNSUPPORTED", "Linear service authority comes from its selected native static root and recorded upstream account, not a generic caller reference");
47
+ // The child inherits COTAL_HOME, which envRefs cannot set. Without it, a reference to a variable the
48
+ // Cotal home falls back to can give the child another home than the one this process reads.
49
+ const moved = process.env.COTAL_HOME ? [] : Object.keys(context.envRefs ?? {}).filter((name) => homeCotalDirFallbacks().includes(name));
50
+ if (moved.length)
51
+ throw new CommandFailure("refused", "UNSUPPORTED", `the definition's envRefs set ${moved.join(" and ")} for the Linear child, so it can read its account from another Cotal home than this start checks; no account was read`, { remedy: `set COTAL_HOME where the service starts, or remove ${moved.join(" and ")} from the definition's envRefs` });
52
+ const target = nativeTarget(String(context.options.root), context.space, context.options.server);
53
+ const selected = inputs(context.options.account, context.options.endpoint);
54
+ // The child now reads the same Cotal home as this process, so an absent account refuses here, before a launch.
55
+ accountForRead(selected.account);
56
+ const [executable, ...self] = context.cliInvocation;
57
+ return { executable: executable, cwd: target.root, args: [...self, ...(colorEnabled() ? [] : ["--no-color"]), "__service-linear", "--root", target.root, "--space", context.space, "--server", target.server, "--account", selected.account, "--endpoint", selected.endpoint, "--service-instance", context.instanceId, "--launch-request", context.launchRequestId, "--ready-file", serviceStartupPath(context)] };
58
+ },
59
+ async checkServiceReadiness(context) { return observeServiceStartup(context, "linear-serve-initialized"); },
60
+ };
61
+ function validateChild(args) {
62
+ if (args.positionals.length || ["root", "space", "server", "account", "endpoint", "service-instance", "launch-request", "ready-file"].some((key) => typeof args.values[key] !== "string" || !args.values[key]))
63
+ throw new CommandFailure("refused", "USAGE_INVALID", "the native Linear child requires one complete explicit controller launch");
64
+ for (const key of ["root", "ready-file"])
65
+ if (!isAbsolute(String(args.values[key])) || /[\u0000-\u001f\u007f]/u.test(String(args.values[key])))
66
+ throw new CommandFailure("refused", "USAGE_INVALID", "native Linear paths must be absolute and contain no terminal controls");
67
+ inputs(args.values.account, args.values.endpoint);
68
+ serviceOperationId(args.values["service-instance"]);
69
+ serviceOperationId(args.values["launch-request"]);
70
+ }
71
+ export const nativeLinearServiceCommand = {
72
+ kind: "command", name: "__service-linear", hidden: true, prepareMeshTarget: false,
73
+ summary: "native Linear child with a private process/launch initialization receipt",
74
+ flags: ["root", "space", "server", "account", "endpoint", "service-instance", "launch-request", "ready-file"].map((name) => ({ name, type: "string" })),
75
+ validate: validateChild,
76
+ async run(args) {
77
+ validateChild(args);
78
+ const target = nativeTarget(String(args.values.root), String(args.values.space), String(args.values.server));
79
+ const selected = inputs(args.values.account, args.values.endpoint);
80
+ const instanceId = serviceOperationId(args.values["service-instance"]), launchRequestId = serviceOperationId(args.values["launch-request"]), path = String(args.values["ready-file"]);
81
+ validateServiceStartupPath(path, instanceId, launchRequestId);
82
+ try {
83
+ await serveLinearAccount(selected.account, selected.endpoint, { space: target.space, server: target.server }, {
84
+ root: target.root,
85
+ onInitialized: () => publishServiceStartup(path, { phase: "linear-serve-initialized", space: target.space, instanceId, launchRequestId }),
86
+ });
87
+ }
88
+ catch {
89
+ throw new CommandFailure("unknown", "OPERATION_UNKNOWN", "the original native Linear initialization or private phase receipt was not confirmed; no account, registration or request was retried");
90
+ }
91
+ },
92
+ };
93
+ registry.register(linearService, linearServicePreset, nativeLinearServiceCommand);
94
+ //# sourceMappingURL=service-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-adapter.js","sourceRoot":"","sources":["../src/service-adapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cotal-ai/linear",
3
3
  "description": "Cotal Linear integration: serves the official Linear MCP server as a registered Cotal endpoint and adds the `linear` operator command.",
4
- "version": "0.90.1",
4
+ "version": "0.92.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -27,8 +27,8 @@
27
27
  "@cotal-ai/workspace": "*"
28
28
  },
29
29
  "devDependencies": {
30
- "@cotal-ai/core": "0.90.1",
31
- "@cotal-ai/workspace": "0.90.1"
30
+ "@cotal-ai/core": "0.92.0",
31
+ "@cotal-ai/workspace": "0.92.0"
32
32
  },
33
33
  "files": [
34
34
  "dist"
@@ -39,6 +39,6 @@
39
39
  "scripts": {
40
40
  "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.smoke.json",
41
41
  "build": "tsc -p tsconfig.json",
42
- "test": "tsx smoke/protocol.smoke.ts"
42
+ "test": "tsx smoke/protocol.smoke.ts && tsx smoke/account-refusals.smoke.ts"
43
43
  }
44
44
  }