0xkobold 0.0.2 → 0.0.4

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 (34) hide show
  1. package/README.md +59 -5
  2. package/dist/package.json +7 -5
  3. package/dist/src/cli/commands/setup.js +144 -0
  4. package/dist/src/cli/commands/setup.js.map +1 -0
  5. package/dist/src/cli/program.js +3 -0
  6. package/dist/src/cli/program.js.map +1 -1
  7. package/dist/src/extensions/core/auto-compact-on-error-extension.js +244 -0
  8. package/dist/src/extensions/core/auto-compact-on-error-extension.js.map +1 -0
  9. package/dist/src/extensions/core/diagnostics-extension.js +215 -0
  10. package/dist/src/extensions/core/diagnostics-extension.js.map +1 -0
  11. package/dist/src/extensions/core/extension-scaffold-extension.js +449 -0
  12. package/dist/src/extensions/core/extension-scaffold-extension.js.map +1 -0
  13. package/dist/src/extensions/core/git-commit-extension.js +527 -0
  14. package/dist/src/extensions/core/git-commit-extension.js.map +1 -0
  15. package/dist/src/extensions/core/heartbeat-extension.js +43 -0
  16. package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
  17. package/dist/src/extensions/core/memory-extension.js +120 -0
  18. package/dist/src/extensions/core/memory-extension.js.map +1 -0
  19. package/dist/src/extensions/core/memory-synthesis-extension.js +137 -0
  20. package/dist/src/extensions/core/memory-synthesis-extension.js.map +1 -0
  21. package/dist/src/extensions/core/mode-manager-extension.js +19 -0
  22. package/dist/src/extensions/core/mode-manager-extension.js.map +1 -1
  23. package/dist/src/extensions/core/ollama-cloud-extension.js +132 -0
  24. package/dist/src/extensions/core/ollama-cloud-extension.js.map +1 -0
  25. package/dist/src/extensions/core/ollama-router-extension.js +100 -0
  26. package/dist/src/extensions/core/ollama-router-extension.js.map +1 -0
  27. package/dist/src/extensions/core/perennial-memory-extension.js +449 -0
  28. package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -0
  29. package/dist/src/index.js +7 -0
  30. package/dist/src/index.js.map +1 -1
  31. package/dist/src/llm/ollama.js +80 -9
  32. package/dist/src/llm/ollama.js.map +1 -1
  33. package/package.json +7 -5
  34. package/scripts/postinstall.js +71 -0
@@ -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":"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"}
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.4",
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",
@@ -28,15 +28,16 @@
28
28
  "update:install": "bun run src/cli/index.ts update install",
29
29
  "update:framework": "bun run src/cli/index.ts update framework",
30
30
  "setup-hooks": "bash scripts/install-hooks.sh",
31
- "prepublishOnly": "bun run build"
31
+ "prepublishOnly": "bun run build",
32
+ "postinstall": "node scripts/postinstall.js || echo 'Welcome to 0xKobold! Run: 0xkobold setup'"
32
33
  },
33
34
  "keywords": ["ai", "assistant", "cli", "agent", "kobold"],
34
35
  "author": "0xKobold Team",
35
36
  "license": "MIT",
36
37
  "dependencies": {
37
- "@mariozechner/pi-agent-core": "0.57.0",
38
- "@mariozechner/pi-coding-agent": "0.57.0",
39
- "@mariozechner/pi-tui": "0.57.0",
38
+ "@mariozechner/pi-agent-core": "0.57.1",
39
+ "@mariozechner/pi-coding-agent": "0.57.1",
40
+ "@mariozechner/pi-tui": "0.57.1",
40
41
  "ajv": "^8.18.0",
41
42
  "blessed": "^0.1.81",
42
43
  "commander": "^11.1.0",
@@ -63,6 +64,7 @@
63
64
  "private": false,
64
65
  "files": [
65
66
  "dist",
67
+ "scripts/postinstall.js",
66
68
  "README.md",
67
69
  "LICENSE",
68
70
  "package.json",
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Post-install welcome message
4
+ * Shows when users install 0xKobold via npm
5
+ */
6
+
7
+ import { homedir } from "node:os";
8
+ import { join } from "node:path";
9
+ import { existsSync } from "node:fs";
10
+
11
+ const isCiEnvironment = () => {
12
+ return process.env.CI ||
13
+ process.env.CONTINUOUS_INTEGRATION ||
14
+ process.env.NODE_ENV === "test";
15
+ };
16
+
17
+ const showWelcome = () => {
18
+ const configPath = join(homedir(), ".0xkobold", "config.json");
19
+ const isConfigured = existsSync(configPath);
20
+
21
+ console.log(`
22
+ ╔════════════════════════════════════════════════════════╗
23
+ ║ 🐲 0xKobold Installed ║
24
+ ╚════════════════════════════════════════════════════════╝
25
+
26
+ Your personal AI assistant with multi-agent capabilities
27
+
28
+ `);
29
+
30
+ if (!isConfigured) {
31
+ console.log(` Quick start:
32
+ ────────────
33
+ 1. Configure 0xKobold:
34
+ 0xkobold setup
35
+
36
+ 2. Start the TUI:
37
+ 0xkobold
38
+
39
+ 3. Or start in specific mode:
40
+ 0xkobold --mode plan # For planning/research
41
+ 0xkobold --mode build # For implementation
42
+
43
+ Requirements:
44
+ ─────────────
45
+ • Bun runtime required (0xKobold will check for it)
46
+ • Install Bun: curl -fsSL https://bun.sh/install | bash
47
+
48
+ Documentation:
49
+ ──────────────
50
+ • GitHub: https://github.com/kobolds/0xKobolds
51
+ • Usage: 0xkobold --help
52
+ • VPS: https://github.com/kobolds/0xKobolds/blob/main/docs/VPS-DEPLOYMENT.md
53
+
54
+ `);
55
+ } else {
56
+ console.log(` Your 0xKobold is configured.
57
+
58
+ Start with: 0xkobold
59
+ Gateway: 0xkobold gateway start
60
+ Status: 0xkobold status
61
+
62
+ `);
63
+ }
64
+
65
+ if (isCiEnvironment()) {
66
+ process.exit(0);
67
+ }
68
+ };
69
+
70
+ // Only show in actual install, not CI
71
+ showWelcome();