beercan 0.6.12 → 0.6.13

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 (56) hide show
  1. package/README.md +21 -9
  2. package/dist/chat/index.d.ts +3 -3
  3. package/dist/chat/index.d.ts.map +1 -1
  4. package/dist/chat/index.js +4 -4
  5. package/dist/chat/index.js.map +1 -1
  6. package/dist/chat/intent.d.ts +2 -2
  7. package/dist/chat/intent.d.ts.map +1 -1
  8. package/dist/chat/intent.js +7 -7
  9. package/dist/chat/intent.js.map +1 -1
  10. package/dist/cli.js +70 -23
  11. package/dist/cli.js.map +1 -1
  12. package/dist/config.d.ts +12 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +9 -0
  15. package/dist/config.js.map +1 -1
  16. package/dist/core/gatekeeper.d.ts +3 -3
  17. package/dist/core/gatekeeper.d.ts.map +1 -1
  18. package/dist/core/gatekeeper.js +12 -12
  19. package/dist/core/gatekeeper.js.map +1 -1
  20. package/dist/core/reflection.d.ts +3 -3
  21. package/dist/core/reflection.d.ts.map +1 -1
  22. package/dist/core/reflection.js +10 -10
  23. package/dist/core/reflection.js.map +1 -1
  24. package/dist/core/runner.d.ts +3 -3
  25. package/dist/core/runner.d.ts.map +1 -1
  26. package/dist/core/runner.js +12 -14
  27. package/dist/core/runner.js.map +1 -1
  28. package/dist/events/daemon.js +3 -3
  29. package/dist/events/daemon.js.map +1 -1
  30. package/dist/index.js +5 -5
  31. package/dist/index.js.map +1 -1
  32. package/dist/providers/anthropic.d.ts +8 -0
  33. package/dist/providers/anthropic.d.ts.map +1 -0
  34. package/dist/providers/anthropic.js +70 -0
  35. package/dist/providers/anthropic.js.map +1 -0
  36. package/dist/providers/factory.d.ts +3 -0
  37. package/dist/providers/factory.d.ts.map +1 -0
  38. package/dist/providers/factory.js +58 -0
  39. package/dist/providers/factory.js.map +1 -0
  40. package/dist/providers/index.d.ts +5 -0
  41. package/dist/providers/index.d.ts.map +1 -0
  42. package/dist/providers/index.js +4 -0
  43. package/dist/providers/index.js.map +1 -0
  44. package/dist/providers/openai.d.ts +16 -0
  45. package/dist/providers/openai.d.ts.map +1 -0
  46. package/dist/providers/openai.js +176 -0
  47. package/dist/providers/openai.js.map +1 -0
  48. package/dist/providers/types.d.ts +54 -0
  49. package/dist/providers/types.d.ts.map +1 -0
  50. package/dist/providers/types.js +4 -0
  51. package/dist/providers/types.js.map +1 -0
  52. package/dist/tools/registry.d.ts +3 -12
  53. package/dist/tools/registry.d.ts.map +1 -1
  54. package/dist/tools/registry.js +3 -3
  55. package/dist/tools/registry.js.map +1 -1
  56. package/package.json +1 -1
@@ -0,0 +1,58 @@
1
+ // ── LLM Provider Factory ─────────────────────────────────────
2
+ // Creates the appropriate LLMProvider based on config.
3
+ import { getConfig } from "../config.js";
4
+ import { AnthropicProvider } from "./anthropic.js";
5
+ export async function createLLMProvider() {
6
+ const config = getConfig();
7
+ const provider = config.llmProvider;
8
+ switch (provider) {
9
+ case "anthropic": {
10
+ if (!config.anthropicApiKey) {
11
+ throw new Error("ANTHROPIC_API_KEY is not set. Run `beercan setup` to configure.");
12
+ }
13
+ const client = await createAnthropicClient(config.anthropicApiKey);
14
+ return new AnthropicProvider(client);
15
+ }
16
+ case "openai": {
17
+ const apiKey = config.openaiApiKey;
18
+ if (!apiKey) {
19
+ throw new Error("OPENAI_API_KEY is not set. Set the env var or use a different provider.");
20
+ }
21
+ const { OpenAIProvider } = await import("./openai.js");
22
+ return new OpenAIProvider({ apiKey });
23
+ }
24
+ case "openai-compatible": {
25
+ const apiKey = config.llmApiKey || config.openaiApiKey || "not-needed";
26
+ const baseURL = config.llmBaseUrl;
27
+ if (!baseURL) {
28
+ throw new Error("BEERCAN_LLM_BASE_URL is required for openai-compatible provider. " +
29
+ "Set it to your LM Studio/Ollama/OpenRouter endpoint (e.g., http://localhost:1234/v1).");
30
+ }
31
+ const { OpenAIProvider } = await import("./openai.js");
32
+ return new OpenAIProvider({ apiKey, baseURL, name: "openai-compatible" });
33
+ }
34
+ default:
35
+ throw new Error(`Unknown LLM provider: ${provider}. Use: anthropic, openai, openai-compatible`);
36
+ }
37
+ }
38
+ /** Create Anthropic SDK client with proxy support */
39
+ async function createAnthropicClient(apiKey) {
40
+ const Anthropic = (await import("@anthropic-ai/sdk")).default;
41
+ const proxyUrl = process.env.HTTPS_PROXY || process.env.HTTP_PROXY || process.env.https_proxy || process.env.http_proxy;
42
+ if (proxyUrl) {
43
+ try {
44
+ const { HttpsProxyAgent } = await import("https-proxy-agent");
45
+ const nodeFetch = await import("node-fetch");
46
+ const agent = new HttpsProxyAgent(proxyUrl);
47
+ return new Anthropic({
48
+ apiKey,
49
+ fetch: ((url, init) => nodeFetch.default(url, { ...init, agent })),
50
+ });
51
+ }
52
+ catch {
53
+ console.warn("[beercan] Proxy detected but proxy deps not installed. Trying direct connection.");
54
+ }
55
+ }
56
+ return new Anthropic({ apiKey });
57
+ }
58
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { LLMProvider, LLMRequest, LLMRequestOptions, LLMResponse, LLMMessage, LLMContentBlock, LLMResponseBlock, LLMTextBlock, LLMToolUseBlock, LLMToolResultBlock, LLMTool, LLMToolChoice, } from "./types.js";
2
+ export { AnthropicProvider } from "./anthropic.js";
3
+ export { OpenAIProvider } from "./openai.js";
4
+ export { createLLMProvider } from "./factory.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EACvD,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAC7C,YAAY,EAAE,eAAe,EAAE,kBAAkB,EACjD,OAAO,EAAE,aAAa,GACvB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AnthropicProvider } from "./anthropic.js";
2
+ export { OpenAIProvider } from "./openai.js";
3
+ export { createLLMProvider } from "./factory.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { LLMProvider, LLMRequest, LLMRequestOptions, LLMResponse } from "./types.js";
2
+ export interface OpenAIProviderOptions {
3
+ apiKey: string;
4
+ baseURL?: string;
5
+ /** Name shown in logs */
6
+ name?: string;
7
+ }
8
+ export declare class OpenAIProvider implements LLMProvider {
9
+ private options;
10
+ readonly providerName: string;
11
+ private clientPromise;
12
+ constructor(options: OpenAIProviderOptions);
13
+ private initClient;
14
+ createMessage(request: LLMRequest, options?: LLMRequestOptions): Promise<LLMResponse>;
15
+ }
16
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAExD,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAe,YAAW,WAAW;IAIpC,OAAO,CAAC,OAAO;IAH3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,aAAa,CAAe;gBAEhB,OAAO,EAAE,qBAAqB;YAMpC,UAAU;IAgBlB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;CAsF5F"}
@@ -0,0 +1,176 @@
1
+ // ── OpenAI Provider ──────────────────────────────────────────
2
+ // Wraps the OpenAI SDK (or compatible APIs) for the LLMProvider interface.
3
+ // Supports: OpenAI, LM Studio, Ollama, OpenRouter, and other OpenAI-compatible endpoints.
4
+ export class OpenAIProvider {
5
+ options;
6
+ providerName;
7
+ clientPromise;
8
+ constructor(options) {
9
+ this.options = options;
10
+ this.providerName = options.name ?? (options.baseURL ? "openai-compatible" : "openai");
11
+ // Lazy-load the OpenAI SDK
12
+ this.clientPromise = this.initClient();
13
+ }
14
+ async initClient() {
15
+ try {
16
+ // Dynamic import — openai is an optional dependency
17
+ const mod = await Function('return import("openai")')();
18
+ const OpenAI = mod.default ?? mod.OpenAI;
19
+ return new OpenAI({
20
+ apiKey: this.options.apiKey,
21
+ ...(this.options.baseURL ? { baseURL: this.options.baseURL } : {}),
22
+ });
23
+ }
24
+ catch {
25
+ throw new Error(`OpenAI SDK not installed. Run: npm install openai`);
26
+ }
27
+ }
28
+ async createMessage(request, options) {
29
+ const client = await this.clientPromise;
30
+ // Build OpenAI messages: system prompt becomes first message
31
+ const messages = [
32
+ { role: "system", content: request.system },
33
+ ...request.messages.flatMap(toOpenAIMessages),
34
+ ];
35
+ // Build tools
36
+ const tools = request.tools?.map(toOpenAITool);
37
+ const toolChoice = request.toolChoice ? toOpenAIToolChoice(request.toolChoice) : undefined;
38
+ const params = {
39
+ model: request.model,
40
+ max_tokens: request.maxTokens,
41
+ messages,
42
+ };
43
+ if (tools && tools.length > 0) {
44
+ params.tools = tools;
45
+ if (toolChoice)
46
+ params.tool_choice = toolChoice;
47
+ }
48
+ const response = await client.chat.completions.create(params, options?.signal ? { signal: options.signal } : undefined);
49
+ const choice = response.choices?.[0];
50
+ if (!choice) {
51
+ return {
52
+ content: [{ type: "text", text: "" }],
53
+ usage: { inputTokens: 0, outputTokens: 0 },
54
+ stopReason: "end_turn",
55
+ };
56
+ }
57
+ // Convert response
58
+ const content = [];
59
+ // Text content
60
+ if (choice.message?.content) {
61
+ content.push({ type: "text", text: choice.message.content });
62
+ }
63
+ // Tool calls
64
+ if (choice.message?.tool_calls) {
65
+ for (const tc of choice.message.tool_calls) {
66
+ let input;
67
+ try {
68
+ input = JSON.parse(tc.function.arguments);
69
+ }
70
+ catch {
71
+ // Some local models produce malformed JSON — wrap as text
72
+ content.push({ type: "text", text: `Tool call parse error: ${tc.function.arguments}` });
73
+ continue;
74
+ }
75
+ content.push({
76
+ type: "tool_use",
77
+ id: tc.id,
78
+ name: tc.function.name,
79
+ input,
80
+ });
81
+ }
82
+ }
83
+ // Ensure at least one content block
84
+ if (content.length === 0) {
85
+ content.push({ type: "text", text: "" });
86
+ }
87
+ // Map finish_reason
88
+ const finishReason = choice.finish_reason;
89
+ const stopReason = finishReason === "stop" ? "end_turn"
90
+ : finishReason === "tool_calls" ? "tool_use"
91
+ : finishReason === "length" ? "max_tokens"
92
+ : finishReason ?? "end_turn";
93
+ return {
94
+ content,
95
+ usage: {
96
+ inputTokens: response.usage?.prompt_tokens ?? 0,
97
+ outputTokens: response.usage?.completion_tokens ?? 0,
98
+ },
99
+ stopReason,
100
+ };
101
+ }
102
+ }
103
+ // ── Format Converters ───────────────────────────────────────
104
+ /**
105
+ * Convert a single LLMMessage to one or more OpenAI messages.
106
+ * Key difference: Anthropic puts tool_results as user content blocks,
107
+ * OpenAI uses separate { role: "tool" } messages.
108
+ */
109
+ function toOpenAIMessages(msg) {
110
+ if (typeof msg.content === "string") {
111
+ return [{ role: msg.role, content: msg.content }];
112
+ }
113
+ const blocks = msg.content;
114
+ // Assistant messages: split text + tool_use into OpenAI format
115
+ if (msg.role === "assistant") {
116
+ const textParts = blocks.filter(b => b.type === "text").map(b => b.text).join("");
117
+ const toolCalls = blocks.filter(b => b.type === "tool_use").map(b => ({
118
+ id: b.id,
119
+ type: "function",
120
+ function: {
121
+ name: b.name,
122
+ arguments: JSON.stringify(b.input),
123
+ },
124
+ }));
125
+ const result = { role: "assistant" };
126
+ if (textParts)
127
+ result.content = textParts;
128
+ else
129
+ result.content = null;
130
+ if (toolCalls.length > 0)
131
+ result.tool_calls = toolCalls;
132
+ return [result];
133
+ }
134
+ // User messages: tool_result blocks become separate {role: "tool"} messages
135
+ const results = [];
136
+ const textParts = [];
137
+ for (const block of blocks) {
138
+ if (block.type === "tool_result") {
139
+ // Flush accumulated text first
140
+ if (textParts.length > 0) {
141
+ results.push({ role: "user", content: textParts.join("\n") });
142
+ textParts.length = 0;
143
+ }
144
+ results.push({
145
+ role: "tool",
146
+ tool_call_id: block.toolUseId,
147
+ content: block.content,
148
+ });
149
+ }
150
+ else if (block.type === "text") {
151
+ textParts.push(block.text);
152
+ }
153
+ }
154
+ if (textParts.length > 0) {
155
+ results.push({ role: "user", content: textParts.join("\n") });
156
+ }
157
+ return results.length > 0 ? results : [{ role: "user", content: "" }];
158
+ }
159
+ function toOpenAITool(tool) {
160
+ return {
161
+ type: "function",
162
+ function: {
163
+ name: tool.name,
164
+ description: tool.description,
165
+ parameters: tool.inputSchema,
166
+ },
167
+ };
168
+ }
169
+ function toOpenAIToolChoice(choice) {
170
+ if (choice === "auto")
171
+ return "auto";
172
+ if (choice === "none")
173
+ return "none";
174
+ return { type: "function", function: { name: choice.name } };
175
+ }
176
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export interface LLMTextBlock {
2
+ type: "text";
3
+ text: string;
4
+ }
5
+ export interface LLMToolUseBlock {
6
+ type: "tool_use";
7
+ id: string;
8
+ name: string;
9
+ input: unknown;
10
+ }
11
+ export interface LLMToolResultBlock {
12
+ type: "tool_result";
13
+ toolUseId: string;
14
+ content: string;
15
+ }
16
+ export type LLMContentBlock = LLMTextBlock | LLMToolUseBlock | LLMToolResultBlock;
17
+ export type LLMResponseBlock = LLMTextBlock | LLMToolUseBlock;
18
+ export interface LLMMessage {
19
+ role: "user" | "assistant";
20
+ content: string | LLMContentBlock[];
21
+ }
22
+ export interface LLMTool {
23
+ name: string;
24
+ description: string;
25
+ inputSchema: Record<string, unknown>;
26
+ }
27
+ export type LLMToolChoice = "auto" | "none" | {
28
+ type: "tool";
29
+ name: string;
30
+ };
31
+ export interface LLMRequest {
32
+ model: string;
33
+ maxTokens: number;
34
+ system: string;
35
+ messages: LLMMessage[];
36
+ tools?: LLMTool[];
37
+ toolChoice?: LLMToolChoice;
38
+ }
39
+ export interface LLMRequestOptions {
40
+ signal?: AbortSignal;
41
+ }
42
+ export interface LLMResponse {
43
+ content: LLMResponseBlock[];
44
+ usage: {
45
+ inputTokens: number;
46
+ outputTokens: number;
47
+ };
48
+ stopReason: "end_turn" | "tool_use" | "max_tokens" | string;
49
+ }
50
+ export interface LLMProvider {
51
+ readonly providerName: string;
52
+ createMessage(request: LLMRequest, options?: LLMRequestOptions): Promise<LLMResponse>;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,eAAe,GAAG,kBAAkB,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG,YAAY,GAAG,eAAe,CAAC;AAI9D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;CACrC;AAID,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAI7E,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,UAAU,EAAE,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,MAAM,CAAC;CAC7D;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACvF"}
@@ -0,0 +1,4 @@
1
+ // ── LLM Provider Abstraction Types ──────────────────────────
2
+ // Provider-agnostic types for multi-backend LLM support.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,yDAAyD"}
@@ -1,4 +1,5 @@
1
1
  import type { ToolDefinition } from "../schemas.js";
2
+ import type { LLMTool } from "../providers/types.js";
2
3
  export type ToolHandler = (input: Record<string, unknown>) => Promise<string>;
3
4
  export interface RegisteredTool {
4
5
  definition: ToolDefinition;
@@ -17,22 +18,12 @@ export declare class ToolRegistry {
17
18
  */
18
19
  getDefinitions(allowedTools?: string[]): ToolDefinition[];
19
20
  /**
20
- * Convert definitions to Anthropic API tool format.
21
+ * Convert definitions to provider-agnostic LLMTool format.
21
22
  */
22
- toAnthropicTools(allowedTools?: string[]): AnthropicTool[];
23
+ toLLMTools(allowedTools?: string[]): LLMTool[];
23
24
  execute(name: string, input: Record<string, unknown>): Promise<{
24
25
  output?: string;
25
26
  error?: string;
26
27
  }>;
27
28
  }
28
- interface AnthropicTool {
29
- name: string;
30
- description: string;
31
- input_schema: {
32
- type: "object";
33
- properties: Record<string, unknown>;
34
- required?: string[];
35
- };
36
- }
37
- export {};
38
29
  //# sourceMappingURL=registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;CACtB;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAIhE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,sCAAsC;IACtC,aAAa,IAAI,MAAM,EAAE;IAIzB;;;OAGG;IACH,cAAc,CAAC,YAAY,GAAE,MAAM,EAAU,GAAG,cAAc,EAAE;IAShE;;OAEG;IACH,gBAAgB,CAAC,YAAY,GAAE,MAAM,EAAU,GAAG,aAAa,EAAE;IAQ3D,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAYhD;AAID,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;CACtB;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD,QAAQ,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAIhE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,sCAAsC;IACtC,aAAa,IAAI,MAAM,EAAE;IAIzB;;;OAGG;IACH,cAAc,CAAC,YAAY,GAAE,MAAM,EAAU,GAAG,cAAc,EAAE;IAShE;;OAEG;IACH,UAAU,CAAC,YAAY,GAAE,MAAM,EAAU,GAAG,OAAO,EAAE;IAQ/C,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAYhD"}
@@ -27,13 +27,13 @@ export class ToolRegistry {
27
27
  .filter(Boolean);
28
28
  }
29
29
  /**
30
- * Convert definitions to Anthropic API tool format.
30
+ * Convert definitions to provider-agnostic LLMTool format.
31
31
  */
32
- toAnthropicTools(allowedTools = ["*"]) {
32
+ toLLMTools(allowedTools = ["*"]) {
33
33
  return this.getDefinitions(allowedTools).map((d) => ({
34
34
  name: d.name,
35
35
  description: d.description,
36
- input_schema: d.inputSchema,
36
+ inputSchema: d.inputSchema,
37
37
  }));
38
38
  }
39
39
  async execute(name, input) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAWA,gEAAgE;AAEhE,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,QAAQ,CAAC,UAA0B,EAAE,OAAoB;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,sCAAsC;IACtC,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,eAAyB,CAAC,GAAG,CAAC;QAC3C,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,YAAY;aAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;aAC/C,MAAM,CAAC,OAAO,CAAqB,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,eAAyB,CAAC,GAAG,CAAC;QAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,YAAY,EAAE,CAAC,CAAC,WAAkB;SACnC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,KAA8B;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAYA,gEAAgE;AAEhE,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,QAAQ,CAAC,UAA0B,EAAE,OAAoB;QACvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,sCAAsC;IACtC,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,eAAyB,CAAC,GAAG,CAAC;QAC3C,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,YAAY;aAChB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;aAC/C,MAAM,CAAC,OAAO,CAAqB,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,eAAyB,CAAC,GAAG,CAAC;QACvC,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,WAAW,EAAE,CAAC,CAAC,WAAsC;SACtD,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,KAA8B;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beercan",
3
- "version": "0.6.12",
3
+ "version": "0.6.13",
4
4
  "description": "Autonomous AI agent system — powered by Skippy the Magnificent.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",