@tryhamster/gerbil 1.0.0-rc.0 → 1.0.0-rc.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.
Files changed (114) hide show
  1. package/README.md +79 -14
  2. package/dist/auto-update-S9s5-g0C.mjs +3 -0
  3. package/dist/browser/index.d.ts +1009 -0
  4. package/dist/browser/index.d.ts.map +1 -0
  5. package/dist/browser/index.js +2492 -0
  6. package/dist/browser/index.js.map +1 -0
  7. package/dist/{chrome-backend-C5Un08O4.mjs → chrome-backend-CORwaIyC.mjs} +514 -73
  8. package/dist/chrome-backend-CORwaIyC.mjs.map +1 -0
  9. package/dist/{chrome-backend-CtwPENIW.mjs → chrome-backend-DIKYoWj-.mjs} +1 -1
  10. package/dist/cli.mjs +3359 -647
  11. package/dist/cli.mjs.map +1 -1
  12. package/dist/frameworks/express.d.mts +1 -1
  13. package/dist/frameworks/express.mjs +3 -4
  14. package/dist/frameworks/express.mjs.map +1 -1
  15. package/dist/frameworks/fastify.d.mts +1 -1
  16. package/dist/frameworks/fastify.mjs +2 -3
  17. package/dist/frameworks/fastify.mjs.map +1 -1
  18. package/dist/frameworks/hono.d.mts +1 -1
  19. package/dist/frameworks/hono.mjs +2 -3
  20. package/dist/frameworks/hono.mjs.map +1 -1
  21. package/dist/frameworks/next.d.mts +2 -2
  22. package/dist/frameworks/next.mjs +2 -3
  23. package/dist/frameworks/next.mjs.map +1 -1
  24. package/dist/frameworks/react.d.mts +1 -1
  25. package/dist/frameworks/trpc.d.mts +1 -1
  26. package/dist/frameworks/trpc.mjs +2 -3
  27. package/dist/frameworks/trpc.mjs.map +1 -1
  28. package/dist/gerbil-DJGqq7BX.mjs +4 -0
  29. package/dist/gerbil-DoDGHe6Z.mjs +1631 -0
  30. package/dist/gerbil-DoDGHe6Z.mjs.map +1 -0
  31. package/dist/gerbil-qOTe1nl2.d.mts +431 -0
  32. package/dist/gerbil-qOTe1nl2.d.mts.map +1 -0
  33. package/dist/index.d.mts +411 -9
  34. package/dist/index.d.mts.map +1 -1
  35. package/dist/index.mjs +7 -6
  36. package/dist/index.mjs.map +1 -1
  37. package/dist/integrations/ai-sdk.d.mts +122 -4
  38. package/dist/integrations/ai-sdk.d.mts.map +1 -1
  39. package/dist/integrations/ai-sdk.mjs +238 -11
  40. package/dist/integrations/ai-sdk.mjs.map +1 -1
  41. package/dist/integrations/langchain.d.mts +132 -2
  42. package/dist/integrations/langchain.d.mts.map +1 -1
  43. package/dist/integrations/langchain.mjs +175 -8
  44. package/dist/integrations/langchain.mjs.map +1 -1
  45. package/dist/integrations/llamaindex.d.mts +1 -1
  46. package/dist/integrations/llamaindex.mjs +2 -3
  47. package/dist/integrations/llamaindex.mjs.map +1 -1
  48. package/dist/integrations/mcp-client.mjs +4 -4
  49. package/dist/integrations/mcp-client.mjs.map +1 -1
  50. package/dist/integrations/mcp.d.mts +2 -2
  51. package/dist/integrations/mcp.d.mts.map +1 -1
  52. package/dist/integrations/mcp.mjs +5 -6
  53. package/dist/kokoro-BNTb6egA.mjs +20210 -0
  54. package/dist/kokoro-BNTb6egA.mjs.map +1 -0
  55. package/dist/kokoro-CMOGDSgT.js +20212 -0
  56. package/dist/kokoro-CMOGDSgT.js.map +1 -0
  57. package/dist/{mcp-R8kRLIKb.mjs → mcp-kzDDWIoS.mjs} +10 -37
  58. package/dist/mcp-kzDDWIoS.mjs.map +1 -0
  59. package/dist/microphone-DaMZFRuR.mjs +3 -0
  60. package/dist/{one-liner-BUQR0nqq.mjs → one-liner-DxnNs_JK.mjs} +2 -2
  61. package/dist/{one-liner-BUQR0nqq.mjs.map → one-liner-DxnNs_JK.mjs.map} +1 -1
  62. package/dist/repl-DGUw4fCc.mjs +9 -0
  63. package/dist/skills/index.d.mts +305 -14
  64. package/dist/skills/index.d.mts.map +1 -1
  65. package/dist/skills/index.mjs +5 -6
  66. package/dist/skills-DulrOPeP.mjs +1435 -0
  67. package/dist/skills-DulrOPeP.mjs.map +1 -0
  68. package/dist/stt-1WIefHwc.mjs +3 -0
  69. package/dist/stt-CG_7KB_0.mjs +434 -0
  70. package/dist/stt-CG_7KB_0.mjs.map +1 -0
  71. package/dist/stt-Dne6SENv.js +434 -0
  72. package/dist/stt-Dne6SENv.js.map +1 -0
  73. package/dist/{tools-BsiEE6f2.mjs → tools-Bi1P7Xoy.mjs} +6 -7
  74. package/dist/{tools-BsiEE6f2.mjs.map → tools-Bi1P7Xoy.mjs.map} +1 -1
  75. package/dist/transformers.web-DiD1gTwk.js +44695 -0
  76. package/dist/transformers.web-DiD1gTwk.js.map +1 -0
  77. package/dist/transformers.web-u34VxRFM.js +3 -0
  78. package/dist/tts-B1pZMlDv.mjs +3 -0
  79. package/dist/tts-C2FzKuSx.js +725 -0
  80. package/dist/tts-C2FzKuSx.js.map +1 -0
  81. package/dist/tts-CyHhcLtN.mjs +731 -0
  82. package/dist/tts-CyHhcLtN.mjs.map +1 -0
  83. package/dist/types-CiTc7ez3.d.mts +353 -0
  84. package/dist/types-CiTc7ez3.d.mts.map +1 -0
  85. package/dist/{utils-7vXqtq2Q.mjs → utils-CZBZ8dgR.mjs} +1 -1
  86. package/dist/{utils-7vXqtq2Q.mjs.map → utils-CZBZ8dgR.mjs.map} +1 -1
  87. package/docs/ai-sdk.md +137 -21
  88. package/docs/browser.md +241 -2
  89. package/docs/memory.md +72 -0
  90. package/docs/stt.md +494 -0
  91. package/docs/tts.md +569 -0
  92. package/docs/vision.md +396 -0
  93. package/package.json +21 -22
  94. package/dist/auto-update-BbNHbSU1.mjs +0 -3
  95. package/dist/browser/index.d.mts +0 -262
  96. package/dist/browser/index.d.mts.map +0 -1
  97. package/dist/browser/index.mjs +0 -755
  98. package/dist/browser/index.mjs.map +0 -1
  99. package/dist/chrome-backend-C5Un08O4.mjs.map +0 -1
  100. package/dist/gerbil-BfnsFWRE.mjs +0 -644
  101. package/dist/gerbil-BfnsFWRE.mjs.map +0 -1
  102. package/dist/gerbil-BjW-z7Fq.mjs +0 -5
  103. package/dist/gerbil-DZ1k3ChC.d.mts +0 -138
  104. package/dist/gerbil-DZ1k3ChC.d.mts.map +0 -1
  105. package/dist/mcp-R8kRLIKb.mjs.map +0 -1
  106. package/dist/models-DKULvhOr.mjs +0 -136
  107. package/dist/models-DKULvhOr.mjs.map +0 -1
  108. package/dist/models-De2-_GmQ.d.mts +0 -22
  109. package/dist/models-De2-_GmQ.d.mts.map +0 -1
  110. package/dist/skills-D3CEpgDc.mjs +0 -630
  111. package/dist/skills-D3CEpgDc.mjs.map +0 -1
  112. package/dist/types-BS1N92Jt.d.mts +0 -183
  113. package/dist/types-BS1N92Jt.d.mts.map +0 -1
  114. /package/dist/{chunk-Ct1HF2bE.mjs → chunk-CkXuGtQK.mjs} +0 -0
@@ -1,5 +1,5 @@
1
- import { t as Gerbil } from "./gerbil-BfnsFWRE.mjs";
2
- import { a as review, c as commit, i as summarize, s as explain, t as translate } from "./skills-D3CEpgDc.mjs";
1
+ import { t as Gerbil } from "./gerbil-DoDGHe6Z.mjs";
2
+ import { a as summarize, d as explain, m as commit, s as review, t as translate } from "./skills-DulrOPeP.mjs";
3
3
 
4
4
  //#region src/integrations/mcp.ts
5
5
  /**
@@ -289,53 +289,26 @@ async function createMCPServer(options = {}) {
289
289
  */
290
290
  async function startMCPServer(options = {}) {
291
291
  const server = await createMCPServer(options);
292
- const rl = (await import("readline")).createInterface({
292
+ (await import("node:readline")).createInterface({
293
293
  input: process.stdin,
294
294
  output: process.stdout,
295
295
  terminal: false
296
- });
297
- console.error("🐹 Gerbil MCP Server");
298
- console.error(` Model: ${options.model || "qwen3-0.6b"}`);
299
- console.error(` Tools: ${server.listTools().map((t) => t.name).join(", ")}`);
300
- console.error(" Ready for connections...");
301
- rl.on("line", async (line) => {
296
+ }).on("line", async (line) => {
302
297
  try {
303
298
  const request = JSON.parse(line);
304
- let response;
305
299
  switch (request.method) {
306
300
  case "initialize":
307
- response = {
308
- protocolVersion: "2024-11-05",
309
- serverInfo: server.info,
310
- capabilities: { tools: {} }
311
- };
301
+ server.info;
312
302
  break;
313
303
  case "tools/list":
314
- response = { tools: server.listTools() };
304
+ server.listTools();
315
305
  break;
316
306
  case "tools/call":
317
- response = await server.callTool(request.params.name, request.params.arguments);
307
+ await server.callTool(request.params.name, request.params.arguments);
318
308
  break;
319
- default: response = { error: {
320
- code: -32601,
321
- message: "Method not found"
322
- } };
309
+ default:
323
310
  }
324
- console.log(JSON.stringify({
325
- jsonrpc: "2.0",
326
- id: request.id,
327
- result: response
328
- }));
329
- } catch (error) {
330
- console.log(JSON.stringify({
331
- jsonrpc: "2.0",
332
- id: null,
333
- error: {
334
- code: -32700,
335
- message: String(error)
336
- }
337
- }));
338
- }
311
+ } catch (_error) {}
339
312
  });
340
313
  }
341
314
  var mcp_default = {
@@ -345,4 +318,4 @@ var mcp_default = {
345
318
 
346
319
  //#endregion
347
320
  export { mcp_default as n, startMCPServer as r, createMCPServer as t };
348
- //# sourceMappingURL=mcp-R8kRLIKb.mjs.map
321
+ //# sourceMappingURL=mcp-kzDDWIoS.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-kzDDWIoS.mjs","names":["handlers: Record<string, (args: any) => Promise<any>>","skills.summarize","skills.explain","skills.review","skills.commit","skills.translate"],"sources":["../src/integrations/mcp.ts"],"sourcesContent":["/**\n * Gerbil MCP Server\n *\n * Model Context Protocol server for Claude Desktop, Cursor, etc.\n *\n * @example\n * ```bash\n * gerbil serve --mcp\n * ```\n *\n * @example Claude Desktop config\n * ```json\n * {\n * \"mcpServers\": {\n * \"gerbil\": {\n * \"command\": \"npx\",\n * \"args\": [\"-y\", \"gerbil\", \"serve\", \"--mcp\"]\n * }\n * }\n * }\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\nimport * as skills from \"../skills/index.js\";\n\nexport interface MCPServerOptions extends GerbilConfig {\n /** Port for HTTP transport (default: stdio) */\n port?: number;\n\n /** Tools to expose */\n tools?: string[];\n}\n\n// Tool definitions\nconst TOOL_DEFINITIONS = {\n generate: {\n name: \"gerbil_generate\",\n description: \"Generate text using a local LLM\",\n inputSchema: {\n type: \"object\",\n properties: {\n prompt: { type: \"string\", description: \"The prompt to generate from\" },\n maxTokens: { type: \"number\", description: \"Maximum tokens to generate\" },\n temperature: { type: \"number\", description: \"Sampling temperature (0-2)\" },\n system: { type: \"string\", description: \"System prompt\" },\n thinking: { type: \"boolean\", description: \"Enable thinking mode\" },\n },\n required: [\"prompt\"],\n },\n },\n summarize: {\n name: \"gerbil_summarize\",\n description: \"Summarize content\",\n inputSchema: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"Content to summarize\" },\n length: { type: \"string\", enum: [\"short\", \"medium\", \"long\"] },\n format: { type: \"string\", enum: [\"paragraph\", \"bullets\"] },\n },\n required: [\"content\"],\n },\n },\n explain: {\n name: \"gerbil_explain\",\n description: \"Explain code or concepts\",\n inputSchema: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"Code or concept to explain\" },\n level: { type: \"string\", enum: [\"beginner\", \"intermediate\", \"expert\"] },\n language: { type: \"string\", description: \"Programming language\" },\n },\n required: [\"content\"],\n },\n },\n review: {\n name: \"gerbil_review\",\n description: \"Review code for issues\",\n inputSchema: {\n type: \"object\",\n properties: {\n code: { type: \"string\", description: \"Code to review\" },\n focus: {\n type: \"array\",\n items: { type: \"string\", enum: [\"security\", \"performance\", \"style\", \"bugs\"] },\n },\n },\n required: [\"code\"],\n },\n },\n commit: {\n name: \"gerbil_commit\",\n description: \"Generate a commit message from a diff\",\n inputSchema: {\n type: \"object\",\n properties: {\n diff: { type: \"string\", description: \"Git diff\" },\n type: { type: \"string\", enum: [\"conventional\", \"simple\", \"detailed\"] },\n },\n required: [\"diff\"],\n },\n },\n translate: {\n name: \"gerbil_translate\",\n description: \"Translate text\",\n inputSchema: {\n type: \"object\",\n properties: {\n text: { type: \"string\", description: \"Text to translate\" },\n to: { type: \"string\", description: \"Target language\" },\n from: { type: \"string\", description: \"Source language (optional)\" },\n },\n required: [\"text\", \"to\"],\n },\n },\n embed: {\n name: \"gerbil_embed\",\n description: \"Generate embeddings for text\",\n inputSchema: {\n type: \"object\",\n properties: {\n text: { type: \"string\", description: \"Text to embed\" },\n },\n required: [\"text\"],\n },\n },\n};\n\n/**\n * Create MCP server\n */\nexport async function createMCPServer(options: MCPServerOptions = {}) {\n const g = new Gerbil(options);\n\n // Load model\n await g.loadModel(options.model || \"qwen3-0.6b\");\n\n // Determine which tools to expose\n const enabledTools = options.tools || Object.keys(TOOL_DEFINITIONS);\n\n // Tool handlers\n const handlers: Record<string, (args: any) => Promise<any>> = {\n gerbil_generate: async (args) => {\n const result = await g.generate(args.prompt, {\n maxTokens: args.maxTokens,\n temperature: args.temperature,\n system: args.system,\n thinking: args.thinking,\n });\n return {\n content: [\n {\n type: \"text\",\n text: result.thinking\n ? `Thinking: ${result.thinking}\\n\\nAnswer: ${result.text}`\n : result.text,\n },\n ],\n };\n },\n\n gerbil_summarize: async (args) => {\n const summary = await skills.summarize({\n content: args.content,\n length: args.length,\n format: args.format,\n });\n return { content: [{ type: \"text\", text: summary }] };\n },\n\n gerbil_explain: async (args) => {\n const explanation = await skills.explain({\n content: args.content,\n level: args.level,\n language: args.language,\n });\n return { content: [{ type: \"text\", text: explanation }] };\n },\n\n gerbil_review: async (args) => {\n const reviewResult = await skills.review({\n code: args.code,\n focus: args.focus,\n });\n return { content: [{ type: \"text\", text: reviewResult }] };\n },\n\n gerbil_commit: async (args) => {\n const message = await skills.commit({\n diff: args.diff,\n type: args.type,\n });\n return { content: [{ type: \"text\", text: message }] };\n },\n\n gerbil_translate: async (args) => {\n const translated = await skills.translate({\n text: args.text,\n to: args.to,\n from: args.from,\n });\n return { content: [{ type: \"text\", text: translated }] };\n },\n\n gerbil_embed: async (args) => {\n const result = await g.embed(args.text);\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify({\n vector: result.vector.slice(0, 10),\n dimensions: result.vector.length,\n }),\n },\n ],\n };\n },\n };\n\n return {\n // Server info\n info: {\n name: \"gerbil\",\n version: \"1.0.0\",\n description: \"Local LLM inference via Gerbil\",\n },\n\n // List available tools\n listTools: () =>\n enabledTools\n .filter((t) => TOOL_DEFINITIONS[t as keyof typeof TOOL_DEFINITIONS])\n .map((t) => TOOL_DEFINITIONS[t as keyof typeof TOOL_DEFINITIONS]),\n\n // Call a tool\n callTool: async (name: string, args: any) => {\n const handler = handlers[name];\n if (!handler) {\n throw new Error(`Unknown tool: ${name}`);\n }\n return handler(args);\n },\n\n // Get Gerbil instance\n gerbil: g,\n };\n}\n\n/**\n * Start MCP server with stdio transport\n */\nexport async function startMCPServer(options: MCPServerOptions = {}) {\n const server = await createMCPServer(options);\n\n // Simple stdio protocol handler\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: false,\n });\n\n rl.on(\"line\", async (line) => {\n try {\n const request = JSON.parse(line);\n\n let _response: any;\n\n switch (request.method) {\n case \"initialize\":\n _response = {\n protocolVersion: \"2024-11-05\",\n serverInfo: server.info,\n capabilities: {\n tools: {},\n },\n };\n break;\n\n case \"tools/list\":\n _response = { tools: server.listTools() };\n break;\n\n case \"tools/call\":\n _response = await server.callTool(request.params.name, request.params.arguments);\n break;\n\n default:\n _response = { error: { code: -32_601, message: \"Method not found\" } };\n }\n } catch (_error) {}\n });\n}\n\nexport default { createMCPServer, startMCPServer };\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { a as findSoxPath, i as StreamingMicrophone, o as isSoxAvailable, r as Microphone } from "./cli.mjs";
2
+
3
+ export { Microphone, isSoxAvailable };
@@ -1,4 +1,4 @@
1
- import { t as Gerbil } from "./gerbil-BfnsFWRE.mjs";
1
+ import { t as Gerbil } from "./gerbil-DoDGHe6Z.mjs";
2
2
 
3
3
  //#region src/core/one-liner.ts
4
4
  /**
@@ -95,4 +95,4 @@ var one_liner_default = gerbil;
95
95
 
96
96
  //#endregion
97
97
  export { getInstance as a, stream as c, generate as i, embed as n, json as o, embedBatch as r, one_liner_default as s, dispose as t };
98
- //# sourceMappingURL=one-liner-BUQR0nqq.mjs.map
98
+ //# sourceMappingURL=one-liner-DxnNs_JK.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"one-liner-BUQR0nqq.mjs","names":["instance: Gerbil | null","loadPromise: Promise<void> | null","currentModel: string | null"],"sources":["../src/core/one-liner.ts"],"sourcesContent":["/**\n * One-liner API for Gerbil\n *\n * @example\n * ```ts\n * import gerbil from \"gerbil\";\n *\n * const text = await gerbil(\"Write a haiku\");\n * ```\n */\n\nimport { Gerbil } from \"./gerbil.js\";\nimport type {\n EmbedOptions,\n EmbedResult,\n GenerateOptions,\n GenerateResult,\n JsonOptions,\n} from \"./types.js\";\n\n// Singleton instance (lazy loaded)\nlet instance: Gerbil | null = null;\nlet loadPromise: Promise<void> | null = null;\nlet currentModel: string | null = null;\n\nasync function getInstance(model?: string): Promise<Gerbil> {\n const requestedModel = model || \"qwen3-0.6b\";\n\n // If requesting a different model, we need a new instance\n if (instance && currentModel && currentModel !== requestedModel) {\n // Dispose old instance and create new one with requested model\n await instance.dispose();\n instance = null;\n loadPromise = null;\n currentModel = null;\n }\n\n if (!instance) {\n instance = new Gerbil();\n }\n\n if (!(instance.isLoaded() || loadPromise)) {\n currentModel = requestedModel;\n loadPromise = instance.loadModel(requestedModel);\n }\n\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n\n return instance;\n}\n\n// ============================================\n// Main Function\n// ============================================\n\ninterface GerbilOptions extends GenerateOptions {\n model?: string;\n}\n\n/**\n * Generate text with zero setup\n *\n * @example\n * ```ts\n * const text = await gerbil(\"Write a haiku\");\n * const text = await gerbil(\"Explain this\", { model: \"qwen3-0.6b\", thinking: true });\n * ```\n */\nasync function gerbil(prompt: string, options: GerbilOptions = {}): Promise<string> {\n const { model, ...generateOptions } = options;\n const g = await getInstance(model);\n const result = await g.generate(prompt, generateOptions);\n return result.text;\n}\n\n// ============================================\n// Functional Exports\n// ============================================\n\n/**\n * Generate text (returns full result)\n */\nexport async function generate(\n prompt: string,\n options: GerbilOptions = {},\n): Promise<GenerateResult> {\n const { model, ...generateOptions } = options;\n const g = await getInstance(model);\n return g.generate(prompt, generateOptions);\n}\n\n/**\n * Stream text generation\n */\nexport async function* stream(\n prompt: string,\n options: GerbilOptions = {},\n): AsyncGenerator<string, GenerateResult, unknown> {\n const { model, ...generateOptions } = options;\n const g = await getInstance(model);\n return yield* g.stream(prompt, generateOptions);\n}\n\n/**\n * Generate structured JSON\n */\nexport async function json<T>(\n prompt: string,\n options: JsonOptions<T> & { model?: string },\n): Promise<T> {\n const { model, ...jsonOptions } = options;\n const g = await getInstance(model);\n return g.json(prompt, jsonOptions);\n}\n\n/**\n * Generate embeddings\n */\nexport async function embed(\n text: string,\n options: EmbedOptions & { model?: string } = {},\n): Promise<EmbedResult> {\n const { model, ...embedOptions } = options;\n const g = await getInstance(model);\n return g.embed(text, embedOptions);\n}\n\n/**\n * Generate embeddings for multiple texts\n */\nexport async function embedBatch(\n texts: string[],\n options: EmbedOptions & { model?: string } = {},\n): Promise<EmbedResult[]> {\n const { model, ...embedOptions } = options;\n const g = await getInstance(model);\n return g.embedBatch(texts, embedOptions);\n}\n\n/**\n * Dispose singleton instance\n */\nexport async function dispose(): Promise<void> {\n if (instance) {\n await instance.dispose();\n instance = null;\n loadPromise = null;\n }\n}\n\n/**\n * Get singleton instance (for advanced usage)\n */\nexport { getInstance };\n\nexport default gerbil;\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAIA,WAA0B;AAC9B,IAAIC,cAAoC;AACxC,IAAIC,eAA8B;AAElC,eAAe,YAAY,OAAiC;CAC1D,MAAM,iBAAiB,SAAS;AAGhC,KAAI,YAAY,gBAAgB,iBAAiB,gBAAgB;AAE/D,QAAM,SAAS,SAAS;AACxB,aAAW;AACX,gBAAc;AACd,iBAAe;;AAGjB,KAAI,CAAC,SACH,YAAW,IAAI,QAAQ;AAGzB,KAAI,EAAE,SAAS,UAAU,IAAI,cAAc;AACzC,iBAAe;AACf,gBAAc,SAAS,UAAU,eAAe;;AAGlD,KAAI,aAAa;AACf,QAAM;AACN,gBAAc;;AAGhB,QAAO;;;;;;;;;;;AAoBT,eAAe,OAAO,QAAgB,UAAyB,EAAE,EAAmB;CAClF,MAAM,EAAE,OAAO,GAAG,oBAAoB;AAGtC,SADe,OADL,MAAM,YAAY,MAAM,EACX,SAAS,QAAQ,gBAAgB,EAC1C;;;;;AAUhB,eAAsB,SACpB,QACA,UAAyB,EAAE,EACF;CACzB,MAAM,EAAE,OAAO,GAAG,oBAAoB;AAEtC,SADU,MAAM,YAAY,MAAM,EACzB,SAAS,QAAQ,gBAAgB;;;;;AAM5C,gBAAuB,OACrB,QACA,UAAyB,EAAE,EACsB;CACjD,MAAM,EAAE,OAAO,GAAG,oBAAoB;AAEtC,QAAO,QADG,MAAM,YAAY,MAAM,EAClB,OAAO,QAAQ,gBAAgB;;;;;AAMjD,eAAsB,KACpB,QACA,SACY;CACZ,MAAM,EAAE,OAAO,GAAG,gBAAgB;AAElC,SADU,MAAM,YAAY,MAAM,EACzB,KAAK,QAAQ,YAAY;;;;;AAMpC,eAAsB,MACpB,MACA,UAA6C,EAAE,EACzB;CACtB,MAAM,EAAE,OAAO,GAAG,iBAAiB;AAEnC,SADU,MAAM,YAAY,MAAM,EACzB,MAAM,MAAM,aAAa;;;;;AAMpC,eAAsB,WACpB,OACA,UAA6C,EAAE,EACvB;CACxB,MAAM,EAAE,OAAO,GAAG,iBAAiB;AAEnC,SADU,MAAM,YAAY,MAAM,EACzB,WAAW,OAAO,aAAa;;;;;AAM1C,eAAsB,UAAyB;AAC7C,KAAI,UAAU;AACZ,QAAM,SAAS,SAAS;AACxB,aAAW;AACX,gBAAc;;;AASlB,wBAAe"}
1
+ {"version":3,"file":"one-liner-DxnNs_JK.mjs","names":["instance: Gerbil | null","loadPromise: Promise<void> | null","currentModel: string | null"],"sources":["../src/core/one-liner.ts"],"sourcesContent":["/**\n * One-liner API for Gerbil\n *\n * @example\n * ```ts\n * import gerbil from \"gerbil\";\n *\n * const text = await gerbil(\"Write a haiku\");\n * ```\n */\n\nimport { Gerbil } from \"./gerbil.js\";\nimport type {\n EmbedOptions,\n EmbedResult,\n GenerateOptions,\n GenerateResult,\n JsonOptions,\n} from \"./types.js\";\n\n// Singleton instance (lazy loaded)\nlet instance: Gerbil | null = null;\nlet loadPromise: Promise<void> | null = null;\nlet currentModel: string | null = null;\n\nasync function getInstance(model?: string): Promise<Gerbil> {\n const requestedModel = model || \"qwen3-0.6b\";\n\n // If requesting a different model, we need a new instance\n if (instance && currentModel && currentModel !== requestedModel) {\n // Dispose old instance and create new one with requested model\n await instance.dispose();\n instance = null;\n loadPromise = null;\n currentModel = null;\n }\n\n if (!instance) {\n instance = new Gerbil();\n }\n\n if (!(instance.isLoaded() || loadPromise)) {\n currentModel = requestedModel;\n loadPromise = instance.loadModel(requestedModel);\n }\n\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n\n return instance;\n}\n\n// ============================================\n// Main Function\n// ============================================\n\ninterface GerbilOptions extends GenerateOptions {\n model?: string;\n}\n\n/**\n * Generate text with zero setup\n *\n * @example\n * ```ts\n * const text = await gerbil(\"Write a haiku\");\n * const text = await gerbil(\"Explain this\", { model: \"qwen3-0.6b\", thinking: true });\n * ```\n */\nasync function gerbil(prompt: string, options: GerbilOptions = {}): Promise<string> {\n const { model, ...generateOptions } = options;\n const g = await getInstance(model);\n const result = await g.generate(prompt, generateOptions);\n return result.text;\n}\n\n// ============================================\n// Functional Exports\n// ============================================\n\n/**\n * Generate text (returns full result)\n */\nexport async function generate(\n prompt: string,\n options: GerbilOptions = {},\n): Promise<GenerateResult> {\n const { model, ...generateOptions } = options;\n const g = await getInstance(model);\n return g.generate(prompt, generateOptions);\n}\n\n/**\n * Stream text generation\n */\nexport async function* stream(\n prompt: string,\n options: GerbilOptions = {},\n): AsyncGenerator<string, GenerateResult, unknown> {\n const { model, ...generateOptions } = options;\n const g = await getInstance(model);\n return yield* g.stream(prompt, generateOptions);\n}\n\n/**\n * Generate structured JSON\n */\nexport async function json<T>(\n prompt: string,\n options: JsonOptions<T> & { model?: string },\n): Promise<T> {\n const { model, ...jsonOptions } = options;\n const g = await getInstance(model);\n return g.json(prompt, jsonOptions);\n}\n\n/**\n * Generate embeddings\n */\nexport async function embed(\n text: string,\n options: EmbedOptions & { model?: string } = {},\n): Promise<EmbedResult> {\n const { model, ...embedOptions } = options;\n const g = await getInstance(model);\n return g.embed(text, embedOptions);\n}\n\n/**\n * Generate embeddings for multiple texts\n */\nexport async function embedBatch(\n texts: string[],\n options: EmbedOptions & { model?: string } = {},\n): Promise<EmbedResult[]> {\n const { model, ...embedOptions } = options;\n const g = await getInstance(model);\n return g.embedBatch(texts, embedOptions);\n}\n\n/**\n * Dispose singleton instance\n */\nexport async function dispose(): Promise<void> {\n if (instance) {\n await instance.dispose();\n instance = null;\n loadPromise = null;\n }\n}\n\n/**\n * Get singleton instance (for advanced usage)\n */\nexport { getInstance };\n\nexport default gerbil;\n"],"mappings":";;;;;;;;;;;;;AAqBA,IAAIA,WAA0B;AAC9B,IAAIC,cAAoC;AACxC,IAAIC,eAA8B;AAElC,eAAe,YAAY,OAAiC;CAC1D,MAAM,iBAAiB,SAAS;AAGhC,KAAI,YAAY,gBAAgB,iBAAiB,gBAAgB;AAE/D,QAAM,SAAS,SAAS;AACxB,aAAW;AACX,gBAAc;AACd,iBAAe;;AAGjB,KAAI,CAAC,SACH,YAAW,IAAI,QAAQ;AAGzB,KAAI,EAAE,SAAS,UAAU,IAAI,cAAc;AACzC,iBAAe;AACf,gBAAc,SAAS,UAAU,eAAe;;AAGlD,KAAI,aAAa;AACf,QAAM;AACN,gBAAc;;AAGhB,QAAO;;;;;;;;;;;AAoBT,eAAe,OAAO,QAAgB,UAAyB,EAAE,EAAmB;CAClF,MAAM,EAAE,OAAO,GAAG,oBAAoB;AAGtC,SADe,OADL,MAAM,YAAY,MAAM,EACX,SAAS,QAAQ,gBAAgB,EAC1C;;;;;AAUhB,eAAsB,SACpB,QACA,UAAyB,EAAE,EACF;CACzB,MAAM,EAAE,OAAO,GAAG,oBAAoB;AAEtC,SADU,MAAM,YAAY,MAAM,EACzB,SAAS,QAAQ,gBAAgB;;;;;AAM5C,gBAAuB,OACrB,QACA,UAAyB,EAAE,EACsB;CACjD,MAAM,EAAE,OAAO,GAAG,oBAAoB;AAEtC,QAAO,QADG,MAAM,YAAY,MAAM,EAClB,OAAO,QAAQ,gBAAgB;;;;;AAMjD,eAAsB,KACpB,QACA,SACY;CACZ,MAAM,EAAE,OAAO,GAAG,gBAAgB;AAElC,SADU,MAAM,YAAY,MAAM,EACzB,KAAK,QAAQ,YAAY;;;;;AAMpC,eAAsB,MACpB,MACA,UAA6C,EAAE,EACzB;CACtB,MAAM,EAAE,OAAO,GAAG,iBAAiB;AAEnC,SADU,MAAM,YAAY,MAAM,EACzB,MAAM,MAAM,aAAa;;;;;AAMpC,eAAsB,WACpB,OACA,UAA6C,EAAE,EACvB;CACxB,MAAM,EAAE,OAAO,GAAG,iBAAiB;AAEnC,SADU,MAAM,YAAY,MAAM,EACzB,WAAW,OAAO,aAAa;;;;;AAM1C,eAAsB,UAAyB;AAC7C,KAAI,UAAU;AACZ,QAAM,SAAS,SAAS;AACxB,aAAW;AACX,gBAAc;;;AASlB,wBAAe"}
@@ -0,0 +1,9 @@
1
+ import "./gerbil-DoDGHe6Z.mjs";
2
+ import "./chrome-backend-CORwaIyC.mjs";
3
+ import "./utils-CZBZ8dgR.mjs";
4
+ import "./one-liner-DxnNs_JK.mjs";
5
+ import "./skills-DulrOPeP.mjs";
6
+ import "./tools-Bi1P7Xoy.mjs";
7
+ import { n as startRepl, t as setCleanupPromise } from "./cli.mjs";
8
+
9
+ export { setCleanupPromise };
@@ -1,5 +1,5 @@
1
- import "../types-BS1N92Jt.mjs";
2
- import { t as Gerbil } from "../gerbil-DZ1k3ChC.mjs";
1
+ import "../types-CiTc7ez3.mjs";
2
+ import { t as Gerbil } from "../gerbil-qOTe1nl2.mjs";
3
3
  import { z } from "zod";
4
4
 
5
5
  //#region src/skills/types.d.ts
@@ -184,6 +184,98 @@ declare function clearSkills(): void;
184
184
  */
185
185
  declare function getAllSkillInfo(): SkillInfo[];
186
186
  //#endregion
187
+ //#region src/skills/builtin/analyze-screenshot.d.ts
188
+ declare const AnalyzeScreenshotInput: z.ZodObject<{
189
+ /** Screenshot URL or data URI */
190
+ image: z.ZodString;
191
+ /** Analysis type */
192
+ type: z.ZodDefault<z.ZodEnum<["ui-review", "accessibility", "suggestions", "qa", "ux-audit", "mobile-check"]>>;
193
+ /** Specific areas to focus on (optional) */
194
+ focus: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
195
+ }, "strip", z.ZodTypeAny, {
196
+ type: "ui-review" | "accessibility" | "suggestions" | "qa" | "ux-audit" | "mobile-check";
197
+ image: string;
198
+ focus?: string[] | undefined;
199
+ }, {
200
+ image: string;
201
+ type?: "ui-review" | "accessibility" | "suggestions" | "qa" | "ux-audit" | "mobile-check" | undefined;
202
+ focus?: string[] | undefined;
203
+ }>;
204
+ type AnalyzeScreenshotInput = z.infer<typeof AnalyzeScreenshotInput>;
205
+ declare const analyzeScreenshot: Skill<{
206
+ image: string;
207
+ type?: "ui-review" | "accessibility" | "suggestions" | "qa" | "ux-audit" | "mobile-check" | undefined;
208
+ focus?: string[] | undefined;
209
+ }, string>;
210
+ //#endregion
211
+ //#region src/skills/builtin/announce.d.ts
212
+ declare const AnnounceInput: z.ZodObject<{
213
+ /** What to announce (will be rephrased by AI) */
214
+ message: z.ZodString;
215
+ /** Announcement style */
216
+ style: z.ZodDefault<z.ZodEnum<["casual", "formal", "excited", "calm", "urgent"]>>;
217
+ /** Voice ID */
218
+ voice: z.ZodDefault<z.ZodEnum<["af_heart", "af_bella", "af_nicole", "am_fenrir", "am_michael", "bf_emma", "bm_george"]>>;
219
+ /** Speech speed */
220
+ speed: z.ZodDefault<z.ZodNumber>;
221
+ /** Just generate text, don't speak */
222
+ textOnly: z.ZodDefault<z.ZodBoolean>;
223
+ }, "strip", z.ZodTypeAny, {
224
+ message: string;
225
+ style: "casual" | "formal" | "excited" | "calm" | "urgent";
226
+ voice: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george";
227
+ speed: number;
228
+ textOnly: boolean;
229
+ }, {
230
+ message: string;
231
+ style?: "casual" | "formal" | "excited" | "calm" | "urgent" | undefined;
232
+ voice?: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | undefined;
233
+ speed?: number | undefined;
234
+ textOnly?: boolean | undefined;
235
+ }>;
236
+ type AnnounceInput = z.infer<typeof AnnounceInput>;
237
+ declare const announce: Skill<{
238
+ message: string;
239
+ style?: "casual" | "formal" | "excited" | "calm" | "urgent" | undefined;
240
+ voice?: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | undefined;
241
+ speed?: number | undefined;
242
+ textOnly?: boolean | undefined;
243
+ }, string>;
244
+ //#endregion
245
+ //#region src/skills/builtin/caption-image.d.ts
246
+ declare const CaptionImageInput: z.ZodObject<{
247
+ /** Image URL or data URI */
248
+ image: z.ZodString;
249
+ /** Caption type */
250
+ type: z.ZodDefault<z.ZodEnum<["alt-text", "caption", "social-media", "seo", "artistic", "technical"]>>;
251
+ /** Tone/style for the caption */
252
+ tone: z.ZodDefault<z.ZodEnum<["professional", "casual", "playful", "formal", "descriptive"]>>;
253
+ /** Maximum length hint */
254
+ maxLength: z.ZodDefault<z.ZodEnum<["short", "medium", "long"]>>;
255
+ /** Platform hint for social media captions */
256
+ platform: z.ZodOptional<z.ZodEnum<["twitter", "instagram", "linkedin", "facebook"]>>;
257
+ }, "strip", z.ZodTypeAny, {
258
+ type: "seo" | "alt-text" | "caption" | "social-media" | "artistic" | "technical";
259
+ image: string;
260
+ maxLength: "short" | "medium" | "long";
261
+ tone: "professional" | "casual" | "formal" | "playful" | "descriptive";
262
+ platform?: "twitter" | "instagram" | "linkedin" | "facebook" | undefined;
263
+ }, {
264
+ image: string;
265
+ type?: "seo" | "alt-text" | "caption" | "social-media" | "artistic" | "technical" | undefined;
266
+ maxLength?: "short" | "medium" | "long" | undefined;
267
+ tone?: "professional" | "casual" | "formal" | "playful" | "descriptive" | undefined;
268
+ platform?: "twitter" | "instagram" | "linkedin" | "facebook" | undefined;
269
+ }>;
270
+ type CaptionImageInput = z.infer<typeof CaptionImageInput>;
271
+ declare const captionImage: Skill<{
272
+ image: string;
273
+ type?: "seo" | "alt-text" | "caption" | "social-media" | "artistic" | "technical" | undefined;
274
+ maxLength?: "short" | "medium" | "long" | undefined;
275
+ tone?: "professional" | "casual" | "formal" | "playful" | "descriptive" | undefined;
276
+ platform?: "twitter" | "instagram" | "linkedin" | "facebook" | undefined;
277
+ }, string>;
278
+ //#endregion
187
279
  //#region src/skills/builtin/commit.d.ts
188
280
  declare const CommitInput: z.ZodObject<{
189
281
  /** Git diff (auto-detected if not provided) */
@@ -197,17 +289,75 @@ declare const CommitInput: z.ZodObject<{
197
289
  maxLength: number;
198
290
  diff?: string | undefined;
199
291
  }, {
200
- diff?: string | undefined;
201
292
  type?: "conventional" | "simple" | "detailed" | undefined;
293
+ diff?: string | undefined;
202
294
  maxLength?: number | undefined;
203
295
  }>;
204
296
  type CommitInput = z.infer<typeof CommitInput>;
205
297
  declare const commit: Skill<{
206
- diff?: string | undefined;
207
298
  type?: "conventional" | "simple" | "detailed" | undefined;
299
+ diff?: string | undefined;
208
300
  maxLength?: number | undefined;
209
301
  }, string>;
210
302
  //#endregion
303
+ //#region src/skills/builtin/compare-images.d.ts
304
+ declare const CompareImagesInput: z.ZodObject<{
305
+ /** First image URL or data URI */
306
+ image1: z.ZodString;
307
+ /** Second image URL or data URI */
308
+ image2: z.ZodString;
309
+ /** Comparison type */
310
+ type: z.ZodDefault<z.ZodEnum<["visual-diff", "design-comparison", "before-after", "a-b-test", "version-diff"]>>;
311
+ /** Specific aspects to compare */
312
+ focus: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
313
+ }, "strip", z.ZodTypeAny, {
314
+ type: "visual-diff" | "design-comparison" | "before-after" | "a-b-test" | "version-diff";
315
+ image1: string;
316
+ image2: string;
317
+ focus?: string[] | undefined;
318
+ }, {
319
+ image1: string;
320
+ image2: string;
321
+ type?: "visual-diff" | "design-comparison" | "before-after" | "a-b-test" | "version-diff" | undefined;
322
+ focus?: string[] | undefined;
323
+ }>;
324
+ type CompareImagesInput = z.infer<typeof CompareImagesInput>;
325
+ declare const compareImages: Skill<{
326
+ image1: string;
327
+ image2: string;
328
+ type?: "visual-diff" | "design-comparison" | "before-after" | "a-b-test" | "version-diff" | undefined;
329
+ focus?: string[] | undefined;
330
+ }, string>;
331
+ //#endregion
332
+ //#region src/skills/builtin/describe-image.d.ts
333
+ declare const DescribeImageInput: z.ZodObject<{
334
+ /** Image URL or data URI */
335
+ image: z.ZodString;
336
+ /** What to focus on */
337
+ focus: z.ZodDefault<z.ZodEnum<["general", "details", "text", "objects", "scene", "colors"]>>;
338
+ /** Output format */
339
+ format: z.ZodDefault<z.ZodEnum<["paragraph", "bullets", "structured"]>>;
340
+ /** Maximum detail level */
341
+ detail: z.ZodDefault<z.ZodEnum<["brief", "normal", "comprehensive"]>>;
342
+ }, "strip", z.ZodTypeAny, {
343
+ image: string;
344
+ focus: "text" | "general" | "details" | "objects" | "scene" | "colors";
345
+ format: "paragraph" | "bullets" | "structured";
346
+ detail: "brief" | "normal" | "comprehensive";
347
+ }, {
348
+ image: string;
349
+ focus?: "text" | "general" | "details" | "objects" | "scene" | "colors" | undefined;
350
+ format?: "paragraph" | "bullets" | "structured" | undefined;
351
+ detail?: "brief" | "normal" | "comprehensive" | undefined;
352
+ }>;
353
+ type DescribeImageInput = z.infer<typeof DescribeImageInput>;
354
+ declare const describeImage: Skill<{
355
+ image: string;
356
+ focus?: "text" | "general" | "details" | "objects" | "scene" | "colors" | undefined;
357
+ format?: "paragraph" | "bullets" | "structured" | undefined;
358
+ detail?: "brief" | "normal" | "comprehensive" | undefined;
359
+ }, string>;
360
+ //#endregion
211
361
  //#region src/skills/builtin/explain.d.ts
212
362
  declare const ExplainInput: z.ZodObject<{
213
363
  /** Content to explain */
@@ -216,20 +366,30 @@ declare const ExplainInput: z.ZodObject<{
216
366
  level: z.ZodDefault<z.ZodEnum<["beginner", "intermediate", "expert"]>>;
217
367
  /** Programming language (for code) */
218
368
  language: z.ZodOptional<z.ZodString>;
369
+ /** Speak the explanation aloud using TTS */
370
+ speak: z.ZodDefault<z.ZodBoolean>;
371
+ /** Voice for TTS (if speak is true) */
372
+ voice: z.ZodDefault<z.ZodEnum<["af_heart", "af_bella", "bf_emma", "am_fenrir"]>>;
219
373
  }, "strip", z.ZodTypeAny, {
220
374
  content: string;
375
+ voice: "af_heart" | "af_bella" | "am_fenrir" | "bf_emma";
376
+ speak: boolean;
221
377
  level: "beginner" | "intermediate" | "expert";
222
378
  language?: string | undefined;
223
379
  }, {
224
380
  content: string;
225
- level?: "beginner" | "intermediate" | "expert" | undefined;
226
381
  language?: string | undefined;
382
+ voice?: "af_heart" | "af_bella" | "am_fenrir" | "bf_emma" | undefined;
383
+ speak?: boolean | undefined;
384
+ level?: "beginner" | "intermediate" | "expert" | undefined;
227
385
  }>;
228
386
  type ExplainInput = z.infer<typeof ExplainInput>;
229
387
  declare const explain: Skill<{
230
388
  content: string;
231
- level?: "beginner" | "intermediate" | "expert" | undefined;
232
389
  language?: string | undefined;
390
+ voice?: "af_heart" | "af_bella" | "am_fenrir" | "bf_emma" | undefined;
391
+ speak?: boolean | undefined;
392
+ level?: "beginner" | "intermediate" | "expert" | undefined;
233
393
  }, string>;
234
394
  //#endregion
235
395
  //#region src/skills/builtin/extract.d.ts
@@ -256,6 +416,74 @@ declare const extract: Skill<{
256
416
  context?: string | undefined;
257
417
  }, string>;
258
418
  //#endregion
419
+ //#region src/skills/builtin/extract-from-image.d.ts
420
+ declare const ExtractFromImageInput: z.ZodObject<{
421
+ /** Image URL or data URI */
422
+ image: z.ZodString;
423
+ /** What to extract */
424
+ extract: z.ZodDefault<z.ZodEnum<["text", "code", "data", "table", "diagram", "form", "receipt"]>>;
425
+ /** Output format */
426
+ outputFormat: z.ZodDefault<z.ZodEnum<["raw", "json", "markdown", "csv"]>>;
427
+ /** Language hint for code extraction */
428
+ language: z.ZodOptional<z.ZodString>;
429
+ }, "strip", z.ZodTypeAny, {
430
+ image: string;
431
+ extract: "code" | "text" | "data" | "table" | "diagram" | "form" | "receipt";
432
+ outputFormat: "raw" | "json" | "markdown" | "csv";
433
+ language?: string | undefined;
434
+ }, {
435
+ image: string;
436
+ extract?: "code" | "text" | "data" | "table" | "diagram" | "form" | "receipt" | undefined;
437
+ outputFormat?: "raw" | "json" | "markdown" | "csv" | undefined;
438
+ language?: string | undefined;
439
+ }>;
440
+ type ExtractFromImageInput = z.infer<typeof ExtractFromImageInput>;
441
+ declare const extractFromImage: Skill<{
442
+ image: string;
443
+ extract?: "code" | "text" | "data" | "table" | "diagram" | "form" | "receipt" | undefined;
444
+ outputFormat?: "raw" | "json" | "markdown" | "csv" | undefined;
445
+ language?: string | undefined;
446
+ }, string>;
447
+ //#endregion
448
+ //#region src/skills/builtin/read-aloud.d.ts
449
+ declare const ReadAloudInput: z.ZodObject<{
450
+ /** File path to read, or text content if no file */
451
+ content: z.ZodString;
452
+ /** Treat content as file path (default: auto-detect) */
453
+ isFile: z.ZodOptional<z.ZodBoolean>;
454
+ /** Voice ID */
455
+ voice: z.ZodDefault<z.ZodEnum<["af_heart", "af_bella", "af_nicole", "am_fenrir", "am_michael", "bf_emma", "bm_george"]>>;
456
+ /** Speech speed */
457
+ speed: z.ZodDefault<z.ZodNumber>;
458
+ /** Maximum characters to read (default: 5000) */
459
+ maxLength: z.ZodDefault<z.ZodNumber>;
460
+ /** Summarize if content exceeds maxLength instead of truncating */
461
+ summarizeIfLong: z.ZodDefault<z.ZodBoolean>;
462
+ }, "strip", z.ZodTypeAny, {
463
+ content: string;
464
+ voice: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george";
465
+ speed: number;
466
+ maxLength: number;
467
+ summarizeIfLong: boolean;
468
+ isFile?: boolean | undefined;
469
+ }, {
470
+ content: string;
471
+ isFile?: boolean | undefined;
472
+ voice?: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | undefined;
473
+ speed?: number | undefined;
474
+ maxLength?: number | undefined;
475
+ summarizeIfLong?: boolean | undefined;
476
+ }>;
477
+ type ReadAloudInput = z.infer<typeof ReadAloudInput>;
478
+ declare const readAloud: Skill<{
479
+ content: string;
480
+ isFile?: boolean | undefined;
481
+ voice?: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | undefined;
482
+ speed?: number | undefined;
483
+ maxLength?: number | undefined;
484
+ summarizeIfLong?: boolean | undefined;
485
+ }, string>;
486
+ //#endregion
259
487
  //#region src/skills/builtin/review.d.ts
260
488
  declare const ReviewInput: z.ZodObject<{
261
489
  /** Code to review */
@@ -266,18 +494,47 @@ declare const ReviewInput: z.ZodObject<{
266
494
  format: z.ZodDefault<z.ZodEnum<["inline", "summary", "detailed"]>>;
267
495
  }, "strip", z.ZodTypeAny, {
268
496
  code: string;
269
- format: "detailed" | "inline" | "summary";
270
497
  focus: ("security" | "performance" | "style" | "bugs" | "all")[];
498
+ format: "detailed" | "inline" | "summary";
271
499
  }, {
272
500
  code: string;
273
- format?: "detailed" | "inline" | "summary" | undefined;
274
501
  focus?: ("security" | "performance" | "style" | "bugs" | "all")[] | undefined;
502
+ format?: "detailed" | "inline" | "summary" | undefined;
275
503
  }>;
276
504
  type ReviewInput = z.infer<typeof ReviewInput>;
277
505
  declare const review: Skill<{
278
506
  code: string;
279
- format?: "detailed" | "inline" | "summary" | undefined;
280
507
  focus?: ("security" | "performance" | "style" | "bugs" | "all")[] | undefined;
508
+ format?: "detailed" | "inline" | "summary" | undefined;
509
+ }, string>;
510
+ //#endregion
511
+ //#region src/skills/builtin/speak.d.ts
512
+ declare const SpeakInput: z.ZodObject<{
513
+ /** Text to speak */
514
+ text: z.ZodString;
515
+ /** Voice ID (default: af_heart) */
516
+ voice: z.ZodDefault<z.ZodEnum<["af_heart", "af_bella", "af_nicole", "af_sarah", "am_fenrir", "am_michael", "bf_emma", "bf_isabella", "bm_george", "bm_lewis"]>>;
517
+ /** Speech speed 0.5-2.0 (default: 1.0) */
518
+ speed: z.ZodDefault<z.ZodNumber>;
519
+ /** Save to file instead of playing */
520
+ output: z.ZodOptional<z.ZodString>;
521
+ }, "strip", z.ZodTypeAny, {
522
+ text: string;
523
+ voice: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | "af_sarah" | "bf_isabella" | "bm_lewis";
524
+ speed: number;
525
+ output?: string | undefined;
526
+ }, {
527
+ text: string;
528
+ voice?: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | "af_sarah" | "bf_isabella" | "bm_lewis" | undefined;
529
+ speed?: number | undefined;
530
+ output?: string | undefined;
531
+ }>;
532
+ type SpeakInput = z.infer<typeof SpeakInput>;
533
+ declare const speak: Skill<{
534
+ text: string;
535
+ voice?: "af_heart" | "af_bella" | "af_nicole" | "am_fenrir" | "am_michael" | "bf_emma" | "bm_george" | "af_sarah" | "bf_isabella" | "bm_lewis" | undefined;
536
+ speed?: number | undefined;
537
+ output?: string | undefined;
281
538
  }, string>;
282
539
  //#endregion
283
540
  //#region src/skills/builtin/summarize.d.ts
@@ -291,22 +548,22 @@ declare const SummarizeInput: z.ZodObject<{
291
548
  /** Focus areas */
292
549
  focus: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
293
550
  }, "strip", z.ZodTypeAny, {
294
- content: string;
295
551
  length: "short" | "medium" | "long";
552
+ content: string;
296
553
  format: "paragraph" | "bullets";
297
554
  focus?: string[] | undefined;
298
555
  }, {
299
556
  content: string;
300
557
  length?: "short" | "medium" | "long" | undefined;
301
- format?: "paragraph" | "bullets" | undefined;
302
558
  focus?: string[] | undefined;
559
+ format?: "paragraph" | "bullets" | undefined;
303
560
  }>;
304
561
  type SummarizeInput = z.infer<typeof SummarizeInput>;
305
562
  declare const summarize: Skill<{
306
563
  content: string;
307
564
  length?: "short" | "medium" | "long" | undefined;
308
- format?: "paragraph" | "bullets" | undefined;
309
565
  focus?: string[] | undefined;
566
+ format?: "paragraph" | "bullets" | undefined;
310
567
  }, string>;
311
568
  //#endregion
312
569
  //#region src/skills/builtin/test.d.ts
@@ -318,8 +575,8 @@ declare const TestInput: z.ZodObject<{
318
575
  /** Test style */
319
576
  style: z.ZodDefault<z.ZodEnum<["unit", "integration", "e2e"]>>;
320
577
  }, "strip", z.ZodTypeAny, {
321
- style: "unit" | "integration" | "e2e";
322
578
  code: string;
579
+ style: "unit" | "integration" | "e2e";
323
580
  framework: "jest" | "vitest" | "mocha" | "playwright";
324
581
  }, {
325
582
  code: string;
@@ -357,6 +614,40 @@ declare const title: Skill<{
357
614
  maxLength?: number | undefined;
358
615
  }, string>;
359
616
  //#endregion
617
+ //#region src/skills/builtin/transcribe.d.ts
618
+ declare const TranscribeInput: z.ZodObject<{
619
+ /** Audio file path (WAV, MP3, etc.) or URL */
620
+ audio: z.ZodString;
621
+ /** STT model ID (default: whisper-tiny.en) */
622
+ model: z.ZodDefault<z.ZodEnum<["whisper-tiny.en", "whisper-base.en", "whisper-small.en", "whisper-large-v3-turbo"]>>;
623
+ /** Language hint for multilingual models */
624
+ language: z.ZodOptional<z.ZodString>;
625
+ /** Include timestamps in output */
626
+ timestamps: z.ZodDefault<z.ZodBoolean>;
627
+ /** Save transcription to file */
628
+ output: z.ZodOptional<z.ZodString>;
629
+ }, "strip", z.ZodTypeAny, {
630
+ audio: string;
631
+ model: "whisper-tiny.en" | "whisper-base.en" | "whisper-small.en" | "whisper-large-v3-turbo";
632
+ timestamps: boolean;
633
+ language?: string | undefined;
634
+ output?: string | undefined;
635
+ }, {
636
+ audio: string;
637
+ language?: string | undefined;
638
+ output?: string | undefined;
639
+ model?: "whisper-tiny.en" | "whisper-base.en" | "whisper-small.en" | "whisper-large-v3-turbo" | undefined;
640
+ timestamps?: boolean | undefined;
641
+ }>;
642
+ type TranscribeInput = z.infer<typeof TranscribeInput>;
643
+ declare const transcribe: Skill<{
644
+ audio: string;
645
+ language?: string | undefined;
646
+ output?: string | undefined;
647
+ model?: "whisper-tiny.en" | "whisper-base.en" | "whisper-small.en" | "whisper-large-v3-turbo" | undefined;
648
+ timestamps?: boolean | undefined;
649
+ }, string>;
650
+ //#endregion
360
651
  //#region src/skills/builtin/translate.d.ts
361
652
  declare const TranslateInput: z.ZodObject<{
362
653
  /** Text to translate */
@@ -386,5 +677,5 @@ declare const translate: Skill<{
386
677
  preserveFormatting?: boolean | undefined;
387
678
  }, string>;
388
679
  //#endregion
389
- export { type CommitInput, type ExplainInput, type ExtractInput, type LoadSkillsOptions, type ReviewInput, type Skill, type SkillContext, type SkillDefinition, type SkillInfo, type SkillRegistry, type SummarizeInput, type TestInput, type TitleInput, type TranslateInput, clearSkills, commit, defineSkill, explain, extract, getAllSkillInfo, getSkillInfo, hasSkill, listSkills, loadProjectSkills, loadSkill, loadSkillPackage, loadSkills, removeSkill, review, summarize, test, title, translate, useSkill };
680
+ export { type AnalyzeScreenshotInput, type AnnounceInput, type CaptionImageInput, type CommitInput, type CompareImagesInput, type DescribeImageInput, type ExplainInput, type ExtractFromImageInput, type ExtractInput, type LoadSkillsOptions, type ReadAloudInput, type ReviewInput, type Skill, type SkillContext, type SkillDefinition, type SkillInfo, type SkillRegistry, type SpeakInput, type SummarizeInput, type TestInput, type TitleInput, type TranscribeInput, type TranslateInput, analyzeScreenshot, announce, captionImage, clearSkills, commit, compareImages, defineSkill, describeImage, explain, extract, extractFromImage, getAllSkillInfo, getSkillInfo, hasSkill, listSkills, loadProjectSkills, loadSkill, loadSkillPackage, loadSkills, readAloud, removeSkill, review, speak, summarize, test, title, transcribe, translate, useSkill };
390
681
  //# sourceMappingURL=index.d.mts.map