diff --git a/package.json b/package.json index 2e4ec66..6a97e31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@letta-ai/letta-code", - "version": "0.1.8", + "version": "0.1.9", "description": "Letta Code is a CLI tool for interacting with stateful Letta agents from the terminal.", "type": "module", "bin": { diff --git a/src/index.ts b/src/index.ts index 194f064..df61ecb 100755 --- a/src/index.ts +++ b/src/index.ts @@ -3,6 +3,7 @@ import { parseArgs } from "node:util"; import type { Letta } from "@letta-ai/letta-client"; import { getResumeData, type ResumeData } from "./agent/check-approval"; import { getClient } from "./agent/client"; +import { permissionMode } from "./permissions/mode"; import { loadSettings } from "./settings"; import { loadTools, upsertToolsToServer } from "./tools/manager"; @@ -123,8 +124,6 @@ async function main() { const yoloMode = values.yolo as boolean | undefined; if (yoloMode || permissionModeValue) { - const { permissionMode } = await import("./permissions/mode"); - if (yoloMode) { // --yolo is an alias for --permission-mode bypassPermissions permissionMode.setMode("bypassPermissions"); diff --git a/src/permissions/mode.ts b/src/permissions/mode.ts index 900cd62..e9fe8fd 100644 --- a/src/permissions/mode.ts +++ b/src/permissions/mode.ts @@ -7,12 +7,39 @@ export type PermissionMode = | "plan" | "bypassPermissions"; +// Use globalThis to ensure singleton across bundle +// This prevents Bun's bundler from creating duplicate instances of the mode manager +const MODE_KEY = Symbol.for("@letta/permissionMode"); + +type GlobalWithMode = typeof globalThis & { + [key: symbol]: PermissionMode; +}; + +function getGlobalMode(): PermissionMode { + const global = globalThis as GlobalWithMode; + if (!global[MODE_KEY]) { + global[MODE_KEY] = "default"; + } + return global[MODE_KEY]; +} + +function setGlobalMode(value: PermissionMode): void { + const global = globalThis as GlobalWithMode; + global[MODE_KEY] = value; +} + /** * Permission mode state for the current session. * Set via CLI --permission-mode flag or settings.json defaultMode. */ class PermissionModeManager { - private currentMode: PermissionMode = "default"; + private get currentMode(): PermissionMode { + return getGlobalMode(); + } + + private set currentMode(value: PermissionMode) { + setGlobalMode(value); + } /** * Set the permission mode for this session