opencode-websearch 0.1.2 → 0.2.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/config.d.ts CHANGED
@@ -1,10 +1,20 @@
1
- import { ConfigResult } from "./types.js";
1
+ import { AnthropicConfig } from "./types.js";
2
+ interface ProviderData {
3
+ models: Record<string, {
4
+ api: {
5
+ npm: string;
6
+ };
7
+ id: string;
8
+ options: Record<string, unknown>;
9
+ }>;
10
+ key?: string;
11
+ options: Record<string, unknown>;
12
+ }
2
13
  /**
3
- * Resolve Anthropic configuration from multiple sources:
4
- * 1. opencode.json config files (project-level, then global)
5
- * 2. ANTHROPIC_API_KEY environment variable (fallback)
14
+ * Scan providers returned by the SDK for the first Anthropic model
15
+ * with `websearch: true` set in its options.
6
16
  */
7
- declare const getAnthropicConfig: () => ConfigResult;
8
- declare const formatConfigError: (error?: string) => string;
9
- export { formatConfigError, getAnthropicConfig };
17
+ declare const resolveFromProviders: (providers: ProviderData[]) => AnthropicConfig | null;
18
+ declare const formatConfigError: () => string;
19
+ export { formatConfigError, resolveFromProviders };
10
20
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAIb,MAAM,YAAY,CAAC;AAiJpB;;;;GAIG;AACH,QAAA,MAAM,kBAAkB,QAAO,YAiB9B,CAAC;AAEF,QAAA,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,MAuB3C,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAI7C,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC/F,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAqBD;;;GAGG;AACH,QAAA,MAAM,oBAAoB,GAAI,WAAW,YAAY,EAAE,KAAG,eAAe,GAAG,IAgB3E,CAAC;AAIF,QAAA,MAAM,iBAAiB,QAAO,MA6B0B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,13 +1,11 @@
1
- declare const DEFAULT_MODEL = "claude-sonnet-4-5";
1
+ declare const ANTHROPIC_NPM_PACKAGE = "@ai-sdk/anthropic";
2
2
  declare const DEFAULT_SEARCH_USES = 5;
3
3
  declare const EMPTY_LENGTH = 0;
4
- declare const ENV_VAR_CAPTURE_GROUP = 1;
5
- declare const FIRST_MODEL_INDEX = 0;
6
4
  declare const MAX_RESPONSE_TOKENS = 16000;
7
5
  declare const MAX_SEARCH_USES = 10;
8
6
  declare const MIN_QUERY_LENGTH = 2;
9
7
  declare const MIN_SEARCH_USES = 1;
10
8
  declare const MONTH_OFFSET = 1;
11
9
  declare const PAD_LENGTH = 2;
12
- export { DEFAULT_MODEL, DEFAULT_SEARCH_USES, EMPTY_LENGTH, ENV_VAR_CAPTURE_GROUP, FIRST_MODEL_INDEX, MAX_RESPONSE_TOKENS, MAX_SEARCH_USES, MIN_QUERY_LENGTH, MIN_SEARCH_USES, MONTH_OFFSET, PAD_LENGTH, };
10
+ export { ANTHROPIC_NPM_PACKAGE, DEFAULT_SEARCH_USES, EMPTY_LENGTH, MAX_RESPONSE_TOKENS, MAX_SEARCH_USES, MIN_QUERY_LENGTH, MIN_SEARCH_USES, MONTH_OFFSET, PAD_LENGTH, };
13
11
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,aAAa,sBAAsB,CAAC;AAC1C,QAAA,MAAM,mBAAmB,IAAI,CAAC;AAC9B,QAAA,MAAM,YAAY,IAAI,CAAC;AACvB,QAAA,MAAM,qBAAqB,IAAI,CAAC;AAChC,QAAA,MAAM,iBAAiB,IAAI,CAAC;AAC5B,QAAA,MAAM,mBAAmB,QAAS,CAAC;AACnC,QAAA,MAAM,eAAe,KAAK,CAAC;AAC3B,QAAA,MAAM,gBAAgB,IAAI,CAAC;AAC3B,QAAA,MAAM,eAAe,IAAI,CAAC;AAC1B,QAAA,MAAM,YAAY,IAAI,CAAC;AACvB,QAAA,MAAM,UAAU,IAAI,CAAC;AAErB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,UAAU,GACX,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,qBAAqB,sBAAsB,CAAC;AAClD,QAAA,MAAM,mBAAmB,IAAI,CAAC;AAC9B,QAAA,MAAM,YAAY,IAAI,CAAC;AACvB,QAAA,MAAM,mBAAmB,QAAS,CAAC;AACnC,QAAA,MAAM,eAAe,KAAK,CAAC;AAC3B,QAAA,MAAM,gBAAgB,IAAI,CAAC;AAC3B,QAAA,MAAM,eAAe,IAAI,CAAC;AAC1B,QAAA,MAAM,YAAY,IAAI,CAAC;AACvB,QAAA,MAAM,UAAU,IAAI,CAAC;AAErB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,UAAU,GACX,CAAC"}
package/dist/helpers.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  declare const getTodayDate: () => string;
2
- declare const resolveEnvVar: (value: string) => string;
3
2
  declare const getCurrentMonthYear: () => string;
4
- declare const normalizeBaseURL: (url: string) => string;
5
- export { getCurrentMonthYear, getTodayDate, normalizeBaseURL, resolveEnvVar };
3
+ export { getCurrentMonthYear, getTodayDate };
6
4
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,YAAY,QAAO,MAMxB,CAAC;AAEF,QAAA,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAMtC,CAAC;AAEF,QAAA,MAAM,mBAAmB,QAAO,MAC4C,CAAC;AAE7E,QAAA,MAAM,gBAAgB,GAAI,KAAK,MAAM,KAAG,MAAqC,CAAC;AAE9E,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,YAAY,QAAO,MAMxB,CAAC;AAEF,QAAA,MAAM,mBAAmB,QAAO,MAC4C,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- declare const _default: () => Promise<{
1
+ declare const _default: (input: import("@opencode-ai/plugin").PluginInput) => Promise<{
2
2
  tool: {
3
3
  "web-search": {
4
4
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AASA,wBAgEqB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AASA,wBAsEoB"}
package/dist/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  // src/constants.ts
2
- var DEFAULT_MODEL = "claude-sonnet-4-5";
2
+ var ANTHROPIC_NPM_PACKAGE = "@ai-sdk/anthropic";
3
3
  var DEFAULT_SEARCH_USES = 5;
4
4
  var EMPTY_LENGTH = 0;
5
- var ENV_VAR_CAPTURE_GROUP = 1;
6
- var FIRST_MODEL_INDEX = 0;
7
5
  var MAX_RESPONSE_TOKENS = 16000;
8
6
  var MAX_SEARCH_USES = 10;
9
7
  var MIN_QUERY_LENGTH = 2;
@@ -115,153 +113,37 @@ var executeSearch = async (config, args) => {
115
113
  };
116
114
 
117
115
  // src/config.ts
118
- import { existsSync, readFileSync } from "node:fs";
119
-
120
- // src/helpers.ts
121
- var resolveEnvVar = (value) => {
122
- const match = value.match(/^\{env:(\w+)\}$/);
123
- if (match?.[ENV_VAR_CAPTURE_GROUP]) {
124
- return process.env[match[ENV_VAR_CAPTURE_GROUP]] ?? "";
125
- }
126
- return value;
127
- };
128
- var getCurrentMonthYear = () => new Date().toLocaleDateString("en-US", { month: "long", year: "numeric" });
116
+ var isAnthropicModel = (model) => model.api.npm === ANTHROPIC_NPM_PACKAGE;
117
+ var hasWebSearch = (model) => model.options.websearch === true;
129
118
  var normalizeBaseURL = (url) => url.replace(/\/v1\/?$/, "");
130
-
131
- // src/config.ts
132
- import { homedir } from "node:os";
133
- import { join } from "node:path";
134
- var CONFIG_PATHS = [
135
- join(process.cwd(), "opencode.json"),
136
- join(process.cwd(), ".opencode", "opencode.json"),
137
- join(homedir(), ".config", "opencode", "opencode.json")
138
- ];
139
- var parseConfigFile = (configPath) => {
140
- try {
141
- return JSON.parse(readFileSync(configPath, "utf8"));
142
- } catch (error) {
143
- if (error instanceof SyntaxError) {
144
- return `Failed to parse ${configPath}: ${error.message}`;
145
- }
146
- return `Failed to parse ${configPath}: ${String(error)}`;
147
- }
148
- };
149
- var resolveProviderApiKey = (ctx, rawApiKey) => {
150
- const apiKey = resolveEnvVar(rawApiKey);
151
- if (apiKey) {
152
- return apiKey;
153
- }
154
- const envMatch = rawApiKey.match(/^\{env:(\w+)\}$/);
155
- if (envMatch) {
156
- ctx.errors.push(`${ctx.configPath}: Environment variable ${envMatch[ENV_VAR_CAPTURE_GROUP]} is not set`);
157
- } else {
158
- ctx.errors.push(`${ctx.configPath}: Provider "${ctx.providerName}" has empty apiKey`);
159
- }
160
- return;
161
- };
162
- var resolveModelName = (provider) => {
163
- if (!provider.models) {
164
- return DEFAULT_MODEL;
165
- }
166
- const models = Object.keys(provider.models);
167
- return models[FIRST_MODEL_INDEX] ?? DEFAULT_MODEL;
168
- };
169
- var resolveBaseURL = (provider) => {
170
- if (!provider.options?.baseURL) {
171
- return;
172
- }
173
- return normalizeBaseURL(resolveEnvVar(provider.options.baseURL));
174
- };
175
- var resolveProviderConfig = (ctx, provider) => {
176
- if (provider.npm !== "@ai-sdk/anthropic") {
177
- return;
178
- }
179
- if (!provider.options?.apiKey) {
180
- ctx.errors.push(`${ctx.configPath}: Provider "${ctx.providerName}" has no apiKey configured`);
181
- return;
182
- }
183
- const apiKey = resolveProviderApiKey(ctx, provider.options.apiKey);
184
- if (!apiKey) {
185
- return;
186
- }
187
- return {
188
- apiKey,
189
- baseURL: resolveBaseURL(provider),
190
- model: resolveModelName(provider)
191
- };
192
- };
193
- var scanProviders = (configPath, providers, errors) => {
194
- for (const [providerName, provider] of Object.entries(providers)) {
195
- const ctx = { configPath, errors, providerName };
196
- const resolved = resolveProviderConfig(ctx, provider);
197
- if (resolved) {
198
- return resolved;
199
- }
200
- }
201
- return;
202
- };
203
- var scanConfigFile = (configPath, errors) => {
204
- if (!existsSync(configPath)) {
119
+ var extractBaseURL = (options) => {
120
+ if (typeof options.baseURL !== "string") {
205
121
  return;
206
122
  }
207
- const parsed = parseConfigFile(configPath);
208
- if (typeof parsed === "string") {
209
- errors.push(parsed);
210
- return;
211
- }
212
- if (!parsed.provider) {
213
- errors.push(`${configPath}: No "provider" field found`);
214
- return;
215
- }
216
- return scanProviders(configPath, parsed.provider, errors);
123
+ return normalizeBaseURL(options.baseURL);
217
124
  };
218
- var scanAllConfigFiles = (errors) => {
219
- for (const configPath of CONFIG_PATHS) {
220
- const resolved = scanConfigFile(configPath, errors);
221
- if (resolved) {
222
- return resolved;
223
- }
224
- }
225
- return;
226
- };
227
- var getEnvFallback = () => {
228
- const envApiKey = process.env.ANTHROPIC_API_KEY;
229
- if (envApiKey) {
230
- return {
231
- config: {
232
- apiKey: envApiKey,
233
- model: DEFAULT_MODEL
125
+ var resolveFromProviders = (providers) => {
126
+ for (const provider of providers) {
127
+ for (const model of Object.values(provider.models)) {
128
+ if (isAnthropicModel(model) && hasWebSearch(model)) {
129
+ if (!provider.key) {
130
+ return null;
131
+ }
132
+ return {
133
+ apiKey: provider.key,
134
+ baseURL: extractBaseURL(provider.options),
135
+ model: model.id
136
+ };
234
137
  }
235
- };
236
- }
237
- return;
238
- };
239
- var getAnthropicConfig = () => {
240
- const errors = [];
241
- const fromConfig = scanAllConfigFiles(errors);
242
- if (fromConfig) {
243
- return { config: fromConfig };
244
- }
245
- const fromEnv = getEnvFallback();
246
- if (fromEnv) {
247
- return fromEnv;
248
- }
249
- if (errors.length > EMPTY_LENGTH) {
250
- return { config: null, error: errors.join(`
251
- `) };
138
+ }
252
139
  }
253
- return { config: null };
140
+ return null;
254
141
  };
255
- var formatConfigError = (error) => {
256
- let hint = "";
257
- if (error) {
258
- hint = `
142
+ var formatConfigError = () => `Error: web-search requires an Anthropic provider with \`websearch: true\` set on at least one model.
259
143
 
260
- ${error}`;
261
- }
262
- return `Error: web-search requires an Anthropic API key.
144
+ No model with \`"websearch": true\` was found in your opencode.json configuration.
263
145
 
264
- Set the ANTHROPIC_API_KEY environment variable, or add an Anthropic provider to your opencode.json:
146
+ To fix this, add an Anthropic provider to your opencode.json and set \`"websearch": true\` in the options of the model you want to use for web searches:
265
147
 
266
148
  {
267
149
  "provider": {
@@ -271,24 +153,42 @@ Set the ANTHROPIC_API_KEY environment variable, or add an Anthropic provider to
271
153
  "apiKey": "{env:ANTHROPIC_API_KEY}"
272
154
  },
273
155
  "models": {
274
- "claude-sonnet-4-5": { "name": "Claude Sonnet 4.5" }
156
+ "claude-sonnet-4-5": {
157
+ "options": {
158
+ "websearch": true
159
+ }
160
+ }
275
161
  }
276
162
  }
277
163
  }
278
- }${hint}`;
279
- };
164
+ }
165
+
166
+ Steps:
167
+ 1. Open your opencode.json (project root, .opencode/opencode.json, or ~/.config/opencode/opencode.json)
168
+ 2. Ensure you have an Anthropic provider configured with a valid API key
169
+ 3. Add \`"websearch": true\` to the \`options\` of the Claude model you want to use for web search
170
+ 4. Restart OpenCode to pick up the configuration change`;
171
+
172
+ // src/helpers.ts
173
+ var getCurrentMonthYear = () => new Date().toLocaleDateString("en-US", { month: "long", year: "numeric" });
280
174
 
281
175
  // src/index.ts
282
- var src_default = async () => ({
283
- tool: {
284
- "web-search": tool({
285
- args: {
286
- allowed_domains: tool.schema.array(tool.schema.string()).optional().describe("Only include results from these domains"),
287
- blocked_domains: tool.schema.array(tool.schema.string()).optional().describe("Exclude results from these domains"),
288
- max_uses: tool.schema.number().min(MIN_SEARCH_USES).max(MAX_SEARCH_USES).optional().describe("Maximum number of searches to perform (default: 5)"),
289
- query: tool.schema.string().min(MIN_QUERY_LENGTH).describe("The search query to execute")
290
- },
291
- description: `- Allows OpenCode to search the web and use the results to inform responses
176
+ var src_default = async (input) => {
177
+ const { data } = await input.client.config.providers();
178
+ let config = null;
179
+ if (data) {
180
+ config = resolveFromProviders(data.providers);
181
+ }
182
+ return {
183
+ tool: {
184
+ "web-search": tool({
185
+ args: {
186
+ allowed_domains: tool.schema.array(tool.schema.string()).optional().describe("Only include results from these domains"),
187
+ blocked_domains: tool.schema.array(tool.schema.string()).optional().describe("Exclude results from these domains"),
188
+ max_uses: tool.schema.number().min(MIN_SEARCH_USES).max(MAX_SEARCH_USES).optional().describe("Maximum number of searches to perform (default: 5)"),
189
+ query: tool.schema.string().min(MIN_QUERY_LENGTH).describe("The search query to execute")
190
+ },
191
+ description: `- Allows OpenCode to search the web and use the results to inform responses
292
192
  - Provides up-to-date information for current events and recent data
293
193
  - Returns search result information formatted as search result blocks, including links as markdown hyperlinks
294
194
  - Use this tool for accessing information beyond the model's knowledge cutoff
@@ -312,23 +212,23 @@ Usage notes:
312
212
  IMPORTANT - Use the correct year in search queries:
313
213
  - It is currently ${getCurrentMonthYear()}. You MUST use this when searching for recent information, documentation, or current events.
314
214
  - Example: If the user asks for "latest React docs", search for "React documentation" with the current year, NOT last year`,
315
- async execute(args) {
316
- const { config, error } = getAnthropicConfig();
317
- if (!config) {
318
- return formatConfigError(error);
215
+ async execute(args) {
216
+ if (!config) {
217
+ return formatConfigError();
218
+ }
219
+ if (args.allowed_domains && args.blocked_domains) {
220
+ return "Error: Cannot specify both allowed_domains and blocked_domains.";
221
+ }
222
+ try {
223
+ return await executeSearch(config, args);
224
+ } catch (error) {
225
+ return formatErrorMessage(error);
226
+ }
319
227
  }
320
- if (args.allowed_domains && args.blocked_domains) {
321
- return "Error: Cannot specify both allowed_domains and blocked_domains.";
322
- }
323
- try {
324
- return await executeSearch(config, args);
325
- } catch (error2) {
326
- return formatErrorMessage(error2);
327
- }
328
- }
329
- })
330
- }
331
- });
228
+ })
229
+ }
230
+ };
231
+ };
332
232
  export {
333
233
  src_default as default
334
234
  };
package/dist/types.d.ts CHANGED
@@ -3,28 +3,6 @@ interface AnthropicConfig {
3
3
  baseURL?: string;
4
4
  model: string;
5
5
  }
6
- interface OpenCodeProvider {
7
- models?: Record<string, {
8
- name?: string;
9
- }>;
10
- npm?: string;
11
- options?: {
12
- apiKey?: string;
13
- baseURL?: string;
14
- };
15
- }
16
- interface OpenCodeConfig {
17
- provider?: Record<string, OpenCodeProvider>;
18
- }
19
- interface ConfigResult {
20
- config: AnthropicConfig | null;
21
- error?: string;
22
- }
23
- interface ProviderContext {
24
- configPath: string;
25
- errors: string[];
26
- providerName: string;
27
- }
28
6
  interface WebSearchResult {
29
7
  page_age?: string;
30
8
  title: string;
@@ -58,5 +36,5 @@ type ContentBlock = {
58
36
  text: string;
59
37
  type: "text";
60
38
  } | ServerToolUse | WebSearchToolResult;
61
- export { AnthropicConfig, ConfigResult, ContentBlock, OpenCodeConfig, OpenCodeProvider, ProviderContext, SearchUsage, ServerToolUse, WebSearchResult, WebSearchToolResult, };
39
+ export { AnthropicConfig, ContentBlock, SearchUsage, ServerToolUse, WebSearchResult, WebSearchToolResult, };
62
40
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC7C;AAED,UAAU,YAAY;IACpB,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAe;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAID,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,eAAe,EAAE,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,8BAA8B,CAAA;KAAE,CAAC;IAC1F,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,wBAAwB,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAEzF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,GACpB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,mBAAmB,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,eAAe,EAAE,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,8BAA8B,CAAA;KAAE,CAAC;IAC1F,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,wBAAwB,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAED,KAAK,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAEzF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,GACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-websearch",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "description": "Claude Code's WebSearch tool ported to OpenCode",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",