0xkobold 0.0.2 → 0.0.3

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.
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Ollama Cloud Extension - Phase 1: Login & Auth
3
+ *
4
+ * Provides secure OAuth-based login for Ollama Cloud API.
5
+ * Users can authenticate via /login command and credentials
6
+ * are stored securely in ~/.0xkobold/auth.json
7
+ */
8
+ export default function ollamaCloudExtension(pi) {
9
+ console.log("[OllamaCloud] Extension loaded");
10
+ // Register Ollama Cloud as an OAuth provider
11
+ pi.registerProvider("ollama-cloud", {
12
+ baseUrl: "https://ollama.com",
13
+ api: "openai-chat",
14
+ oauth: {
15
+ name: "Ollama Cloud",
16
+ /**
17
+ * Login flow - prompts user for API key in TUI
18
+ */
19
+ async login(callbacks) {
20
+ const { onPrompt, onProgress } = callbacks;
21
+ try {
22
+ // Show connecting status
23
+ onProgress?.("Connecting to Ollama Cloud...");
24
+ // Prompt for API key
25
+ const prompt = {
26
+ message: "Enter your Ollama API Key (from ollama.com/settings/keys):",
27
+ placeholder: "sk-ollama-...",
28
+ };
29
+ const apiKey = await onPrompt(prompt);
30
+ if (!apiKey || apiKey.trim() === "") {
31
+ throw new Error("API key is required");
32
+ }
33
+ const trimmedKey = apiKey.trim();
34
+ // Validate the key
35
+ onProgress?.("Validating API key...");
36
+ const response = await fetch("https://ollama.com/api/tags", {
37
+ headers: {
38
+ "Authorization": `Bearer ${trimmedKey}`,
39
+ },
40
+ });
41
+ if (!response.ok) {
42
+ if (response.status === 401) {
43
+ throw new Error("Invalid API key");
44
+ }
45
+ throw new Error(`Connection failed: ${response.status}`);
46
+ }
47
+ onProgress?.("Connected to Ollama Cloud!");
48
+ return {
49
+ access: trimmedKey,
50
+ refresh: "",
51
+ expires: null,
52
+ };
53
+ }
54
+ catch (err) {
55
+ const message = err instanceof Error ? err.message : String(err);
56
+ throw new Error(`Login failed: ${message}`);
57
+ }
58
+ },
59
+ async refreshToken(credentials) {
60
+ return credentials;
61
+ },
62
+ getApiKey(credentials) {
63
+ return credentials.access;
64
+ },
65
+ },
66
+ models: [
67
+ {
68
+ id: "ollama/gpt-oss:120b-cloud",
69
+ name: "GPT-OSS 120B (Cloud)",
70
+ reasoning: false,
71
+ input: ["text"],
72
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
73
+ contextWindow: 128000,
74
+ maxTokens: 8192,
75
+ },
76
+ {
77
+ id: "ollama/qwen2.5:72b",
78
+ name: "Qwen 2.5 72B (Cloud)",
79
+ reasoning: false,
80
+ input: ["text"],
81
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
82
+ contextWindow: 128000,
83
+ maxTokens: 8192,
84
+ },
85
+ {
86
+ id: "ollama/qwen2.5:32b",
87
+ name: "Qwen 2.5 32B (Cloud)",
88
+ reasoning: false,
89
+ input: ["text"],
90
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
91
+ contextWindow: 128000,
92
+ maxTokens: 8192,
93
+ },
94
+ {
95
+ id: "ollama/deepseek-r1:671b",
96
+ name: "DeepSeek R1 671B (Cloud)",
97
+ reasoning: true,
98
+ input: ["text"],
99
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
100
+ contextWindow: 128000,
101
+ maxTokens: 8192,
102
+ },
103
+ {
104
+ id: "ollama/llama3.2:latest",
105
+ name: "Llama 3.2 (Cloud)",
106
+ reasoning: false,
107
+ input: ["text"],
108
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
109
+ contextWindow: 128000,
110
+ maxTokens: 4096,
111
+ },
112
+ ],
113
+ });
114
+ console.log("[OllamaCloud] Provider registered. Run /login to authenticate.");
115
+ // Register /ollama-status command to check connection
116
+ pi.registerCommand("ollama-status", {
117
+ description: "Check Ollama Cloud connection status",
118
+ handler: async (_args, ctx) => {
119
+ const authStorage = ctx.authStorage;
120
+ const hasAuth = authStorage?.has?.("ollama-cloud") ?? false;
121
+ if (hasAuth) {
122
+ ctx.ui?.notify?.("🌩️ Ollama Cloud: Authenticated", "info");
123
+ ctx.ui?.notify?.(" Run /models to see available cloud models", "info");
124
+ }
125
+ else {
126
+ ctx.ui?.notify?.("❌ Ollama Cloud: Not authenticated", "warning");
127
+ ctx.ui?.notify?.(" Run /login to connect", "info");
128
+ }
129
+ },
130
+ });
131
+ }
132
+ //# sourceMappingURL=ollama-cloud-extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-cloud-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/ollama-cloud-extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ const routerState = {
2
+ mode: "auto",
3
+ localAvailable: true,
4
+ cloudAvailable: false,
5
+ };
6
+ async function checkLocalOllama() {
7
+ try {
8
+ const controller = new AbortController();
9
+ const timeout = setTimeout(() => controller.abort(), 2000);
10
+ const response = await fetch("http://localhost:11434/api/version", {
11
+ signal: controller.signal,
12
+ });
13
+ clearTimeout(timeout);
14
+ return response.ok;
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ }
20
+ function getStatusIcon() {
21
+ if (routerState.mode === "cloud")
22
+ return "🌩️";
23
+ if (routerState.mode === "local")
24
+ return "🏠";
25
+ return routerState.localAvailable ? "🏠" : "🌩️";
26
+ }
27
+ function getStatusText() {
28
+ const icon = getStatusIcon();
29
+ if (routerState.mode === "cloud")
30
+ return `${icon} Cloud`;
31
+ if (routerState.mode === "local")
32
+ return `${icon} Local`;
33
+ return `${icon} Auto`;
34
+ }
35
+ export default function ollamaRouterExtension(pi) {
36
+ console.log("[OllamaRouter] Extension loaded");
37
+ pi.on("session_start", async (_event, ctx) => {
38
+ routerState.localAvailable = await checkLocalOllama();
39
+ console.log(`[OllamaRouter] Local: ${routerState.localAvailable ? "up" : "down"}`);
40
+ // Set footer status
41
+ ctx.ui.setStatus("ollama-mode", getStatusText());
42
+ });
43
+ pi.registerCommand("ollama-mode", {
44
+ description: "Switch Ollama mode: local | cloud | auto",
45
+ handler: async (args, ctx) => {
46
+ const mode = args.trim().toLowerCase();
47
+ if (!mode) {
48
+ // Show detailed status
49
+ const lines = [
50
+ `🔄 Ollama Router Status`,
51
+ `─────────────────────`,
52
+ `Mode: ${routerState.mode}`,
53
+ `Local: ${routerState.localAvailable ? "✅" : "❌"}`,
54
+ ``,
55
+ `Usage: /ollama-mode [local|cloud|auto]`,
56
+ ];
57
+ ctx.ui.notify(lines.join("\n"), "info");
58
+ return;
59
+ }
60
+ if (mode === "local" || mode === "cloud" || mode === "auto") {
61
+ routerState.mode = mode;
62
+ ctx.ui.setStatus("ollama-mode", getStatusText());
63
+ ctx.ui.notify(`✅ Switched to ${mode} mode`, "info");
64
+ }
65
+ else {
66
+ ctx.ui.notify("❌ Invalid mode. Use: local, cloud, or auto", "error");
67
+ }
68
+ },
69
+ });
70
+ pi.registerCommand("ollama-local", {
71
+ description: "Quick switch to local Ollama mode",
72
+ handler: async (_args, ctx) => {
73
+ routerState.mode = "local";
74
+ ctx.ui.setStatus("ollama-mode", getStatusText());
75
+ ctx.ui.notify(`✅ Switched to local mode`, "info");
76
+ },
77
+ });
78
+ pi.registerCommand("ollama-cloud", {
79
+ description: "Quick switch to cloud Ollama mode",
80
+ handler: async (_args, ctx) => {
81
+ routerState.mode = "cloud";
82
+ ctx.ui.setStatus("ollama-mode", getStatusText());
83
+ ctx.ui.notify(`✅ Switched to cloud mode`, "info");
84
+ },
85
+ });
86
+ globalThis.__ollamaRouterState = routerState;
87
+ console.log("[OllamaRouter] Commands registered: /ollama-mode, /ollama-local, /ollama-cloud");
88
+ }
89
+ export function getOllamaRouterState() {
90
+ return globalThis.__ollamaRouterState || routerState;
91
+ }
92
+ export function shouldUseCloud() {
93
+ const state = getOllamaRouterState();
94
+ if (state.mode === "cloud")
95
+ return true;
96
+ if (state.mode === "local")
97
+ return false;
98
+ return !state.localAvailable;
99
+ }
100
+ //# sourceMappingURL=ollama-router-extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama-router-extension.js","sourceRoot":"","sources":["../../../../src/extensions/core/ollama-router-extension.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,GAAsB;IACrC,IAAI,EAAE,MAAM;IACZ,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,KAAK;CACtB,CAAC;AAEF,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oCAAoC,EAAE;YACjE,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,GAAG,IAAI,QAAQ,CAAC;IACzD,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,GAAG,IAAI,QAAQ,CAAC;IACzD,OAAO,GAAG,IAAI,OAAO,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,EAAgB;IAC5D,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAE/C,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,WAAW,CAAC,cAAc,GAAG,MAAM,gBAAgB,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAEnF,oBAAoB;QACpB,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE;QAChC,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,KAAK,EAAE,IAAY,EAAE,GAAG,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,uBAAuB;gBACvB,MAAM,KAAK,GAAG;oBACZ,yBAAyB;oBACzB,uBAAuB;oBACvB,SAAS,WAAW,CAAC,IAAI,EAAE;oBAC3B,UAAU,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;oBAClD,EAAE;oBACF,wCAAwC;iBACzC,CAAC;gBACF,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;gBACxC,OAAO;YACT,CAAC;YAED,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5D,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;gBACxB,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;gBACjD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,iBAAiB,IAAI,OAAO,EAAE,MAAM,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,4CAA4C,EAAE,OAAO,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE;QACjC,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC;YAC3B,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;YACjD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE;QACjC,WAAW,EAAE,mCAAmC;QAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,WAAW,CAAC,IAAI,GAAG,OAAO,CAAC;YAC3B,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;YACjD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;IAEF,UAAkB,CAAC,mBAAmB,GAAG,WAAW,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAQ,UAAkB,CAAC,mBAAmB,IAAI,WAAW,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;AAC/B,CAAC"}
package/dist/src/index.js CHANGED
@@ -46,6 +46,8 @@ function verifyExtensions() {
46
46
  const extensions = [
47
47
  // Infrastructure
48
48
  '--extension', ext('ollama-provider-extension'),
49
+ '--extension', ext('ollama-cloud-extension'),
50
+ '--extension', ext('ollama-router-extension'),
49
51
  '--extension', ext('session-bridge-extension'),
50
52
  // Core Features
51
53
  '--extension', ext('persona-loader-extension'),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,28 @@
3
3
  *
4
4
  * Local LLM via Ollama HTTP API.
5
5
  */
6
- const OLLAMA_BASE_URL = process.env.OLLAMA_URL ?? 'http://localhost:11434';
6
+ import { shouldUseCloud } from '../extensions/core/ollama-router-extension';
7
+ const LOCAL_BASE_URL = process.env.OLLAMA_URL ?? 'http://localhost:11434';
8
+ const CLOUD_BASE_URL = 'https://ollama.com';
7
9
  /**
8
- * Check if Ollama is running
10
+ * Get Ollama base URL based on mode
11
+ */
12
+ function getOllamaBaseUrl() {
13
+ return shouldUseCloud() ? CLOUD_BASE_URL : LOCAL_BASE_URL;
14
+ }
15
+ /**
16
+ * Get Ollama API key for cloud mode
17
+ */
18
+ async function getOllamaApiKey() {
19
+ // Will be populated by framework from auth.json
20
+ return process.env.OLLAMA_API_KEY;
21
+ }
22
+ /**
23
+ * Check if Ollama is running (local mode)
9
24
  */
10
25
  export async function isOllamaRunning() {
11
26
  try {
12
- const res = await fetch(`${OLLAMA_BASE_URL}/api/tags`, {
27
+ const res = await fetch(`${LOCAL_BASE_URL}/api/tags`, {
13
28
  method: 'GET',
14
29
  });
15
30
  return res.ok;
@@ -18,12 +33,30 @@ export async function isOllamaRunning() {
18
33
  return false;
19
34
  }
20
35
  }
36
+ /**
37
+ * Check if Ollama Cloud is available
38
+ */
39
+ export async function isOllamaCloudAvailable() {
40
+ try {
41
+ const apiKey = await getOllamaApiKey();
42
+ if (!apiKey)
43
+ return false;
44
+ const res = await fetch(`${CLOUD_BASE_URL}/api/tags`, {
45
+ headers: { 'Authorization': `Bearer ${apiKey}` },
46
+ });
47
+ return res.ok;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
21
53
  /**
22
54
  * List available Ollama models
23
55
  */
24
56
  export async function listOllamaModels() {
25
57
  try {
26
- const res = await fetch(`${OLLAMA_BASE_URL}/api/tags`);
58
+ const baseUrl = getOllamaBaseUrl();
59
+ const res = await fetch(`${baseUrl}/api/tags`);
27
60
  if (!res.ok)
28
61
  return [];
29
62
  const data = await res.json();
@@ -35,15 +68,25 @@ export async function listOllamaModels() {
35
68
  }
36
69
  /**
37
70
  * Ollama LLM Provider
71
+ * Supports both local (localhost:11434) and cloud (ollama.com) modes
38
72
  */
39
73
  export class OllamaProvider {
40
74
  name = 'ollama';
41
75
  baseUrl;
42
- constructor(baseUrl = OLLAMA_BASE_URL) {
43
- this.baseUrl = baseUrl;
76
+ constructor(baseUrl) {
77
+ this.baseUrl = baseUrl ?? getOllamaBaseUrl();
78
+ }
79
+ /**
80
+ * Update base URL based on current mode
81
+ */
82
+ updateBaseUrl() {
83
+ this.baseUrl = getOllamaBaseUrl();
44
84
  }
45
85
  async chat(options) {
86
+ // Ensure we're using correct mode
87
+ this.updateBaseUrl();
46
88
  const model = options.model.replace('ollama/', '');
89
+ const isCloud = this.baseUrl === CLOUD_BASE_URL;
47
90
  // Convert messages to Ollama format
48
91
  const messages = options.messages.map((m) => ({
49
92
  role: m.role,
@@ -72,14 +115,25 @@ export class OllamaProvider {
72
115
  function: t.function,
73
116
  }));
74
117
  }
118
+ // Build headers
119
+ const headers = {
120
+ 'Content-Type': 'application/json',
121
+ };
122
+ // Add auth header for cloud mode
123
+ if (isCloud) {
124
+ const apiKey = await getOllamaApiKey();
125
+ if (apiKey) {
126
+ headers['Authorization'] = `Bearer ${apiKey}`;
127
+ }
128
+ }
75
129
  const res = await fetch(`${this.baseUrl}/api/chat`, {
76
130
  method: 'POST',
77
- headers: { 'Content-Type': 'application/json' },
131
+ headers,
78
132
  body: JSON.stringify(body),
79
133
  });
80
134
  if (!res.ok) {
81
135
  const err = await res.text();
82
- throw new Error(`Ollama error: ${err}`);
136
+ throw new Error(`Ollama ${isCloud ? 'Cloud' : 'Local'} error: ${err}`);
83
137
  }
84
138
  const data = await res.json();
85
139
  // Parse tool calls from response
@@ -101,7 +155,24 @@ export class OllamaProvider {
101
155
  };
102
156
  }
103
157
  async listModels() {
104
- return listOllamaModels();
158
+ this.updateBaseUrl();
159
+ const isCloud = this.baseUrl === CLOUD_BASE_URL;
160
+ try {
161
+ const headers = {};
162
+ if (isCloud) {
163
+ const apiKey = await getOllamaApiKey();
164
+ if (apiKey)
165
+ headers['Authorization'] = `Bearer ${apiKey}`;
166
+ }
167
+ const res = await fetch(`${this.baseUrl}/api/tags`, { headers });
168
+ if (!res.ok)
169
+ return [];
170
+ const data = await res.json();
171
+ return (data.models ?? []).map((m) => m.name);
172
+ }
173
+ catch {
174
+ return [];
175
+ }
105
176
  }
106
177
  }
107
178
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/llm/ollama.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,wBAAwB,CAAC;AAE3E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,eAAe,WAAW,EAAE;YACrD,MAAM,EAAE,KAAK;SACd,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,eAAe,WAAW,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAQ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,QAAQ,CAAC;IACR,OAAO,CAAS;IAExB,YAAY,OAAO,GAAG,eAAe;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEnD,oCAAoC;QACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClC,QAAQ,EAAE;oBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;oBACtB,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS;iBACjC;aACF,CAAC,CAAC;SACJ,CAAC,CAAC,CAAC;QAEJ,gBAAgB;QAChB,MAAM,IAAI,GAAQ;YAChB,KAAK;YACL,QAAQ;YACR,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;YAC/B,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG;gBACvC,WAAW,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;aACvC;SACF,CAAC;QAEF,wBAAwB;QACxB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnC,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB,CAAC,CAAC,CAAC;QACN,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAEnC,iCAAiC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;YAC5D,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;YACxB,QAAQ,EAAE;gBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,QAAQ;gBACtC,SAAS,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,EAAE;aACxC;SACF,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE;YACpC,SAAS;YACT,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE;gBACL,WAAW,EAAE,IAAI,CAAC,iBAAiB,IAAI,CAAC;gBACxC,YAAY,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC;aACnC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,IAAI,cAAc,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/llm/ollama.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xkobold",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Your digital familiar - a personal AI assistant that learns and evolves",
5
5
  "main": "dist/src/index.js",
6
6
  "types": "dist/src/index.d.ts",
@@ -34,9 +34,9 @@
34
34
  "author": "0xKobold Team",
35
35
  "license": "MIT",
36
36
  "dependencies": {
37
- "@mariozechner/pi-agent-core": "0.57.0",
38
- "@mariozechner/pi-coding-agent": "0.57.0",
39
- "@mariozechner/pi-tui": "0.57.0",
37
+ "@mariozechner/pi-agent-core": "0.57.1",
38
+ "@mariozechner/pi-coding-agent": "0.57.1",
39
+ "@mariozechner/pi-tui": "0.57.1",
40
40
  "ajv": "^8.18.0",
41
41
  "blessed": "^0.1.81",
42
42
  "commander": "^11.1.0",