kern-ai 0.13.0 → 0.14.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.
- package/README.md +8 -10
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/web-daemon.d.ts +1 -0
- package/dist/web-daemon.d.ts.map +1 -1
- package/dist/web-daemon.js +25 -3
- package/dist/web-daemon.js.map +1 -1
- package/dist/web.d.ts +11 -6
- package/dist/web.d.ts.map +1 -1
- package/dist/web.js +90 -11
- package/dist/web.js.map +1 -1
- package/package.json +1 -1
- package/templates/web/index.html +266 -137
package/README.md
CHANGED
|
@@ -67,7 +67,7 @@ kern start [name|path] # start agents in background
|
|
|
67
67
|
kern stop [name] # stop agents
|
|
68
68
|
kern restart [name] # restart agents
|
|
69
69
|
kern tui [name] # interactive chat
|
|
70
|
-
kern web <start|stop|status> # web UI server
|
|
70
|
+
kern web <start|stop|status|token> # web UI server
|
|
71
71
|
kern logs [name] # tail agent logs
|
|
72
72
|
kern list # show all agents
|
|
73
73
|
kern remove <name> # unregister an agent
|
|
@@ -80,17 +80,18 @@ Agents auto-register when you init, start, or run them. `kern list` shows every
|
|
|
80
80
|
|
|
81
81
|
### Web UI
|
|
82
82
|
|
|
83
|
-
`kern web start` launches a web UI server (default port 9000).
|
|
83
|
+
`kern web start` launches a web UI server (default port 9000). It prints a URL with an auth token — click it to connect.
|
|
84
84
|
|
|
85
85
|
```bash
|
|
86
|
-
kern web start # start web UI
|
|
86
|
+
kern web start # start web UI, prints URL with token
|
|
87
87
|
kern web stop # stop it
|
|
88
88
|
kern web status # check if running
|
|
89
|
+
kern web token # print the URL with token again
|
|
89
90
|
```
|
|
90
91
|
|
|
91
|
-
The web UI
|
|
92
|
+
The web UI proxies all agent requests — agents bind to localhost only and are never exposed directly. Auth is handled at the proxy level with a single `KERN_WEB_TOKEN` (auto-generated, stored in `~/.kern/.env`).
|
|
92
93
|
|
|
93
|
-
Works over Tailscale or LAN. Add remote
|
|
94
|
+
Works over Tailscale or LAN. Add remote kern servers in the sidebar.
|
|
94
95
|
|
|
95
96
|
### Slash commands
|
|
96
97
|
|
|
@@ -156,14 +157,11 @@ Structured, colored logs for queue, runtime, interfaces, and server. Logs stored
|
|
|
156
157
|
"model": "anthropic/claude-opus-4.6",
|
|
157
158
|
"provider": "openrouter",
|
|
158
159
|
"toolScope": "full",
|
|
159
|
-
"maxSteps": 30
|
|
160
|
-
"host": "0.0.0.0"
|
|
160
|
+
"maxSteps": 30
|
|
161
161
|
}
|
|
162
162
|
```
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
Auth tokens are auto-generated on first start and stored in `.kern/.env`. No manual setup needed.
|
|
164
|
+
Agent auth tokens are auto-generated on first start and stored in `.kern/.env`. The web proxy injects them automatically — no manual setup needed.
|
|
167
165
|
|
|
168
166
|
### Global: `~/.kern/config.json`
|
|
169
167
|
|
package/dist/app.js
CHANGED
|
@@ -196,7 +196,7 @@ export async function startApp(agentDir, forceCli = false) {
|
|
|
196
196
|
...m,
|
|
197
197
|
}));
|
|
198
198
|
});
|
|
199
|
-
const port = await server.start(
|
|
199
|
+
const port = await server.start("127.0.0.1");
|
|
200
200
|
await setPortAndToken(agentName, port, process.env.KERN_AUTH_TOKEN || null);
|
|
201
201
|
// Start Telegram if configured
|
|
202
202
|
const telegramToken = process.env.TELEGRAM_BOT_TOKEN;
|
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
package/dist/config.d.ts.map
CHANGED
|
@@ -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,
|
|
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,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,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,CAqD5F"}
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/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,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -39,7 +39,7 @@ async function showHelp() {
|
|
|
39
39
|
w(` ${cyan("kern restore")} ${dim("<file>")} restore agent from backup`);
|
|
40
40
|
w(` ${cyan("kern logs")} ${dim("[name]")} tail agent logs`);
|
|
41
41
|
w(` ${cyan("kern tui")} ${dim("[name]")} interactive chat`);
|
|
42
|
-
w(` ${cyan("kern web")} ${dim("<start|stop|status>")} web UI server`);
|
|
42
|
+
w(` ${cyan("kern web")} ${dim("<start|stop|status|token>")} web UI server`);
|
|
43
43
|
w("");
|
|
44
44
|
}
|
|
45
45
|
async function resolveAgentDir(nameOrPath) {
|
|
@@ -242,7 +242,7 @@ async function main() {
|
|
|
242
242
|
}
|
|
243
243
|
if (cmd === "web") {
|
|
244
244
|
const subcmd = args[1]; // start, stop, status
|
|
245
|
-
const { webStart, webStop, webStatus } = await import("./web-daemon.js");
|
|
245
|
+
const { webStart, webStop, webStatus, webToken } = await import("./web-daemon.js");
|
|
246
246
|
if (subcmd === "start") {
|
|
247
247
|
await webStart();
|
|
248
248
|
}
|
|
@@ -252,8 +252,11 @@ async function main() {
|
|
|
252
252
|
else if (subcmd === "status") {
|
|
253
253
|
await webStatus();
|
|
254
254
|
}
|
|
255
|
+
else if (subcmd === "token") {
|
|
256
|
+
await webToken();
|
|
257
|
+
}
|
|
255
258
|
else {
|
|
256
|
-
console.error("Usage: kern web <start|stop|status>");
|
|
259
|
+
console.error("Usage: kern web <start|stop|status|token>");
|
|
257
260
|
process.exit(1);
|
|
258
261
|
}
|
|
259
262
|
return;
|
package/dist/index.js.map
CHANGED
|
@@ -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":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEpB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AAChD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;AACjD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AAClD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;AAEpD,KAAK,UAAU,QAAQ;IACrB,IAAI,OAAO,GAAG,SAAS,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACjG,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC,KAAK,GAAG,CAAC,qDAAqD,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;IACvF,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IACvE,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACtE,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACzE,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAChE,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IAC9E,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAC;IACjF,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAAC;IAClF,CAAC,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,iBAAiB,CAAC,gCAAgC,CAAC,CAAC;IACxF,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IACpF,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAC1E,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IAC3E,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC;IAChF,CAAC,CAAC,EAAE,CAAC,CAAC;AACR,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,UAAmB;IAChD,IAAI,UAAU,EAAE,CAAC;QACf,iBAAiB;QACjB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC;QAE7B,aAAa;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,qCAAqC;IACrC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC;QACZ,OAAO,EAAE,cAAc;QACvB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KAC9D,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC/D,MAAM,QAAQ,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,uCAAuC;QACvC,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,IAAI,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QACD,MAAM,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,UAAU,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACnF,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;QACrC,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,MAAM,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,4FAA4F,CAAC,CAAC;YAC5G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,SAAS,QAAQ,SAAS,EAAE,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACrD,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAClE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAEnD,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAExB,wBAAwB;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBACrD,SAAS,GAAG,MAAM,MAAM,CAAC;oBACvB,OAAO,EAAE,cAAc;oBACvB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5B,yBAAyB;YACzB,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,6BAA6B,SAAS,kBAAkB,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,4CAA4C;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;QAE3C,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACnD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAC9C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACnF,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,QAAQ,EAAE,CAAC;QACnB,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,OAAO,EAAE,CAAC;QAClB,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,SAAS,EAAE,CAAC;QACpB,CAAC;aAAM,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,QAAQ,EAAE,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,EAAE,CAAC;IACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/web-daemon.d.ts
CHANGED
package/dist/web-daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-daemon.d.ts","sourceRoot":"","sources":["../src/web-daemon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-daemon.d.ts","sourceRoot":"","sources":["../src/web-daemon.ts"],"names":[],"mappings":"AAyCA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CA2C9C;AAED,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAe7C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAW/C;AAED,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9C"}
|
package/dist/web-daemon.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { spawn } from "child_process";
|
|
2
|
-
import { readFile, writeFile, unlink, mkdir } from "fs/promises";
|
|
2
|
+
import { readFile, writeFile, unlink, mkdir, appendFile } from "fs/promises";
|
|
3
3
|
import { join } from "path";
|
|
4
4
|
import { existsSync, openSync } from "fs";
|
|
5
5
|
import { homedir } from "os";
|
|
6
|
+
import { randomBytes } from "crypto";
|
|
6
7
|
import { isProcessRunning } from "./registry.js";
|
|
7
8
|
import { loadGlobalConfig } from "./global-config.js";
|
|
8
9
|
const bold = (s) => `\x1b[1m${s}\x1b[0m`;
|
|
@@ -12,6 +13,19 @@ const dim = (s) => `\x1b[2m${s}\x1b[0m`;
|
|
|
12
13
|
const KERN_DIR = join(homedir(), ".kern");
|
|
13
14
|
const PID_FILE = join(KERN_DIR, "web.pid");
|
|
14
15
|
const LOG_FILE = join(KERN_DIR, "web.log");
|
|
16
|
+
const ENV_FILE = join(KERN_DIR, ".env");
|
|
17
|
+
/** Read or generate the web token from ~/.kern/.env */
|
|
18
|
+
async function getWebToken() {
|
|
19
|
+
if (existsSync(ENV_FILE)) {
|
|
20
|
+
const content = await readFile(ENV_FILE, "utf-8");
|
|
21
|
+
const match = content.match(/^KERN_WEB_TOKEN=(.+)$/m);
|
|
22
|
+
if (match)
|
|
23
|
+
return match[1].trim();
|
|
24
|
+
}
|
|
25
|
+
const token = randomBytes(16).toString("hex");
|
|
26
|
+
await appendFile(ENV_FILE, `${existsSync(ENV_FILE) ? "\n" : ""}KERN_WEB_TOKEN=${token}\n`);
|
|
27
|
+
return token;
|
|
28
|
+
}
|
|
15
29
|
async function readPid() {
|
|
16
30
|
if (!existsSync(PID_FILE))
|
|
17
31
|
return null;
|
|
@@ -26,10 +40,12 @@ async function readPid() {
|
|
|
26
40
|
export async function webStart() {
|
|
27
41
|
const config = await loadGlobalConfig();
|
|
28
42
|
const port = config.web_port;
|
|
43
|
+
const token = await getWebToken();
|
|
29
44
|
// Check if already running
|
|
30
45
|
const pid = await readPid();
|
|
31
46
|
if (pid && isProcessRunning(pid)) {
|
|
32
|
-
console.log(`\n ${green("●")} ${bold("web")} already running ${dim(`(pid ${pid}, port ${port})`)}
|
|
47
|
+
console.log(`\n ${green("●")} ${bold("web")} already running ${dim(`(pid ${pid}, port ${port})`)}`);
|
|
48
|
+
console.log(` → http://localhost:${port}?token=${token}\n`);
|
|
33
49
|
return;
|
|
34
50
|
}
|
|
35
51
|
await mkdir(KERN_DIR, { recursive: true });
|
|
@@ -45,7 +61,8 @@ export async function webStart() {
|
|
|
45
61
|
// Wait and verify
|
|
46
62
|
await new Promise((r) => setTimeout(r, 1000));
|
|
47
63
|
if (isProcessRunning(newPid)) {
|
|
48
|
-
console.log(`\n ${green("●")} ${bold("web")} started ${dim(`(pid ${newPid}, port ${port})`)}
|
|
64
|
+
console.log(`\n ${green("●")} ${bold("web")} started ${dim(`(pid ${newPid}, port ${port})`)}`);
|
|
65
|
+
console.log(` → http://localhost:${port}?token=${token}\n`);
|
|
49
66
|
}
|
|
50
67
|
else {
|
|
51
68
|
try {
|
|
@@ -101,4 +118,9 @@ export async function webStatus() {
|
|
|
101
118
|
}
|
|
102
119
|
}
|
|
103
120
|
}
|
|
121
|
+
export async function webToken() {
|
|
122
|
+
const config = await loadGlobalConfig();
|
|
123
|
+
const token = await getWebToken();
|
|
124
|
+
console.log(`\n → http://localhost:${config.web_port}?token=${token}\n`);
|
|
125
|
+
}
|
|
104
126
|
//# sourceMappingURL=web-daemon.js.map
|
package/dist/web-daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-daemon.js","sourceRoot":"","sources":["../src/web-daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"web-daemon.js","sourceRoot":"","sources":["../src/web-daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/web.d.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* kern web — serves the web UI
|
|
3
|
+
* kern web — serves the web UI, provides agent discovery, and proxies to agents.
|
|
4
4
|
*
|
|
5
5
|
* Routes:
|
|
6
|
-
* GET /
|
|
7
|
-
* GET /api/agents
|
|
8
|
-
* GET /
|
|
9
|
-
*
|
|
10
|
-
* GET /
|
|
6
|
+
* GET / → web UI (index.html)
|
|
7
|
+
* GET /api/agents → list of registered agents
|
|
8
|
+
* GET /api/agents/:name/events → SSE proxy to agent
|
|
9
|
+
* POST /api/agents/:name/message → proxy to agent
|
|
10
|
+
* GET /api/agents/:name/status → proxy to agent
|
|
11
|
+
* GET /api/agents/:name/history → proxy to agent
|
|
12
|
+
* GET /api/agents/:name/health → proxy to agent
|
|
13
|
+
* GET /manifest.json → PWA manifest
|
|
14
|
+
* GET /sw.js → service worker
|
|
15
|
+
* GET /icon.svg → app icon
|
|
11
16
|
*/
|
|
12
17
|
export {};
|
|
13
18
|
//# sourceMappingURL=web.d.ts.map
|
package/dist/web.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;GAcG"}
|
package/dist/web.js
CHANGED
|
@@ -1,23 +1,46 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* kern web — serves the web UI
|
|
3
|
+
* kern web — serves the web UI, provides agent discovery, and proxies to agents.
|
|
4
4
|
*
|
|
5
5
|
* Routes:
|
|
6
|
-
* GET /
|
|
7
|
-
* GET /api/agents
|
|
8
|
-
* GET /
|
|
9
|
-
*
|
|
10
|
-
* GET /
|
|
6
|
+
* GET / → web UI (index.html)
|
|
7
|
+
* GET /api/agents → list of registered agents
|
|
8
|
+
* GET /api/agents/:name/events → SSE proxy to agent
|
|
9
|
+
* POST /api/agents/:name/message → proxy to agent
|
|
10
|
+
* GET /api/agents/:name/status → proxy to agent
|
|
11
|
+
* GET /api/agents/:name/history → proxy to agent
|
|
12
|
+
* GET /api/agents/:name/health → proxy to agent
|
|
13
|
+
* GET /manifest.json → PWA manifest
|
|
14
|
+
* GET /sw.js → service worker
|
|
15
|
+
* GET /icon.svg → app icon
|
|
11
16
|
*/
|
|
12
|
-
import { createServer } from "http";
|
|
13
|
-
import { readFile } from "fs/promises";
|
|
17
|
+
import { createServer, request as httpRequest } from "http";
|
|
18
|
+
import { readFile, appendFile } from "fs/promises";
|
|
14
19
|
import { join } from "path";
|
|
15
20
|
import { existsSync } from "fs";
|
|
16
21
|
import { homedir } from "os";
|
|
22
|
+
import { randomBytes } from "crypto";
|
|
17
23
|
import { isProcessRunning } from "./registry.js";
|
|
18
24
|
import { loadGlobalConfig } from "./global-config.js";
|
|
19
25
|
const KERN_DIR = join(homedir(), ".kern");
|
|
20
26
|
const AGENTS_FILE = join(KERN_DIR, "agents.json");
|
|
27
|
+
const ENV_FILE = join(KERN_DIR, ".env");
|
|
28
|
+
/** Load or auto-generate the web auth token from ~/.kern/.env */
|
|
29
|
+
async function getWebToken() {
|
|
30
|
+
// Check existing .env
|
|
31
|
+
if (existsSync(ENV_FILE)) {
|
|
32
|
+
const content = await readFile(ENV_FILE, "utf-8");
|
|
33
|
+
const match = content.match(/^KERN_WEB_TOKEN=(.+)$/m);
|
|
34
|
+
if (match)
|
|
35
|
+
return match[1].trim();
|
|
36
|
+
}
|
|
37
|
+
// Generate and persist
|
|
38
|
+
const token = randomBytes(16).toString("hex");
|
|
39
|
+
await appendFile(ENV_FILE, `${existsSync(ENV_FILE) ? "\n" : ""}KERN_WEB_TOKEN=${token}\n`);
|
|
40
|
+
log(`generated web token: ${token.slice(0, 8)}...`);
|
|
41
|
+
return token;
|
|
42
|
+
}
|
|
43
|
+
let webToken;
|
|
21
44
|
async function loadAgents() {
|
|
22
45
|
if (!existsSync(AGENTS_FILE))
|
|
23
46
|
return [];
|
|
@@ -37,6 +60,36 @@ const staticFiles = {
|
|
|
37
60
|
"/sw.js": { file: "sw.js", contentType: "application/javascript" },
|
|
38
61
|
"/icon.svg": { file: "icon.svg", contentType: "image/svg+xml" },
|
|
39
62
|
};
|
|
63
|
+
/** Proxy a request to an agent's HTTP server, injecting its auth token */
|
|
64
|
+
function proxyToAgent(req, res, agent, targetPath) {
|
|
65
|
+
const proxyReq = httpRequest({
|
|
66
|
+
hostname: "127.0.0.1",
|
|
67
|
+
port: agent.port,
|
|
68
|
+
path: targetPath,
|
|
69
|
+
method: req.method,
|
|
70
|
+
headers: {
|
|
71
|
+
...req.headers,
|
|
72
|
+
host: `127.0.0.1:${agent.port}`,
|
|
73
|
+
authorization: agent.token ? `Bearer ${agent.token}` : "",
|
|
74
|
+
},
|
|
75
|
+
}, (proxyRes) => {
|
|
76
|
+
// Copy status + headers from agent response
|
|
77
|
+
res.writeHead(proxyRes.statusCode || 502, proxyRes.headers);
|
|
78
|
+
// Pipe the response — works for SSE streams and regular responses
|
|
79
|
+
proxyRes.pipe(res);
|
|
80
|
+
});
|
|
81
|
+
proxyReq.on("error", (err) => {
|
|
82
|
+
log(`proxy error for ${agent.name}: ${err.message}`);
|
|
83
|
+
if (!res.headersSent) {
|
|
84
|
+
res.writeHead(502, { "Content-Type": "application/json" });
|
|
85
|
+
res.end(JSON.stringify({ error: "agent unreachable" }));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Abort proxy request if client disconnects (important for SSE streams)
|
|
89
|
+
res.on("close", () => proxyReq.destroy());
|
|
90
|
+
// Pipe request body (for POST /message)
|
|
91
|
+
req.pipe(proxyReq);
|
|
92
|
+
}
|
|
40
93
|
const server = createServer(async (req, res) => {
|
|
41
94
|
const rawUrl = req.url || "/";
|
|
42
95
|
const url = rawUrl.split("?")[0];
|
|
@@ -78,23 +131,49 @@ const server = createServer(async (req, res) => {
|
|
|
78
131
|
}
|
|
79
132
|
return;
|
|
80
133
|
}
|
|
81
|
-
//
|
|
134
|
+
// Auth check — all /api/* routes require web token
|
|
135
|
+
if (url.startsWith("/api/")) {
|
|
136
|
+
const authHeader = req.headers.authorization;
|
|
137
|
+
const queryToken = new URL(rawUrl, "http://localhost").searchParams.get("token");
|
|
138
|
+
if (authHeader !== `Bearer ${webToken}` && queryToken !== webToken) {
|
|
139
|
+
res.writeHead(401, { "Content-Type": "application/json" });
|
|
140
|
+
res.end(JSON.stringify({ error: "unauthorized" }));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Agent list API — returns agents (no port/token — proxy handles auth)
|
|
82
145
|
if (url === "/api/agents" && req.method === "GET") {
|
|
83
146
|
const agents = await loadAgents();
|
|
84
147
|
const result = agents.map((a) => ({
|
|
85
148
|
name: a.name,
|
|
86
|
-
port: a.port || null,
|
|
87
|
-
token: a.token || null,
|
|
88
149
|
running: !!(a.pid && isProcessRunning(a.pid)),
|
|
89
150
|
}));
|
|
90
151
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
91
152
|
res.end(JSON.stringify(result));
|
|
92
153
|
return;
|
|
93
154
|
}
|
|
155
|
+
// Agent proxy — /api/agents/:name/:endpoint
|
|
156
|
+
const proxyMatch = url.match(/^\/api\/agents\/([^/]+)\/(.+)$/);
|
|
157
|
+
if (proxyMatch) {
|
|
158
|
+
const [, agentName, endpoint] = proxyMatch;
|
|
159
|
+
const agents = await loadAgents();
|
|
160
|
+
const agent = agents.find((a) => a.name === agentName);
|
|
161
|
+
if (!agent || !agent.port || !agent.pid || !isProcessRunning(agent.pid)) {
|
|
162
|
+
res.writeHead(404, { "Content-Type": "application/json" });
|
|
163
|
+
res.end(JSON.stringify({ error: "agent not found or not running" }));
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// Build target URL — preserve query string
|
|
167
|
+
const queryString = rawUrl.includes("?") ? rawUrl.slice(rawUrl.indexOf("?")) : "";
|
|
168
|
+
const targetPath = `/${endpoint}${queryString}`;
|
|
169
|
+
proxyToAgent(req, res, agent, targetPath);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
94
172
|
res.writeHead(404, { "Content-Type": "application/json" });
|
|
95
173
|
res.end(JSON.stringify({ error: "not found" }));
|
|
96
174
|
});
|
|
97
175
|
async function start() {
|
|
176
|
+
webToken = await getWebToken();
|
|
98
177
|
const config = await loadGlobalConfig();
|
|
99
178
|
server.listen(config.web_port, config.web_host, () => {
|
|
100
179
|
log(`listening on ${config.web_host}:${config.web_port}`);
|
package/dist/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/templates/web/index.html
CHANGED
|
@@ -178,6 +178,7 @@
|
|
|
178
178
|
flex-direction: column;
|
|
179
179
|
overflow: hidden;
|
|
180
180
|
min-width: 0;
|
|
181
|
+
position: relative;
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
.sidebar.collapsed { width: 0; min-width: 0; overflow: hidden; border-right: none; }
|
|
@@ -664,6 +665,28 @@
|
|
|
664
665
|
}
|
|
665
666
|
|
|
666
667
|
/* --- Input --- */
|
|
668
|
+
.scroll-down-btn {
|
|
669
|
+
display: none;
|
|
670
|
+
position: absolute;
|
|
671
|
+
bottom: 80px;
|
|
672
|
+
left: 50%;
|
|
673
|
+
transform: translateX(-50%);
|
|
674
|
+
z-index: 10;
|
|
675
|
+
width: 40px; height: 40px;
|
|
676
|
+
border-radius: 50%;
|
|
677
|
+
border: 1px solid var(--border);
|
|
678
|
+
background: var(--bg-secondary);
|
|
679
|
+
color: var(--text);
|
|
680
|
+
font-size: 20px;
|
|
681
|
+
cursor: pointer;
|
|
682
|
+
align-items: center;
|
|
683
|
+
justify-content: center;
|
|
684
|
+
box-shadow: 0 2px 12px rgba(0,0,0,0.4);
|
|
685
|
+
transition: opacity 0.15s;
|
|
686
|
+
opacity: 0.85;
|
|
687
|
+
}
|
|
688
|
+
.scroll-down-btn:hover { opacity: 1; background: var(--bg-hover); border-color: var(--text-muted); }
|
|
689
|
+
.scroll-down-btn.visible { display: flex; }
|
|
667
690
|
.input-area {
|
|
668
691
|
padding: 12px 16px;
|
|
669
692
|
padding-bottom: max(12px, env(safe-area-inset-bottom));
|
|
@@ -837,6 +860,12 @@
|
|
|
837
860
|
}
|
|
838
861
|
.switcher-item:hover .switcher-item-remove { display: block; }
|
|
839
862
|
.switcher-item-remove:hover { color: var(--red); }
|
|
863
|
+
.switcher-server-header {
|
|
864
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
865
|
+
padding: 8px 12px 4px; font-size: 11px; font-weight: 600;
|
|
866
|
+
color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.5px;
|
|
867
|
+
}
|
|
868
|
+
.switcher-server-header .switcher-item-remove { display: inline; font-size: 12px; }
|
|
840
869
|
</style>
|
|
841
870
|
</head>
|
|
842
871
|
<body>
|
|
@@ -846,20 +875,31 @@
|
|
|
846
875
|
<div class="sidebar" id="sidebar">
|
|
847
876
|
<div class="sidebar-header">
|
|
848
877
|
<span>kern<span style="color:#58a6ff">.</span></span>
|
|
878
|
+
<button class="filter-btn" id="logout-btn" title="Logout" style="font-size:14px;">⏻</button>
|
|
849
879
|
</div>
|
|
850
880
|
<div class="sidebar-list" id="switcher-list"></div>
|
|
851
881
|
|
|
852
882
|
</div>
|
|
853
883
|
|
|
884
|
+
<div class="modal-overlay" id="auth-modal">
|
|
885
|
+
<div class="modal">
|
|
886
|
+
<div class="modal-title">Connect</div>
|
|
887
|
+
<input id="auth-token" type="password" placeholder="Web token" />
|
|
888
|
+
<div style="color:var(--text-muted);font-size:11px;margin-top:-4px;">~/.kern/.env → KERN_WEB_TOKEN</div>
|
|
889
|
+
<div class="modal-actions">
|
|
890
|
+
<button class="btn-add" id="auth-submit">Connect</button>
|
|
891
|
+
</div>
|
|
892
|
+
</div>
|
|
893
|
+
</div>
|
|
894
|
+
|
|
854
895
|
<div class="modal-overlay" id="add-modal">
|
|
855
896
|
<div class="modal">
|
|
856
|
-
<div class="modal-title">Add
|
|
857
|
-
<input id="add-
|
|
858
|
-
<input id="add-
|
|
859
|
-
<input id="add-token" type="password" placeholder="Token" />
|
|
897
|
+
<div class="modal-title">Add server</div>
|
|
898
|
+
<input id="add-url" type="text" placeholder="http://host:port" />
|
|
899
|
+
<input id="add-token" type="password" placeholder="Web token" />
|
|
860
900
|
<div class="modal-actions">
|
|
861
901
|
<button class="btn-cancel" id="add-cancel-btn">Cancel</button>
|
|
862
|
-
<button class="btn-add" id="add-
|
|
902
|
+
<button class="btn-add" id="add-server-btn">Add</button>
|
|
863
903
|
</div>
|
|
864
904
|
</div>
|
|
865
905
|
</div>
|
|
@@ -881,6 +921,7 @@
|
|
|
881
921
|
<div class="info-panel" id="info-panel"></div>
|
|
882
922
|
<div class="messages" id="messages"></div>
|
|
883
923
|
|
|
924
|
+
<button class="scroll-down-btn" id="scroll-down-btn" title="Scroll to bottom">↓</button>
|
|
884
925
|
<div class="input-area">
|
|
885
926
|
<div class="input-row">
|
|
886
927
|
<div class="cmd-popup" id="cmd-popup"></div>
|
|
@@ -1201,12 +1242,24 @@ $('info-btn').addEventListener('click', async () => {
|
|
|
1201
1242
|
// Agent Switcher
|
|
1202
1243
|
// ==========================================================================
|
|
1203
1244
|
|
|
1204
|
-
//
|
|
1205
|
-
function
|
|
1206
|
-
try { return JSON.parse(localStorage.getItem('
|
|
1245
|
+
// Servers — stored in localStorage as [{url, token}]
|
|
1246
|
+
function getSavedServers() {
|
|
1247
|
+
try { return JSON.parse(localStorage.getItem('kern_servers') || '[]'); } catch { return []; }
|
|
1248
|
+
}
|
|
1249
|
+
function saveServers(servers) {
|
|
1250
|
+
localStorage.setItem('kern_servers', JSON.stringify(servers));
|
|
1207
1251
|
}
|
|
1208
|
-
|
|
1209
|
-
|
|
1252
|
+
// Get token for a server URL (local or remote)
|
|
1253
|
+
function getServerToken(serverUrl) {
|
|
1254
|
+
if (serverUrl === location.origin) {
|
|
1255
|
+
return localStorage.getItem('kern_web_token') || null;
|
|
1256
|
+
}
|
|
1257
|
+
const servers = getSavedServers();
|
|
1258
|
+
const entry = servers.find(s => s.url === serverUrl);
|
|
1259
|
+
return entry ? entry.token : null;
|
|
1260
|
+
}
|
|
1261
|
+
function setLocalToken(token) {
|
|
1262
|
+
localStorage.setItem('kern_web_token', token);
|
|
1210
1263
|
}
|
|
1211
1264
|
function getActiveAgent() {
|
|
1212
1265
|
return sessionStorage.getItem('kern_active_agent') || null;
|
|
@@ -1215,20 +1268,8 @@ function setActiveAgent(name) {
|
|
|
1215
1268
|
sessionStorage.setItem('kern_active_agent', name);
|
|
1216
1269
|
}
|
|
1217
1270
|
|
|
1218
|
-
//
|
|
1219
|
-
let
|
|
1220
|
-
|
|
1221
|
-
// All agents = discovered + manual
|
|
1222
|
-
function getAllAgents() {
|
|
1223
|
-
const manual = getManualAgents();
|
|
1224
|
-
const all = [...discoveredAgents];
|
|
1225
|
-
for (const m of manual) {
|
|
1226
|
-
if (!all.find(a => a.name === m.name)) {
|
|
1227
|
-
all.push({ ...m, source: 'manual' });
|
|
1228
|
-
}
|
|
1229
|
-
}
|
|
1230
|
-
return all;
|
|
1231
|
-
}
|
|
1271
|
+
// All discovered agents grouped by server — fetched fresh each time
|
|
1272
|
+
let allAgents = [];
|
|
1232
1273
|
|
|
1233
1274
|
let BASE_URL = null;
|
|
1234
1275
|
let AUTH_TOKEN = null;
|
|
@@ -1241,7 +1282,7 @@ function avatarColor(name) {
|
|
|
1241
1282
|
return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];
|
|
1242
1283
|
}
|
|
1243
1284
|
|
|
1244
|
-
// Render switcher panel
|
|
1285
|
+
// Render switcher panel — grouped by server
|
|
1245
1286
|
function renderSwitcher() {
|
|
1246
1287
|
const list = $('switcher-list');
|
|
1247
1288
|
const agents = getAllAgents();
|
|
@@ -1249,50 +1290,71 @@ function renderSwitcher() {
|
|
|
1249
1290
|
list.innerHTML = '';
|
|
1250
1291
|
if (agents.length === 0) {
|
|
1251
1292
|
list.innerHTML = '<div style="padding:12px;color:var(--text-muted);font-size:12px;">No agents found.</div>';
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
const
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
if (!agent.running) classes.push('offline');
|
|
1260
|
-
item.className = classes.join(' ');
|
|
1261
|
-
const color = avatarColor(agent.name);
|
|
1262
|
-
const initial = agent.name.charAt(0).toUpperCase();
|
|
1263
|
-
const dotClass = agent.running ? 'running' : 'stopped';
|
|
1264
|
-
item.innerHTML = `
|
|
1265
|
-
<div class="switcher-item-avatar" style="background:${color}">
|
|
1266
|
-
${initial}
|
|
1267
|
-
<span class="online-dot ${dotClass}"></span>
|
|
1268
|
-
</div>
|
|
1269
|
-
<div class="switcher-item-name">${agent.name}</div>
|
|
1270
|
-
${isManual ? '<button class="switcher-item-remove" title="Remove">×</button>' : ''}
|
|
1271
|
-
`;
|
|
1272
|
-
if (agent.running && agent.url) {
|
|
1273
|
-
item.addEventListener('click', (e) => {
|
|
1274
|
-
if (e.target.closest('.switcher-item-remove')) return;
|
|
1275
|
-
switchToAgent(agent);
|
|
1276
|
-
});
|
|
1293
|
+
} else {
|
|
1294
|
+
// Group by server
|
|
1295
|
+
const groups = new Map();
|
|
1296
|
+
for (const agent of agents) {
|
|
1297
|
+
const key = agent.server || location.origin;
|
|
1298
|
+
if (!groups.has(key)) groups.set(key, []);
|
|
1299
|
+
groups.get(key).push(agent);
|
|
1277
1300
|
}
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1301
|
+
const remoteServers = getSavedServers();
|
|
1302
|
+
for (const [serverUrl, serverAgents] of groups) {
|
|
1303
|
+
const isLocal = serverUrl === location.origin;
|
|
1304
|
+
const isRemote = remoteServers.some(s => s.url === serverUrl);
|
|
1305
|
+
// Server header for remote servers
|
|
1306
|
+
if (!isLocal) {
|
|
1307
|
+
const header = document.createElement('div');
|
|
1308
|
+
header.className = 'switcher-server-header';
|
|
1309
|
+
let label;
|
|
1310
|
+
try { label = new URL(serverUrl).hostname; } catch { label = serverUrl; }
|
|
1311
|
+
header.innerHTML = `<span>${escapeHtml(label)}</span>`;
|
|
1312
|
+
if (isRemote) {
|
|
1313
|
+
const removeBtn = document.createElement('button');
|
|
1314
|
+
removeBtn.className = 'switcher-item-remove';
|
|
1315
|
+
removeBtn.title = 'Remove server';
|
|
1316
|
+
removeBtn.innerHTML = '×';
|
|
1317
|
+
removeBtn.style.display = 'inline';
|
|
1318
|
+
removeBtn.addEventListener('click', (e) => {
|
|
1319
|
+
e.stopPropagation();
|
|
1320
|
+
saveServers(remoteServers.filter(s => s.url !== serverUrl));
|
|
1321
|
+
allAgents = allAgents.filter(a => a.server !== serverUrl);
|
|
1322
|
+
renderSwitcher();
|
|
1323
|
+
});
|
|
1324
|
+
header.appendChild(removeBtn);
|
|
1325
|
+
}
|
|
1326
|
+
list.appendChild(header);
|
|
1327
|
+
}
|
|
1328
|
+
for (const agent of serverAgents) {
|
|
1329
|
+
const item = document.createElement('div');
|
|
1330
|
+
const classes = ['switcher-item'];
|
|
1331
|
+
if (agent.name === activeName) classes.push('active');
|
|
1332
|
+
if (!agent.running) classes.push('offline');
|
|
1333
|
+
item.className = classes.join(' ');
|
|
1334
|
+
const color = avatarColor(agent.name);
|
|
1335
|
+
const initial = agent.name.charAt(0).toUpperCase();
|
|
1336
|
+
const dotClass = agent.running ? 'running' : 'stopped';
|
|
1337
|
+
item.innerHTML = `
|
|
1338
|
+
<div class="switcher-item-avatar" style="background:${color}">
|
|
1339
|
+
${initial}
|
|
1340
|
+
<span class="online-dot ${dotClass}"></span>
|
|
1341
|
+
</div>
|
|
1342
|
+
<div class="switcher-item-name">${agent.name}</div>
|
|
1343
|
+
`;
|
|
1344
|
+
if (agent.running && agent.url) {
|
|
1345
|
+
item.addEventListener('click', () => switchToAgent(agent));
|
|
1346
|
+
}
|
|
1347
|
+
list.appendChild(item);
|
|
1348
|
+
}
|
|
1285
1349
|
}
|
|
1286
|
-
list.appendChild(item);
|
|
1287
1350
|
}
|
|
1288
|
-
// Add
|
|
1351
|
+
// Add server row
|
|
1289
1352
|
const addItem = document.createElement('div');
|
|
1290
1353
|
addItem.className = 'switcher-add-inline';
|
|
1291
|
-
addItem.
|
|
1292
|
-
addItem.innerHTML = '<span>+</span> Add agent';
|
|
1354
|
+
addItem.innerHTML = '<span>+</span> Add server';
|
|
1293
1355
|
addItem.addEventListener('click', () => {
|
|
1294
1356
|
$('add-modal').classList.add('open');
|
|
1295
|
-
$('add-
|
|
1357
|
+
$('add-url').focus();
|
|
1296
1358
|
});
|
|
1297
1359
|
list.appendChild(addItem);
|
|
1298
1360
|
}
|
|
@@ -1300,7 +1362,7 @@ function renderSwitcher() {
|
|
|
1300
1362
|
function switchToAgent(agent) {
|
|
1301
1363
|
setActiveAgent(agent.name);
|
|
1302
1364
|
BASE_URL = agent.url;
|
|
1303
|
-
AUTH_TOKEN = agent.
|
|
1365
|
+
AUTH_TOKEN = getServerToken(agent.server || location.origin);
|
|
1304
1366
|
authFailed = false;
|
|
1305
1367
|
intentionalClose = true;
|
|
1306
1368
|
if (connection) { connection.close(); connection = null; }
|
|
@@ -1350,62 +1412,90 @@ if (localStorage.getItem('kern_sidebar_collapsed') === '1' && window.innerWidth
|
|
|
1350
1412
|
$('sidebar').classList.add('collapsed');
|
|
1351
1413
|
}
|
|
1352
1414
|
|
|
1353
|
-
//
|
|
1354
|
-
async function
|
|
1415
|
+
// Fetch agents from a server URL, returns { agents, status }
|
|
1416
|
+
async function fetchServerAgents(serverUrl) {
|
|
1355
1417
|
try {
|
|
1356
|
-
const
|
|
1357
|
-
|
|
1358
|
-
const
|
|
1359
|
-
if (
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1418
|
+
const token = getServerToken(serverUrl);
|
|
1419
|
+
const headers = token ? { 'Authorization': `Bearer ${token}` } : {};
|
|
1420
|
+
const res = await fetch(`${serverUrl}/api/agents`, { headers });
|
|
1421
|
+
if (res.status === 401) return { agents: [], status: 'unauthorized' };
|
|
1422
|
+
if (!res.ok) return { agents: [], status: 'error' };
|
|
1423
|
+
const data = await res.json();
|
|
1424
|
+
if (!Array.isArray(data)) return { agents: [], status: 'ok' };
|
|
1425
|
+
return {
|
|
1426
|
+
status: 'ok',
|
|
1427
|
+
agents: data.map(a => ({
|
|
1428
|
+
name: a.name,
|
|
1429
|
+
url: a.running ? `${serverUrl}/api/agents/${a.name}` : null,
|
|
1430
|
+
running: a.running,
|
|
1431
|
+
server: serverUrl,
|
|
1432
|
+
})),
|
|
1433
|
+
};
|
|
1434
|
+
} catch { return { agents: [], status: 'error' }; }
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
// Discover agents from local server + all saved remote servers
|
|
1438
|
+
// Returns 'ok', 'unauthorized' (local server needs token), or 'error'
|
|
1439
|
+
async function discoverAllAgents() {
|
|
1440
|
+
const localUrl = location.origin;
|
|
1441
|
+
const remoteUrls = getSavedServers().map(s => s.url);
|
|
1442
|
+
const allUrls = [localUrl, ...remoteUrls];
|
|
1443
|
+
const results = await Promise.all(allUrls.map(url => fetchServerAgents(url)));
|
|
1444
|
+
allAgents = results.flatMap(r => r.agents);
|
|
1445
|
+
// Return local server status
|
|
1446
|
+
return results[0].status;
|
|
1447
|
+
}
|
|
1448
|
+
|
|
1449
|
+
// Get all agents (use cached results from last discover)
|
|
1450
|
+
function getAllAgents() {
|
|
1451
|
+
return allAgents;
|
|
1369
1452
|
}
|
|
1370
1453
|
|
|
1371
1454
|
function setupSwitcher() {
|
|
1372
1455
|
$('menu-btn').addEventListener('click', async () => {
|
|
1373
|
-
await
|
|
1456
|
+
await discoverAllAgents();
|
|
1374
1457
|
renderSwitcher();
|
|
1375
1458
|
toggleSidebar();
|
|
1376
1459
|
});
|
|
1377
1460
|
$('sidebar-backdrop').addEventListener('click', () => {
|
|
1378
1461
|
closeSidebar();
|
|
1379
1462
|
});
|
|
1380
|
-
$('add-
|
|
1381
|
-
const name = $('add-name').value.trim();
|
|
1463
|
+
$('add-server-btn').addEventListener('click', async () => {
|
|
1382
1464
|
const url = $('add-url').value.trim().replace(/\/$/, '');
|
|
1383
1465
|
const token = $('add-token').value.trim() || null;
|
|
1384
|
-
if (!
|
|
1385
|
-
|
|
1386
|
-
const
|
|
1466
|
+
if (!url) return;
|
|
1467
|
+
// Save token first so fetchServerAgents can use it
|
|
1468
|
+
const servers = getSavedServers();
|
|
1469
|
+
const existing = servers.findIndex(s => s.url === url);
|
|
1387
1470
|
if (existing >= 0) {
|
|
1388
|
-
|
|
1471
|
+
servers[existing] = { url, token };
|
|
1389
1472
|
} else {
|
|
1390
|
-
|
|
1473
|
+
servers.push({ url, token });
|
|
1474
|
+
}
|
|
1475
|
+
saveServers(servers);
|
|
1476
|
+
// Validate by fetching agents
|
|
1477
|
+
const result = await fetchServerAgents(url);
|
|
1478
|
+
if (result.agents.length === 0) {
|
|
1479
|
+
// Remove if validation failed
|
|
1480
|
+
saveServers(servers.filter(s => s.url !== url));
|
|
1481
|
+
$('add-url').style.borderColor = 'var(--red)';
|
|
1482
|
+
setTimeout(() => $('add-url').style.borderColor = '', 2000);
|
|
1483
|
+
return;
|
|
1391
1484
|
}
|
|
1392
|
-
saveManualAgents(agents);
|
|
1393
|
-
$('add-name').value = '';
|
|
1394
1485
|
$('add-url').value = '';
|
|
1395
1486
|
$('add-token').value = '';
|
|
1396
1487
|
$('add-modal').classList.remove('open');
|
|
1488
|
+
await discoverAllAgents();
|
|
1397
1489
|
renderSwitcher();
|
|
1398
1490
|
});
|
|
1399
1491
|
$('add-cancel-btn').addEventListener('click', () => {
|
|
1400
1492
|
$('add-modal').classList.remove('open');
|
|
1401
|
-
$('add-name').value = '';
|
|
1402
1493
|
$('add-url').value = '';
|
|
1403
1494
|
$('add-token').value = '';
|
|
1404
1495
|
});
|
|
1405
1496
|
$('add-modal').addEventListener('click', (e) => {
|
|
1406
1497
|
if (e.target === $('add-modal')) {
|
|
1407
1498
|
$('add-modal').classList.remove('open');
|
|
1408
|
-
$('add-name').value = '';
|
|
1409
1499
|
$('add-url').value = '';
|
|
1410
1500
|
$('add-token').value = '';
|
|
1411
1501
|
}
|
|
@@ -1419,11 +1509,28 @@ let connection = null;
|
|
|
1419
1509
|
let authFailed = false;
|
|
1420
1510
|
let intentionalClose = false;
|
|
1421
1511
|
let currentTurnContext = null; // tracks which interface/type triggered the current turn
|
|
1512
|
+
let lastToolEl = null; // last tool call element — kept expanded during streaming
|
|
1513
|
+
let isLoadingHistory = false; // suppress auto-expand during history load
|
|
1422
1514
|
|
|
1423
1515
|
// --- Render helpers ---
|
|
1424
1516
|
|
|
1425
|
-
|
|
1426
|
-
|
|
1517
|
+
let userScrolledUp = false;
|
|
1518
|
+
|
|
1519
|
+
const scrollDownBtn = $('scroll-down-btn');
|
|
1520
|
+
|
|
1521
|
+
messagesEl.addEventListener('scroll', () => {
|
|
1522
|
+
const threshold = 80;
|
|
1523
|
+
const atBottom = messagesEl.scrollHeight - messagesEl.scrollTop - messagesEl.clientHeight < threshold;
|
|
1524
|
+
userScrolledUp = !atBottom;
|
|
1525
|
+
scrollDownBtn.classList.toggle('visible', userScrolledUp);
|
|
1526
|
+
});
|
|
1527
|
+
|
|
1528
|
+
scrollDownBtn.addEventListener('click', () => scrollToBottom(true));
|
|
1529
|
+
|
|
1530
|
+
function scrollToBottom(force) {
|
|
1531
|
+
if (force || !userScrolledUp) {
|
|
1532
|
+
messagesEl.scrollTop = messagesEl.scrollHeight;
|
|
1533
|
+
}
|
|
1427
1534
|
}
|
|
1428
1535
|
|
|
1429
1536
|
const TOOL_COLORS = {
|
|
@@ -1482,6 +1589,12 @@ function addMessage(type, content, meta, toolInput, timestamp, iface) {
|
|
|
1482
1589
|
el.querySelector('.tool-output').textContent = `→ ${toolInput.interface || 'unknown'}: ${toolInput.text}`;
|
|
1483
1590
|
}
|
|
1484
1591
|
el.addEventListener('click', () => el.classList.toggle('expanded'));
|
|
1592
|
+
// Auto-expand last tool call during streaming, collapse previous
|
|
1593
|
+
if (!isLoadingHistory) {
|
|
1594
|
+
if (lastToolEl) lastToolEl.classList.remove('expanded');
|
|
1595
|
+
el.classList.add('expanded');
|
|
1596
|
+
lastToolEl = el;
|
|
1597
|
+
}
|
|
1485
1598
|
} else if (type === 'user-remote') {
|
|
1486
1599
|
if (meta) {
|
|
1487
1600
|
const label = document.createElement('span');
|
|
@@ -1580,6 +1693,7 @@ function handleEvent(event) {
|
|
|
1580
1693
|
case 'text-delta':
|
|
1581
1694
|
hideThinking();
|
|
1582
1695
|
if (!streamingEl) {
|
|
1696
|
+
if (lastToolEl) { lastToolEl.classList.remove('expanded'); lastToolEl = null; }
|
|
1583
1697
|
streamingEl = addMessage('assistant', '');
|
|
1584
1698
|
streamingEl.classList.add('streaming-cursor');
|
|
1585
1699
|
}
|
|
@@ -1616,6 +1730,7 @@ function handleEvent(event) {
|
|
|
1616
1730
|
}
|
|
1617
1731
|
}
|
|
1618
1732
|
}
|
|
1733
|
+
scrollToBottom();
|
|
1619
1734
|
// Agent is thinking about what to do next — show dots
|
|
1620
1735
|
showThinking();
|
|
1621
1736
|
break;
|
|
@@ -1697,6 +1812,7 @@ async function send() {
|
|
|
1697
1812
|
sendBtn.disabled = true;
|
|
1698
1813
|
|
|
1699
1814
|
addMessage('user', text, null, null, new Date(), 'web');
|
|
1815
|
+
scrollToBottom(true);
|
|
1700
1816
|
if (!busy) {
|
|
1701
1817
|
setBusy(true);
|
|
1702
1818
|
showThinking();
|
|
@@ -1822,6 +1938,7 @@ async function init() {
|
|
|
1822
1938
|
messagesEl.innerHTML = '';
|
|
1823
1939
|
streamingText = '';
|
|
1824
1940
|
streamingEl = null;
|
|
1941
|
+
lastToolEl = null;
|
|
1825
1942
|
setConnected('connecting');
|
|
1826
1943
|
|
|
1827
1944
|
// Load status — also serves as auth check
|
|
@@ -1829,39 +1946,12 @@ async function init() {
|
|
|
1829
1946
|
const res = await fetch(`${BASE_URL}/status`, { headers: AgentClient._headers(AUTH_TOKEN) });
|
|
1830
1947
|
if (res.status === 401) {
|
|
1831
1948
|
authFailed = true;
|
|
1832
|
-
localStorage.removeItem('kern_auth_token');
|
|
1833
1949
|
setConnected('disconnected');
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
prompt.innerHTML = `
|
|
1840
|
-
<div style="color:var(--text-dim);font-size:14px;">Enter auth token</div>
|
|
1841
|
-
<input id="token-input" type="password" placeholder="KERN_AUTH_TOKEN"
|
|
1842
|
-
style="background:var(--bg-input);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:14px;width:280px;outline:none;font-family:var(--font-sans);" />
|
|
1843
|
-
<button id="token-submit"
|
|
1844
|
-
style="background:var(--accent-dim);color:#fff;border:none;border-radius:8px;padding:10px 20px;font-size:14px;cursor:pointer;">Connect</button>
|
|
1845
|
-
`;
|
|
1846
|
-
messagesEl.appendChild(prompt);
|
|
1847
|
-
const tokenInput = $('token-input');
|
|
1848
|
-
const tokenSubmit = $('token-submit');
|
|
1849
|
-
tokenInput.focus();
|
|
1850
|
-
function submitToken() {
|
|
1851
|
-
const val = tokenInput.value.trim();
|
|
1852
|
-
if (!val) return;
|
|
1853
|
-
localStorage.setItem('kern_auth_token', val);
|
|
1854
|
-
AUTH_TOKEN = val;
|
|
1855
|
-
authFailed = false;
|
|
1856
|
-
messagesEl.innerHTML = '';
|
|
1857
|
-
inputEl.disabled = false;
|
|
1858
|
-
sendBtn.disabled = false;
|
|
1859
|
-
init();
|
|
1860
|
-
}
|
|
1861
|
-
tokenSubmit.addEventListener('click', submitToken);
|
|
1862
|
-
tokenInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') submitToken(); });
|
|
1863
|
-
inputEl.disabled = true;
|
|
1864
|
-
sendBtn.disabled = true;
|
|
1950
|
+
// Re-prompt for token
|
|
1951
|
+
await showTokenPrompt();
|
|
1952
|
+
AUTH_TOKEN = getServerToken(location.origin);
|
|
1953
|
+
authFailed = false;
|
|
1954
|
+
init();
|
|
1865
1955
|
return;
|
|
1866
1956
|
}
|
|
1867
1957
|
const status = await res.json();
|
|
@@ -1875,6 +1965,7 @@ async function init() {
|
|
|
1875
1965
|
// Load history
|
|
1876
1966
|
try {
|
|
1877
1967
|
const history = await AgentClient.getHistory(BASE_URL, AUTH_TOKEN, 100);
|
|
1968
|
+
isLoadingHistory = true;
|
|
1878
1969
|
// Build tool result map: toolCallId → output string
|
|
1879
1970
|
const toolResults = {};
|
|
1880
1971
|
for (const msg of history) {
|
|
@@ -1926,6 +2017,8 @@ async function init() {
|
|
|
1926
2017
|
}
|
|
1927
2018
|
}
|
|
1928
2019
|
} catch {}
|
|
2020
|
+
isLoadingHistory = false;
|
|
2021
|
+
scrollToBottom(true);
|
|
1929
2022
|
|
|
1930
2023
|
// If agent is mid-turn, show thinking indicator
|
|
1931
2024
|
try {
|
|
@@ -1947,15 +2040,8 @@ async function init() {
|
|
|
1947
2040
|
if (authFailed || intentionalClose) return;
|
|
1948
2041
|
setConnected('disconnected');
|
|
1949
2042
|
addMessage('system', 'disconnected — reconnecting...');
|
|
1950
|
-
// Re-discover agents
|
|
1951
|
-
await
|
|
1952
|
-
const agents = getAllAgents();
|
|
1953
|
-
const activeName = getActiveAgent();
|
|
1954
|
-
const updated = agents.find(a => a.name === activeName && a.running && a.url);
|
|
1955
|
-
if (updated && updated.url !== BASE_URL) {
|
|
1956
|
-
BASE_URL = updated.url;
|
|
1957
|
-
AUTH_TOKEN = updated.token;
|
|
1958
|
-
}
|
|
2043
|
+
// Re-discover agents (proxy URL is stable, but agent may have stopped)
|
|
2044
|
+
await discoverAllAgents();
|
|
1959
2045
|
reconnectTimer = setTimeout(init, 2000);
|
|
1960
2046
|
},
|
|
1961
2047
|
});
|
|
@@ -2007,6 +2093,11 @@ function renderFilterDropdown() {
|
|
|
2007
2093
|
}).join('');
|
|
2008
2094
|
}
|
|
2009
2095
|
|
|
2096
|
+
$('logout-btn').addEventListener('click', () => {
|
|
2097
|
+
localStorage.removeItem('kern_web_token');
|
|
2098
|
+
location.reload();
|
|
2099
|
+
});
|
|
2100
|
+
|
|
2010
2101
|
$('filter-btn').addEventListener('click', (e) => {
|
|
2011
2102
|
e.stopPropagation();
|
|
2012
2103
|
const dd = $('filter-dropdown');
|
|
@@ -2033,9 +2124,47 @@ document.addEventListener('click', () => {
|
|
|
2033
2124
|
|
|
2034
2125
|
applyFilters();
|
|
2035
2126
|
|
|
2127
|
+
// Show token prompt using modal — resolves when user submits valid token
|
|
2128
|
+
function showTokenPrompt() {
|
|
2129
|
+
return new Promise(resolve => {
|
|
2130
|
+
const modal = $('auth-modal');
|
|
2131
|
+
const input = $('auth-token');
|
|
2132
|
+
const btn = $('auth-submit');
|
|
2133
|
+
input.value = '';
|
|
2134
|
+
modal.classList.add('open');
|
|
2135
|
+
input.focus();
|
|
2136
|
+
function submit() {
|
|
2137
|
+
const val = input.value.trim();
|
|
2138
|
+
if (!val) return;
|
|
2139
|
+
setLocalToken(val);
|
|
2140
|
+
modal.classList.remove('open');
|
|
2141
|
+
resolve(val);
|
|
2142
|
+
}
|
|
2143
|
+
btn.onclick = submit;
|
|
2144
|
+
input.onkeydown = (e) => { if (e.key === 'Enter') submit(); };
|
|
2145
|
+
});
|
|
2146
|
+
}
|
|
2147
|
+
|
|
2148
|
+
// On load: check URL for token param, save and clean URL
|
|
2149
|
+
(function checkUrlToken() {
|
|
2150
|
+
const params = new URLSearchParams(location.search);
|
|
2151
|
+
const token = params.get('token');
|
|
2152
|
+
if (token) {
|
|
2153
|
+
setLocalToken(token);
|
|
2154
|
+
history.replaceState(null, '', location.pathname);
|
|
2155
|
+
}
|
|
2156
|
+
})();
|
|
2157
|
+
|
|
2036
2158
|
// On load: discover agents, auto-connect or show switcher
|
|
2037
2159
|
(async () => {
|
|
2038
|
-
await
|
|
2160
|
+
let localStatus = await discoverAllAgents();
|
|
2161
|
+
|
|
2162
|
+
// If local server needs auth, prompt for token
|
|
2163
|
+
while (localStatus === 'unauthorized') {
|
|
2164
|
+
await showTokenPrompt();
|
|
2165
|
+
localStatus = await discoverAllAgents();
|
|
2166
|
+
}
|
|
2167
|
+
|
|
2039
2168
|
renderSwitcher();
|
|
2040
2169
|
|
|
2041
2170
|
const agents = getAllAgents();
|
|
@@ -2046,13 +2175,13 @@ applyFilters();
|
|
|
2046
2175
|
if (activeAgent) {
|
|
2047
2176
|
// Resume previous agent
|
|
2048
2177
|
BASE_URL = activeAgent.url;
|
|
2049
|
-
AUTH_TOKEN = activeAgent.
|
|
2178
|
+
AUTH_TOKEN = getServerToken(activeAgent.server || location.origin);
|
|
2050
2179
|
init();
|
|
2051
2180
|
} else if (runningAgents.length === 1) {
|
|
2052
2181
|
// Only one running agent — auto-connect
|
|
2053
2182
|
switchToAgent(runningAgents[0]);
|
|
2054
2183
|
} else if (runningAgents.length > 1) {
|
|
2055
|
-
// Multiple running agents — show switcher
|
|
2184
|
+
// Multiple running agents — show switcher
|
|
2056
2185
|
setConnected('disconnected');
|
|
2057
2186
|
agentNameEl.textContent = 'kern';
|
|
2058
2187
|
renderSwitcher();
|
|
@@ -2061,7 +2190,7 @@ applyFilters();
|
|
|
2061
2190
|
// No running agents
|
|
2062
2191
|
setConnected('disconnected');
|
|
2063
2192
|
agentNameEl.textContent = 'kern';
|
|
2064
|
-
addMessage('system', 'No running agents found. Start an agent with `kern start` or add
|
|
2193
|
+
addMessage('system', 'No running agents found. Start an agent with `kern start` or add a server.');
|
|
2065
2194
|
}
|
|
2066
2195
|
})();
|
|
2067
2196
|
|