@tryhamster/gerbil 1.0.0-rc.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.
Files changed (103) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +253 -0
  3. package/bin/cli.js +2 -0
  4. package/dist/auto-update-BbNHbSU1.mjs +3 -0
  5. package/dist/browser/index.d.mts +262 -0
  6. package/dist/browser/index.d.mts.map +1 -0
  7. package/dist/browser/index.mjs +755 -0
  8. package/dist/browser/index.mjs.map +1 -0
  9. package/dist/chrome-backend-C5Un08O4.mjs +771 -0
  10. package/dist/chrome-backend-C5Un08O4.mjs.map +1 -0
  11. package/dist/chrome-backend-CtwPENIW.mjs +3 -0
  12. package/dist/chunk-Ct1HF2bE.mjs +7 -0
  13. package/dist/cli.d.mts +1 -0
  14. package/dist/cli.mjs +7078 -0
  15. package/dist/cli.mjs.map +1 -0
  16. package/dist/frameworks/express.d.mts +22 -0
  17. package/dist/frameworks/express.d.mts.map +1 -0
  18. package/dist/frameworks/express.mjs +123 -0
  19. package/dist/frameworks/express.mjs.map +1 -0
  20. package/dist/frameworks/fastify.d.mts +11 -0
  21. package/dist/frameworks/fastify.d.mts.map +1 -0
  22. package/dist/frameworks/fastify.mjs +73 -0
  23. package/dist/frameworks/fastify.mjs.map +1 -0
  24. package/dist/frameworks/hono.d.mts +14 -0
  25. package/dist/frameworks/hono.d.mts.map +1 -0
  26. package/dist/frameworks/hono.mjs +82 -0
  27. package/dist/frameworks/hono.mjs.map +1 -0
  28. package/dist/frameworks/next.d.mts +31 -0
  29. package/dist/frameworks/next.d.mts.map +1 -0
  30. package/dist/frameworks/next.mjs +116 -0
  31. package/dist/frameworks/next.mjs.map +1 -0
  32. package/dist/frameworks/react.d.mts +56 -0
  33. package/dist/frameworks/react.d.mts.map +1 -0
  34. package/dist/frameworks/react.mjs +172 -0
  35. package/dist/frameworks/react.mjs.map +1 -0
  36. package/dist/frameworks/trpc.d.mts +12 -0
  37. package/dist/frameworks/trpc.d.mts.map +1 -0
  38. package/dist/frameworks/trpc.mjs +80 -0
  39. package/dist/frameworks/trpc.mjs.map +1 -0
  40. package/dist/gerbil-BfnsFWRE.mjs +644 -0
  41. package/dist/gerbil-BfnsFWRE.mjs.map +1 -0
  42. package/dist/gerbil-BjW-z7Fq.mjs +5 -0
  43. package/dist/gerbil-DZ1k3ChC.d.mts +138 -0
  44. package/dist/gerbil-DZ1k3ChC.d.mts.map +1 -0
  45. package/dist/index.d.mts +223 -0
  46. package/dist/index.d.mts.map +1 -0
  47. package/dist/index.mjs +13 -0
  48. package/dist/index.mjs.map +1 -0
  49. package/dist/integrations/ai-sdk.d.mts +78 -0
  50. package/dist/integrations/ai-sdk.d.mts.map +1 -0
  51. package/dist/integrations/ai-sdk.mjs +199 -0
  52. package/dist/integrations/ai-sdk.mjs.map +1 -0
  53. package/dist/integrations/langchain.d.mts +41 -0
  54. package/dist/integrations/langchain.d.mts.map +1 -0
  55. package/dist/integrations/langchain.mjs +93 -0
  56. package/dist/integrations/langchain.mjs.map +1 -0
  57. package/dist/integrations/llamaindex.d.mts +45 -0
  58. package/dist/integrations/llamaindex.d.mts.map +1 -0
  59. package/dist/integrations/llamaindex.mjs +86 -0
  60. package/dist/integrations/llamaindex.mjs.map +1 -0
  61. package/dist/integrations/mcp-client.d.mts +206 -0
  62. package/dist/integrations/mcp-client.d.mts.map +1 -0
  63. package/dist/integrations/mcp-client.mjs +507 -0
  64. package/dist/integrations/mcp-client.mjs.map +1 -0
  65. package/dist/integrations/mcp.d.mts +177 -0
  66. package/dist/integrations/mcp.d.mts.map +1 -0
  67. package/dist/integrations/mcp.mjs +8 -0
  68. package/dist/mcp-R8kRLIKb.mjs +348 -0
  69. package/dist/mcp-R8kRLIKb.mjs.map +1 -0
  70. package/dist/models-DKULvhOr.mjs +136 -0
  71. package/dist/models-DKULvhOr.mjs.map +1 -0
  72. package/dist/models-De2-_GmQ.d.mts +22 -0
  73. package/dist/models-De2-_GmQ.d.mts.map +1 -0
  74. package/dist/one-liner-BUQR0nqq.mjs +98 -0
  75. package/dist/one-liner-BUQR0nqq.mjs.map +1 -0
  76. package/dist/skills/index.d.mts +390 -0
  77. package/dist/skills/index.d.mts.map +1 -0
  78. package/dist/skills/index.mjs +7 -0
  79. package/dist/skills-D3CEpgDc.mjs +630 -0
  80. package/dist/skills-D3CEpgDc.mjs.map +1 -0
  81. package/dist/tools-BsiEE6f2.mjs +567 -0
  82. package/dist/tools-BsiEE6f2.mjs.map +1 -0
  83. package/dist/types-BS1N92Jt.d.mts +183 -0
  84. package/dist/types-BS1N92Jt.d.mts.map +1 -0
  85. package/dist/utils-7vXqtq2Q.mjs +63 -0
  86. package/dist/utils-7vXqtq2Q.mjs.map +1 -0
  87. package/docs/ai-sdk.md +80 -0
  88. package/docs/architecture/README.md +84 -0
  89. package/docs/architecture/caching.md +227 -0
  90. package/docs/architecture/inference.md +176 -0
  91. package/docs/architecture/overview.md +179 -0
  92. package/docs/architecture/streaming.md +261 -0
  93. package/docs/architecture/webgpu.md +213 -0
  94. package/docs/browser.md +328 -0
  95. package/docs/cli.md +155 -0
  96. package/docs/frameworks.md +90 -0
  97. package/docs/mcp-client.md +224 -0
  98. package/docs/mcp.md +109 -0
  99. package/docs/memory.md +229 -0
  100. package/docs/repl.md +473 -0
  101. package/docs/skills.md +261 -0
  102. package/docs/tools.md +304 -0
  103. package/package.json +207 -0
@@ -0,0 +1,136 @@
1
+ //#region src/core/models.ts
2
+ const BUILTIN_MODELS = {
3
+ "qwen3-0.6b": {
4
+ id: "qwen3-0.6b",
5
+ repo: "onnx-community/Qwen3-0.6B-ONNX",
6
+ description: "Qwen3 0.6B - Best balance of speed and quality, supports thinking",
7
+ size: "~400MB",
8
+ contextLength: 32768,
9
+ supportsThinking: true,
10
+ supportsJson: true,
11
+ family: "qwen"
12
+ },
13
+ "qwen2.5-0.5b": {
14
+ id: "qwen2.5-0.5b",
15
+ repo: "onnx-community/Qwen2.5-0.5B-Instruct",
16
+ description: "Qwen2.5 0.5B - Fast and capable",
17
+ size: "~350MB",
18
+ contextLength: 32768,
19
+ supportsThinking: false,
20
+ supportsJson: true,
21
+ family: "qwen"
22
+ },
23
+ "qwen2.5-coder-0.5b": {
24
+ id: "qwen2.5-coder-0.5b",
25
+ repo: "onnx-community/Qwen2.5-Coder-0.5B-Instruct",
26
+ description: "Qwen2.5 Coder 0.5B - Optimized for code",
27
+ size: "~400MB",
28
+ contextLength: 32768,
29
+ supportsThinking: false,
30
+ supportsJson: true,
31
+ family: "qwen"
32
+ },
33
+ "smollm2-360m": {
34
+ id: "smollm2-360m",
35
+ repo: "HuggingFaceTB/SmolLM2-360M-Instruct",
36
+ description: "SmolLM2 360M - Fast, good for simple tasks",
37
+ size: "~250MB",
38
+ contextLength: 8192,
39
+ supportsThinking: false,
40
+ supportsJson: false,
41
+ family: "smollm"
42
+ },
43
+ "smollm2-135m": {
44
+ id: "smollm2-135m",
45
+ repo: "HuggingFaceTB/SmolLM2-135M-Instruct",
46
+ description: "SmolLM2 135M - Fastest, basic generation",
47
+ size: "~100MB",
48
+ contextLength: 8192,
49
+ supportsThinking: false,
50
+ supportsJson: false,
51
+ family: "smollm"
52
+ },
53
+ "phi-3-mini": {
54
+ id: "phi-3-mini",
55
+ repo: "microsoft/Phi-3-mini-4k-instruct-onnx",
56
+ description: "Phi-3 Mini - High quality, larger model",
57
+ size: "~2.1GB",
58
+ contextLength: 4096,
59
+ supportsThinking: false,
60
+ supportsJson: true,
61
+ family: "phi"
62
+ }
63
+ };
64
+ /**
65
+ * Parse model identifier and resolve to source
66
+ *
67
+ * Supported formats:
68
+ * - "qwen3-0.6b" (built-in)
69
+ * - "hf:org/model" (HuggingFace shorthand)
70
+ * - "https://huggingface.co/org/model" (full URL)
71
+ * - "file:./path/to/model" (local path)
72
+ */
73
+ function resolveModel(modelId) {
74
+ if (BUILTIN_MODELS[modelId]) return {
75
+ type: "builtin",
76
+ path: BUILTIN_MODELS[modelId].repo
77
+ };
78
+ if (modelId.startsWith("hf:")) return {
79
+ type: "huggingface",
80
+ path: modelId.slice(3)
81
+ };
82
+ if (modelId.startsWith("https://huggingface.co/")) return {
83
+ type: "huggingface",
84
+ path: modelId.replace("https://huggingface.co/", "")
85
+ };
86
+ if (modelId.startsWith("file:")) return {
87
+ type: "local",
88
+ path: modelId.slice(5)
89
+ };
90
+ if (modelId.includes("/")) return {
91
+ type: "huggingface",
92
+ path: modelId
93
+ };
94
+ return {
95
+ type: "huggingface",
96
+ path: modelId
97
+ };
98
+ }
99
+ /**
100
+ * Get model config (built-in only)
101
+ */
102
+ function getModelConfig(modelId) {
103
+ return BUILTIN_MODELS[modelId] || null;
104
+ }
105
+ /**
106
+ * Create model config for external model
107
+ */
108
+ function createExternalModelConfig(modelId, repo) {
109
+ let family = "other";
110
+ const repoLower = repo.toLowerCase();
111
+ if (repoLower.includes("qwen")) family = "qwen";
112
+ else if (repoLower.includes("smollm")) family = "smollm";
113
+ else if (repoLower.includes("phi")) family = "phi";
114
+ else if (repoLower.includes("mistral")) family = "mistral";
115
+ else if (repoLower.includes("llama")) family = "llama";
116
+ return {
117
+ id: modelId,
118
+ repo,
119
+ description: `External model: ${repo}`,
120
+ size: "Unknown",
121
+ contextLength: 4096,
122
+ supportsThinking: family === "qwen",
123
+ supportsJson: family === "qwen" || family === "phi",
124
+ family
125
+ };
126
+ }
127
+ /**
128
+ * List all built-in models
129
+ */
130
+ function listBuiltinModels() {
131
+ return Object.values(BUILTIN_MODELS);
132
+ }
133
+
134
+ //#endregion
135
+ export { resolveModel as a, listBuiltinModels as i, createExternalModelConfig as n, getModelConfig as r, BUILTIN_MODELS as t };
136
+ //# sourceMappingURL=models-DKULvhOr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-DKULvhOr.mjs","names":["BUILTIN_MODELS: Record<string, ModelConfig>","family: ModelConfig[\"family\"]"],"sources":["../src/core/models.ts"],"sourcesContent":["/**\n * Model Registry\n *\n * Supports built-in models and any HuggingFace model via hf:org/model syntax\n */\n\nimport type { ModelConfig, ModelSource } from \"./types.js\";\n\n// ============================================\n// Built-in Models (curated & tested)\n// ============================================\n\nexport const BUILTIN_MODELS: Record<string, ModelConfig> = {\n \"qwen3-0.6b\": {\n id: \"qwen3-0.6b\",\n repo: \"onnx-community/Qwen3-0.6B-ONNX\",\n description: \"Qwen3 0.6B - Best balance of speed and quality, supports thinking\",\n size: \"~400MB\",\n contextLength: 32_768,\n supportsThinking: true,\n supportsJson: true,\n family: \"qwen\",\n },\n \"qwen2.5-0.5b\": {\n id: \"qwen2.5-0.5b\",\n repo: \"onnx-community/Qwen2.5-0.5B-Instruct\",\n description: \"Qwen2.5 0.5B - Fast and capable\",\n size: \"~350MB\",\n contextLength: 32_768,\n supportsThinking: false,\n supportsJson: true,\n family: \"qwen\",\n },\n \"qwen2.5-coder-0.5b\": {\n id: \"qwen2.5-coder-0.5b\",\n repo: \"onnx-community/Qwen2.5-Coder-0.5B-Instruct\",\n description: \"Qwen2.5 Coder 0.5B - Optimized for code\",\n size: \"~400MB\",\n contextLength: 32_768,\n supportsThinking: false,\n supportsJson: true,\n family: \"qwen\",\n },\n \"smollm2-360m\": {\n id: \"smollm2-360m\",\n repo: \"HuggingFaceTB/SmolLM2-360M-Instruct\",\n description: \"SmolLM2 360M - Fast, good for simple tasks\",\n size: \"~250MB\",\n contextLength: 8192,\n supportsThinking: false,\n supportsJson: false,\n family: \"smollm\",\n },\n \"smollm2-135m\": {\n id: \"smollm2-135m\",\n repo: \"HuggingFaceTB/SmolLM2-135M-Instruct\",\n description: \"SmolLM2 135M - Fastest, basic generation\",\n size: \"~100MB\",\n contextLength: 8192,\n supportsThinking: false,\n supportsJson: false,\n family: \"smollm\",\n },\n \"phi-3-mini\": {\n id: \"phi-3-mini\",\n repo: \"microsoft/Phi-3-mini-4k-instruct-onnx\",\n description: \"Phi-3 Mini - High quality, larger model\",\n size: \"~2.1GB\",\n contextLength: 4096,\n supportsThinking: false,\n supportsJson: true,\n family: \"phi\",\n },\n};\n\n// ============================================\n// Model Resolution\n// ============================================\n\n/**\n * Parse model identifier and resolve to source\n *\n * Supported formats:\n * - \"qwen3-0.6b\" (built-in)\n * - \"hf:org/model\" (HuggingFace shorthand)\n * - \"https://huggingface.co/org/model\" (full URL)\n * - \"file:./path/to/model\" (local path)\n */\nexport function resolveModel(modelId: string): ModelSource {\n // Built-in model\n if (BUILTIN_MODELS[modelId]) {\n return {\n type: \"builtin\",\n path: BUILTIN_MODELS[modelId].repo,\n };\n }\n\n // HuggingFace shorthand: hf:org/model\n if (modelId.startsWith(\"hf:\")) {\n const repo = modelId.slice(3);\n return {\n type: \"huggingface\",\n path: repo,\n };\n }\n\n // HuggingFace URL\n if (modelId.startsWith(\"https://huggingface.co/\")) {\n const repo = modelId.replace(\"https://huggingface.co/\", \"\");\n return {\n type: \"huggingface\",\n path: repo,\n };\n }\n\n // Local file\n if (modelId.startsWith(\"file:\")) {\n const path = modelId.slice(5);\n return {\n type: \"local\",\n path,\n };\n }\n\n // Assume it's a HuggingFace repo if it contains a slash\n if (modelId.includes(\"/\")) {\n return {\n type: \"huggingface\",\n path: modelId,\n };\n }\n\n // Unknown - treat as HuggingFace\n return {\n type: \"huggingface\",\n path: modelId,\n };\n}\n\n/**\n * Get model config (built-in only)\n */\nexport function getModelConfig(modelId: string): ModelConfig | null {\n return BUILTIN_MODELS[modelId] || null;\n}\n\n/**\n * Create model config for external model\n */\nexport function createExternalModelConfig(modelId: string, repo: string): ModelConfig {\n // Try to infer family from repo name\n let family: ModelConfig[\"family\"] = \"other\";\n const repoLower = repo.toLowerCase();\n\n if (repoLower.includes(\"qwen\")) {\n family = \"qwen\";\n } else if (repoLower.includes(\"smollm\")) {\n family = \"smollm\";\n } else if (repoLower.includes(\"phi\")) {\n family = \"phi\";\n } else if (repoLower.includes(\"mistral\")) {\n family = \"mistral\";\n } else if (repoLower.includes(\"llama\")) {\n family = \"llama\";\n }\n\n return {\n id: modelId,\n repo,\n description: `External model: ${repo}`,\n size: \"Unknown\",\n contextLength: 4096, // Conservative default\n supportsThinking: family === \"qwen\",\n supportsJson: family === \"qwen\" || family === \"phi\",\n family,\n };\n}\n\n/**\n * List all built-in models\n */\nexport function listBuiltinModels(): ModelConfig[] {\n return Object.values(BUILTIN_MODELS);\n}\n\n/**\n * Search HuggingFace models (placeholder - would need HF API)\n */\nexport async function searchModels(query: string): Promise<ModelConfig[]> {\n // TODO: Implement HuggingFace API search\n // For now, filter built-in models\n const q = query.toLowerCase();\n return listBuiltinModels().filter(\n (m) =>\n m.id.toLowerCase().includes(q) ||\n m.description.toLowerCase().includes(q) ||\n m.family.toLowerCase().includes(q),\n );\n}\n"],"mappings":";AAYA,MAAaA,iBAA8C;CACzD,cAAc;EACZ,IAAI;EACJ,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;EACf,kBAAkB;EAClB,cAAc;EACd,QAAQ;EACT;CACD,gBAAgB;EACd,IAAI;EACJ,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;EACf,kBAAkB;EAClB,cAAc;EACd,QAAQ;EACT;CACD,sBAAsB;EACpB,IAAI;EACJ,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;EACf,kBAAkB;EAClB,cAAc;EACd,QAAQ;EACT;CACD,gBAAgB;EACd,IAAI;EACJ,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;EACf,kBAAkB;EAClB,cAAc;EACd,QAAQ;EACT;CACD,gBAAgB;EACd,IAAI;EACJ,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;EACf,kBAAkB;EAClB,cAAc;EACd,QAAQ;EACT;CACD,cAAc;EACZ,IAAI;EACJ,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;EACf,kBAAkB;EAClB,cAAc;EACd,QAAQ;EACT;CACF;;;;;;;;;;AAeD,SAAgB,aAAa,SAA8B;AAEzD,KAAI,eAAe,SACjB,QAAO;EACL,MAAM;EACN,MAAM,eAAe,SAAS;EAC/B;AAIH,KAAI,QAAQ,WAAW,MAAM,CAE3B,QAAO;EACL,MAAM;EACN,MAHW,QAAQ,MAAM,EAAE;EAI5B;AAIH,KAAI,QAAQ,WAAW,0BAA0B,CAE/C,QAAO;EACL,MAAM;EACN,MAHW,QAAQ,QAAQ,2BAA2B,GAAG;EAI1D;AAIH,KAAI,QAAQ,WAAW,QAAQ,CAE7B,QAAO;EACL,MAAM;EACN,MAHW,QAAQ,MAAM,EAAE;EAI5B;AAIH,KAAI,QAAQ,SAAS,IAAI,CACvB,QAAO;EACL,MAAM;EACN,MAAM;EACP;AAIH,QAAO;EACL,MAAM;EACN,MAAM;EACP;;;;;AAMH,SAAgB,eAAe,SAAqC;AAClE,QAAO,eAAe,YAAY;;;;;AAMpC,SAAgB,0BAA0B,SAAiB,MAA2B;CAEpF,IAAIC,SAAgC;CACpC,MAAM,YAAY,KAAK,aAAa;AAEpC,KAAI,UAAU,SAAS,OAAO,CAC5B,UAAS;UACA,UAAU,SAAS,SAAS,CACrC,UAAS;UACA,UAAU,SAAS,MAAM,CAClC,UAAS;UACA,UAAU,SAAS,UAAU,CACtC,UAAS;UACA,UAAU,SAAS,QAAQ,CACpC,UAAS;AAGX,QAAO;EACL,IAAI;EACJ;EACA,aAAa,mBAAmB;EAChC,MAAM;EACN,eAAe;EACf,kBAAkB,WAAW;EAC7B,cAAc,WAAW,UAAU,WAAW;EAC9C;EACD;;;;;AAMH,SAAgB,oBAAmC;AACjD,QAAO,OAAO,OAAO,eAAe"}
@@ -0,0 +1,22 @@
1
+ import { f as ModelConfig, p as ModelSource } from "./types-BS1N92Jt.mjs";
2
+
3
+ //#region src/core/models.d.ts
4
+
5
+ declare const BUILTIN_MODELS: Record<string, ModelConfig>;
6
+ /**
7
+ * Parse model identifier and resolve to source
8
+ *
9
+ * Supported formats:
10
+ * - "qwen3-0.6b" (built-in)
11
+ * - "hf:org/model" (HuggingFace shorthand)
12
+ * - "https://huggingface.co/org/model" (full URL)
13
+ * - "file:./path/to/model" (local path)
14
+ */
15
+ declare function resolveModel(modelId: string): ModelSource;
16
+ /**
17
+ * List all built-in models
18
+ */
19
+ declare function listBuiltinModels(): ModelConfig[];
20
+ //#endregion
21
+ export { listBuiltinModels as n, resolveModel as r, BUILTIN_MODELS as t };
22
+ //# sourceMappingURL=models-De2-_GmQ.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models-De2-_GmQ.d.mts","names":[],"sources":["../src/core/models.ts"],"sourcesContent":[],"mappings":";;;;cAYa,gBAAgB,eAAe;;;;;;;;;;iBA4E5B,YAAA,mBAA+B;;;;iBA6F/B,iBAAA,CAAA,GAAqB"}
@@ -0,0 +1,98 @@
1
+ import { t as Gerbil } from "./gerbil-BfnsFWRE.mjs";
2
+
3
+ //#region src/core/one-liner.ts
4
+ /**
5
+ * One-liner API for Gerbil
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * import gerbil from "gerbil";
10
+ *
11
+ * const text = await gerbil("Write a haiku");
12
+ * ```
13
+ */
14
+ let instance = null;
15
+ let loadPromise = null;
16
+ let currentModel = null;
17
+ async function getInstance(model) {
18
+ const requestedModel = model || "qwen3-0.6b";
19
+ if (instance && currentModel && currentModel !== requestedModel) {
20
+ await instance.dispose();
21
+ instance = null;
22
+ loadPromise = null;
23
+ currentModel = null;
24
+ }
25
+ if (!instance) instance = new Gerbil();
26
+ if (!(instance.isLoaded() || loadPromise)) {
27
+ currentModel = requestedModel;
28
+ loadPromise = instance.loadModel(requestedModel);
29
+ }
30
+ if (loadPromise) {
31
+ await loadPromise;
32
+ loadPromise = null;
33
+ }
34
+ return instance;
35
+ }
36
+ /**
37
+ * Generate text with zero setup
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * const text = await gerbil("Write a haiku");
42
+ * const text = await gerbil("Explain this", { model: "qwen3-0.6b", thinking: true });
43
+ * ```
44
+ */
45
+ async function gerbil(prompt, options = {}) {
46
+ const { model, ...generateOptions } = options;
47
+ return (await (await getInstance(model)).generate(prompt, generateOptions)).text;
48
+ }
49
+ /**
50
+ * Generate text (returns full result)
51
+ */
52
+ async function generate(prompt, options = {}) {
53
+ const { model, ...generateOptions } = options;
54
+ return (await getInstance(model)).generate(prompt, generateOptions);
55
+ }
56
+ /**
57
+ * Stream text generation
58
+ */
59
+ async function* stream(prompt, options = {}) {
60
+ const { model, ...generateOptions } = options;
61
+ return yield* (await getInstance(model)).stream(prompt, generateOptions);
62
+ }
63
+ /**
64
+ * Generate structured JSON
65
+ */
66
+ async function json(prompt, options) {
67
+ const { model, ...jsonOptions } = options;
68
+ return (await getInstance(model)).json(prompt, jsonOptions);
69
+ }
70
+ /**
71
+ * Generate embeddings
72
+ */
73
+ async function embed(text, options = {}) {
74
+ const { model, ...embedOptions } = options;
75
+ return (await getInstance(model)).embed(text, embedOptions);
76
+ }
77
+ /**
78
+ * Generate embeddings for multiple texts
79
+ */
80
+ async function embedBatch(texts, options = {}) {
81
+ const { model, ...embedOptions } = options;
82
+ return (await getInstance(model)).embedBatch(texts, embedOptions);
83
+ }
84
+ /**
85
+ * Dispose singleton instance
86
+ */
87
+ async function dispose() {
88
+ if (instance) {
89
+ await instance.dispose();
90
+ instance = null;
91
+ loadPromise = null;
92
+ }
93
+ }
94
+ var one_liner_default = gerbil;
95
+
96
+ //#endregion
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
@@ -0,0 +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"}
@@ -0,0 +1,390 @@
1
+ import "../types-BS1N92Jt.mjs";
2
+ import { t as Gerbil } from "../gerbil-DZ1k3ChC.mjs";
3
+ import { z } from "zod";
4
+
5
+ //#region src/skills/types.d.ts
6
+ type SkillDefinition<TInput = unknown, TOutput = unknown> = {
7
+ /** Unique skill name (kebab-case) */
8
+ name: string;
9
+ /** Human-readable description */
10
+ description: string;
11
+ /** Semver version */
12
+ version?: string;
13
+ /** Author name/email */
14
+ author?: string;
15
+ /** Zod schema for input validation */
16
+ input?: z.ZodType<TInput>;
17
+ /** Zod schema for structured output (optional) */
18
+ output?: z.ZodType<TOutput>;
19
+ /** Default system prompt */
20
+ system?: string;
21
+ /** Default model for this skill */
22
+ model?: string;
23
+ /** Enable thinking mode by default */
24
+ thinking?: boolean;
25
+ /** Max tokens default */
26
+ maxTokens?: number;
27
+ /** Temperature default */
28
+ temperature?: number;
29
+ /** The skill implementation */
30
+ run: (ctx: SkillContext<TInput>) => Promise<TOutput | string>;
31
+ };
32
+ type SkillContext<TInput = unknown> = {
33
+ /** Validated input */
34
+ input: TInput;
35
+ /** Gerbil instance (already loaded) */
36
+ gerbil: Gerbil;
37
+ /** Raw input before validation */
38
+ rawInput: unknown;
39
+ /** Skill definition (for accessing defaults) */
40
+ definition: SkillDefinition<TInput, unknown>;
41
+ };
42
+ type Skill<TInput = unknown, TOutput = unknown> = {
43
+ /** Skill metadata */
44
+ definition: SkillDefinition<TInput, TOutput>;
45
+ /** Execute skill with input */
46
+ (input: TInput): Promise<TOutput>;
47
+ /** Execute with custom Gerbil instance */
48
+ run(input: TInput, gerbil?: Gerbil): Promise<TOutput>;
49
+ };
50
+ type SkillRegistry = {
51
+ /** Register a skill */
52
+ register<TInput, TOutput>(skill: Skill<TInput, TOutput>): void;
53
+ /** Get skill by name */
54
+ get<TInput = unknown, TOutput = unknown>(name: string): Skill<TInput, TOutput> | undefined;
55
+ /** Check if skill exists */
56
+ has(name: string): boolean;
57
+ /** List all skill names */
58
+ list(): string[];
59
+ /** Remove a skill */
60
+ remove(name: string): boolean;
61
+ /** Clear all skills */
62
+ clear(): void;
63
+ };
64
+ type LoadSkillsOptions = {
65
+ /** File patterns to match (default: ['*.skill.ts', '*.skill.js']) */
66
+ patterns?: string[];
67
+ /** Watch for changes */
68
+ watch?: boolean;
69
+ };
70
+ type SkillInfo = {
71
+ /** Skill name */
72
+ name: string;
73
+ /** Description */
74
+ description: string;
75
+ /** Version */
76
+ version?: string;
77
+ /** Author */
78
+ author?: string;
79
+ /** Whether it's a built-in skill */
80
+ builtin: boolean;
81
+ /** Source file path (if loaded from file) */
82
+ source?: string;
83
+ };
84
+ //#endregion
85
+ //#region src/skills/loader.d.ts
86
+ /**
87
+ * Load skills from the project's .gerbil/skills/ directory
88
+ *
89
+ * This is the standard location for project-specific skills.
90
+ * Creates the directory structure if it doesn't exist.
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * // Load from .gerbil/skills/ in current working directory
95
+ * const loaded = await loadProjectSkills();
96
+ * console.log(`Loaded ${loaded.length} project skills`);
97
+ * ```
98
+ */
99
+ declare function loadProjectSkills(cwd?: string): Promise<string[]>;
100
+ /**
101
+ * Load all skills from a directory
102
+ *
103
+ * @example
104
+ * ```ts
105
+ * // Load all *.skill.ts and *.skill.js files
106
+ * const loaded = await loadSkills("./skills");
107
+ * console.log(`Loaded ${loaded.length} skills`);
108
+ * ```
109
+ */
110
+ declare function loadSkills(dir: string, options?: LoadSkillsOptions): Promise<string[]>;
111
+ /**
112
+ * Load a single skill from a file
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * const skill = await loadSkill("./skills/sentiment.skill.ts");
117
+ * if (skill) {
118
+ * const result = await skill({ text: "Hello" });
119
+ * }
120
+ * ```
121
+ */
122
+ declare function loadSkill(filePath: string): Promise<Skill | null>;
123
+ /**
124
+ * Load skills from an npm package
125
+ *
126
+ * @example
127
+ * ```ts
128
+ * // Load skills from a package
129
+ * const loaded = await loadSkillPackage("gerbil-skills-extra");
130
+ * ```
131
+ */
132
+ declare function loadSkillPackage(packageName: string): Promise<string[]>;
133
+ //#endregion
134
+ //#region src/skills/registry.d.ts
135
+ /**
136
+ * Define and register a skill
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * const sentiment = defineSkill({
141
+ * name: "sentiment",
142
+ * description: "Analyze sentiment of text",
143
+ * input: z.object({ text: z.string() }),
144
+ * output: z.object({ sentiment: z.enum(["positive", "negative", "neutral"]) }),
145
+ * async run({ input, gerbil }) {
146
+ * return gerbil.json(`Analyze sentiment: ${input.text}`, { schema: this.output });
147
+ * }
148
+ * });
149
+ * ```
150
+ */
151
+ declare function defineSkill<TInput, TOutput>(definition: SkillDefinition<TInput, TOutput>): Skill<TInput, TOutput>;
152
+ /**
153
+ * Get a skill by name
154
+ *
155
+ * @example
156
+ * ```ts
157
+ * const sentiment = useSkill("sentiment");
158
+ * const result = await sentiment({ text: "I love this!" });
159
+ * ```
160
+ */
161
+ declare function useSkill<TInput = unknown, TOutput = unknown>(name: string): Skill<TInput, TOutput>;
162
+ /**
163
+ * List all registered skill names
164
+ */
165
+ declare function listSkills(): string[];
166
+ /**
167
+ * Get skill metadata
168
+ */
169
+ declare function getSkillInfo(name: string): SkillInfo | undefined;
170
+ /**
171
+ * Check if a skill exists
172
+ */
173
+ declare function hasSkill(name: string): boolean;
174
+ /**
175
+ * Remove a skill from registry
176
+ */
177
+ declare function removeSkill(name: string): boolean;
178
+ /**
179
+ * Clear all skills from registry
180
+ */
181
+ declare function clearSkills(): void;
182
+ /**
183
+ * Get all skill info
184
+ */
185
+ declare function getAllSkillInfo(): SkillInfo[];
186
+ //#endregion
187
+ //#region src/skills/builtin/commit.d.ts
188
+ declare const CommitInput: z.ZodObject<{
189
+ /** Git diff (auto-detected if not provided) */
190
+ diff: z.ZodOptional<z.ZodString>;
191
+ /** Commit style */
192
+ type: z.ZodDefault<z.ZodEnum<["conventional", "simple", "detailed"]>>;
193
+ /** Max length for commit message */
194
+ maxLength: z.ZodDefault<z.ZodNumber>;
195
+ }, "strip", z.ZodTypeAny, {
196
+ type: "conventional" | "simple" | "detailed";
197
+ maxLength: number;
198
+ diff?: string | undefined;
199
+ }, {
200
+ diff?: string | undefined;
201
+ type?: "conventional" | "simple" | "detailed" | undefined;
202
+ maxLength?: number | undefined;
203
+ }>;
204
+ type CommitInput = z.infer<typeof CommitInput>;
205
+ declare const commit: Skill<{
206
+ diff?: string | undefined;
207
+ type?: "conventional" | "simple" | "detailed" | undefined;
208
+ maxLength?: number | undefined;
209
+ }, string>;
210
+ //#endregion
211
+ //#region src/skills/builtin/explain.d.ts
212
+ declare const ExplainInput: z.ZodObject<{
213
+ /** Content to explain */
214
+ content: z.ZodString;
215
+ /** Explanation level */
216
+ level: z.ZodDefault<z.ZodEnum<["beginner", "intermediate", "expert"]>>;
217
+ /** Programming language (for code) */
218
+ language: z.ZodOptional<z.ZodString>;
219
+ }, "strip", z.ZodTypeAny, {
220
+ content: string;
221
+ level: "beginner" | "intermediate" | "expert";
222
+ language?: string | undefined;
223
+ }, {
224
+ content: string;
225
+ level?: "beginner" | "intermediate" | "expert" | undefined;
226
+ language?: string | undefined;
227
+ }>;
228
+ type ExplainInput = z.infer<typeof ExplainInput>;
229
+ declare const explain: Skill<{
230
+ content: string;
231
+ level?: "beginner" | "intermediate" | "expert" | undefined;
232
+ language?: string | undefined;
233
+ }, string>;
234
+ //#endregion
235
+ //#region src/skills/builtin/extract.d.ts
236
+ declare const ExtractInput: z.ZodObject<{
237
+ /** Content to extract from */
238
+ content: z.ZodString;
239
+ /** Zod schema for extraction (passed at runtime) */
240
+ schema: z.ZodAny;
241
+ /** Additional context */
242
+ context: z.ZodOptional<z.ZodString>;
243
+ }, "strip", z.ZodTypeAny, {
244
+ content: string;
245
+ schema?: any;
246
+ context?: string | undefined;
247
+ }, {
248
+ content: string;
249
+ schema?: any;
250
+ context?: string | undefined;
251
+ }>;
252
+ type ExtractInput = z.infer<typeof ExtractInput>;
253
+ declare const extract: Skill<{
254
+ content: string;
255
+ schema?: any;
256
+ context?: string | undefined;
257
+ }, string>;
258
+ //#endregion
259
+ //#region src/skills/builtin/review.d.ts
260
+ declare const ReviewInput: z.ZodObject<{
261
+ /** Code to review */
262
+ code: z.ZodString;
263
+ /** Focus areas */
264
+ focus: z.ZodDefault<z.ZodArray<z.ZodEnum<["security", "performance", "style", "bugs", "all"]>, "many">>;
265
+ /** Output format */
266
+ format: z.ZodDefault<z.ZodEnum<["inline", "summary", "detailed"]>>;
267
+ }, "strip", z.ZodTypeAny, {
268
+ code: string;
269
+ format: "detailed" | "inline" | "summary";
270
+ focus: ("security" | "performance" | "style" | "bugs" | "all")[];
271
+ }, {
272
+ code: string;
273
+ format?: "detailed" | "inline" | "summary" | undefined;
274
+ focus?: ("security" | "performance" | "style" | "bugs" | "all")[] | undefined;
275
+ }>;
276
+ type ReviewInput = z.infer<typeof ReviewInput>;
277
+ declare const review: Skill<{
278
+ code: string;
279
+ format?: "detailed" | "inline" | "summary" | undefined;
280
+ focus?: ("security" | "performance" | "style" | "bugs" | "all")[] | undefined;
281
+ }, string>;
282
+ //#endregion
283
+ //#region src/skills/builtin/summarize.d.ts
284
+ declare const SummarizeInput: z.ZodObject<{
285
+ /** Content to summarize */
286
+ content: z.ZodString;
287
+ /** Summary length */
288
+ length: z.ZodDefault<z.ZodEnum<["short", "medium", "long"]>>;
289
+ /** Output format */
290
+ format: z.ZodDefault<z.ZodEnum<["paragraph", "bullets"]>>;
291
+ /** Focus areas */
292
+ focus: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
293
+ }, "strip", z.ZodTypeAny, {
294
+ content: string;
295
+ length: "short" | "medium" | "long";
296
+ format: "paragraph" | "bullets";
297
+ focus?: string[] | undefined;
298
+ }, {
299
+ content: string;
300
+ length?: "short" | "medium" | "long" | undefined;
301
+ format?: "paragraph" | "bullets" | undefined;
302
+ focus?: string[] | undefined;
303
+ }>;
304
+ type SummarizeInput = z.infer<typeof SummarizeInput>;
305
+ declare const summarize: Skill<{
306
+ content: string;
307
+ length?: "short" | "medium" | "long" | undefined;
308
+ format?: "paragraph" | "bullets" | undefined;
309
+ focus?: string[] | undefined;
310
+ }, string>;
311
+ //#endregion
312
+ //#region src/skills/builtin/test.d.ts
313
+ declare const TestInput: z.ZodObject<{
314
+ /** Code to test */
315
+ code: z.ZodString;
316
+ /** Test framework */
317
+ framework: z.ZodDefault<z.ZodEnum<["jest", "vitest", "mocha", "playwright"]>>;
318
+ /** Test style */
319
+ style: z.ZodDefault<z.ZodEnum<["unit", "integration", "e2e"]>>;
320
+ }, "strip", z.ZodTypeAny, {
321
+ style: "unit" | "integration" | "e2e";
322
+ code: string;
323
+ framework: "jest" | "vitest" | "mocha" | "playwright";
324
+ }, {
325
+ code: string;
326
+ style?: "unit" | "integration" | "e2e" | undefined;
327
+ framework?: "jest" | "vitest" | "mocha" | "playwright" | undefined;
328
+ }>;
329
+ type TestInput = z.infer<typeof TestInput>;
330
+ declare const test: Skill<{
331
+ code: string;
332
+ style?: "unit" | "integration" | "e2e" | undefined;
333
+ framework?: "jest" | "vitest" | "mocha" | "playwright" | undefined;
334
+ }, string>;
335
+ //#endregion
336
+ //#region src/skills/builtin/title.d.ts
337
+ declare const TitleInput: z.ZodObject<{
338
+ /** Content to generate title for */
339
+ content: z.ZodString;
340
+ /** Title style */
341
+ style: z.ZodDefault<z.ZodEnum<["professional", "clickbait", "seo", "simple"]>>;
342
+ /** Max length */
343
+ maxLength: z.ZodDefault<z.ZodNumber>;
344
+ }, "strip", z.ZodTypeAny, {
345
+ content: string;
346
+ style: "simple" | "professional" | "clickbait" | "seo";
347
+ maxLength: number;
348
+ }, {
349
+ content: string;
350
+ style?: "simple" | "professional" | "clickbait" | "seo" | undefined;
351
+ maxLength?: number | undefined;
352
+ }>;
353
+ type TitleInput = z.infer<typeof TitleInput>;
354
+ declare const title: Skill<{
355
+ content: string;
356
+ style?: "simple" | "professional" | "clickbait" | "seo" | undefined;
357
+ maxLength?: number | undefined;
358
+ }, string>;
359
+ //#endregion
360
+ //#region src/skills/builtin/translate.d.ts
361
+ declare const TranslateInput: z.ZodObject<{
362
+ /** Text to translate */
363
+ text: z.ZodString;
364
+ /** Source language (auto-detected if not provided) */
365
+ from: z.ZodOptional<z.ZodString>;
366
+ /** Target language */
367
+ to: z.ZodString;
368
+ /** Preserve formatting */
369
+ preserveFormatting: z.ZodDefault<z.ZodBoolean>;
370
+ }, "strip", z.ZodTypeAny, {
371
+ text: string;
372
+ to: string;
373
+ preserveFormatting: boolean;
374
+ from?: string | undefined;
375
+ }, {
376
+ text: string;
377
+ to: string;
378
+ from?: string | undefined;
379
+ preserveFormatting?: boolean | undefined;
380
+ }>;
381
+ type TranslateInput = z.infer<typeof TranslateInput>;
382
+ declare const translate: Skill<{
383
+ text: string;
384
+ to: string;
385
+ from?: string | undefined;
386
+ preserveFormatting?: boolean | undefined;
387
+ }, string>;
388
+ //#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 };
390
+ //# sourceMappingURL=index.d.mts.map