@linqapp/sdk-mcp 0.30.0 → 0.32.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/code-tool.js CHANGED
@@ -47,7 +47,7 @@ For example:
47
47
  async function run(client) {
48
48
  const chat = await client.chats.create({
49
49
  from: '+12052535597',
50
- message: { parts: [{ type: 'text', value: 'Hello! How can I help you today?' }] },
50
+ message: {},
51
51
  to: ['+12052532136'],
52
52
  });
53
53
 
package/code-tool.mjs CHANGED
@@ -11,7 +11,7 @@ For example:
11
11
  async function run(client) {
12
12
  const chat = await client.chats.create({
13
13
  from: '+12052535597',
14
- message: { parts: [{ type: 'text', value: 'Hello! How can I help you today?' }] },
14
+ message: {},
15
15
  to: ['+12052532136'],
16
16
  });
17
17
 
package/index.js CHANGED
@@ -6,12 +6,19 @@ const options_1 = require("./options.js");
6
6
  const stdio_1 = require("./stdio.js");
7
7
  const http_1 = require("./http.js");
8
8
  const logger_1 = require("./logger.js");
9
+ const linq_cli_credentials_1 = require("./linq-cli-credentials.js");
9
10
  async function main() {
10
11
  const options = parseOptionsOrError();
11
12
  (0, logger_1.configureLogger)({
12
13
  level: options.debug ? 'debug' : 'info',
13
14
  pretty: options.logFormat === 'pretty',
14
15
  });
16
+ // Fall back to the credential `linq login` already wrote. Must run before any
17
+ // client is constructed. See linq-cli-credentials.ts for why the env var alone
18
+ // is not reachable for desktop MCP clients.
19
+ if ((0, linq_cli_credentials_1.applyLinqCliCredentials)()) {
20
+ (0, logger_1.getLogger)().info('Using the API key from ~/.linq/config.json');
21
+ }
15
22
  const selectedTools = await selectToolsOrError(options);
16
23
  (0, logger_1.getLogger)().info({ tools: selectedTools.map((e) => e.tool.name) }, `MCP Server starting with ${selectedTools.length} tools`);
17
24
  switch (options.transport) {
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";;;AAEA,wCAAuC;AACvC,0CAAwD;AACxD,sCAA4C;AAC5C,oCAAoD;AAEpD,wCAAsD;AAEtD,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAA,wBAAe,EAAC;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QACvC,MAAM,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ;KACvC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAExD,IAAA,kBAAS,GAAE,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAChD,4BAA4B,aAAa,CAAC,MAAM,QAAQ,CACzD,CAAC;IAEF,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,OAAO;YACV,MAAM,IAAA,yBAAiB,EAAC,OAAO,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,IAAA,iCAA0B,EAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;aACrC,CAAC,CAAC;YACH,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,yBAAe,GAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iEAAiE;QACjE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAmB;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";;;AAEA,wCAAuC;AACvC,0CAAwD;AACxD,sCAA4C;AAC5C,oCAAoD;AAEpD,wCAAsD;AACtD,oEAAiE;AAEjE,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAA,wBAAe,EAAC;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QACvC,MAAM,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ;KACvC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,+EAA+E;IAC/E,4CAA4C;IAC5C,IAAI,IAAA,8CAAuB,GAAE,EAAE,CAAC;QAC9B,IAAA,kBAAS,GAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAExD,IAAA,kBAAS,GAAE,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAChD,4BAA4B,aAAa,CAAC,MAAM,QAAQ,CACzD,CAAC;IAEF,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,OAAO;YACV,MAAM,IAAA,yBAAiB,EAAC,OAAO,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,IAAA,iCAA0B,EAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;aACrC,CAAC,CAAC;YACH,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,OAAO,IAAA,yBAAe,GAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iEAAiE;QACjE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAmB;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAA,kBAAS,GAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/index.mjs CHANGED
@@ -4,12 +4,19 @@ import { parseCLIOptions } from "./options.mjs";
4
4
  import { launchStdioServer } from "./stdio.mjs";
5
5
  import { launchStreamableHTTPServer } from "./http.mjs";
6
6
  import { configureLogger, getLogger } from "./logger.mjs";
7
+ import { applyLinqCliCredentials } from "./linq-cli-credentials.mjs";
7
8
  async function main() {
8
9
  const options = parseOptionsOrError();
9
10
  configureLogger({
10
11
  level: options.debug ? 'debug' : 'info',
11
12
  pretty: options.logFormat === 'pretty',
12
13
  });
14
+ // Fall back to the credential `linq login` already wrote. Must run before any
15
+ // client is constructed. See linq-cli-credentials.ts for why the env var alone
16
+ // is not reachable for desktop MCP clients.
17
+ if (applyLinqCliCredentials()) {
18
+ getLogger().info('Using the API key from ~/.linq/config.json');
19
+ }
13
20
  const selectedTools = await selectToolsOrError(options);
14
21
  getLogger().info({ tools: selectedTools.map((e) => e.tool.name) }, `MCP Server starting with ${selectedTools.length} tools`);
15
22
  switch (options.transport) {
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,qBAAiB;AACvC,OAAO,EAAc,eAAe,EAAE,sBAAkB;AACxD,OAAO,EAAE,iBAAiB,EAAE,oBAAgB;AAC5C,OAAO,EAAE,0BAA0B,EAAE,mBAAe;AAEpD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,qBAAiB;AAEtD,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,eAAe,CAAC;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QACvC,MAAM,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ;KACvC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAExD,SAAS,EAAE,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAChD,4BAA4B,aAAa,CAAC,MAAM,QAAQ,CACzD,CAAC;IAEF,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,OAAO;YACV,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,0BAA0B,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;aACrC,CAAC,CAAC;YACH,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iEAAiE;QACjE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAmB;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,SAAS,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,qBAAiB;AACvC,OAAO,EAAc,eAAe,EAAE,sBAAkB;AACxD,OAAO,EAAE,iBAAiB,EAAE,oBAAgB;AAC5C,OAAO,EAAE,0BAA0B,EAAE,mBAAe;AAEpD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,qBAAiB;AACtD,OAAO,EAAE,uBAAuB,EAAE,mCAA+B;AAEjE,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,eAAe,CAAC;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;QACvC,MAAM,EAAE,OAAO,CAAC,SAAS,KAAK,QAAQ;KACvC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,+EAA+E;IAC/E,4CAA4C;IAC5C,IAAI,uBAAuB,EAAE,EAAE,CAAC;QAC9B,SAAS,EAAE,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAExD,SAAS,EAAE,CAAC,IAAI,CACd,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAChD,4BAA4B,aAAa,CAAC,MAAM,QAAQ,CACzD,CAAC;IAEF,QAAQ,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,KAAK,OAAO;YACV,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,MAAM;YACT,MAAM,0BAA0B,CAAC;gBAC/B,UAAU,EAAE,OAAO;gBACnB,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI;aACrC,CAAC,CAAC;YACH,MAAM;IACV,CAAC;AACH,CAAC;AAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC;QACH,OAAO,eAAe,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,iEAAiE;QACjE,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAmB;IACnD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,SAAS,EAAE,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ export declare const API_KEY_ENV = "LINQ_API_V3_API_KEY";
2
+ /**
3
+ * Read the API token the `linq` CLI stores in ~/.linq/config.json.
4
+ *
5
+ * MCP clients launch this server as a detached child process, so it does not
6
+ * inherit a login shell. On macOS in particular, a GUI-launched editor never
7
+ * sees `export LINQ_API_V3_API_KEY=...` from a shell profile, which leaves the
8
+ * env var the only supported credential source unreachable for most desktop
9
+ * users. Falling back to the CLI's own config means `linq login` is enough.
10
+ *
11
+ * Returns null whenever the file is absent, unreadable, malformed, or holds no
12
+ * token — the caller then proceeds as before and the SDK reports the missing
13
+ * credential itself.
14
+ */
15
+ export declare function readTokenFromLinqCli(home?: string): string | null;
16
+ /**
17
+ * Populate the API key env var from the CLI config when it is not already set.
18
+ * An explicitly provided key always wins.
19
+ */
20
+ export declare function applyLinqCliCredentials(env?: NodeJS.ProcessEnv): boolean;
21
+ //# sourceMappingURL=linq-cli-credentials.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linq-cli-credentials.d.mts","sourceRoot":"","sources":["src/linq-cli-credentials.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,wBAAwB,CAAC;AAOjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,GAAG,IAAI,CAgB5E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAMrF"}
@@ -0,0 +1,21 @@
1
+ export declare const API_KEY_ENV = "LINQ_API_V3_API_KEY";
2
+ /**
3
+ * Read the API token the `linq` CLI stores in ~/.linq/config.json.
4
+ *
5
+ * MCP clients launch this server as a detached child process, so it does not
6
+ * inherit a login shell. On macOS in particular, a GUI-launched editor never
7
+ * sees `export LINQ_API_V3_API_KEY=...` from a shell profile, which leaves the
8
+ * env var the only supported credential source unreachable for most desktop
9
+ * users. Falling back to the CLI's own config means `linq login` is enough.
10
+ *
11
+ * Returns null whenever the file is absent, unreadable, malformed, or holds no
12
+ * token — the caller then proceeds as before and the SDK reports the missing
13
+ * credential itself.
14
+ */
15
+ export declare function readTokenFromLinqCli(home?: string): string | null;
16
+ /**
17
+ * Populate the API key env var from the CLI config when it is not already set.
18
+ * An explicitly provided key always wins.
19
+ */
20
+ export declare function applyLinqCliCredentials(env?: NodeJS.ProcessEnv): boolean;
21
+ //# sourceMappingURL=linq-cli-credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linq-cli-credentials.d.ts","sourceRoot":"","sources":["src/linq-cli-credentials.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,wBAAwB,CAAC;AAOjD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,MAAkB,GAAG,MAAM,GAAG,IAAI,CAgB5E;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAMrF"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.API_KEY_ENV = void 0;
4
+ exports.readTokenFromLinqCli = readTokenFromLinqCli;
5
+ exports.applyLinqCliCredentials = applyLinqCliCredentials;
6
+ const node_fs_1 = require("node:fs");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
9
+ exports.API_KEY_ENV = 'LINQ_API_V3_API_KEY';
10
+ /**
11
+ * Read the API token the `linq` CLI stores in ~/.linq/config.json.
12
+ *
13
+ * MCP clients launch this server as a detached child process, so it does not
14
+ * inherit a login shell. On macOS in particular, a GUI-launched editor never
15
+ * sees `export LINQ_API_V3_API_KEY=...` from a shell profile, which leaves the
16
+ * env var the only supported credential source unreachable for most desktop
17
+ * users. Falling back to the CLI's own config means `linq login` is enough.
18
+ *
19
+ * Returns null whenever the file is absent, unreadable, malformed, or holds no
20
+ * token — the caller then proceeds as before and the SDK reports the missing
21
+ * credential itself.
22
+ */
23
+ function readTokenFromLinqCli(home = (0, node_os_1.homedir)()) {
24
+ const configPath = (0, node_path_1.join)(home, '.linq', 'config.json');
25
+ if (!(0, node_fs_1.existsSync)(configPath))
26
+ return null;
27
+ let config;
28
+ try {
29
+ config = JSON.parse((0, node_fs_1.readFileSync)(configPath, 'utf8'));
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ // LINQ_PROFILE mirrors the CLI's --profile flag, so a developer working
35
+ // against staging gets staging here too.
36
+ const profileName = process.env['LINQ_PROFILE'] || config.profile || 'default';
37
+ const token = config.profiles?.[profileName]?.token;
38
+ return typeof token === 'string' && token.length > 0 ? token : null;
39
+ }
40
+ /**
41
+ * Populate the API key env var from the CLI config when it is not already set.
42
+ * An explicitly provided key always wins.
43
+ */
44
+ function applyLinqCliCredentials(env = process.env) {
45
+ if (env[exports.API_KEY_ENV])
46
+ return false;
47
+ const token = readTokenFromLinqCli();
48
+ if (!token)
49
+ return false;
50
+ env[exports.API_KEY_ENV] = token;
51
+ return true;
52
+ }
53
+ //# sourceMappingURL=linq-cli-credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linq-cli-credentials.js","sourceRoot":"","sources":["src/linq-cli-credentials.ts"],"names":[],"mappings":";;;AAwBA,oDAgBC;AAMD,0DAMC;AApDD,qCAAmD;AACnD,qCAAkC;AAClC,yCAAiC;AAEpB,QAAA,WAAW,GAAG,qBAAqB,CAAC;AAOjD;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB,CAAC,OAAe,IAAA,iBAAO,GAAE;IAC3D,MAAM,UAAU,GAAG,IAAA,gBAAI,EAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,IAAA,oBAAU,EAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAkB,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,yCAAyC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,IAAI,GAAG,CAAC,mBAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,mBAAW,CAAC,GAAG,KAAK,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { readFileSync, existsSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ export const API_KEY_ENV = 'LINQ_API_V3_API_KEY';
5
+ /**
6
+ * Read the API token the `linq` CLI stores in ~/.linq/config.json.
7
+ *
8
+ * MCP clients launch this server as a detached child process, so it does not
9
+ * inherit a login shell. On macOS in particular, a GUI-launched editor never
10
+ * sees `export LINQ_API_V3_API_KEY=...` from a shell profile, which leaves the
11
+ * env var the only supported credential source unreachable for most desktop
12
+ * users. Falling back to the CLI's own config means `linq login` is enough.
13
+ *
14
+ * Returns null whenever the file is absent, unreadable, malformed, or holds no
15
+ * token — the caller then proceeds as before and the SDK reports the missing
16
+ * credential itself.
17
+ */
18
+ export function readTokenFromLinqCli(home = homedir()) {
19
+ const configPath = join(home, '.linq', 'config.json');
20
+ if (!existsSync(configPath))
21
+ return null;
22
+ let config;
23
+ try {
24
+ config = JSON.parse(readFileSync(configPath, 'utf8'));
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ // LINQ_PROFILE mirrors the CLI's --profile flag, so a developer working
30
+ // against staging gets staging here too.
31
+ const profileName = process.env['LINQ_PROFILE'] || config.profile || 'default';
32
+ const token = config.profiles?.[profileName]?.token;
33
+ return typeof token === 'string' && token.length > 0 ? token : null;
34
+ }
35
+ /**
36
+ * Populate the API key env var from the CLI config when it is not already set.
37
+ * An explicitly provided key always wins.
38
+ */
39
+ export function applyLinqCliCredentials(env = process.env) {
40
+ if (env[API_KEY_ENV])
41
+ return false;
42
+ const token = readTokenFromLinqCli();
43
+ if (!token)
44
+ return false;
45
+ env[API_KEY_ENV] = token;
46
+ return true;
47
+ }
48
+ //# sourceMappingURL=linq-cli-credentials.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linq-cli-credentials.mjs","sourceRoot":"","sources":["src/linq-cli-credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAOjD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe,OAAO,EAAE;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,IAAI,MAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAkB,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,yCAAyC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC;IACpD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC1E,IAAI,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC"}