kern-ai 0.9.1 → 0.11.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 (64) hide show
  1. package/README.md +45 -3
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +73 -12
  4. package/dist/app.js.map +1 -1
  5. package/dist/config.d.ts +1 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +1 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/global-config.d.ts +6 -0
  10. package/dist/global-config.d.ts.map +1 -0
  11. package/dist/global-config.js +22 -0
  12. package/dist/global-config.js.map +1 -0
  13. package/dist/hub.d.ts +15 -0
  14. package/dist/hub.d.ts.map +1 -0
  15. package/dist/hub.js +119 -0
  16. package/dist/hub.js.map +1 -0
  17. package/dist/import.d.ts +1 -1
  18. package/dist/import.d.ts.map +1 -1
  19. package/dist/import.js +146 -77
  20. package/dist/import.js.map +1 -1
  21. package/dist/index.js +24 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/init.js +5 -0
  24. package/dist/init.js.map +1 -1
  25. package/dist/interfaces/telegram.d.ts.map +1 -1
  26. package/dist/interfaces/telegram.js +5 -0
  27. package/dist/interfaces/telegram.js.map +1 -1
  28. package/dist/registry.d.ts +3 -0
  29. package/dist/registry.d.ts.map +1 -1
  30. package/dist/registry.js +17 -0
  31. package/dist/registry.js.map +1 -1
  32. package/dist/runtime.d.ts +2 -0
  33. package/dist/runtime.d.ts.map +1 -1
  34. package/dist/runtime.js +4 -2
  35. package/dist/runtime.js.map +1 -1
  36. package/dist/server.d.ts +4 -1
  37. package/dist/server.d.ts.map +1 -1
  38. package/dist/server.js +42 -9
  39. package/dist/server.js.map +1 -1
  40. package/dist/session.d.ts.map +1 -1
  41. package/dist/session.js +16 -0
  42. package/dist/session.js.map +1 -1
  43. package/dist/tools/kern.d.ts +16 -0
  44. package/dist/tools/kern.d.ts.map +1 -1
  45. package/dist/tools/kern.js +50 -28
  46. package/dist/tools/kern.js.map +1 -1
  47. package/dist/tui.d.ts +1 -1
  48. package/dist/tui.d.ts.map +1 -1
  49. package/dist/tui.js +24 -10
  50. package/dist/tui.js.map +1 -1
  51. package/dist/web-daemon.d.ts +4 -0
  52. package/dist/web-daemon.d.ts.map +1 -0
  53. package/dist/web-daemon.js +104 -0
  54. package/dist/web-daemon.js.map +1 -0
  55. package/dist/web.d.ts +13 -0
  56. package/dist/web.d.ts.map +1 -0
  57. package/dist/web.js +104 -0
  58. package/dist/web.js.map +1 -0
  59. package/package.json +1 -1
  60. package/templates/KERN.md +13 -11
  61. package/templates/web/icon.svg +4 -0
  62. package/templates/web/index.html +1971 -0
  63. package/templates/web/manifest.json +17 -0
  64. package/templates/web/sw.js +3 -0
package/README.md CHANGED
@@ -30,6 +30,7 @@ For automation: `npx kern-ai init my-agent --api-key sk-or-...` (no prompts, def
30
30
 
31
31
  ```
32
32
  TUI ──────────────┐
33
+ Web UI ───────────┤
33
34
  Telegram DM ──────┤── kern ── one session ── one folder
34
35
  #engineering ─────┤
35
36
  Slack DM ─────────┘
@@ -65,16 +66,41 @@ kern start [name|path] # start agents in background
65
66
  kern stop [name] # stop agents
66
67
  kern restart [name] # restart agents
67
68
  kern tui [name] # interactive chat
69
+ kern web <start|stop|status> # web UI server
68
70
  kern logs [name] # tail agent logs
69
71
  kern list # show all agents
70
72
  kern remove <name> # unregister an agent
71
73
  kern backup <name> # backup agent to .tar.gz
72
74
  kern restore <file> # restore agent from backup
73
- kern import opencode <name> # import session from OpenCode
75
+ kern import opencode # import session from OpenCode
74
76
  ```
75
77
 
76
78
  Agents auto-register when you init, start, or run them. `kern list` shows every agent with its running state.
77
79
 
80
+ ### Web UI
81
+
82
+ `kern web start` launches a web UI server (default port 9000). Open it in a browser to chat with any running agent.
83
+
84
+ ```bash
85
+ kern web start # start web UI server
86
+ kern web stop # stop it
87
+ kern web status # check if running
88
+ ```
89
+
90
+ The web UI auto-discovers running agents and connects directly to their APIs. Each agent binds to `0.0.0.0` by default and auto-generates an auth token on first start — no manual config needed.
91
+
92
+ Works over Tailscale or LAN. Add remote agents manually in the sidebar.
93
+
94
+ ### Slash commands
95
+
96
+ Type these in any channel (TUI, Web, Telegram, Slack). Handled by the runtime — no LLM call, instant response.
97
+
98
+ ```
99
+ /status # agent status, model, uptime, session size
100
+ /restart # restart the agent daemon
101
+ /help # list available commands
102
+ ```
103
+
78
104
  ## User pairing
79
105
 
80
106
  The first person to message the bot becomes the operator — auto-paired, no code needed. Every user after pairs with a code:
@@ -122,17 +148,33 @@ Structured, colored logs for queue, runtime, interfaces, and server. Logs stored
122
148
 
123
149
  ## Configuration
124
150
 
125
- `.kern/config.json`:
151
+ ### Per-agent: `.kern/config.json`
126
152
 
127
153
  ```json
128
154
  {
129
155
  "model": "anthropic/claude-opus-4.6",
130
156
  "provider": "openrouter",
131
157
  "toolScope": "full",
132
- "maxSteps": 30
158
+ "maxSteps": 30,
159
+ "host": "0.0.0.0"
160
+ }
161
+ ```
162
+
163
+ `host` controls the agent's HTTP bind address. Default `0.0.0.0` (all interfaces). Set to `127.0.0.1` for localhost only.
164
+
165
+ Auth tokens are auto-generated on first start and stored in `.kern/.env`. No manual setup needed.
166
+
167
+ ### Global: `~/.kern/config.json`
168
+
169
+ ```json
170
+ {
171
+ "web_port": 9000,
172
+ "web_host": "0.0.0.0"
133
173
  }
134
174
  ```
135
175
 
176
+ Controls the `kern web` server. Optional — defaults apply if the file doesn't exist.
177
+
136
178
  ### Tool scopes
137
179
 
138
180
  - **full** — bash, read, write, edit, glob, grep, webfetch, kern, message
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAgBA,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAqMhF"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AA8CA,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2OhF"}
package/dist/app.js CHANGED
@@ -4,18 +4,66 @@ import { TelegramInterface } from "./interfaces/telegram.js";
4
4
  import { SlackInterface } from "./interfaces/slack.js";
5
5
  import { CliInterface } from "./interfaces/cli.js";
6
6
  import { loadConfig } from "./config.js";
7
- import { readFile } from "fs/promises";
7
+ import { readFile, appendFile } from "fs/promises";
8
8
  import { join, basename } from "path";
9
- import { registerAgent, setPort } from "./registry.js";
9
+ import { randomBytes } from "crypto";
10
+ import { registerAgent, setPortAndToken } from "./registry.js";
10
11
  import { AgentServer } from "./server.js";
11
12
  import { PairingManager } from "./pairing.js";
12
13
  import { setMessageSender } from "./tools/message.js";
13
14
  import { MessageQueue } from "./queue.js";
15
+ import { getStatusData as getStatusDataFn } from "./tools/kern.js";
14
16
  import { log } from "./log.js";
17
+ async function handleSlashCommand(cmd, userId, iface, agentName) {
18
+ switch (cmd) {
19
+ case "/restart": {
20
+ log("kern", `restart requested by ${userId} via ${iface}`);
21
+ setTimeout(async () => {
22
+ const { spawn } = await import("child_process");
23
+ spawn("kern", ["restart", agentName], { detached: true, stdio: "ignore" }).unref();
24
+ }, 2000);
25
+ return "Restarting in 2 seconds...";
26
+ }
27
+ case "/status": {
28
+ const { formatStatus } = await import("./tools/kern.js");
29
+ return formatStatus(getStatusDataFn());
30
+ }
31
+ case "/help":
32
+ return [
33
+ "/status — show agent status, uptime, token usage",
34
+ "/restart — restart the agent process",
35
+ "/help — show this help",
36
+ ].join("\n");
37
+ default:
38
+ return null; // unknown command — fall through to LLM
39
+ }
40
+ }
15
41
  export async function startApp(agentDir, forceCli = false) {
16
42
  // Update kernel if newer version available
17
43
  await updateKernel(agentDir);
18
44
  const config = await loadConfig(agentDir);
45
+ // Auto-generate auth token if missing
46
+ if (!process.env.KERN_AUTH_TOKEN) {
47
+ const envPath = join(agentDir, ".kern", ".env");
48
+ // Check if token already exists in file (env might not have loaded it)
49
+ let existingToken = null;
50
+ try {
51
+ const envContent = await readFile(envPath, "utf-8");
52
+ const match = envContent.match(/^KERN_AUTH_TOKEN=(.+)$/m);
53
+ if (match)
54
+ existingToken = match[1].trim();
55
+ }
56
+ catch { }
57
+ if (existingToken) {
58
+ process.env.KERN_AUTH_TOKEN = existingToken;
59
+ }
60
+ else {
61
+ const token = randomBytes(16).toString("hex");
62
+ await appendFile(envPath, `\nKERN_AUTH_TOKEN=${token}\n`);
63
+ process.env.KERN_AUTH_TOKEN = token;
64
+ log("kern", `generated auth token: ${token.slice(0, 8)}...`);
65
+ }
66
+ }
19
67
  const runtime = new Runtime(agentDir);
20
68
  await runtime.init();
21
69
  const agentName = basename(agentDir);
@@ -40,6 +88,20 @@ export async function startApp(agentDir, forceCli = false) {
40
88
  // Message queue — serializes messages, same-channel injection
41
89
  const queue = new MessageQueue();
42
90
  queue.setHandler(async (msg, getPendingMessages) => {
91
+ const cmd = msg.text.trim();
92
+ // Slash commands — intercepted, never sent to LLM
93
+ if (cmd.startsWith("/")) {
94
+ const result = await handleSlashCommand(cmd, msg.userId, msg.interface, agentName);
95
+ if (result !== null) {
96
+ server.broadcast({
97
+ type: "command-result",
98
+ text: result,
99
+ command: cmd,
100
+ });
101
+ return result;
102
+ }
103
+ // Unknown slash command — fall through to LLM
104
+ }
43
105
  const time = new Date().toISOString();
44
106
  const context = `[via ${msg.interface}${msg.channel ? `, ${msg.channel}` : ""}, user: ${msg.userId}, time: ${time}]\n${msg.text}`;
45
107
  // Broadcast incoming to TUI
@@ -69,12 +131,9 @@ export async function startApp(agentDir, forceCli = false) {
69
131
  const enqueueMessage = (text, userId, iface, channel, onEvent) => {
70
132
  return queue.enqueue({ text, userId, interface: iface, channel }, onEvent);
71
133
  };
72
- server.setStatusFn(() => ({
73
- model: config.model,
74
- provider: config.provider,
75
- toolScope: config.toolScope,
76
- agentName,
77
- }));
134
+ server.setStatusFn(() => {
135
+ return { ...getStatusDataFn(), agentName };
136
+ });
78
137
  server.setMessageHandler(async (text, userId, iface, channel) => {
79
138
  await enqueueMessage(text, userId, iface, channel);
80
139
  });
@@ -88,8 +147,8 @@ export async function startApp(agentDir, forceCli = false) {
88
147
  ...m,
89
148
  }));
90
149
  });
91
- const port = await server.start();
92
- await setPort(agentName, port);
150
+ const port = await server.start(config.host);
151
+ await setPortAndToken(agentName, port, process.env.KERN_AUTH_TOKEN || null);
93
152
  // Start Telegram if configured
94
153
  const telegramToken = process.env.TELEGRAM_BOT_TOKEN;
95
154
  let telegramBot = null;
@@ -159,12 +218,14 @@ export async function startApp(agentDir, forceCli = false) {
159
218
  const intervalMs = config.heartbeatInterval * 60 * 1000;
160
219
  setInterval(async () => {
161
220
  try {
221
+ const tuiStatus = server.hasConnectedClients() ? "connected" : "disconnected";
222
+ const heartbeatText = `[heartbeat, tui: ${tuiStatus}]`;
162
223
  server.broadcast({
163
224
  type: "heartbeat",
164
- text: "[heartbeat]",
225
+ text: heartbeatText,
165
226
  });
166
227
  await queue.enqueue({
167
- text: "[heartbeat]",
228
+ text: heartbeatText,
168
229
  userId: "system",
169
230
  interface: "system",
170
231
  channel: "heartbeat",
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -6,6 +6,7 @@ export interface KernConfig {
6
6
  maxSteps: number;
7
7
  maxContextTokens: number;
8
8
  heartbeatInterval: number;
9
+ host: string;
9
10
  telegram?: {
10
11
  allowedUsers?: number[];
11
12
  showTools?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAiBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAE3D;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsBtE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA8C5F"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAkBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAE3D;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsBtE;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA8C5F"}
package/dist/config.js CHANGED
@@ -14,6 +14,7 @@ const defaults = {
14
14
  maxSteps: 30,
15
15
  maxContextTokens: 40000,
16
16
  heartbeatInterval: 60,
17
+ host: "0.0.0.0",
17
18
  };
18
19
  export function getToolsForScope(scope) {
19
20
  return TOOL_SCOPES[scope] || TOOL_SCOPES.full;
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface GlobalConfig {
2
+ web_port: number;
3
+ web_host: string;
4
+ }
5
+ export declare function loadGlobalConfig(): Promise<GlobalConfig>;
6
+ //# sourceMappingURL=global-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../src/global-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AASD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAS9D"}
@@ -0,0 +1,22 @@
1
+ import { readFile } from "fs/promises";
2
+ import { join } from "path";
3
+ import { existsSync } from "fs";
4
+ import { homedir } from "os";
5
+ const defaults = {
6
+ web_port: 9000,
7
+ web_host: "0.0.0.0",
8
+ };
9
+ const CONFIG_FILE = join(homedir(), ".kern", "config.json");
10
+ export async function loadGlobalConfig() {
11
+ if (!existsSync(CONFIG_FILE))
12
+ return defaults;
13
+ try {
14
+ const raw = await readFile(CONFIG_FILE, "utf-8");
15
+ const userConfig = JSON.parse(raw);
16
+ return { ...defaults, ...userConfig };
17
+ }
18
+ catch {
19
+ return defaults;
20
+ }
21
+ }
22
+ //# sourceMappingURL=global-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../src/global-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAO7B,MAAM,QAAQ,GAAiB;IAC7B,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,SAAS;CACpB,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,UAAU,EAAE,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
package/dist/hub.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kern hub — lightweight reverse proxy that serves the web UI on a single
4
+ * origin and proxies requests to individual agents.
5
+ *
6
+ * Routes:
7
+ * GET / → web UI
8
+ * GET /api/agents → list of running agents
9
+ * * /agent/<name>/<path> → proxy to agent's port
10
+ *
11
+ * The hub reads ~/.kern/agents.json to discover agents and their ports.
12
+ * No config needed — just `kern hub` or `node hub.js`.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=hub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;GAWG"}
package/dist/hub.js ADDED
@@ -0,0 +1,119 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * kern hub — lightweight reverse proxy that serves the web UI on a single
4
+ * origin and proxies requests to individual agents.
5
+ *
6
+ * Routes:
7
+ * GET / → web UI
8
+ * GET /api/agents → list of running agents
9
+ * * /agent/<name>/<path> → proxy to agent's port
10
+ *
11
+ * The hub reads ~/.kern/agents.json to discover agents and their ports.
12
+ * No config needed — just `kern hub` or `node hub.js`.
13
+ */
14
+ import { createServer, request as httpRequest } from "http";
15
+ import { readFile } from "fs/promises";
16
+ import { join } from "path";
17
+ import { existsSync } from "fs";
18
+ import { homedir } from "os";
19
+ const HUB_PORT = parseInt(process.env.KERN_HUB_PORT || "9000", 10);
20
+ const HUB_HOST = process.env.KERN_HUB_HOST || "0.0.0.0";
21
+ const AGENTS_FILE = join(homedir(), ".kern", "agents.json");
22
+ async function loadAgents() {
23
+ if (!existsSync(AGENTS_FILE))
24
+ return [];
25
+ try {
26
+ return JSON.parse(await readFile(AGENTS_FILE, "utf-8"));
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ }
32
+ function log(msg) {
33
+ const ts = new Date().toISOString();
34
+ process.stderr.write(`${ts} [hub] ${msg}\n`);
35
+ }
36
+ // Proxy a request to an agent
37
+ function proxy(req, res, targetPort, targetPath) {
38
+ const proxyReq = httpRequest({
39
+ hostname: "127.0.0.1",
40
+ port: targetPort,
41
+ path: targetPath,
42
+ method: req.method,
43
+ headers: {
44
+ ...req.headers,
45
+ host: `127.0.0.1:${targetPort}`,
46
+ },
47
+ }, (proxyRes) => {
48
+ res.writeHead(proxyRes.statusCode || 502, proxyRes.headers);
49
+ proxyRes.pipe(res, { end: true });
50
+ });
51
+ proxyReq.on("error", (err) => {
52
+ log(`proxy error: ${err.message}`);
53
+ if (!res.headersSent) {
54
+ res.writeHead(502, { "Content-Type": "application/json" });
55
+ res.end(JSON.stringify({ error: "agent unreachable" }));
56
+ }
57
+ });
58
+ req.pipe(proxyReq, { end: true });
59
+ }
60
+ const server = createServer(async (req, res) => {
61
+ const url = req.url || "/";
62
+ const path = url.split("?")[0];
63
+ // CORS
64
+ res.setHeader("Access-Control-Allow-Origin", "*");
65
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
66
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
67
+ if (req.method === "OPTIONS") {
68
+ res.writeHead(200);
69
+ res.end();
70
+ return;
71
+ }
72
+ // Web UI
73
+ if (path === "/" && req.method === "GET") {
74
+ const webUiPath = join(import.meta.dirname, "..", "templates", "web", "index.html");
75
+ if (existsSync(webUiPath)) {
76
+ const html = await readFile(webUiPath, "utf-8");
77
+ res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
78
+ res.end(html);
79
+ }
80
+ else {
81
+ res.writeHead(500, { "Content-Type": "text/plain" });
82
+ res.end("Web UI not found. Check kern installation.");
83
+ }
84
+ return;
85
+ }
86
+ // Agent list API — returns running agents for the switcher
87
+ if (path === "/api/agents" && req.method === "GET") {
88
+ const agents = await loadAgents();
89
+ const running = agents
90
+ .filter((a) => a.port && a.pid)
91
+ .map((a) => ({ name: a.name, port: a.port }));
92
+ res.writeHead(200, { "Content-Type": "application/json" });
93
+ res.end(JSON.stringify(running));
94
+ return;
95
+ }
96
+ // Proxy: /agent/<name>/... → agent's port
97
+ const proxyMatch = path.match(/^\/agent\/([^/]+)(\/.*)?$/);
98
+ if (proxyMatch) {
99
+ const agentName = proxyMatch[1];
100
+ const agentPath = (proxyMatch[2] || "/") + (url.includes("?") ? "?" + url.split("?")[1] : "");
101
+ const agents = await loadAgents();
102
+ const agent = agents.find((a) => a.name === agentName);
103
+ if (!agent || !agent.port) {
104
+ res.writeHead(404, { "Content-Type": "application/json" });
105
+ res.end(JSON.stringify({ error: `agent '${agentName}' not found or not running` }));
106
+ return;
107
+ }
108
+ proxy(req, res, agent.port, agentPath);
109
+ return;
110
+ }
111
+ res.writeHead(404, { "Content-Type": "application/json" });
112
+ res.end(JSON.stringify({ error: "not found" }));
113
+ });
114
+ server.listen(HUB_PORT, HUB_HOST, () => {
115
+ log(`listening on ${HUB_HOST}:${HUB_PORT}`);
116
+ log(`web UI: http://localhost:${HUB_PORT}/`);
117
+ log(`agents proxied at: /agent/<name>/...`);
118
+ });
119
+ //# sourceMappingURL=hub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
package/dist/import.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare function importOpenCode(agentName?: string): Promise<void>;
1
+ export declare function importOpenCode(args: string[]): Promise<void>;
2
2
  //# sourceMappingURL=import.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"AAsBA,wBAAsB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsNtE"}
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../src/import.ts"],"names":[],"mappings":"AAqKA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJlE"}