lembas -l / --local: everything in the project, nothing written elsewhere
Config, data and state are rooted at <project>/.agent/local/lembas (or .lembas/), kept out of git; a local directory the repository carries is refused. The user's logins and connections.yaml are read, never written; the user's config.yaml is not read. The TUI is started with TMPDIR inside it (the compiled binary unpacks its native library there) and OpenTUI's cache goes there too; the agent's commands keep the user's TMPDIR. An instance serves models, chat, speech and the balance only: the link, /remote, the service and the hub are off, deletes are not sent, and the server library, search, fetch, embeddings and personalization are not used. Self-update and uninstall are refused. hardline_disable is ignored, and tools treat the local directory as outside the project. The smoke test runs a whole local session in the compiled binary and checks that HOME, the XDG directories and TMPDIR gained nothing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
27 files changed
+636
-105
No files matched your search
@@ -18,6 +18,8 @@ import { clampMode, effortOf, markRemote, permissionParams, planParams, planRepl
|
||||
import { sessionTurnFile, sessionTurns, type TurnLog } from "./turns.ts"
|
||||
import { dropAttachments, preparePrompt } from "./prompt.ts"
|
||||
import { connectHub, Hub } from "./hub.ts"
|
||||
import { isLocal } from "../config/paths.ts"
|
||||
import { localRefusal, refusedLocally } from "../project/local.ts"
|
||||
import { addPendingDeleted } from "./pending.ts"
|
||||
import { REMOTE_META, type Store } from "../session/store.ts"
|
||||
import { limitsFromConfig, runLink } from "./link.ts"
|
||||
@@ -193,6 +195,7 @@ export class Share {
|
||||
}
|
||||
|
||||
status(): string {
|
||||
if (isLocal()) return localRefusal("sharing with the web UI")
|
||||
if (this.sharedId) return `this session is shared with the web UI ${this.own ? "— the link is held by this terminal, so it lasts as long as the terminal does" : "through the service"}`
|
||||
if (this.hub && this.service) return "not shared: this session is outside what the service shares (remote.roots, trust) — /remote shares it anyway"
|
||||
if (this.hub) return "not shared — /remote shares it"
|
||||
@@ -342,6 +345,8 @@ export class Share {
|
||||
|
||||
/** Hold the link in this terminal, for /remote while no service runs. Returns why not, if not. */
|
||||
private async becomeHub(): Promise<string | undefined> {
|
||||
const local = refusedLocally("/remote")
|
||||
if (local) return local
|
||||
const { instances } = await import("../lembas/login.ts")
|
||||
if (!Object.keys(instances()).length) return "not logged in to a LLeMbas instance — /login first"
|
||||
const hub = new Hub({ service: false, limits: limitsFromConfig() })
|
||||
|
||||
Reference in new issue
Block a user