opencode-puter-auth 1.0.9 → 1.0.11

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.
@@ -1,6 +1,22 @@
1
1
  /**
2
- * OpenCode plugin implementation following the standard pattern
3
- * Based on OpenCode plugin documentation - no external dependencies needed
2
+ * OpenCode plugin implementation with AI SDK provider
3
+ * Implements auth loader pattern like Antigravity plugin
4
4
  */
5
- export declare const PuterAuthPlugin: (_ctx: any) => Promise<{}>;
5
+ export declare const PuterAuthPlugin: (_ctx: any) => Promise<{
6
+ 'auth.provider': {
7
+ puter: {
8
+ name: string;
9
+ type: "oauth";
10
+ login(): Promise<{
11
+ success: boolean;
12
+ }>;
13
+ };
14
+ };
15
+ 'auth.loader': {
16
+ puter: () => Promise<{
17
+ apiKey: string;
18
+ fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
19
+ }>;
20
+ };
21
+ }>;
6
22
  //# sourceMappingURL=plugin-minimal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-minimal.d.ts","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,eAAe,GAAU,MAAM,GAAG,gBAO9C,CAAC"}
1
+ {"version":3,"file":"plugin-minimal.d.ts","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,eAAO,MAAM,eAAe,GAAU,MAAM,GAAG;;;;;;;;;;;;;yBAmClB,WAAW,GAAG,GAAG,SAAS,WAAW;;;EA4FjE,CAAC"}
@@ -1,13 +1,128 @@
1
1
  /**
2
- * OpenCode plugin implementation following the standard pattern
3
- * Based on OpenCode plugin documentation - no external dependencies needed
2
+ * OpenCode plugin implementation with AI SDK provider
3
+ * Implements auth loader pattern like Antigravity plugin
4
4
  */
5
+ import { PuterAuthManager } from './auth.js';
6
+ import path from 'path';
7
+ import os from 'os';
8
+ // Get config directory
9
+ function getConfigDir() {
10
+ return path.join(os.homedir(), '.config', 'opencode');
11
+ }
5
12
  // OpenCode plugin function - async with context parameter
6
13
  export const PuterAuthPlugin = async (_ctx) => {
7
14
  console.log("Puter Auth Plugin initialized!");
8
15
  return {
9
- // Plugin hooks go here
10
- // For now, just return empty to test loading
16
+ // Auth provider - handles OAuth flow
17
+ 'auth.provider': {
18
+ puter: {
19
+ name: 'Puter.com (FREE Unlimited)',
20
+ type: 'oauth',
21
+ async login() {
22
+ const configDir = getConfigDir();
23
+ const authManager = new PuterAuthManager(configDir);
24
+ await authManager.init();
25
+ const result = await authManager.login();
26
+ if (!result.success) {
27
+ throw new Error(result.error || 'Authentication failed');
28
+ }
29
+ return { success: true };
30
+ }
31
+ }
32
+ },
33
+ // Auth loader - returns custom fetch for AI SDK provider
34
+ 'auth.loader': {
35
+ puter: async () => {
36
+ const configDir = getConfigDir();
37
+ const authManager = new PuterAuthManager(configDir);
38
+ await authManager.init();
39
+ const activeAccount = authManager.getActiveAccount();
40
+ if (!activeAccount) {
41
+ throw new Error('Not authenticated with Puter. Run: opencode auth login');
42
+ }
43
+ return {
44
+ apiKey: '', // Not used, we use custom fetch
45
+ async fetch(input, init) {
46
+ const url = input.toString();
47
+ // Intercept requests to puter models
48
+ if (url.includes('/chat/completions') && init?.body) {
49
+ const body = JSON.parse(init.body);
50
+ // Check if this is a puter model request
51
+ if (body.model?.startsWith('puter/') || body.model?.includes('claude-opus-4-5') || body.model?.includes('claude-sonnet-4-5')) {
52
+ // Map model names to Puter drivers
53
+ const modelMap = {
54
+ 'claude-opus-4-5': 'claude-opus-4-5',
55
+ 'claude-sonnet-4-5': 'claude-sonnet-4-5',
56
+ 'claude-sonnet-4': 'claude-sonnet-4',
57
+ 'gpt-4o': 'gpt-4o',
58
+ 'gpt-5-nano': 'gpt-5-nano',
59
+ 'o3-mini': 'o3-mini',
60
+ 'gemini-2.5-pro': 'gemini-2.5-pro',
61
+ 'gemini-2.5-flash': 'gemini-2.5-flash'
62
+ };
63
+ const cleanModel = body.model.replace('puter/', '').replace('google/', '');
64
+ const driver = modelMap[cleanModel] || 'claude-opus-4-5';
65
+ // Translate to Puter API format
66
+ const puterRequest = {
67
+ interface: 'puter-chat-completion',
68
+ driver,
69
+ method: 'complete',
70
+ args: {
71
+ messages: body.messages,
72
+ stream: body.stream || false,
73
+ max_tokens: body.max_tokens,
74
+ temperature: body.temperature
75
+ }
76
+ };
77
+ // Make request to Puter API
78
+ const response = await fetch('http://localhost:8080/drivers/call', {
79
+ method: 'POST',
80
+ headers: {
81
+ 'Content-Type': 'application/json',
82
+ 'Authorization': `Bearer ${activeAccount.authToken}`
83
+ },
84
+ body: JSON.stringify(puterRequest)
85
+ });
86
+ if (!response.ok) {
87
+ throw new Error(`Puter API error: ${response.statusText}`);
88
+ }
89
+ // For streaming responses
90
+ if (body.stream) {
91
+ return response; // Return raw response for streaming
92
+ }
93
+ // For non-streaming, translate response back to OpenAI format
94
+ const puterResponse = await response.json();
95
+ const openaiResponse = {
96
+ id: 'puter-' + Date.now(),
97
+ object: 'chat.completion',
98
+ created: Math.floor(Date.now() / 1000),
99
+ model: body.model,
100
+ choices: [{
101
+ index: 0,
102
+ message: {
103
+ role: 'assistant',
104
+ content: puterResponse.result || puterResponse.message || 'No response'
105
+ },
106
+ finish_reason: 'stop'
107
+ }],
108
+ usage: {
109
+ prompt_tokens: 0,
110
+ completion_tokens: 0,
111
+ total_tokens: 0
112
+ }
113
+ };
114
+ return new Response(JSON.stringify(openaiResponse), {
115
+ status: 200,
116
+ headers: { 'Content-Type': 'application/json' }
117
+ });
118
+ }
119
+ }
120
+ // For non-puter requests, pass through
121
+ return fetch(input, init);
122
+ }
123
+ };
124
+ }
125
+ }
11
126
  };
12
127
  };
13
128
  //# sourceMappingURL=plugin-minimal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-minimal.js","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;IACjD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,OAAO;IACL,uBAAuB;IACvB,6CAA6C;KAC9C,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"plugin-minimal.js","sourceRoot":"","sources":["../src/plugin-minimal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-puter-auth",
3
- "version": "1.0.9",
3
+ "version": "1.0.11",
4
4
  "description": "Puter.com OAuth auth plugin for OpenCode - FREE UNLIMITED access to Claude Opus 4.5, Sonnet 4.5, GPT-5, Gemini, and 500+ AI models",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",