Custom connections are gone: the CLI talks to the LLeMbas server it is logged in to
LLeMbas CLI 2.0 is LLeMbas-server-specific (CLI rule 2). Removed: the anthropic, gemini, ollama and responses clients, context discovery and llama-swap unloading (discover.ts), the Connection schema with its dialect, auth, key_cmd, discover, unload_url and one_model_at_a_time, the model `fallback` (it only ever moved to another server), effort_map and cache, and the multi-connection refs. Kept: openai-chat, http, sse, think, effort, tokens and all of src/lembas. - connections.yaml holds the login (`type: webui`, as lembas login writes it). A custom entry from 1.x is read past with a warning that says how to log in, so an old file still starts; with several logins left, the latest is used and the others named. - A model's ref is the id the server serves it under; the older forms (`<login>/<id>`, `<login>/<model>`) still resolve and config.yaml is rewritten once. Without a login there is no model, and the error (and the first-run screen, now the sign-in alone) says `lembas login <address>`. - A login to another server signs this machine out of the previous one. - The window is the server's word (no discovery); a capacity group comes from the server's `capacity.group` alone; embeddings use the server's /v1/embeddings. - `lembas models` lists the server's models; install.sh's starter files, the README and the JSON schemas say the same. Tests: every fixture is a login now (the fake server lists models, answers other GETs with 404, and can hand one model to another script, as a server with several backends); the dialect suites and the cross-connection tests are gone with their code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
80 files changed
+587
-2575
No files matched your search
+5
-5
@@ -26,11 +26,11 @@ const v = run(["--version"])
|
||||
check("--version", v.code === 0 && /^\d+\.\d+\.\d+/.test(v.out), v.err)
|
||||
|
||||
// 2. a headless run against a fake endpoint, with the session store on (FTS5 inside the binary)
|
||||
const fake = fakeProvider([{ chunks: [delta({ content: "smoke ok" }), usage(5, 2)] }])
|
||||
const fake = fakeProvider([{ chunks: [delta({ content: "smoke ok" }), usage(5, 2)] }], { served: [{ id: "fake/m" }] })
|
||||
mkdirSync(join(home, ".config/lembas"), { recursive: true })
|
||||
writeFileSync(
|
||||
join(home, ".config/lembas/connections.yaml"),
|
||||
`connections:\n fake:\n dialect: openai-chat\n base_url: ${fake.url}\n models:\n m: {}\n`,
|
||||
`connections:\n fake:\n type: webui\n url: ${fake.url}\n api_key: smoke\n models:\n fake/m: {}\n`,
|
||||
{ mode: 0o600 },
|
||||
)
|
||||
writeFileSync(join(home, ".config/lembas/config.yaml"), "model: fake/m\nupdate: { auto: off }\n")
|
||||
@@ -46,10 +46,10 @@ check("sessions → recorded (sqlite + FTS5 in the binary)", s.code === 0 && s.o
|
||||
// 2b. serve --stdio: the ACP agent inside the binary answers initialize, opens a session and
|
||||
// streams a reply — the code the LLeMbas link runs too.
|
||||
{
|
||||
const f = fakeProvider([{ chunks: [delta({ content: "acp ok" })] }])
|
||||
const f = fakeProvider([{ chunks: [delta({ content: "acp ok" })] }], { served: [{ id: "fake/m" }] })
|
||||
writeFileSync(
|
||||
join(home, ".config/lembas/connections.yaml"),
|
||||
`connections:\n fake:\n dialect: openai-chat\n base_url: ${f.url}\n models:\n m: {}\n`,
|
||||
`connections:\n fake:\n type: webui\n url: ${f.url}\n api_key: smoke\n models:\n fake/m: {}\n`,
|
||||
{ mode: 0o600 },
|
||||
)
|
||||
const p = Bun.spawn([bin, "serve", "--stdio"], { cwd: home, env, stdin: "pipe", stdout: "pipe", stderr: "pipe" })
|
||||
@@ -181,7 +181,7 @@ for (const [cols, rows] of [
|
||||
const d = await drive({ cols: 100, rows: 30, bin, home: h, cwd })
|
||||
await d.waitFor("Trust this directory?")
|
||||
await d.key("\r")
|
||||
const setup = await d.waitFor("no model to talk to yet")
|
||||
const setup = await d.waitFor("not logged in to a LLeMbas server")
|
||||
await Bun.write(join(cfgDir, "connections.yaml"), connections)
|
||||
await Bun.write(join(cfgDir, "config.yaml"), "model: fake/coder\nupdate: { auto: off }\n")
|
||||
// The screen opens on the sign-in, its address focused: ctrl+r tries again from there.
|
||||
|
||||
Reference in new issue
Block a user