@intelligentelectron/pdf-analyzer 0.1.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +4 -9
  2. package/dist/cli/commands.d.ts +9 -1
  3. package/dist/cli/commands.d.ts.map +1 -1
  4. package/dist/cli/commands.js +96 -25
  5. package/dist/cli/commands.js.map +1 -1
  6. package/dist/index.d.ts +2 -3
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +13 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/keychain.d.ts +34 -0
  11. package/dist/keychain.d.ts.map +1 -0
  12. package/dist/keychain.js +208 -0
  13. package/dist/keychain.js.map +1 -0
  14. package/dist/pdf-utils.d.ts +28 -0
  15. package/dist/pdf-utils.d.ts.map +1 -0
  16. package/dist/pdf-utils.js +93 -0
  17. package/dist/pdf-utils.js.map +1 -0
  18. package/dist/providers/anthropic.d.ts +9 -0
  19. package/dist/providers/anthropic.d.ts.map +1 -0
  20. package/dist/providers/anthropic.js +69 -0
  21. package/dist/providers/anthropic.js.map +1 -0
  22. package/dist/providers/google.d.ts +13 -0
  23. package/dist/providers/google.d.ts.map +1 -0
  24. package/dist/providers/google.js +120 -0
  25. package/dist/providers/google.js.map +1 -0
  26. package/dist/providers/openai.d.ts +9 -0
  27. package/dist/providers/openai.d.ts.map +1 -0
  28. package/dist/providers/openai.js +70 -0
  29. package/dist/providers/openai.js.map +1 -0
  30. package/dist/providers/registry.d.ts +23 -0
  31. package/dist/providers/registry.d.ts.map +1 -0
  32. package/dist/providers/registry.js +44 -0
  33. package/dist/providers/registry.js.map +1 -0
  34. package/dist/providers/types.d.ts +70 -0
  35. package/dist/providers/types.d.ts.map +1 -0
  36. package/dist/providers/types.js +2 -0
  37. package/dist/providers/types.js.map +1 -0
  38. package/dist/server.d.ts +2 -1
  39. package/dist/server.d.ts.map +1 -1
  40. package/dist/server.js +27 -35
  41. package/dist/server.js.map +1 -1
  42. package/dist/service.d.ts +7 -35
  43. package/dist/service.d.ts.map +1 -1
  44. package/dist/service.js +99 -302
  45. package/dist/service.js.map +1 -1
  46. package/dist/types.d.ts +20 -12
  47. package/dist/types.d.ts.map +1 -1
  48. package/dist/types.js +15 -45
  49. package/dist/types.js.map +1 -1
  50. package/package.json +12 -4
package/README.md CHANGED
@@ -75,7 +75,7 @@ After installing the MCP with one of the methods above, you can connect it to yo
75
75
  Install [Claude Code](https://docs.anthropic.com/en/docs/claude-code), then run:
76
76
 
77
77
  ```bash
78
- claude mcp add --scope user pdf-analyzer --env GEMINI_API_KEY=your-key -- pdf-analyzer
78
+ claude mcp add --scope user pdf-analyzer -- pdf-analyzer
79
79
  ```
80
80
 
81
81
  ### OpenAI Codex
@@ -83,7 +83,7 @@ claude mcp add --scope user pdf-analyzer --env GEMINI_API_KEY=your-key -- pdf-an
83
83
  Install [OpenAI Codex](https://developers.openai.com/codex/cli/), then run:
84
84
 
85
85
  ```bash
86
- codex mcp add pdf-analyzer --env GEMINI_API_KEY=your-key -- pdf-analyzer
86
+ codex mcp add pdf-analyzer -- pdf-analyzer
87
87
  ```
88
88
 
89
89
  ### Gemini CLI
@@ -91,7 +91,7 @@ codex mcp add pdf-analyzer --env GEMINI_API_KEY=your-key -- pdf-analyzer
91
91
  Install [Gemini CLI](https://geminicli.com/docs/get-started/installation/), then run:
92
92
 
93
93
  ```bash
94
- gemini mcp add --scope user -e GEMINI_API_KEY=your-key pdf-analyzer pdf-analyzer
94
+ gemini mcp add --scope user pdf-analyzer pdf-analyzer
95
95
  ```
96
96
 
97
97
  ### VS Code (GitHub Copilot)
@@ -105,10 +105,7 @@ Add to `.vscode/mcp.json` in your project:
105
105
  "servers": {
106
106
  "pdf-analyzer": {
107
107
  "type": "stdio",
108
- "command": "pdf-analyzer",
109
- "env": {
110
- "GEMINI_API_KEY": "your-key"
111
- }
108
+ "command": "pdf-analyzer"
112
109
  }
113
110
  }
114
111
  }
@@ -116,8 +113,6 @@ Add to `.vscode/mcp.json` in your project:
116
113
 
117
114
  Then enable it in **Configure Tools** (click the tools icon in Copilot chat).
118
115
 
119
- > **Warning:** Do not commit `.vscode/mcp.json` to version control — it contains your API key. Add it to your `.gitignore`.
120
-
121
116
  ## Usage
122
117
 
123
118
  Once connected, ask your AI assistant to analyze any PDF:
@@ -1,5 +1,5 @@
1
1
  /**
2
- * CLI command handlers for --version, --help, --update, and --uninstall.
2
+ * CLI command handlers for --version, --help, --setup, --update, and --uninstall.
3
3
  */
4
4
  /**
5
5
  * Print version information.
@@ -9,6 +9,14 @@ export declare const printVersion: () => void;
9
9
  * Print help message.
10
10
  */
11
11
  export declare const printHelp: () => void;
12
+ /**
13
+ * Handle the --setup flag: choose provider and store API key.
14
+ */
15
+ export declare const handleSetupCommand: () => Promise<void>;
16
+ /**
17
+ * Handle the deprecated --set-key flag.
18
+ */
19
+ export declare const handleSetKeyCommand: () => Promise<void>;
12
20
  /**
13
21
  * Handle the --update flag: check and apply updates interactively.
14
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,QAAO,IAsC5B,CAAC;AAsBF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAqCxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,IAAI,CA4C3D,CAAC"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoBH;;GAEG;AACH,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,QAAO,IA0C5B,CAAC;AAYF;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,IAAI,CAmEvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAGxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,QAAa,OAAO,CAAC,IAAI,CAmCxD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,IAAI,CAoD3D,CAAC"}
@@ -1,12 +1,15 @@
1
1
  /**
2
- * CLI command handlers for --version, --help, --update, and --uninstall.
2
+ * CLI command handlers for --version, --help, --setup, --update, and --uninstall.
3
3
  */
4
4
  import * as fs from "node:fs";
5
5
  import * as path from "node:path";
6
6
  import * as os from "node:os";
7
+ import * as clack from "@clack/prompts";
7
8
  import { VERSION, GITHUB_REPO, BINARY_NAME } from "../version.js";
8
9
  import { checkForUpdate, performUpdate } from "./updater.js";
9
10
  import { removeFromPath } from "./shell.js";
11
+ import { getApiKey, setApiKey, getActiveProvider, setActiveProvider, getModel, setModel, deleteAllCredentials, } from "../keychain.js";
12
+ import { providerList } from "../providers/registry.js";
10
13
  /**
11
14
  * Print version information.
12
15
  */
@@ -20,19 +23,26 @@ export const printHelp = () => {
20
23
  console.log(`
21
24
  ${BINARY_NAME} v${VERSION}
22
25
 
23
- MCP server for analyzing PDF documents using Gemini AI.
26
+ MCP server for analyzing PDF documents using AI.
27
+ Supports Google Gemini, Anthropic Claude, and OpenAI.
24
28
 
25
29
  USAGE:
26
30
  ${BINARY_NAME} [OPTIONS]
27
31
 
28
32
  OPTIONS:
29
33
  --version, -v Print version and exit
34
+ --setup Choose an LLM provider and store your API key
35
+ --set-key Alias for --setup (deprecated)
30
36
  --update Check for updates and apply if available
31
37
  --uninstall Remove ${BINARY_NAME} from the system
32
38
  --help, -h Show this help message
33
39
 
34
- ENVIRONMENT VARIABLES:
35
- GEMINI_API_KEY Required. Your Gemini API key from Google AI Studio.
40
+ PROVIDER SETUP:
41
+ ${BINARY_NAME} --setup
42
+
43
+ Lets you choose a provider (Google Gemini, Anthropic Claude, or OpenAI)
44
+ and stores your API key in the OS credential store (macOS Keychain,
45
+ Windows Credential Manager, or Linux secret-tool).
36
46
 
37
47
  INSTALLATION:
38
48
  curl -fsSL https://raw.githubusercontent.com/${GITHUB_REPO}/main/install.sh | bash
@@ -41,10 +51,7 @@ MCP CONFIGURATION:
41
51
  {
42
52
  "mcpServers": {
43
53
  "pdf-analyzer": {
44
- "command": "${BINARY_NAME}",
45
- "env": {
46
- "GEMINI_API_KEY": "your-api-key-here"
47
- }
54
+ "command": "${BINARY_NAME}"
48
55
  }
49
56
  }
50
57
  }
@@ -54,21 +61,80 @@ MORE INFO:
54
61
  `.trim());
55
62
  };
56
63
  /**
57
- * Simple confirmation prompt for terminal.
64
+ * Check if a clack prompt was cancelled (Ctrl+C).
65
+ */
66
+ function assertNotCancelled(value) {
67
+ if (clack.isCancel(value)) {
68
+ clack.cancel("Setup cancelled.");
69
+ process.exit(0);
70
+ }
71
+ }
72
+ /**
73
+ * Handle the --setup flag: choose provider and store API key.
58
74
  */
59
- const confirm = async (message) => {
60
- return new Promise((resolve) => {
61
- process.stdout.write(`${message} [y/N] `);
62
- const onData = (data) => {
63
- const answer = data.toString().trim().toLowerCase();
64
- process.stdin.removeListener("data", onData);
65
- process.stdin.pause();
66
- resolve(answer === "y" || answer === "yes");
67
- };
68
- process.stdin.resume();
69
- process.stdin.setEncoding("utf8");
70
- process.stdin.once("data", onData);
75
+ export const handleSetupCommand = async () => {
76
+ clack.intro("pdf-analyzer setup");
77
+ const existingProvider = getActiveProvider();
78
+ const existingKey = getApiKey();
79
+ const existingModel = getModel();
80
+ if (existingProvider && existingKey) {
81
+ const providerConfig = providerList.find((p) => p.id === existingProvider);
82
+ const providerName = providerConfig?.displayName ?? existingProvider;
83
+ const modelName = providerConfig?.models.find((m) => m.id === existingModel)?.displayName ?? existingModel;
84
+ const shouldReconfigure = await clack.confirm({
85
+ message: `Already configured with ${providerName} (${modelName}). Reconfigure?`,
86
+ });
87
+ assertNotCancelled(shouldReconfigure);
88
+ if (!shouldReconfigure) {
89
+ clack.outro("No changes made.");
90
+ return;
91
+ }
92
+ }
93
+ const providerId = await clack.select({
94
+ message: "Choose your LLM provider",
95
+ options: providerList.map((p) => ({
96
+ value: p.id,
97
+ label: p.displayName,
98
+ })),
99
+ });
100
+ assertNotCancelled(providerId);
101
+ const selected = providerList.find((p) => p.id === providerId);
102
+ const modelId = await clack.select({
103
+ message: "Choose a model",
104
+ options: selected.models.map((m) => ({
105
+ value: m.id,
106
+ label: `${m.displayName} - ${m.hint}`,
107
+ })),
71
108
  });
109
+ assertNotCancelled(modelId);
110
+ const selectedModel = selected.models.find((m) => m.id === modelId);
111
+ clack.note(`Model: ${selectedModel.displayName} (${modelId})\nGet your API key from: ${selected.apiKeyUrl}`, selected.displayName);
112
+ const key = await clack.password({
113
+ message: "Enter your API key",
114
+ validate: (value) => {
115
+ if (!value)
116
+ return "API key is required";
117
+ },
118
+ });
119
+ assertNotCancelled(key);
120
+ try {
121
+ setActiveProvider(selected.id);
122
+ setModel(modelId);
123
+ setApiKey(key);
124
+ clack.outro(`${selected.displayName} (${selectedModel.displayName}) configured successfully.`);
125
+ }
126
+ catch (error) {
127
+ const message = error instanceof Error ? error.message : "Unknown error";
128
+ clack.cancel(`Failed to store credentials: ${message}`);
129
+ process.exit(1);
130
+ }
131
+ };
132
+ /**
133
+ * Handle the deprecated --set-key flag.
134
+ */
135
+ export const handleSetKeyCommand = async () => {
136
+ clack.log.warn("--set-key is deprecated. Use --setup instead.");
137
+ await handleSetupCommand();
72
138
  };
73
139
  /**
74
140
  * Handle the --update flag: check and apply updates interactively.
@@ -89,15 +155,13 @@ export const handleUpdateCommand = async () => {
89
155
  console.error("Update available but no download URL found for your platform");
90
156
  process.exit(1);
91
157
  }
92
- console.log(`Update available: ${VERSION} ${check.latestVersion}`);
158
+ console.log(`Update available: ${VERSION} -> ${check.latestVersion}`);
93
159
  console.log("Downloading...");
94
160
  const result = await performUpdate(check.downloadUrl, check.latestVersion);
95
161
  if (!result.success) {
96
162
  console.error(`Update failed: ${result.error}`);
97
163
  process.exit(1);
98
164
  }
99
- // On Windows, we need to ensure stdout is flushed before exiting
100
- // because replacing the running executable can cause issues
101
165
  const message = `Successfully updated to ${result.newVersion}\n`;
102
166
  await new Promise((resolve) => {
103
167
  process.stdout.write(message, () => resolve());
@@ -115,13 +179,20 @@ export const handleUninstallCommand = async () => {
115
179
  console.log(` - Binary: ${binaryPath}`);
116
180
  console.log(` - Directory: ${installDir}`);
117
181
  console.log(" - PATH entries from shell config files");
182
+ console.log(" - Stored credentials from OS credential store");
118
183
  console.log("");
119
- const confirmed = await confirm("Are you sure you want to uninstall?");
184
+ const confirmed = await clack.confirm({
185
+ message: "Are you sure you want to uninstall?",
186
+ });
187
+ assertNotCancelled(confirmed);
120
188
  if (!confirmed) {
121
189
  console.log("Uninstall cancelled.");
122
190
  return;
123
191
  }
124
192
  console.log("");
193
+ // Remove all stored credentials
194
+ deleteAllCredentials();
195
+ console.log("Removed stored credentials");
125
196
  // Remove PATH entries from shell rc files
126
197
  const modifiedFiles = removeFromPath();
127
198
  if (modifiedFiles.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/cli/commands.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -7,12 +7,11 @@
7
7
  *
8
8
  * CLI flags:
9
9
  * --version, -v Print version and exit
10
+ * --setup Choose LLM provider and store API key
11
+ * --set-key Deprecated alias for --setup
10
12
  * --update Check for updates and apply if available
11
13
  * --uninstall Remove pdf-analyzer from the system
12
14
  * --help, -h Show help
13
- *
14
- * Environment variables:
15
- * GEMINI_API_KEY Required. Your Gemini API key.
16
15
  */
17
16
  export {};
18
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG"}
package/dist/index.js CHANGED
@@ -7,15 +7,14 @@
7
7
  *
8
8
  * CLI flags:
9
9
  * --version, -v Print version and exit
10
+ * --setup Choose LLM provider and store API key
11
+ * --set-key Deprecated alias for --setup
10
12
  * --update Check for updates and apply if available
11
13
  * --uninstall Remove pdf-analyzer from the system
12
14
  * --help, -h Show help
13
- *
14
- * Environment variables:
15
- * GEMINI_API_KEY Required. Your Gemini API key.
16
15
  */
17
16
  import { autoUpdate, reexec } from "./cli/updater.js";
18
- import { printVersion, printHelp, handleUpdateCommand, handleUninstallCommand, } from "./cli/commands.js";
17
+ import { printVersion, printHelp, handleSetupCommand, handleSetKeyCommand, handleUpdateCommand, handleUninstallCommand, } from "./cli/commands.js";
19
18
  import { runServer } from "./server.js";
20
19
  /**
21
20
  * Main entry point for the PDF Analyzer MCP server.
@@ -32,6 +31,16 @@ const main = async () => {
32
31
  printHelp();
33
32
  return;
34
33
  }
34
+ // Handle --setup
35
+ if (args.includes("--setup")) {
36
+ await handleSetupCommand();
37
+ return;
38
+ }
39
+ // Handle --set-key (deprecated alias)
40
+ if (args.includes("--set-key")) {
41
+ await handleSetKeyCommand();
42
+ return;
43
+ }
35
44
  // Handle --update
36
45
  if (args.includes("--update")) {
37
46
  await handleUpdateCommand();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,wBAAwB;IACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,mFAAmF;IACnF,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,YAAY,EACZ,SAAS,EACT,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,wBAAwB;IACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,YAAY,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,iBAAiB;IACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,MAAM,kBAAkB,EAAE,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,sCAAsC;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,MAAM,mBAAmB,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,MAAM,sBAAsB,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,mFAAmF;IACnF,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,+BAA+B;IAC/B,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;IACX,CAAC;IAED,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * OS-native credential storage.
3
+ *
4
+ * Uses platform CLI tools (no native addons) so it works with Bun-compiled binaries.
5
+ * - macOS: `security` CLI (Keychain Access)
6
+ * - Windows: `cmdkey` + PowerShell (Credential Manager)
7
+ * - Linux: `secret-tool` (libsecret), if available
8
+ */
9
+ /**
10
+ * Escape a string for safe use as a shell argument.
11
+ * Wraps in single quotes and escapes any embedded single quotes.
12
+ */
13
+ export declare function escapeShellArg(arg: string): string;
14
+ /** Read a value from the OS credential store. */
15
+ export declare function getStoredValue(account: string, service?: string): string | null;
16
+ /** Write a value to the OS credential store. */
17
+ export declare function setStoredValue(account: string, value: string, service?: string): void;
18
+ /** Remove a value from the OS credential store (best-effort). */
19
+ export declare function deleteStoredValue(account: string, service?: string): void;
20
+ /** Get the active provider ID. Returns null if not set. */
21
+ export declare function getActiveProvider(): string | null;
22
+ /** Store the active provider ID. */
23
+ export declare function setActiveProvider(providerId: string): void;
24
+ /** Get the stored API key. Returns null if not found. */
25
+ export declare function getApiKey(): string | null;
26
+ /** Store the API key. */
27
+ export declare function setApiKey(key: string): void;
28
+ /** Get the stored model ID. Returns null if not set. */
29
+ export declare function getModel(): string | null;
30
+ /** Store the selected model ID. */
31
+ export declare function setModel(modelId: string): void;
32
+ /** Delete all stored credentials (provider + API key + model). Best-effort. */
33
+ export declare function deleteAllCredentials(): void;
34
+ //# sourceMappingURL=keychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AA2ID,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAwB,GAAG,MAAM,GAAG,IAAI,CAWhG;AAED,gDAAgD;AAChD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAwB,GAChC,IAAI,CAcN;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAwB,GAAG,IAAI,CAe1F;AAUD,2DAA2D;AAC3D,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED,oCAAoC;AACpC,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE1D;AAED,yDAAyD;AACzD,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;AAED,yBAAyB;AACzB,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wDAAwD;AACxD,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAExC;AAED,mCAAmC;AACnC,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,IAAI,IAAI,CAI3C"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * OS-native credential storage.
3
+ *
4
+ * Uses platform CLI tools (no native addons) so it works with Bun-compiled binaries.
5
+ * - macOS: `security` CLI (Keychain Access)
6
+ * - Windows: `cmdkey` + PowerShell (Credential Manager)
7
+ * - Linux: `secret-tool` (libsecret), if available
8
+ */
9
+ import { execSync } from "node:child_process";
10
+ const DEFAULT_SERVICE = "pdf-analyzer";
11
+ /** Stdio config that prevents credential leaks to MCP stdio transport. */
12
+ const SILENT_STDIO = ["pipe", "pipe", "pipe"];
13
+ /**
14
+ * Escape a string for safe use as a shell argument.
15
+ * Wraps in single quotes and escapes any embedded single quotes.
16
+ */
17
+ export function escapeShellArg(arg) {
18
+ return `'${arg.replace(/'/g, "'\\''")}'`;
19
+ }
20
+ // ---------------------------------------------------------------------------
21
+ // macOS (Keychain)
22
+ // ---------------------------------------------------------------------------
23
+ function getMacOS(service, account) {
24
+ try {
25
+ return execSync(`security find-generic-password -s ${escapeShellArg(service)} -a ${escapeShellArg(account)} -w`, { stdio: SILENT_STDIO, encoding: "utf-8" }).trim();
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function setMacOS(service, account, value) {
32
+ execSync(`security add-generic-password -s ${escapeShellArg(service)} -a ${escapeShellArg(account)} -w ${escapeShellArg(value)} -U`, { stdio: SILENT_STDIO });
33
+ }
34
+ function deleteMacOS(service, account) {
35
+ try {
36
+ execSync(`security delete-generic-password -s ${escapeShellArg(service)} -a ${escapeShellArg(account)}`, { stdio: SILENT_STDIO });
37
+ }
38
+ catch {
39
+ // Credential may not exist; ignore
40
+ }
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Windows (Credential Manager)
44
+ // ---------------------------------------------------------------------------
45
+ /** Build a Windows credential target from service + account. */
46
+ function winTarget(service, account) {
47
+ return `${service}/${account}`;
48
+ }
49
+ function getWindows(service, account) {
50
+ try {
51
+ const target = winTarget(service, account);
52
+ const script = `
53
+ Add-Type -Namespace Win32 -Name Cred -MemberDefinition @'
54
+ [DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Unicode)]
55
+ public static extern bool CredRead(string target, int type, int flags, out IntPtr cred);
56
+ [DllImport("advapi32.dll")]
57
+ public static extern void CredFree(IntPtr cred);
58
+ [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
59
+ public struct CREDENTIAL {
60
+ public int Flags; public int Type; public string TargetName;
61
+ public string Comment; public long LastWritten; public int CredentialBlobSize;
62
+ public IntPtr CredentialBlob; public int Persist; public int AttributeCount;
63
+ public IntPtr Attributes; public string TargetAlias; public string UserName;
64
+ }
65
+ '@
66
+ $ptr = [IntPtr]::Zero
67
+ if ([Win32.Cred]::CredRead("${target}", 1, 0, [ref]$ptr)) {
68
+ $c = [Runtime.InteropServices.Marshal]::PtrToStructure($ptr, [Type][Win32.Cred+CREDENTIAL])
69
+ $secret = [Runtime.InteropServices.Marshal]::PtrToStringUni($c.CredentialBlob, $c.CredentialBlobSize/2)
70
+ [Win32.Cred]::CredFree($ptr)
71
+ Write-Output $secret
72
+ }`;
73
+ return (execSync(`powershell -NoProfile -Command "${script.replace(/"/g, '\\"')}"`, {
74
+ stdio: SILENT_STDIO,
75
+ encoding: "utf-8",
76
+ }).trim() || null);
77
+ }
78
+ catch {
79
+ return null;
80
+ }
81
+ }
82
+ function setWindows(service, account, value) {
83
+ const target = winTarget(service, account);
84
+ execSync(`cmdkey /generic:${target} /user:${account} /pass:${escapeShellArg(value)}`, {
85
+ stdio: SILENT_STDIO,
86
+ shell: "cmd.exe",
87
+ });
88
+ }
89
+ function deleteWindows(service, account) {
90
+ try {
91
+ const target = winTarget(service, account);
92
+ execSync(`cmdkey /delete:${target}`, {
93
+ stdio: SILENT_STDIO,
94
+ shell: "cmd.exe",
95
+ });
96
+ }
97
+ catch {
98
+ // Credential may not exist; ignore
99
+ }
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Linux (libsecret / secret-tool)
103
+ // ---------------------------------------------------------------------------
104
+ function getLinux(service, account) {
105
+ try {
106
+ return (execSync(`secret-tool lookup service ${escapeShellArg(service)} username ${escapeShellArg(account)}`, { stdio: SILENT_STDIO, encoding: "utf-8" }).trim() || null);
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ function setLinux(service, account, value) {
113
+ execSync(`echo -n ${escapeShellArg(value)} | secret-tool store --label=${escapeShellArg(service)} service ${escapeShellArg(service)} username ${escapeShellArg(account)}`, { stdio: SILENT_STDIO });
114
+ }
115
+ function deleteLinux(service, account) {
116
+ try {
117
+ execSync(`secret-tool clear service ${escapeShellArg(service)} username ${escapeShellArg(account)}`, { stdio: SILENT_STDIO });
118
+ }
119
+ catch {
120
+ // Credential may not exist or secret-tool unavailable; ignore
121
+ }
122
+ }
123
+ // ---------------------------------------------------------------------------
124
+ // Generic credential operations
125
+ // ---------------------------------------------------------------------------
126
+ /** Read a value from the OS credential store. */
127
+ export function getStoredValue(account, service = DEFAULT_SERVICE) {
128
+ switch (process.platform) {
129
+ case "darwin":
130
+ return getMacOS(service, account);
131
+ case "win32":
132
+ return getWindows(service, account);
133
+ case "linux":
134
+ return getLinux(service, account);
135
+ default:
136
+ return null;
137
+ }
138
+ }
139
+ /** Write a value to the OS credential store. */
140
+ export function setStoredValue(account, value, service = DEFAULT_SERVICE) {
141
+ switch (process.platform) {
142
+ case "darwin":
143
+ setMacOS(service, account, value);
144
+ break;
145
+ case "win32":
146
+ setWindows(service, account, value);
147
+ break;
148
+ case "linux":
149
+ setLinux(service, account, value);
150
+ break;
151
+ default:
152
+ throw new Error(`Credential storage is not supported on ${process.platform}`);
153
+ }
154
+ }
155
+ /** Remove a value from the OS credential store (best-effort). */
156
+ export function deleteStoredValue(account, service = DEFAULT_SERVICE) {
157
+ switch (process.platform) {
158
+ case "darwin":
159
+ deleteMacOS(service, account);
160
+ break;
161
+ case "win32":
162
+ deleteWindows(service, account);
163
+ break;
164
+ case "linux":
165
+ deleteLinux(service, account);
166
+ break;
167
+ default:
168
+ // No-op on unsupported platforms
169
+ break;
170
+ }
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // Convenience API for provider and API key storage
174
+ // ---------------------------------------------------------------------------
175
+ const PROVIDER_ACCOUNT = "PROVIDER";
176
+ const API_KEY_ACCOUNT = "API_KEY";
177
+ const MODEL_ACCOUNT = "MODEL";
178
+ /** Get the active provider ID. Returns null if not set. */
179
+ export function getActiveProvider() {
180
+ return getStoredValue(PROVIDER_ACCOUNT);
181
+ }
182
+ /** Store the active provider ID. */
183
+ export function setActiveProvider(providerId) {
184
+ setStoredValue(PROVIDER_ACCOUNT, providerId);
185
+ }
186
+ /** Get the stored API key. Returns null if not found. */
187
+ export function getApiKey() {
188
+ return getStoredValue(API_KEY_ACCOUNT);
189
+ }
190
+ /** Store the API key. */
191
+ export function setApiKey(key) {
192
+ setStoredValue(API_KEY_ACCOUNT, key);
193
+ }
194
+ /** Get the stored model ID. Returns null if not set. */
195
+ export function getModel() {
196
+ return getStoredValue(MODEL_ACCOUNT);
197
+ }
198
+ /** Store the selected model ID. */
199
+ export function setModel(modelId) {
200
+ setStoredValue(MODEL_ACCOUNT, modelId);
201
+ }
202
+ /** Delete all stored credentials (provider + API key + model). Best-effort. */
203
+ export function deleteAllCredentials() {
204
+ deleteStoredValue(PROVIDER_ACCOUNT);
205
+ deleteStoredValue(API_KEY_ACCOUNT);
206
+ deleteStoredValue(MODEL_ACCOUNT);
207
+ }
208
+ //# sourceMappingURL=keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Shared PDF utility functions.
3
+ *
4
+ * Contains URL validation, path validation, and PDF fetching logic
5
+ * used by both the service layer and provider implementations.
6
+ */
7
+ /**
8
+ * Check if a string is a Gemini File API URI.
9
+ */
10
+ export declare function isGeminiFileUri(source: string): boolean;
11
+ /**
12
+ * Check if a string is a URL (excluding Gemini File API URIs).
13
+ */
14
+ export declare function isUrl(source: string): boolean;
15
+ /**
16
+ * Validates a local PDF file path.
17
+ * Throws descriptive errors for common issues.
18
+ */
19
+ export declare function validateLocalPath(pdfPath: string): void;
20
+ /**
21
+ * Fetch PDF content from a URL with timeout.
22
+ */
23
+ export declare function fetchPdfFromUrl(url: string): Promise<Buffer>;
24
+ /**
25
+ * Read PDF bytes from a local file path.
26
+ */
27
+ export declare function readPdfBytes(pdfPath: string): Buffer;
28
+ //# sourceMappingURL=pdf-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdf-utils.d.ts","sourceRoot":"","sources":["../src/pdf-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAU7C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmBvD;AAKD;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGpD"}