opencode-1password-auth 1.0.8 → 1.0.10

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/README.md CHANGED
@@ -192,7 +192,7 @@ In your `opencode.json`, use `{env:VARIABLE_NAME}` syntax to reference injected
192
192
 
193
193
  > **Note**: While `{env:VAR}` syntax works for MCP servers in `opencode.json`, it **does NOT work** for provider authentication in `auth.json`. For providers, the plugin uses `client.auth.set()` instead.
194
194
 
195
- ## How It Works (v1.0.6+)
195
+ ## How It Works (v1.0.10+)
196
196
 
197
197
  1. **Immediate Initialization**: When OpenCode loads the plugin, it immediately:
198
198
  - Creates 1Password SDK client using `OP_SERVICE_ACCOUNT_TOKEN`
@@ -266,7 +266,7 @@ The plugin writes detailed logs to `~/.opencode-1password-debug/debug.log`. Chec
266
266
  - **1Password Permissions**: Service account needs read access to environments
267
267
  - **Variable Names**: Provider names in 1Password should match auth.json provider IDs (case-insensitive, underscores converted to hyphens)
268
268
 
269
- ## Current Status (v1.0.6)
269
+ ## Current Status (v1.0.10)
270
270
 
271
271
  ### ✅ Implemented
272
272
  - **Provider Authentication**: `client.auth.set()` at runtime
@@ -327,6 +327,10 @@ The plugin works around OpenCode's limitation of not resolving `{env:VAR}` in `a
327
327
  ```
328
328
 
329
329
  ### Version History
330
+ - **v1.0.10**: SDK import fix - correct named import for createClient
331
+ - **v1.0.9**: Timing fixes - immediate initialization, config hook, enhanced logging, ESM structure
332
+ - **v1.0.8**: Windows compatibility - permission handling fixes
333
+ - **v1.0.7**: Manual publish after local plugin testing
330
334
  - **v1.0.6**: Timing fixes - immediate initialization, config hook, enhanced logging
331
335
  - **v1.0.5**: Debug logging and error handling improvements
332
336
  - **v1.0.4**: Variable normalization and multiple env var formats
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from "@opencode-ai/plugin";
2
+ export declare const OnePasswordAuthPlugin: Plugin;
3
+ export default OnePasswordAuthPlugin;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AA0ClD,eAAO,MAAM,qBAAqB,EAAE,MA2ZnC,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,388 @@
1
+ import { createClient } from "@1password/sdk";
2
+ import * as fs from 'node:fs';
3
+ import * as path from 'node:path';
4
+ // Debug logging to file
5
+ const debugLog = (message) => {
6
+ const timestamp = new Date().toISOString();
7
+ const logMessage = `[${timestamp}] 1Password: ${message}\n`;
8
+ console.log(logMessage.trim());
9
+ try {
10
+ // Try to write to a debug log file
11
+ const home = process.env.HOME || process.env.USERPROFILE || '';
12
+ const logDir = path.join(home, '.opencode-1password-debug');
13
+ if (!fs.existsSync(logDir)) {
14
+ fs.mkdirSync(logDir, { recursive: true });
15
+ }
16
+ const logFile = path.join(logDir, 'debug.log');
17
+ fs.appendFileSync(logFile, logMessage);
18
+ }
19
+ catch (err) {
20
+ // Ignore file logging errors
21
+ }
22
+ };
23
+ export const OnePasswordAuthPlugin = async ({ client, $ }) => {
24
+ // TEST: This log should appear in OpenCode's terminal output if plugin loads
25
+ console.log("1Password Plugin: Export function called - starting initialization");
26
+ let opClient = null;
27
+ let mcpsEnvId;
28
+ let initialized = false;
29
+ let executionOrder = 0;
30
+ debugLog(`Plugin loaded (order: ${++executionOrder})`);
31
+ // Log environment variable status (redacted)
32
+ const token = process.env.OP_SERVICE_ACCOUNT_TOKEN;
33
+ const configId = process.env.OP_CONFIG_ENV_ID;
34
+ debugLog(`Environment check - OP_SERVICE_ACCOUNT_TOKEN: ${token ? 'SET' : 'MISSING'} (${token ? token.substring(0, 8) + '...' : 'N/A'})`);
35
+ debugLog(`Environment check - OP_CONFIG_ENV_ID: ${configId ? 'SET' : 'MISSING'} (${configId ? configId.substring(0, 8) + '...' : 'N/A'})`);
36
+ const normalizeProviderId = (variableName) => {
37
+ // Convert common patterns to match auth.json provider IDs
38
+ // e.g., "MINIMAX_CODING_PLAN" -> "minimax-coding-plan"
39
+ // e.g., "OPENCODE" -> "opencode"
40
+ // e.g., "DEEPSEEK" -> "deepseek"
41
+ let normalized = variableName.toLowerCase();
42
+ // Convert underscores to hyphens
43
+ normalized = normalized.replace(/_/g, '-');
44
+ debugLog(`Normalized ${variableName} -> ${normalized}`);
45
+ return normalized;
46
+ };
47
+ const getAlternativeEnvVarNames = (providerId) => {
48
+ // Generate all possible env var names that might be used
49
+ const names = new Set();
50
+ // Original providerId (e.g., "minimax-coding-plan")
51
+ names.add(providerId);
52
+ // Uppercase version (e.g., "MINIMAX-CODING-PLAN")
53
+ names.add(providerId.toUpperCase());
54
+ // With underscores instead of hyphens (e.g., "minimax_coding_plan")
55
+ names.add(providerId.replace(/-/g, '_'));
56
+ // Uppercase with underscores (e.g., "MINIMAX_CODING_PLAN")
57
+ names.add(providerId.replace(/-/g, '_').toUpperCase());
58
+ // Just the first part (e.g., "minimax")
59
+ const firstPart = providerId.split('-')[0];
60
+ if (firstPart && firstPart !== providerId) {
61
+ names.add(firstPart);
62
+ names.add(firstPart.toUpperCase());
63
+ }
64
+ return Array.from(names);
65
+ };
66
+ const getHomeDir = () => {
67
+ return process.env.HOME || process.env.USERPROFILE || "";
68
+ };
69
+ const getAuthJsonPath = () => {
70
+ const home = getHomeDir();
71
+ return `${home}/.local/share/opencode/auth.json`;
72
+ };
73
+ const getOpenCodeJsonPath = () => {
74
+ const home = getHomeDir();
75
+ return `${home}/.config/opencode/opencode.json`;
76
+ };
77
+ const initClient = async () => {
78
+ const token = process.env.OP_SERVICE_ACCOUNT_TOKEN;
79
+ if (!token) {
80
+ debugLog("Missing OP_SERVICE_ACCOUNT_TOKEN");
81
+ return null;
82
+ }
83
+ try {
84
+ return await createClient({
85
+ auth: token,
86
+ integrationName: "opencode-1password-env",
87
+ integrationVersion: "1.0.0",
88
+ });
89
+ }
90
+ catch (err) {
91
+ debugLog(`Failed to create client: ${err}`);
92
+ return null;
93
+ }
94
+ };
95
+ const readEnvironmentVariables = async (envId) => {
96
+ if (!opClient)
97
+ return [];
98
+ try {
99
+ const { variables } = await opClient.environments.getVariables(envId);
100
+ debugLog(`Read ${variables?.length || 0} variables from environment ${envId}`);
101
+ return variables || [];
102
+ }
103
+ catch (err) {
104
+ debugLog(`Failed to read environment ${envId}: ${err}`);
105
+ return [];
106
+ }
107
+ };
108
+ const getSecretsFromEnvironment = async (envId) => {
109
+ const vars = await readEnvironmentVariables(envId);
110
+ const secrets = {};
111
+ for (const v of vars) {
112
+ if (v.value) {
113
+ secrets[v.name] = v.value;
114
+ debugLog(`Found secret: ${v.name} (${v.value.length} chars)`);
115
+ }
116
+ }
117
+ return secrets;
118
+ };
119
+ const updateAuthJson = async (providerEnvId) => {
120
+ const authJsonPath = getAuthJsonPath();
121
+ try {
122
+ // Read current auth.json using cat
123
+ const catResult = await $ `cat "${authJsonPath}"`;
124
+ const content = catResult.stdout;
125
+ let auth;
126
+ try {
127
+ auth = JSON.parse(content.toString());
128
+ }
129
+ catch {
130
+ debugLog("auth.json is not valid JSON, skipping");
131
+ return;
132
+ }
133
+ let modified = false;
134
+ for (const [providerId, authConfig] of Object.entries(auth)) {
135
+ if (authConfig.key && !authConfig.key.startsWith("{env:")) {
136
+ // Replace hardcoded key with env var reference
137
+ authConfig.key = `{env:${providerId}}`;
138
+ modified = true;
139
+ debugLog(`Updated auth.json - ${providerId} -> {env:${providerId}}`);
140
+ }
141
+ }
142
+ if (modified) {
143
+ // Write updated content using a temp file and mv
144
+ const newContent = JSON.stringify(auth, null, 2);
145
+ // Use node to write the file since $ heredocs can be tricky
146
+ await $ `node -e "const fs=require('fs'); fs.writeFileSync('${authJsonPath}', JSON.stringify(${JSON.stringify(auth)}, null, 2));"`;
147
+ debugLog("auth.json updated to use environment variables");
148
+ }
149
+ }
150
+ catch (err) {
151
+ debugLog(`Failed to update auth.json: ${err}`);
152
+ }
153
+ };
154
+ const updateOpenCodeJsonMCP = async (mcpEnvId) => {
155
+ const openCodeJsonPath = getOpenCodeJsonPath();
156
+ try {
157
+ // Read current opencode.json using cat
158
+ const catResult = await $ `cat "${openCodeJsonPath}"`;
159
+ const content = catResult.stdout;
160
+ let config;
161
+ try {
162
+ config = JSON.parse(content.toString());
163
+ }
164
+ catch {
165
+ debugLog("opencode.json is not valid JSON, skipping");
166
+ return;
167
+ }
168
+ if (!config.mcp) {
169
+ debugLog("No MCP configuration found, skipping");
170
+ return;
171
+ }
172
+ let modified = false;
173
+ for (const [serverName, serverConfig] of Object.entries(config.mcp)) {
174
+ if (serverConfig?.environment) {
175
+ for (const [key, value] of Object.entries(serverConfig.environment)) {
176
+ if (typeof value === "string" && !value.startsWith("{env:") && !value.startsWith("$")) {
177
+ // Replace hardcoded value with env var reference
178
+ serverConfig.environment[key] = `{env:${key}}`;
179
+ modified = true;
180
+ debugLog(`Updated opencode.json - ${serverName}.${key} -> {env:${key}}`);
181
+ }
182
+ }
183
+ }
184
+ }
185
+ if (modified) {
186
+ // Write updated content
187
+ await $ `node -e "const fs=require('fs'); fs.writeFileSync('${openCodeJsonPath}', JSON.stringify(${JSON.stringify(config)}, null, 2));"`;
188
+ debugLog("opencode.json MCP config updated to use environment variables");
189
+ }
190
+ }
191
+ catch (err) {
192
+ debugLog(`Failed to update opencode.json: ${err}`);
193
+ }
194
+ };
195
+ const authenticateProviders = async (providerEnvId) => {
196
+ if (!opClient)
197
+ return;
198
+ debugLog(`Reading provider secrets from environment ${providerEnvId}`);
199
+ const secrets = await getSecretsFromEnvironment(providerEnvId);
200
+ debugLog(`Found ${Object.keys(secrets).length} provider secrets`);
201
+ for (const [variableName, apiKey] of Object.entries(secrets)) {
202
+ if (!apiKey)
203
+ continue;
204
+ const providerId = normalizeProviderId(variableName);
205
+ debugLog(`Processing ${variableName} -> ${providerId} (key length: ${apiKey.length})`);
206
+ // Set environment variables in multiple formats
207
+ const envVarNames = getAlternativeEnvVarNames(providerId);
208
+ for (const envVarName of envVarNames) {
209
+ process.env[envVarName] = apiKey;
210
+ debugLog(`Set process.env.${envVarName} = ${apiKey.substring(0, 8)}...`);
211
+ }
212
+ try {
213
+ // Authenticate with OpenCode runtime
214
+ debugLog(`Calling client.auth.set for ${providerId} with key length ${apiKey.length}`);
215
+ const result = await client.auth.set({
216
+ path: { id: providerId },
217
+ body: { type: "api", key: apiKey },
218
+ });
219
+ debugLog(`✓ ${providerId} authenticated (from ${variableName}) - Result: ${JSON.stringify(result)}`);
220
+ }
221
+ catch (err) {
222
+ debugLog(`Failed to authenticate ${providerId}: ${err}`);
223
+ if (err instanceof Error) {
224
+ debugLog(`Error message: ${err.message}`);
225
+ debugLog(`Error stack: ${err.stack}`);
226
+ }
227
+ // Also log to console for immediate visibility
228
+ console.error(`[1Password Plugin] Failed to authenticate ${providerId}: ${err}`);
229
+ }
230
+ }
231
+ };
232
+ const getConfiguredMCPVars = () => {
233
+ const vars = new Set();
234
+ try {
235
+ const config = client.config;
236
+ if (config?.mcp) {
237
+ for (const [, serverConfig] of Object.entries(config.mcp)) {
238
+ if (serverConfig?.environment) {
239
+ for (const [key] of Object.entries(serverConfig.environment)) {
240
+ if (key.startsWith("{env:")) {
241
+ const envVar = key.slice(5, -1);
242
+ vars.add(envVar);
243
+ }
244
+ else {
245
+ vars.add(key);
246
+ }
247
+ }
248
+ }
249
+ }
250
+ }
251
+ }
252
+ catch (err) {
253
+ debugLog(`Failed to read MCP config: ${err}`);
254
+ }
255
+ return vars;
256
+ };
257
+ const injectMCPSecrets = async (mcpEnvId) => {
258
+ const neededVars = getConfiguredMCPVars();
259
+ if (neededVars.size === 0) {
260
+ return {};
261
+ }
262
+ const secrets = await getSecretsFromEnvironment(mcpEnvId);
263
+ const toInject = {};
264
+ for (const varName of neededVars) {
265
+ if (secrets[varName]) {
266
+ toInject[varName] = secrets[varName];
267
+ }
268
+ }
269
+ return toInject;
270
+ };
271
+ // Initialize as soon as plugin loads (config hook runs early)
272
+ const initializePlugin = async () => {
273
+ debugLog(`initializePlugin called (order: ${++executionOrder})`);
274
+ if (initialized) {
275
+ debugLog("initializePlugin: already initialized, skipping");
276
+ return;
277
+ }
278
+ debugLog("Initializing plugin...");
279
+ opClient = await initClient();
280
+ if (!opClient) {
281
+ debugLog("No client available");
282
+ return;
283
+ }
284
+ const configEnvId = process.env.OP_CONFIG_ENV_ID;
285
+ if (!configEnvId) {
286
+ debugLog("Missing OP_CONFIG_ENV_ID");
287
+ return;
288
+ }
289
+ debugLog(`Reading config from environment ${configEnvId}`);
290
+ const vars = await readEnvironmentVariables(configEnvId);
291
+ const configEnvIds = {};
292
+ for (const v of vars) {
293
+ if (v.name.endsWith("_ENV_ID") && v.value) {
294
+ configEnvIds[v.name] = v.value;
295
+ debugLog(`Found ${v.name} = ${v.value.substring(0, 10)}...`);
296
+ }
297
+ }
298
+ const providersEnvId = configEnvIds.OPENCODE_PROVIDERS_ENV_ID;
299
+ if (providersEnvId) {
300
+ // Authenticate providers - client.auth.set() will write to auth.json
301
+ // SKIP updateAuthJson - it writes {env:...} placeholders which cause issues
302
+ // await updateAuthJson(providersEnvId);
303
+ await authenticateProviders(providersEnvId);
304
+ }
305
+ const mcpEnvIdFromConfig = configEnvIds.OPENCODE_MCPS_ENV_ID;
306
+ if (mcpEnvIdFromConfig) {
307
+ mcpsEnvId = mcpEnvIdFromConfig;
308
+ await updateOpenCodeJsonMCP(mcpEnvIdFromConfig);
309
+ const toInject = await injectMCPSecrets(mcpEnvIdFromConfig);
310
+ if (Object.keys(toInject).length > 0) {
311
+ debugLog(`Injected ${Object.keys(toInject).join(", ")} for MCP`);
312
+ }
313
+ }
314
+ initialized = true;
315
+ debugLog("Plugin initialization complete");
316
+ };
317
+ // Start initialization immediately (but config hook might run first)
318
+ debugLog(`Starting immediate initialization (order: ${++executionOrder})`);
319
+ if (!initialized) {
320
+ initializePlugin().catch(err => {
321
+ debugLog(`Failed to initialize plugin: ${err}`);
322
+ });
323
+ }
324
+ else {
325
+ debugLog("Already initialized, skipping immediate init");
326
+ }
327
+ return {
328
+ async config(config) {
329
+ debugLog(`Config hook called (order: ${++executionOrder})`);
330
+ // Config hook runs early - try to authenticate here
331
+ if (!initialized) {
332
+ debugLog("Config hook: attempting authentication");
333
+ try {
334
+ await initializePlugin();
335
+ initialized = true;
336
+ }
337
+ catch (err) {
338
+ debugLog(`Config hook authentication failed: ${err}`);
339
+ }
340
+ }
341
+ else {
342
+ debugLog("Config hook: already initialized");
343
+ }
344
+ },
345
+ async event({ event }) {
346
+ debugLog(`Received event: ${event.type}`);
347
+ if (event.type === "server.connected") {
348
+ debugLog("Server connected - rechecking authentication");
349
+ // Re-authenticate providers in case they weren't set earlier
350
+ if (opClient) {
351
+ const configEnvId = process.env.OP_CONFIG_ENV_ID;
352
+ if (configEnvId) {
353
+ const vars = await readEnvironmentVariables(configEnvId);
354
+ const configEnvIds = {};
355
+ for (const v of vars) {
356
+ if (v.name.endsWith("_ENV_ID") && v.value) {
357
+ configEnvIds[v.name] = v.value;
358
+ }
359
+ }
360
+ const providersEnvId = configEnvIds.OPENCODE_PROVIDERS_ENV_ID;
361
+ if (providersEnvId) {
362
+ await authenticateProviders(providersEnvId);
363
+ }
364
+ }
365
+ }
366
+ }
367
+ },
368
+ async "shell.env"(input, output) {
369
+ if (!opClient || !mcpsEnvId)
370
+ return;
371
+ const toInject = await injectMCPSecrets(mcpsEnvId);
372
+ for (const [varName, value] of Object.entries(toInject)) {
373
+ output.env[varName] = value;
374
+ debugLog(`Injected ${varName} into shell environment`);
375
+ }
376
+ },
377
+ async "tool.execute.before"(input) {
378
+ if (input.tool !== "read")
379
+ return;
380
+ const fileArgs = input.args;
381
+ if (fileArgs?.filePath && fileArgs.filePath.includes(".env")) {
382
+ debugLog("Warning - .env file access detected. Consider using 1Password for secrets management.");
383
+ }
384
+ },
385
+ };
386
+ };
387
+ export default OnePasswordAuthPlugin;
388
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,35 @@
1
1
  {
2
2
  "name": "opencode-1password-auth",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "1Password integration for OpenCode - authenticate providers and inject MCP secrets from 1Password environments",
5
5
  "type": "module",
6
- "main": "index.ts",
7
- "keywords": ["opencode", "opencode-plugin", "1password", "mcp", "secrets"],
6
+ "main": "dist/index.js",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.js"
11
+ }
12
+ },
13
+ "files": ["dist"],
14
+ "keywords": [
15
+ "opencode",
16
+ "opencode-plugin",
17
+ "1password",
18
+ "mcp",
19
+ "secrets"
20
+ ],
8
21
  "author": "",
9
22
  "license": "MIT",
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "prepublishOnly": "npm run build"
26
+ },
10
27
  "dependencies": {
11
28
  "@1password/sdk": "0.4.1-beta.1"
29
+ },
30
+ "devDependencies": {
31
+ "@opencode-ai/plugin": "^1.3.13",
32
+ "@types/node": "^25.5.2",
33
+ "typescript": "^5.0.0"
12
34
  }
13
- }
35
+ }