@arbidocs/cli 0.3.66 → 0.3.68
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/CHANGELOG.md +20 -0
- package/dist/index.js +153 -10
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/prompts.ts","../src/completion-cache.ts","../src/completion.ts","../src/config.ts","../src/output.ts","../src/commands/config-cmd.ts","../../../node_modules/fake-indexeddb/build/esm/lib/errors.js","../../../node_modules/fake-indexeddb/build/esm/lib/isSharedArrayBuffer.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyWithoutThrowing.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cmp.js","../../../node_modules/fake-indexeddb/build/esm/FDBKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cloneValueForInsertion.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursor.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursorWithValue.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEventTarget.js","../../../node_modules/fake-indexeddb/build/esm/FDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeDOMStringList.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/getKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/lib/isPotentiallyValidKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/enforceRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractGetAllOptions.js","../../../node_modules/fake-indexeddb/build/esm/FDBIndex.js","../../../node_modules/fake-indexeddb/build/esm/lib/canInjectKey.js","../../../node_modules/fake-indexeddb/build/esm/FDBRecord.js","../../../node_modules/fake-indexeddb/build/esm/lib/binarySearchTree.js","../../../node_modules/fake-indexeddb/build/esm/lib/RecordStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/Index.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/FDBObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/scheduling.js","../../../node_modules/fake-indexeddb/build/esm/FDBTransaction.js","../../../node_modules/fake-indexeddb/build/esm/lib/KeyGenerator.js","../../../node_modules/fake-indexeddb/build/esm/lib/ObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/closeConnection.js","../../../node_modules/fake-indexeddb/build/esm/FDBDatabase.js","../../../node_modules/fake-indexeddb/build/esm/FDBOpenDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/FDBVersionChangeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/intersection.js","../../../node_modules/fake-indexeddb/build/esm/lib/Database.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateRequiredArguments.js","../../../node_modules/fake-indexeddb/build/esm/FDBFactory.js","../../../node_modules/fake-indexeddb/build/esm/fakeIndexedDB.js","../../../node_modules/fake-indexeddb/auto/index.mjs","../src/commands/login.ts","../src/version-check.ts","../src/task-store.ts","../src/notifications.ts","../src/helpers.ts","../src/commands/listen.ts","../src/commands/register.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/commands/workspaces.ts","../src/commands/docs.ts","../src/commands/upload-shared.ts","../src/commands/upload-direct.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/ask.ts","../src/commands/cite.ts","../src/commands/find.ts","../src/commands/watch.ts","../src/commands/contacts.ts","../src/commands/dm.ts","../src/commands/tags.ts","../src/commands/doctags.ts","../src/commands/conversations.ts","../src/commands/settings.ts","../src/commands/agentconfig.ts","../src/commands/health.ts","../src/commands/tui.ts","../src/commands/update.ts","../src/commands/quickstart.ts","../src/commands/agent-create.ts","../src/commands/agent.ts","../src/commands/task.ts","../src/commands/completion.ts","../src/commands/local.ts","../src/commands/session.ts","../src/commands/notifications.ts","../src/commands/project.ts","../src/commands/files.ts","../src/commands/usage.ts","../src/commands/auth.ts","../src/index.ts"],"names":["checkbox","confirm","input","password","search","select","path","os","fs","workspaces","program","FileConfigStore","ArbiError","chalk","join","homedir","existsSync","readFileSync","appendFileSync","error","callback","current","confirmActiveTransaction","rolledBack","store","resolve","db","execSync","ensureDir","status","connectWithReconnect","isMessageType","formatWsMessage","getErrorCode","ArbiApiError","getErrorMessage","coreResolveAuth","coreResolveWorkspace","crypto","dmOps","promptSelect","execFileSync","dirname","fileURLToPath","mkdirSync","writeFileSync","ClaudeOrchestrator","OpenClawOrchestrator","startDmListener","performSigningKeyLogin","performSsoDeviceFlowLogin","performPasswordLogin","formatWorkspaceChoices","createArbiClient","projectOps","generateNewWorkspaceKey","workspaceOps","selectedId","projects","label","isInteractive","generateEncryptedWorkspaceKey","documents","wsLabel","documentsNode","getRawWorkspaceKey","result","connectWebSocket","DOC_TERMINAL_STATUSES","countSupportedFiles","done","responses","assistant","stripCitationMarkdown","streamSSE","formatAgentStepLabel","countCitations","formatStreamSummary","createHash","resolveCitations","truncate","colorize","contactOps","formatUserName","ref","agentOps","data","tagOps","doctagOps","convOps","settingsOps","acOps","healthOps","require","createRequire","spawn","CENTRAL_API_URL","getVerificationCode","timestamp","initSodium","generateLoginCredentials","bytesToBase64","agent","statusColor","getShellRcPath","formatSize","statSync","readdirSync","globSync","basename","sessionOps","filesOps","res","Command"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Interactive prompt helpers using @inquirer/prompts.\n *\n * These are only used in interactive (TTY) flows.\n * AI agents and CI should bypass prompts by passing all values via flags/env vars.\n */\n\nimport { select, input, password, confirm, checkbox, search } from '@inquirer/prompts'\n\nexport { select, input, password, confirm, checkbox, search }\n\n/**\n * Prompt user to pick from a list of items.\n * Returns the value of the selected choice.\n */\nexport async function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return select({ message, choices })\n}\n\n/**\n * Prompt user to pick multiple items from a list.\n * Returns array of selected values.\n */\nexport async function promptCheckbox<T>(\n message: string,\n choices: Array<{ name: string; value: T; checked?: boolean }>\n): Promise<T[]> {\n return checkbox({ message, choices })\n}\n\n/**\n * Prompt user to search and pick from a large list.\n * Type-ahead fuzzy filtering — best for docs (could be hundreds).\n */\nexport async function promptSearch<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return search({\n message,\n source: async (term) => {\n if (!term) return choices\n const lower = term.toLowerCase()\n return choices.filter((c) => c.name.toLowerCase().includes(lower))\n },\n })\n}\n\n/**\n * Prompt for text input. Returns trimmed string.\n */\nexport async function promptInput(message: string, required = true): Promise<string> {\n return input({\n message,\n validate: required ? (v) => (v.trim() ? true : 'Required') : undefined,\n })\n}\n\n/**\n * Prompt for a password (masked input).\n */\nexport async function promptPassword(message: string): Promise<string> {\n return password({\n message,\n mask: '*',\n validate: (v) => (v ? true : 'Required'),\n })\n}\n\n/**\n * Prompt for yes/no confirmation.\n */\nexport async function promptConfirm(message: string, defaultValue = true): Promise<boolean> {\n return confirm({ message, default: defaultValue })\n}\n","/**\n * Completion cache — stores workspace IDs/names in ~/.arbi/completions.json.\n *\n * Populated as a side-effect of commands that list workspaces (login, register, workspaces).\n * Read synchronously during TAB completion for instant response.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport interface CachedWorkspace {\n id: string\n name: string\n}\n\ninterface CompletionCache {\n workspaces: CachedWorkspace[]\n updatedAt: string\n}\n\nfunction getCacheFile(): string {\n const configDir = process.env.ARBI_CONFIG_DIR ?? path.join(os.homedir(), '.arbi')\n return path.join(configDir, 'completions.json')\n}\n\nfunction ensureDir(filePath: string): void {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n}\n\n/** Read cached workspace IDs (sync for TAB completion speed). */\nexport function getCachedWorkspaceIds(): string[] {\n try {\n const content = fs.readFileSync(getCacheFile(), 'utf-8')\n const cache = JSON.parse(content) as CompletionCache\n return cache.workspaces.map((w) => w.id)\n } catch {\n return []\n }\n}\n\n/**\n * Look up a workspace's name in the completion cache by ID. Used by\n * `arbi status` to render `Workspace: <Name> (wrk-…)` without an API\n * round-trip — `status` is offline by contract.\n */\nexport function getCachedWorkspaceName(id: string): string | null {\n try {\n const content = fs.readFileSync(getCacheFile(), 'utf-8')\n const cache = JSON.parse(content) as CompletionCache\n const hit = cache.workspaces.find((w) => w.id === id)\n return hit?.name?.trim() ? hit.name : null\n } catch {\n return null\n }\n}\n\n/** Update the completion cache with workspace data. */\nexport function updateCompletionCache(\n workspaces: Array<{ external_id?: string; name?: string }>\n): void {\n const cache: CompletionCache = {\n workspaces: workspaces\n .filter((w) => w.external_id)\n .map((w) => ({ id: w.external_id!, name: w.name ?? '' })),\n updatedAt: new Date().toISOString(),\n }\n const filePath = getCacheFile()\n ensureDir(filePath)\n fs.writeFileSync(filePath, JSON.stringify(cache, null, 2) + '\\n', { mode: 0o600 })\n}\n","/**\n * Shell completion engine — walks the Commander program tree dynamically.\n *\n * Called via `arbi --get-completions \"<line>\"`. Derives all candidates from\n * the live Commander registrations, so new commands/options are automatically\n * available without maintaining a static registry.\n */\n\nimport type { Command, Option } from 'commander'\nimport { getCachedWorkspaceIds } from './completion-cache.js'\n\n/** Options that take a workspace ID as their value. */\nconst WORKSPACE_ID_OPTIONS = new Set(['-w', '--workspace'])\n\n/** Collect option flags (short + long) from a Command. */\nfunction getOptionFlags(cmd: Command): string[] {\n const flags: string[] = []\n for (const opt of cmd.options as Option[]) {\n if (opt.short) flags.push(opt.short)\n if (opt.long) flags.push(opt.long)\n }\n return flags\n}\n\n/** Find the Option object that matches a given flag. */\nfunction findOption(cmd: Command, flag: string): Option | undefined {\n return (cmd.options as Option[]).find((o) => o.short === flag || o.long === flag)\n}\n\n/**\n * Return completion candidates for the given input line.\n * Walks the Commander command tree — no static registries needed.\n */\nexport function getCompletions(program: Command, line: string): string[] {\n const parts = line.trim().split(/\\s+/)\n\n // Remove the program name (e.g. \"arbi\" or \"/usr/local/bin/arbi\")\n if (parts.length > 0) {\n const first = parts[0]\n if (first === program.name() || first.endsWith('/' + program.name())) {\n parts.shift()\n }\n }\n\n const endsWithSpace = line.endsWith(' ')\n\n // Walk the command tree to find the deepest matching command\n let current: Command = program\n let consumed = 0\n\n for (let i = 0; i < parts.length; i++) {\n const word = parts[i]\n const sub = current.commands.find(\n (c: Command) => c.name() === word || c.aliases().includes(word)\n )\n if (sub) {\n current = sub\n consumed = i + 1\n } else {\n break\n }\n }\n\n const remaining = parts.slice(consumed)\n const lastWord = remaining.length > 0 ? remaining[remaining.length - 1] : ''\n\n // Check if the previous completed word is a workspace ID option\n const prevWord = endsWithSpace ? remaining[remaining.length - 1] : remaining[remaining.length - 2]\n if (prevWord && WORKSPACE_ID_OPTIONS.has(prevWord)) {\n return getCachedWorkspaceIds()\n }\n\n // Gather candidates: subcommands + option flags\n const subcommands = current.commands.map((c: Command) => c.name())\n const options = getOptionFlags(current)\n const allCandidates = [...subcommands, ...options]\n\n // Nothing typed yet after current command, or cursor is after a space\n if (remaining.length === 0 || (endsWithSpace && remaining.length >= 0)) {\n if (endsWithSpace) {\n // Filter out already-used options (and their short/long pairs)\n const used = new Set<string>()\n for (const part of remaining) {\n if (part.startsWith('-')) {\n used.add(part)\n const opt = findOption(current, part)\n if (opt) {\n if (opt.short) used.add(opt.short)\n if (opt.long) used.add(opt.long)\n }\n }\n }\n return allCandidates.filter((c) => !used.has(c))\n }\n return allCandidates\n }\n\n // Partial word being typed — filter candidates by prefix\n return allCandidates.filter((c) => c.startsWith(lastWord))\n}\n","/**\n * CLI configuration persistence — thin wrapper around @arbidocs/sdk FileConfigStore.\n *\n * Provides module-level functions that delegate to the shared store instance.\n * The `require*` methods catch ArbiError and call process.exit(1) for CLI behavior.\n */\n\nimport chalk from 'chalk'\nimport { FileConfigStore, ArbiError } from '@arbidocs/sdk'\nimport type { CliConfig, CliCredentials, ChatSession } from '@arbidocs/sdk'\n\nexport type { CliConfig, CliCredentials, ChatSession }\n\n/** Shared store instance used by all CLI commands */\nexport const store = new FileConfigStore()\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\nexport function getConfig(): CliConfig | null {\n return store.getConfig()\n}\n\nexport function saveConfig(config: CliConfig): void {\n store.saveConfig(config)\n}\n\nexport function updateConfig(updates: Partial<CliConfig>): void {\n store.updateConfig(updates)\n}\n\nexport function requireConfig(): CliConfig {\n try {\n return store.requireConfig()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n/**\n * Resolve config with auto-detection fallbacks.\n * Tries: config file → ARBI_SERVER_URL env → .env → public/config.json → https://localhost.\n * Prints a dim hint when auto-detecting so the user knows where config came from.\n */\nexport function resolveConfig(): CliConfig {\n const { config, source } = store.resolveConfigWithFallbacks()\n if (source !== 'config') {\n // Use stderr to avoid polluting piped output\n console.error(chalk.dim(`Using server URL from ${source}: ${config.baseUrl}`))\n }\n return config\n}\n\n// ── Credentials ──────────────────────────────────────────────────────────────\n\nexport function getCredentials(): CliCredentials | null {\n return store.getCredentials()\n}\n\nexport function saveCredentials(creds: CliCredentials): void {\n store.saveCredentials(creds)\n}\n\nexport function deleteCredentials(): void {\n store.deleteCredentials()\n}\n\nexport function requireCredentials(): CliCredentials {\n try {\n return store.requireCredentials()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Last metadata (citation browsing) ────────────────────────────────────────\n\nexport function saveLastMetadata(metadata: unknown): void {\n store.saveLastMetadata?.(metadata)\n}\n\nexport function loadLastMetadata(): unknown | null {\n return store.loadLastMetadata?.() ?? null\n}\n\n// ── Chat session ─────────────────────────────────────────────────────────────\n\nexport function getChatSession(): ChatSession {\n return store.getChatSession()\n}\n\nexport function saveChatSession(session: ChatSession): void {\n store.saveChatSession(session)\n}\n\nexport function updateChatSession(updates: Partial<ChatSession>): void {\n store.updateChatSession(updates)\n}\n\nexport function clearChatSession(): void {\n store.clearChatSession()\n}\n","/**\n * Colored CLI output helpers — wraps chalk for consistent styling.\n *\n * Success = green, errors = red, warnings = yellow,\n * labels = bold, tips = dim.\n */\n\nimport chalk from 'chalk'\n\n/** Green success message. */\nexport function success(msg: string): void {\n console.log(chalk.green(msg))\n}\n\n/** Red error message to stderr. */\nexport function error(msg: string): void {\n console.error(chalk.red(msg))\n}\n\n/** Yellow warning to stderr. */\nexport function warn(msg: string): void {\n console.error(chalk.yellow(msg))\n}\n\n/** Bold key + normal value on one line. */\nexport function label(key: string, value: string): void {\n console.log(`${chalk.bold(key)} ${value}`)\n}\n\n/** Dim secondary text (tips, hints). */\nexport function dim(msg: string): void {\n console.log(chalk.dim(msg))\n}\n\n/** Bold text. */\nexport function bold(msg: string): void {\n console.log(chalk.bold(msg))\n}\n\n/** Colorize a status word inline: green=healthy/completed/online, red=failed/error, yellow=processing. */\nexport function status(s: string): string {\n const lower = s.toLowerCase()\n if (['healthy', 'completed', 'available', 'online', 'on'].includes(lower)) return chalk.green(s)\n if (['failed', 'error', 'unavailable', 'offline'].includes(lower)) return chalk.red(s)\n if (['processing', 'pending', 'degraded', 'warning'].includes(lower)) return chalk.yellow(s)\n return s\n}\n\n/** Cyan for IDs, URLs, and other reference values. */\nexport function ref(s: string): string {\n return chalk.cyan(s)\n}\n\nexport { chalk }\n","/**\n * arbi config set-url <url>\n * arbi config show\n * arbi config alias\n */\n\nimport { existsSync, readFileSync, appendFileSync } from 'fs'\nimport { homedir } from 'os'\nimport { join } from 'path'\nimport { Command } from 'commander'\nimport { getConfig, updateConfig } from '../config.js'\nimport { success, error, label, dim } from '../output.js'\n\nconst ALIAS_LINE = 'alias A=\"arbi ask\"'\nconst ALIAS_MARKER = '# arbi-cli alias'\n\nfunction getShellRcPath(): string {\n const shell = process.env.SHELL || ''\n if (shell.includes('zsh')) return join(homedir(), '.zshrc')\n return join(homedir(), '.bashrc')\n}\n\nfunction isAliasInstalled(rcPath: string): boolean {\n if (!existsSync(rcPath)) return false\n const content = readFileSync(rcPath, 'utf-8')\n return content.includes(ALIAS_LINE) || content.includes(ALIAS_MARKER)\n}\n\nexport function registerConfigCommand(program: Command): void {\n const config = program\n .command('config')\n .description('CLI configuration: set-url, show, notifications, verbose, watch, alias')\n\n config\n .command('set-url <url>')\n .description('Set the ARBI server URL')\n .action((url: string) => {\n try {\n const parsed = new URL(url)\n const deploymentDomain = parsed.hostname\n updateConfig({ baseUrl: url.replace(/\\/+$/, ''), deploymentDomain })\n label('Server URL:', url)\n label('Domain:', deploymentDomain)\n } catch {\n error(`Invalid URL: ${url}`)\n process.exit(1)\n }\n })\n\n config\n .command('show')\n .description('Show current configuration')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) => {\n const cfg = getConfig()\n if (opts.json) {\n // Project the same fields the plain view shows, so an agent piping\n // `arbi config show --json` doesn't have to learn a second schema.\n // Previously plain showed Verbose/Watch but JSON omitted them, and\n // JSON exposed `orchestrator` that plain never mentioned. Now both\n // surfaces agree.\n const projection = cfg\n ? {\n baseUrl: cfg.baseUrl ?? null,\n deploymentDomain: cfg.deploymentDomain ?? null,\n autoUpdate: cfg.autoUpdate ?? false,\n verbose: cfg.verbose !== false,\n watch: cfg.watch !== false,\n notifications: cfg.notifications !== false,\n orchestrator: cfg.orchestrator ?? null,\n selectedWorkspaceId: cfg.selectedWorkspaceId ?? null,\n }\n : {}\n console.log(JSON.stringify(projection, null, 2))\n return\n }\n if (!cfg) {\n dim('Not configured. Run: arbi config set-url <url>')\n return\n }\n label('Server URL:', cfg.baseUrl)\n label('Domain:', cfg.deploymentDomain)\n label('Auto-update:', cfg.autoUpdate ? 'on' : 'off')\n label('Verbose:', cfg.verbose !== false ? 'on' : 'off')\n label('Watch:', cfg.watch !== false ? 'on' : 'off')\n label('Notifications:', cfg.notifications !== false ? 'on' : 'off')\n // Surface orchestrator in plain output too — it's the only setting that\n // was hidden from humans but visible to scripts.\n if (cfg.orchestrator) label('Orchestrator:', cfg.orchestrator)\n if (cfg.selectedWorkspaceId) {\n label('Workspace:', cfg.selectedWorkspaceId)\n }\n })\n\n config\n .command('notifications [on|off]')\n .description('Toggle background WebSocket notifications')\n .action((toggle?: string) => {\n const cfg = getConfig()\n if (!toggle) {\n label('Notifications:', cfg?.notifications !== false ? 'on' : 'off')\n return\n }\n if (toggle !== 'on' && toggle !== 'off') {\n error('Usage: arbi config notifications [on|off]')\n process.exit(1)\n }\n updateConfig({ notifications: toggle === 'on' })\n success(`Notifications: ${toggle}`)\n })\n\n config\n .command('verbose [on|off]')\n .description('Toggle verbose agent steps in ask (default: on)')\n .action((toggle?: string) => {\n const cfg = getConfig()\n if (!toggle) {\n label('Verbose:', cfg?.verbose !== false ? 'on' : 'off')\n return\n }\n if (toggle !== 'on' && toggle !== 'off') {\n error('Usage: arbi config verbose [on|off]')\n process.exit(1)\n }\n updateConfig({ verbose: toggle === 'on' })\n success(`Verbose: ${toggle}`)\n })\n\n config\n .command('watch [on|off]')\n .description('Toggle upload watch (default: on)')\n .action((toggle?: string) => {\n const cfg = getConfig()\n if (!toggle) {\n label('Watch:', cfg?.watch !== false ? 'on' : 'off')\n return\n }\n if (toggle !== 'on' && toggle !== 'off') {\n error('Usage: arbi config watch [on|off]')\n process.exit(1)\n }\n updateConfig({ watch: toggle === 'on' })\n success(`Watch: ${toggle}`)\n })\n\n config\n .command('alias')\n .description('Append `alias A=\"arbi ask\"` to your shell rc file (idempotent, reversible)')\n .action(() => {\n const rcPath = getShellRcPath()\n\n if (isAliasInstalled(rcPath)) {\n success(`Alias already set up in ${rcPath}`)\n dim('Usage: A what is the meaning of life')\n return\n }\n\n appendFileSync(rcPath, `\\n${ALIAS_MARKER}\\n${ALIAS_LINE}\\n`)\n success(`Added alias A=\"arbi ask\" to ${rcPath}`)\n dim('')\n dim(`Run: source ${rcPath}`)\n dim('Then: A what is the meaning of life')\n })\n}\n","const messages = {\n AbortError: \"A request was aborted, for example through a call to IDBTransaction.abort.\",\n ConstraintError: \"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.\",\n DataCloneError: \"The data being stored could not be cloned by the internal structured cloning algorithm.\",\n DataError: \"Data provided to an operation does not meet requirements.\",\n InvalidAccessError: \"An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.\",\n InvalidStateError: \"An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.\",\n NotFoundError: \"The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.\",\n ReadOnlyError: 'The mutating operation was attempted in a \"readonly\" transaction.',\n TransactionInactiveError: \"A request was placed against a transaction which is currently not active, or which is finished.\",\n SyntaxError: \"The keypath argument contains an invalid key path\",\n VersionError: \"An attempt was made to open a database using a lower version than the existing version.\"\n};\n\n// Cannot set an error code on an error using the normal setter;\n// this leads to \"Cannot set property code of which has only a getter\"\nconst setErrorCode = (error, value) => {\n Object.defineProperty(error, 'code', {\n value,\n writable: false,\n enumerable: true,\n configurable: false\n });\n};\nexport class AbortError extends DOMException {\n constructor(message = messages.AbortError) {\n super(message, \"AbortError\");\n }\n}\nexport class ConstraintError extends DOMException {\n constructor(message = messages.ConstraintError) {\n super(message, \"ConstraintError\");\n }\n}\nexport class DataCloneError extends DOMException {\n constructor(message = messages.DataCloneError) {\n super(message, \"DataCloneError\");\n }\n}\nexport class DataError extends DOMException {\n constructor(message = messages.DataError) {\n super(message, \"DataError\");\n setErrorCode(this, 0);\n }\n}\nexport class InvalidAccessError extends DOMException {\n constructor(message = messages.InvalidAccessError) {\n super(message, \"InvalidAccessError\");\n }\n}\nexport class InvalidStateError extends DOMException {\n constructor(message = messages.InvalidStateError) {\n super(message, \"InvalidStateError\");\n setErrorCode(this, 11);\n }\n}\nexport class NotFoundError extends DOMException {\n constructor(message = messages.NotFoundError) {\n super(message, \"NotFoundError\");\n }\n}\nexport class ReadOnlyError extends DOMException {\n constructor(message = messages.ReadOnlyError) {\n super(message, \"ReadOnlyError\");\n }\n}\nexport class SyntaxError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"SyntaxError\");\n setErrorCode(this, 12);\n }\n}\nexport class TransactionInactiveError extends DOMException {\n constructor(message = messages.TransactionInactiveError) {\n super(message, \"TransactionInactiveError\");\n setErrorCode(this, 0);\n }\n}\nexport class VersionError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"VersionError\");\n }\n}","export default function isSharedArrayBuffer(input) {\n return typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer;\n}","import isSharedArrayBuffer from \"./isSharedArrayBuffer.js\";\nexport const INVALID_TYPE = Symbol(\"INVALID_TYPE\");\nexport const INVALID_VALUE = Symbol(\"INVALID_VALUE\");\n\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// The \"without exceptions\" version is because we typically want to throw exceptions (DataError) but not for\n// the \"is potentially valid key range\" routine.\nconst valueToKeyWithoutThrowing = (input, seen) => {\n if (typeof input === \"number\") {\n if (isNaN(input)) {\n // If input is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return input;\n } else if (Object.prototype.toString.call(input) === \"[object Date]\") {\n const ms = input.valueOf();\n if (isNaN(ms)) {\n // If ms is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return new Date(ms);\n } else if (typeof input === \"string\") {\n return input;\n } else if (\n // https://w3c.github.io/IndexedDB/#ref-for-dfn-buffer-source-type\n input instanceof ArrayBuffer || isSharedArrayBuffer(input) || typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {\n // We can't consistently test detachedness, so instead we check if byteLength === 0\n // This isn't foolproof, but there's no perfect way to detect if Uint8Arrays or\n // SharedArrayBuffers are detached\n if (\"detached\" in input ? input.detached : input.byteLength === 0) {\n // If input is detached then return \"invalid value\".\n return INVALID_VALUE;\n }\n let arrayBuffer;\n let offset = 0;\n let length = 0;\n if (input instanceof ArrayBuffer || isSharedArrayBuffer(input)) {\n arrayBuffer = input;\n length = input.byteLength;\n } else {\n arrayBuffer = input.buffer;\n offset = input.byteOffset;\n length = input.byteLength;\n }\n return arrayBuffer.slice(offset, offset + length);\n } else if (Array.isArray(input)) {\n if (seen === undefined) {\n seen = new Set();\n } else if (seen.has(input)) {\n // If seen contains input, then return \"invalid value\".\n return INVALID_VALUE;\n }\n seen.add(input);\n\n // This algorithm is tricky to account for `bindings-inject-keys-bypass.any.js`. We _should_ return early when\n // encountering an invalid key/type, but we also need to avoid triggering `Object.prototype['10']` if it's been\n // overridden. One simple way to do this (and which doesn't rely on sparse arrays or other exotic solutions that\n // could cause de-opts) is to use `Array.from()` with a mapper function, which does not trigger the prototype\n // setter [1]. It does prevent an early return, but we can at least short-circuit inside the mapper function\n // (which isn't strictly necessary to pass the WPTs, but is closer to the spec).\n // [1]: See https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from, specifically\n // the chain CreateDataPropertyOrThrow -> CreateDataProperty -> DefineOwnProperty which defines\n // the array element as an \"own\" property.\n let hasInvalid = false;\n const keys = Array.from({\n length: input.length\n }, (_, i) => {\n if (hasInvalid) {\n return;\n }\n const hop = Object.hasOwn(input, i);\n if (!hop) {\n // If hop is false, return \"invalid value\".\n hasInvalid = true;\n return;\n }\n const entry = input[i];\n const key = valueToKeyWithoutThrowing(entry, seen);\n // If key is \"invalid value\" or \"invalid type\" abort these steps and return \"invalid value\".\n if (key === INVALID_VALUE || key === INVALID_TYPE) {\n hasInvalid = true;\n return;\n }\n return key;\n });\n if (hasInvalid) {\n return INVALID_VALUE;\n }\n return keys;\n } else {\n // Otherwise: Return \"invalid type\".\n return INVALID_TYPE;\n }\n};\nexport default valueToKeyWithoutThrowing;","import { DataError } from \"./errors.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE, INVALID_VALUE } from \"./valueToKeyWithoutThrowing.js\";\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// Plus throwing a DataError for invalid value/invalid key, which is commonly done\n// in lots of IndexedDB operations\nconst valueToKey = (input, seen) => {\n const result = valueToKeyWithoutThrowing(input, seen);\n if (result === INVALID_VALUE || result === INVALID_TYPE) {\n // If key is \"invalid value\" or \"invalid type\", throw a \"DataError\" DOMException\n throw new DataError();\n }\n return result;\n};\nexport default valueToKey;","import { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\nconst getType = x => {\n if (typeof x === \"number\") {\n return \"Number\";\n }\n if (Object.prototype.toString.call(x) === \"[object Date]\") {\n return \"Date\";\n }\n if (Array.isArray(x)) {\n return \"Array\";\n }\n if (typeof x === \"string\") {\n return \"String\";\n }\n if (x instanceof ArrayBuffer) {\n return \"Binary\";\n }\n throw new DataError();\n};\n\n// https://w3c.github.io/IndexedDB/#compare-two-keys\nconst cmp = (first, second) => {\n if (second === undefined) {\n throw new TypeError();\n }\n first = valueToKey(first);\n second = valueToKey(second);\n const t1 = getType(first);\n const t2 = getType(second);\n if (t1 !== t2) {\n if (t1 === \"Array\") {\n return 1;\n }\n if (t1 === \"Binary\" && (t2 === \"String\" || t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"String\" && (t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"Date\" && t2 === \"Number\") {\n return 1;\n }\n return -1;\n }\n if (t1 === \"Binary\") {\n first = new Uint8Array(first);\n second = new Uint8Array(second);\n }\n if (t1 === \"Array\" || t1 === \"Binary\") {\n const length = Math.min(first.length, second.length);\n for (let i = 0; i < length; i++) {\n const result = cmp(first[i], second[i]);\n if (result !== 0) {\n return result;\n }\n }\n if (first.length > second.length) {\n return 1;\n }\n if (first.length < second.length) {\n return -1;\n }\n return 0;\n }\n if (t1 === \"Date\") {\n if (first.getTime() === second.getTime()) {\n return 0;\n }\n } else {\n if (first === second) {\n return 0;\n }\n }\n return first > second ? 1 : -1;\n};\nexport default cmp;","import cmp from \"./lib/cmp.js\";\nimport { DataError } from \"./lib/errors.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept\nclass FDBKeyRange {\n static only(value) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n value = valueToKey(value);\n return new FDBKeyRange(value, value, false, false);\n }\n static lowerBound(lower, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n lower = valueToKey(lower);\n return new FDBKeyRange(lower, undefined, open, true);\n }\n static upperBound(upper, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n upper = valueToKey(upper);\n return new FDBKeyRange(undefined, upper, true, open);\n }\n static bound(lower, upper, lowerOpen = false, upperOpen = false) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const cmpResult = cmp(lower, upper);\n if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {\n throw new DataError();\n }\n lower = valueToKey(lower);\n upper = valueToKey(upper);\n return new FDBKeyRange(lower, upper, lowerOpen, upperOpen);\n }\n constructor(lower, upper, lowerOpen, upperOpen) {\n this.lower = lower;\n this.upper = upper;\n this.lowerOpen = lowerOpen;\n this.upperOpen = upperOpen;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes\n includes(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n key = valueToKey(key);\n if (this.lower !== undefined) {\n const cmpResult = cmp(this.lower, key);\n if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {\n return false;\n }\n }\n if (this.upper !== undefined) {\n const cmpResult = cmp(this.upper, key);\n if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {\n return false;\n }\n }\n return true;\n }\n get [Symbol.toStringTag]() {\n return \"IDBKeyRange\";\n }\n}\nexport default FDBKeyRange;","import valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path\nconst extractKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n const result = [];\n for (let item of keyPath) {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in validateKeyPath)\n if (item !== undefined && item !== null && typeof item !== \"string\" && item.toString) {\n item = item.toString();\n }\n const key = extractKey(item, value).key;\n result.push(valueToKey(key));\n }\n return {\n type: \"found\",\n key: result\n };\n }\n if (keyPath === \"\") {\n return {\n type: \"found\",\n key: value\n };\n }\n let remainingKeyPath = keyPath;\n let object = value;\n while (remainingKeyPath !== null) {\n let identifier;\n const i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n } else {\n identifier = remainingKeyPath;\n remainingKeyPath = null;\n }\n\n // special cases: https://w3c.github.io/IndexedDB/#evaluate-a-key-path-on-a-value\n const isSpecialIdentifier = identifier === \"length\" && (typeof object === \"string\" || Array.isArray(object)) || (identifier === \"size\" || identifier === \"type\") && typeof Blob !== \"undefined\" && object instanceof Blob || (identifier === \"name\" || identifier === \"lastModified\") && typeof File !== \"undefined\" && object instanceof File;\n if (!isSpecialIdentifier && (typeof object !== \"object\" || object === null || !Object.hasOwn(object, identifier))) {\n return {\n type: \"notFound\"\n };\n }\n object = object[identifier];\n }\n return {\n type: \"found\",\n key: object\n };\n};\nexport default extractKey;","// https://w3c.github.io/IndexedDB/#clone-value\n// Note that we only need to call this during insertions because the spec does not expect any cloning during retrieval,\n// only `StructuredDeserialize()` (e.g. see [1]). This is also only required for values, not keys, since keys do not\n// require cloning during insertion (e.g. see [2]).\n// [1]: https://w3c.github.io/IndexedDB/#retrieve-multiple-items-from-an-object-store\n// [2]: https://w3c.github.io/IndexedDB/#add-or-put\nexport function cloneValueForInsertion(value, transaction) {\n // Assert: transaction’s state is active.\n if (transaction._state !== \"active\") {\n throw new Error(\"Assert: transaction state is active\");\n }\n\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n try {\n // Let serialized be StructuredSerializeForStorage(value).\n // Let clone be ? StructuredDeserialize(serialized, targetRealm).\n // Return clone.\n return structuredClone(value);\n } finally {\n // Set transaction’s state to active.\n transaction._state = \"active\";\n }\n}","import FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBObjectStore from \"./FDBObjectStore.js\";\nimport cmp from \"./lib/cmp.js\";\nimport { DataError, InvalidAccessError, InvalidStateError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst getEffectiveObjectStore = cursor => {\n if (cursor.source instanceof FDBObjectStore) {\n return cursor.source;\n }\n return cursor.source.objectStore;\n};\n\n// This takes a key range, a list of lower bounds, and a list of upper bounds and combines them all into a single key\n// range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev\n// cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99%\n// of the way there.\nconst makeKeyRange = (range, lowers, uppers) => {\n // Start with bounds from range\n let lower = range !== undefined ? range.lower : undefined;\n let upper = range !== undefined ? range.upper : undefined;\n\n // Augment with values from lowers and uppers\n for (const lowerTemp of lowers) {\n if (lowerTemp === undefined) {\n continue;\n }\n if (lower === undefined || cmp(lower, lowerTemp) === 1) {\n lower = lowerTemp;\n }\n }\n for (const upperTemp of uppers) {\n if (upperTemp === undefined) {\n continue;\n }\n if (upper === undefined || cmp(upper, upperTemp) === -1) {\n upper = upperTemp;\n }\n }\n if (lower !== undefined && upper !== undefined) {\n return FDBKeyRange.bound(lower, upper);\n }\n if (lower !== undefined) {\n return FDBKeyRange.lowerBound(lower);\n }\n if (upper !== undefined) {\n return FDBKeyRange.upperBound(upper);\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor\nclass FDBCursor {\n _gotValue = false;\n _position = undefined; // Key of previously returned record\n _objectStorePosition = undefined;\n _keyOnly = false;\n _key = undefined;\n _primaryKey = undefined;\n constructor(source, range, direction = \"next\", request, keyOnly = false) {\n this._range = range;\n this._source = source;\n this._direction = direction;\n this._request = request;\n this._keyOnly = keyOnly;\n }\n\n // Read only properties\n get source() {\n return this._source;\n }\n set source(val) {\n /* For babel */\n }\n get request() {\n return this._request;\n }\n set request(val) {\n /* For babel */\n }\n get direction() {\n return this._direction;\n }\n set direction(val) {\n /* For babel */\n }\n get key() {\n return this._key;\n }\n set key(val) {\n /* For babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(val) {\n /* For babel */\n }\n\n // https://w3c.github.io/IndexedDB/#iterate-a-cursor\n _iterate(key, primaryKey) {\n const sourceIsObjectStore = this.source instanceof FDBObjectStore;\n\n // Can't use sourceIsObjectStore because TypeScript\n const records = this.source instanceof FDBObjectStore ? this.source._rawObjectStore.records : this.source._rawIndex.records;\n let foundRecord;\n if (this.direction === \"next\") {\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== 1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === -1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"nextunique\") {\n // This could be done without iterating, if the range was defined slightly better (to handle gt/gte cases).\n // But the performance difference should be small, and that wouldn't work anyway for directions where the\n // value needs to be used (like next and prev).\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n if (key !== undefined) {\n if (cmp(record.key, key) === -1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prev\") {\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== -1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === 1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prevunique\") {\n let tempRecord;\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n if (key !== undefined) {\n if (cmp(record.key, key) === 1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n tempRecord = record;\n break;\n }\n if (tempRecord) {\n foundRecord = records.get(tempRecord.key);\n }\n }\n let result;\n if (!foundRecord) {\n this._key = undefined;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = undefined;\n }\n\n // \"this instanceof FDBCursorWithValue\" would be better and not require (this as any), but causes runtime\n // error due to circular dependency.\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = undefined;\n }\n result = null;\n } else {\n this._position = foundRecord.key;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = foundRecord.value;\n }\n this._key = foundRecord.key;\n if (sourceIsObjectStore) {\n this._primaryKey = structuredClone(foundRecord.key);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = structuredClone(foundRecord.value);\n }\n } else {\n this._primaryKey = structuredClone(foundRecord.value);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n if (this.source instanceof FDBObjectStore) {\n // Can't use sourceIsObjectStore because TypeScript\n throw new Error(\"This should never happen\");\n }\n const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value);\n this.value = structuredClone(value);\n }\n }\n this._gotValue = true;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n result = this;\n }\n return result;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value\n update(value) {\n if (value === undefined) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n const clone = cloneValueForInsertion(value, transaction);\n if (effectiveObjectStore.keyPath !== null) {\n let tempKey;\n try {\n tempKey = extractKey(effectiveObjectStore.keyPath, clone).key;\n } catch (err) {\n /* Handled immediately below */\n }\n if (cmp(tempKey, effectiveKey) !== 0) {\n throw new DataError();\n }\n }\n const record = {\n key: effectiveKey,\n value: clone\n };\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count\n advance(count) {\n if (!Number.isInteger(count) || count <= 0) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: () => {\n let result;\n for (let i = 0; i < count; i++) {\n result = this._iterate();\n\n // Not sure why this is needed\n if (!result) {\n break;\n }\n }\n return result;\n },\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key\n continue(key) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult <= 0 && (this.direction === \"next\" || this.direction === \"nextunique\") || cmpResult >= 0 && (this.direction === \"prev\" || this.direction === \"prevunique\")) {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey\n continuePrimaryKey(key, primaryKey) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (this.source instanceof FDBObjectStore || this.direction !== \"next\" && this.direction !== \"prev\") {\n throw new InvalidAccessError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n\n // Not sure about this\n if (key === undefined || primaryKey === undefined) {\n throw new DataError();\n }\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult === -1 && this.direction === \"next\" || cmpResult === 1 && this.direction === \"prev\") {\n throw new DataError();\n }\n const cmpResult2 = cmp(primaryKey, this._objectStorePosition);\n if (cmpResult === 0) {\n if (cmpResult2 <= 0 && this.direction === \"next\" || cmpResult2 >= 0 && this.direction === \"prev\") {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key, primaryKey),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n delete() {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursor\";\n }\n}\nexport default FDBCursor;","import FDBCursor from \"./FDBCursor.js\";\nclass FDBCursorWithValue extends FDBCursor {\n value = undefined;\n constructor(source, range, direction, request) {\n super(source, range, direction, request);\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursorWithValue\";\n }\n}\nexport default FDBCursorWithValue;","import { InvalidStateError } from \"./errors.js\";\nconst stopped = (event, listener) => {\n return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;\n};\n\n// http://www.w3.org/TR/dom/#concept-event-listener-invoke\nconst invokeEventListeners = (event, obj) => {\n event.currentTarget = obj;\n const errors = [];\n const invoke = callbackOrObject => {\n try {\n const callback = typeof callbackOrObject === \"function\" ? callbackOrObject : callbackOrObject.handleEvent;\n // @ts-expect-error EventCallback's types are not quite right here\n callback.call(event.currentTarget, event);\n } catch (err) {\n errors.push(err);\n }\n };\n\n // The callback might cause obj.listeners to mutate as we traverse it.\n // Take a copy of the array so that nothing sneaks in and we don't lose\n // our place.\n for (const listener of obj.listeners.slice()) {\n if (event.type !== listener.type || stopped(event, listener)) {\n continue;\n }\n invoke(listener.callback);\n }\n const typeToProp = {\n abort: \"onabort\",\n blocked: \"onblocked\",\n close: \"onclose\",\n complete: \"oncomplete\",\n error: \"onerror\",\n success: \"onsuccess\",\n upgradeneeded: \"onupgradeneeded\",\n versionchange: \"onversionchange\"\n };\n const prop = typeToProp[event.type];\n if (prop === undefined) {\n throw new Error(`Unknown event type: \"${event.type}\"`);\n }\n const callback = event.currentTarget[prop];\n if (callback) {\n const listener = {\n callback,\n capture: false,\n type: event.type\n };\n if (!stopped(event, listener)) {\n invoke(listener.callback);\n }\n }\n\n // we want to execute all listeners before deciding if we want to throw, because there could be an error thrown by\n // the first listener, but the second should still be invoked\n if (errors.length) {\n throw new AggregateError(errors);\n }\n};\nclass FakeEventTarget {\n listeners = [];\n\n // These will be overridden in individual subclasses and made not readonly\n\n addEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n this.listeners.push({\n callback,\n capture,\n type\n });\n }\n removeEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n const i = this.listeners.findIndex(listener => {\n return listener.type === type && listener.callback === callback && listener.capture === capture;\n });\n this.listeners.splice(i, 1);\n }\n\n // http://www.w3.org/TR/dom/#dispatching-events\n dispatchEvent(event) {\n if (event.dispatched || !event.initialized) {\n throw new InvalidStateError(\"The object is in an invalid state.\");\n }\n event.isTrusted = false;\n event.dispatched = true;\n event.target = this;\n // NOT SURE WHEN THIS SHOULD BE SET event.eventPath = [];\n\n event.eventPhase = event.CAPTURING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n event.eventPhase = event.AT_TARGET;\n if (!event.propagationStopped) {\n invokeEventListeners(event, event.target);\n }\n if (event.bubbles) {\n event.eventPath.reverse();\n event.eventPhase = event.BUBBLING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n }\n event.dispatched = false;\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n if (event.canceled) {\n return false;\n }\n return true;\n }\n}\nexport default FakeEventTarget;","import { InvalidStateError } from \"./lib/errors.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nclass FDBRequest extends FakeEventTarget {\n _result = null;\n _error = null;\n source = null;\n transaction = null;\n readyState = \"pending\";\n onsuccess = null;\n onerror = null;\n get error() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._error;\n }\n set error(value) {\n this._error = value;\n }\n get result() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._result;\n }\n set result(value) {\n this._result = value;\n }\n get [Symbol.toStringTag]() {\n return \"IDBRequest\";\n }\n}\nexport default FDBRequest;","class FakeDOMStringList {\n constructor(...values) {\n this._values = values;\n for (let i = 0; i < values.length; i++) {\n this[i] = values[i];\n }\n }\n contains(value) {\n return this._values.includes(value);\n }\n item(i) {\n if (i < 0 || i >= this._values.length) {\n return null;\n }\n return this._values[i];\n }\n get length() {\n return this._values.length;\n }\n [Symbol.iterator]() {\n return this._values[Symbol.iterator]();\n }\n\n // Handled by proxy\n\n // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec.\n _push(...values) {\n for (let i = 0; i < values.length; i++) {\n this[this._values.length + i] = values[i];\n }\n this._values.push(...values);\n }\n _sort(...values) {\n this._values.sort(...values);\n for (let i = 0; i < this._values.length; i++) {\n this[i] = this._values[i];\n }\n return this;\n }\n}\nexport default FakeDOMStringList;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\n\n// http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range\nconst valueToKeyRange = (value, nullDisallowedFlag = false) => {\n if (value instanceof FDBKeyRange) {\n return value;\n }\n if (value === null || value === undefined) {\n if (nullDisallowedFlag) {\n throw new DataError();\n }\n return new FDBKeyRange(undefined, undefined, false, false);\n }\n const key = valueToKey(value);\n return FDBKeyRange.only(key);\n};\nexport default valueToKeyRange;","// Keys provided as functions or arrays or objects need to be stringified\nconst convertKey = key => typeof key === 'object' && key ? key + '' : key;\n\n// https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-keypath\nexport function getKeyPath(keyPath) {\n // It's important to clone the Array here because of the WPT test:\n // \"Different instances are returned from different store instances.\"\n // Also note that the same instance must be returned across multiple gets\n return Array.isArray(keyPath) ? keyPath.map(convertKey) : convertKey(keyPath);\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE } from \"./valueToKeyWithoutThrowing.js\";\n\n// https://www.w3.org/TR/IndexedDB/#is-a-potentially-valid-key-range\nconst isPotentiallyValidKeyRange = value => {\n // If value is a key range, return true.\n if (value instanceof FDBKeyRange) {\n return true;\n }\n\n // Let key be the result of converting a value to a key with value.\n const key = valueToKeyWithoutThrowing(value);\n\n // If key is \"invalid type\" return false.\n // Else return true.\n return key !== INVALID_TYPE;\n};\nexport default isPotentiallyValidKeyRange;","// https://heycam.github.io/webidl/#EnforceRange\n\nconst enforceRange = (num, type) => {\n const min = 0;\n const max = type === \"unsigned long\" ? 4294967295 : 9007199254740991;\n if (isNaN(num) || num < min || num > max) {\n throw new TypeError();\n }\n if (num >= 0) {\n return Math.floor(num);\n }\n};\nexport default enforceRange;","import isPotentiallyValidKeyRange from \"./isPotentiallyValidKeyRange.js\";\nimport enforceRange from \"./enforceRange.js\";\n// https://www.w3.org/TR/IndexedDB/#create-request-to-retrieve-multiple-items\nconst extractGetAllOptions = (queryOrOptions, count, numArguments) => {\n let query;\n let direction;\n if (queryOrOptions === undefined || queryOrOptions === null || isPotentiallyValidKeyRange(queryOrOptions)) {\n // queryOrOptions is FDBKeyRange | Key | null | undefined\n query = queryOrOptions;\n if (numArguments > 1 && count !== undefined) {\n count = enforceRange(count, \"unsigned long\");\n }\n } else {\n // queryOrOptions is FDBGetAllOptions\n const getAllOptions = queryOrOptions;\n if (getAllOptions.query !== undefined) {\n query = getAllOptions.query;\n }\n if (getAllOptions.count !== undefined) {\n count = enforceRange(getAllOptions.count, \"unsigned long\");\n }\n if (getAllOptions.direction !== undefined) {\n direction = getAllOptions.direction;\n }\n }\n return {\n query,\n count,\n direction\n };\n};\nexport default extractGetAllOptions;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { ConstraintError, InvalidStateError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nconst confirmActiveTransaction = index => {\n if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (index.objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#idl-def-IDBIndex\nclass FDBIndex {\n constructor(objectStore, rawIndex) {\n this._rawIndex = rawIndex;\n this._name = rawIndex.name;\n this.objectStore = objectStore;\n this.keyPath = getKeyPath(rawIndex.keyPath);\n this.multiEntry = rawIndex.multiEntry;\n this.unique = rawIndex.unique;\n }\n get name() {\n return this._name;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbindex-name\n set name(name) {\n const transaction = this.objectStore.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this.objectStore.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldIndexNames = [...this.objectStore.indexNames];\n this._name = name;\n this._rawIndex.name = name;\n this.objectStore._indexesCache.delete(oldName);\n this.objectStore._indexesCache.set(name, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(oldName);\n this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter(indexName => {\n const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName);\n return index && !index.deleted;\n }).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s index was not newly created during transaction, set handle’s name to its index’s name.\"\n if (!this.objectStore.transaction._createdIndexes.has(this._rawIndex)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawIndex.name = oldName;\n this.objectStore._indexesCache.delete(name);\n this.objectStore._indexesCache.set(oldName, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(name);\n this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...oldIndexNames);\n });\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n get(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getValue.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key\n getKey(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getKey.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllRecords.bind(this._rawIndex, range, count, direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: () => {\n return this._rawIndex.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBIndex\";\n }\n}\nexport default FDBIndex;","// http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value\nconst canInjectKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n throw new Error(\"The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.\");\n }\n const identifiers = keyPath.split(\".\");\n if (identifiers.length === 0) {\n throw new Error(\"Assert: identifiers is not empty\");\n }\n identifiers.pop();\n for (const identifier of identifiers) {\n if (typeof value !== \"object\" && !Array.isArray(value)) {\n return false;\n }\n const hop = Object.hasOwn(value, identifier);\n if (!hop) {\n return true;\n }\n value = value[identifier];\n }\n return typeof value === \"object\" || Array.isArray(value);\n};\nexport default canInjectKey;","class FDBRecord {\n constructor(key, primaryKey, value) {\n this._key = key;\n this._primaryKey = primaryKey;\n this._value = value;\n }\n get key() {\n return this._key;\n }\n set key(_) {\n /* for babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(_) {\n /* for babel */\n }\n get value() {\n return this._value;\n }\n set value(_) {\n /* for babel */\n }\n get [Symbol.toStringTag]() {\n return \"IDBRecord\";\n }\n}\nexport default FDBRecord;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport { ConstraintError } from \"./errors.js\";\n// what fraction of the total number of nodes are allowed to be deleted tombstones?\nconst MAX_TOMBSTONE_FACTOR = 2 / 3;\nconst EVERYTHING_KEY_RANGE = new FDBKeyRange(undefined, undefined, false, false);\n/**\n * Simple red-black binary tree with some aspects of a scapegoat tree. The main goal here is simplicity of\n * implementation, tailored to the needs of IndexedDB.\n *\n * Basically this implements a [red-black tree][1] for insertions, but uses the much simpler [scapegoat tree][2]\n * strategy for deletions. Deletions are a simple matter of rebuilding the tree from scratch if more than 2/3 of the\n * tree is full of deleted (tombstone) markers.\n *\n * [1]: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree\n * [2]: https://en.wikipedia.org/wiki/Scapegoat_tree\n */\nexport default class BinarySearchTree {\n _numTombstones = 0;\n _numNodes = 0;\n\n /**\n *\n * @param keysAreUnique - whether keys can be unique, and thus whether we cn skip checking `record.value` when\n * comparing. This is basically used to distinguish ObjectStores (where the value is the entire object, not used\n * as a key) from non-unique Indexes (where both the key and the value are meaningful keys used for sorting)\n */\n constructor(keysAreUnique) {\n this._keysAreUnique = !!keysAreUnique;\n }\n size() {\n return this._numNodes - this._numTombstones;\n }\n get(record) {\n return this._getByComparator(this._root, otherRecord => this._compare(record, otherRecord));\n }\n contains(record) {\n return !!this.get(record);\n }\n _compare(a, b) {\n const keyComparison = cmp(a.key, b.key);\n if (keyComparison !== 0) {\n return keyComparison;\n }\n // if keys are unique, then we can (and must) avoid comparing the values, since they may be non-comparable\n // (e.g. in the case of an ObjectStore, they are record objects)\n return this._keysAreUnique ? 0 : cmp(a.value, b.value);\n }\n _getByComparator(node, comparator) {\n let current = node;\n while (current) {\n const comparison = comparator(current.record);\n if (comparison < 0) {\n current = current.left;\n } else if (comparison > 0) {\n current = current.right;\n } else {\n return current.record;\n }\n }\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param record\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(record, noOverwrite = false) {\n if (!this._root) {\n this._root = {\n record,\n left: undefined,\n right: undefined,\n parent: undefined,\n deleted: false,\n // the root is always black in a red-black tree\n red: false\n };\n this._numNodes++;\n return;\n }\n return this._put(this._root, record, noOverwrite);\n }\n _put(node, record, noOverwrite) {\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n if (node.left) {\n return this._put(node.left, record, noOverwrite);\n } else {\n node.left = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.left);\n }\n } else if (comparison > 0) {\n if (node.right) {\n return this._put(node.right, record, noOverwrite);\n } else {\n node.right = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.right);\n }\n } else if (node.deleted) {\n // undelete\n node.deleted = false;\n node.record = record;\n this._numTombstones--;\n } else if (noOverwrite) {\n // replace not allowed in case of noOverwrite\n throw new ConstraintError();\n } else {\n // replace, don't add, so no need to increment. return the overwritten record\n const overwrittenRecord = node.record;\n node.record = record;\n return overwrittenRecord;\n }\n }\n delete(record) {\n if (!this._root) {\n return;\n }\n this._delete(this._root, record);\n if (this._numTombstones > this._numNodes * MAX_TOMBSTONE_FACTOR) {\n // to keep the implementation simple, and because most users of fake-indexeddb are not going to be deleting\n // a lot of nodes, just rebuild the whole tree (defragment) if the tree is too full of tombstones,\n // as inspired by the scapegoat tree: https://en.wikipedia.org/wiki/Scapegoat_tree#Deletion\n const records = [...this.getAllRecords()];\n this._root = this._rebuild(records, undefined, false);\n this._numNodes = records.length;\n this._numTombstones = 0;\n }\n }\n _delete(node, record) {\n if (!node) {\n return;\n }\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n this._delete(node.left, record);\n } else if (comparison > 0) {\n this._delete(node.right, record);\n } else if (!node.deleted) {\n this._numTombstones++;\n node.deleted = true;\n }\n }\n *getAllRecords(descending = false) {\n yield* this.getRecords(EVERYTHING_KEY_RANGE, descending);\n }\n *getRecords(keyRange, descending = false) {\n yield* this._getRecordsForNode(this._root, keyRange, descending);\n }\n *_getRecordsForNode(node, keyRange, descending = false) {\n if (!node) {\n return;\n }\n yield* this._findRecords(node, keyRange, descending);\n }\n *_findRecords(node, keyRange, descending = false) {\n const {\n lower,\n upper,\n lowerOpen,\n upperOpen\n } = keyRange;\n const {\n record: {\n key\n }\n } = node;\n const lowerComparison = lower === undefined ? -1 : cmp(lower, key);\n const upperComparison = upper === undefined ? 1 : cmp(upper, key);\n\n // if keys are non-unique then we need to go left/right even for equality\n // else we can just do LT/GT rather than LTE/GTE as a slight optimization\n const moreLeft = this._keysAreUnique ? lowerComparison < 0 : lowerComparison <= 0;\n const moreRight = this._keysAreUnique ? upperComparison > 0 : upperComparison >= 0;\n\n // in descending mode we start with rightmost nodes, else leftmost\n const moreStart = descending ? moreRight : moreLeft;\n const moreEnd = descending ? moreLeft : moreRight;\n const start = descending ? \"right\" : \"left\";\n const end = descending ? \"left\" : \"right\";\n\n // does the current record actually match the key range?\n const lowerMatches = lowerOpen ? lowerComparison < 0 : lowerComparison <= 0;\n const upperMatches = upperOpen ? upperComparison > 0 : upperComparison >= 0;\n if (moreStart && node[start]) {\n yield* this._findRecords(node[start], keyRange, descending);\n }\n if (lowerMatches && upperMatches && !node.deleted) {\n yield node.record;\n }\n if (moreEnd && node[end]) {\n yield* this._findRecords(node[end], keyRange, descending);\n }\n }\n _onNewNodeInserted(newNode) {\n this._numNodes++;\n this._rebalanceTree(newNode);\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion\n _rebalanceTree(node) {\n let parent = node.parent;\n do {\n // case 1 - no red/black violation\n if (!parent.red) {\n return;\n }\n const grandparent = parent.parent;\n if (!grandparent) {\n // case #4 - parent is the red root, node is also red, so parent goes black\n parent.red = false;\n return;\n }\n const parentIsRightChild = parent === grandparent.right;\n const uncle = parentIsRightChild ? grandparent.left : grandparent.right;\n if (!uncle || !uncle.red) {\n if (node === (parentIsRightChild ? parent.left : parent.right)) {\n // case #5 - parent is red but uncle is black\n this._rotateSubtree(parent, parentIsRightChild);\n node = parent;\n parent = parentIsRightChild ? grandparent.right : grandparent.left;\n }\n\n // case #6 - node is \"outer\" grandchild of grandparent\n this._rotateSubtree(grandparent, !parentIsRightChild);\n parent.red = false;\n grandparent.red = true;\n return;\n }\n\n // case #2 - parent and uncle are both red, so both of them go black and grandparent goes red\n parent.red = false;\n uncle.red = false;\n grandparent.red = true;\n node = grandparent;\n } while (node.parent ? parent = node.parent : false);\n\n // case #3 - current node is the root, all constraints satisfied\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Implementation\n _rotateSubtree(node, right) {\n const parent = node.parent;\n const newRoot = right ? node.left : node.right; // opposite direction\n const newChild = right ? newRoot.right : newRoot.left;\n node[right ? \"left\" : \"right\"] = newChild;\n if (newChild) {\n newChild.parent = node;\n }\n newRoot[right ? \"right\" : \"left\"] = node;\n newRoot.parent = parent;\n node.parent = newRoot;\n if (parent) {\n parent[node === parent.right ? \"right\" : \"left\"] = newRoot;\n } else {\n this._root = newRoot;\n }\n return newRoot;\n }\n\n // rebuild the whole tree from scratch, used to avoid too many deletion tombstones accumulating\n _rebuild(records, parent, red) {\n const {\n length\n } = records;\n if (!length) {\n return undefined;\n }\n const mid = length >>> 1; // like Math.floor(records.length / 2) but fast\n\n const node = {\n record: records[mid],\n left: undefined,\n right: undefined,\n parent,\n deleted: false,\n red\n };\n const left = this._rebuild(records.slice(0, mid), node, !red);\n const right = this._rebuild(records.slice(mid + 1), node, !red);\n node.left = left;\n node.right = right;\n return node;\n }\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport BinarySearchTree from \"./binarySearchTree.js\";\nclass RecordStore {\n constructor(keysAreUnique) {\n this.keysAreUnique = keysAreUnique;\n this.records = new BinarySearchTree(this.keysAreUnique);\n }\n get(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n return this.records.getRecords(range).next().value;\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param newRecord\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(newRecord, noOverwrite = false) {\n return this.records.put(newRecord, noOverwrite);\n }\n delete(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [...this.records.getRecords(range)];\n for (const record of deletedRecords) {\n this.records.delete(record);\n }\n return deletedRecords;\n }\n deleteByValue(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [];\n for (const record of this.records.getAllRecords()) {\n if (range.includes(record.value)) {\n this.records.delete(record);\n deletedRecords.push(record);\n }\n }\n return deletedRecords;\n }\n clear() {\n const deletedRecords = [...this.records.getAllRecords()];\n this.records = new BinarySearchTree(this.keysAreUnique);\n return deletedRecords;\n }\n values(range, direction = \"next\") {\n const descending = direction === \"prev\" || direction === \"prevunique\";\n const records = range ? this.records.getRecords(range, descending) : this.records.getAllRecords(descending);\n return {\n [Symbol.iterator]: () => {\n const next = () => {\n return records.next();\n };\n if (direction === \"next\" || direction === \"prev\") {\n return {\n next\n };\n }\n\n // For nextunique/prevunique, return an iterator that skips seen values\n // Note that we must return the _lowest_ value regardless of direction:\n // > Iterating with \"prevunique\" visits the same records that \"nextunique\"\n // > visits, but in reverse order.\n // https://w3c.github.io/IndexedDB/#dom-idbcursordirection-prevunique\n if (direction === \"nextunique\") {\n let previousValue = undefined;\n return {\n next: () => {\n let current = next();\n // for nextunique, continue if we already emitted the lowest unique value\n while (!current.done && previousValue !== undefined && cmp(previousValue.key, current.value.key) === 0) {\n current = next();\n }\n previousValue = current.value;\n return current;\n }\n };\n }\n\n // prevunique is a bit more complex due to needing to check the next value, which\n // invokes the iterable, so we need to keep a buffer of one \"lookahead\" result\n let current = next();\n let nextResult = next();\n return {\n next: () => {\n while (!nextResult.done && cmp(current.value.key, nextResult.value.key) === 0) {\n // note we return the _lowest_ possible value, hence set the current\n current = nextResult;\n nextResult = next();\n }\n const result = current;\n current = nextResult;\n nextResult = next();\n return result;\n }\n };\n }\n };\n }\n size() {\n return this.records.size();\n }\n}\nexport default RecordStore;","import FDBRecord from \"../FDBRecord.js\";\nimport { ConstraintError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport RecordStore from \"./RecordStore.js\";\nimport valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index\nclass Index {\n deleted = false;\n // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a\n // constraint\n initialized = false;\n constructor(rawObjectStore, name, keyPath, multiEntry, unique) {\n this.rawObjectStore = rawObjectStore;\n this.name = name;\n this.keyPath = keyPath;\n this.multiEntry = multiEntry;\n this.unique = unique;\n this.records = new RecordStore(unique);\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? record.value : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(this.rawObjectStore.getValue(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbindex-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(this.rawObjectStore.getKey(record.value)), this.rawObjectStore.getValue(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7)\n storeRecord(newRecord) {\n let indexKey;\n try {\n indexKey = extractKey(this.keyPath, newRecord.value).key;\n } catch (err) {\n if (err.name === \"DataError\") {\n // Invalid key is not an actual error, just means we do not store an entry in this index\n return;\n }\n throw err;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n try {\n valueToKey(indexKey);\n } catch (e) {\n return;\n }\n } else {\n // remove any elements from index key that are not valid keys and remove any duplicate elements from index\n // key such that only one instance of the duplicate value remains.\n const keep = [];\n for (const part of indexKey) {\n if (keep.indexOf(part) < 0) {\n try {\n keep.push(valueToKey(part));\n } catch (err) {\n /* Do nothing */\n }\n }\n }\n indexKey = keep;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n if (this.unique) {\n const existingRecord = this.records.get(indexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n } else {\n if (this.unique) {\n for (const individualIndexKey of indexKey) {\n const existingRecord = this.records.get(individualIndexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n }\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n this.records.put({\n key: indexKey,\n value: newRecord.key\n });\n } else {\n for (const individualIndexKey of indexKey) {\n this.records.put({\n key: individualIndexKey,\n value: newRecord.key\n });\n }\n }\n }\n initialize(transaction) {\n if (this.initialized) {\n throw new Error(\"Index already initialized\");\n }\n transaction._execRequestAsync({\n operation: () => {\n try {\n // Create index based on current value of objectstore\n for (const record of this.rawObjectStore.records.values()) {\n this.storeRecord(record);\n }\n this.initialized = true;\n } catch (err) {\n // console.error(err);\n transaction._abort(err.name);\n }\n },\n source: null\n });\n }\n count(range) {\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default Index;","import { SyntaxError } from \"./errors.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path\nconst validateKeyPath = (keyPath, parent) => {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in extractKey)\n if (keyPath !== undefined && keyPath !== null && typeof keyPath !== \"string\" && keyPath.toString && (parent === \"array\" || !Array.isArray(keyPath))) {\n keyPath = keyPath.toString();\n }\n if (typeof keyPath === \"string\") {\n if (keyPath === \"\" && parent !== \"string\") {\n return;\n }\n try {\n // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with\n // reserved words at beginning removed\n const validIdentifierRegex =\n // eslint-disable-next-line no-misleading-character-class\n /^(?:[$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) {\n return;\n }\n } catch (err) {\n throw new SyntaxError(err.message);\n }\n if (keyPath.indexOf(\" \") >= 0) {\n throw new SyntaxError(\"The keypath argument contains an invalid key path (no spaces allowed).\");\n }\n }\n if (Array.isArray(keyPath) && keyPath.length > 0) {\n if (parent) {\n // No nested arrays\n throw new SyntaxError(\"The keypath argument contains an invalid key path (nested arrays).\");\n }\n for (const part of keyPath) {\n validateKeyPath(part, \"array\");\n }\n return;\n } else if (typeof keyPath === \"string\" && keyPath.indexOf(\".\") >= 0) {\n keyPath = keyPath.split(\".\");\n for (const part of keyPath) {\n validateKeyPath(part, \"string\");\n }\n return;\n }\n throw new SyntaxError();\n};\nexport default validateKeyPath;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBIndex from \"./FDBIndex.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport canInjectKey from \"./lib/canInjectKey.js\";\nimport { ConstraintError, DataError, InvalidAccessError, InvalidStateError, NotFoundError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport Index from \"./lib/Index.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst confirmActiveTransaction = objectStore => {\n if (objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\nconst buildRecordAddPut = (objectStore, value, key) => {\n confirmActiveTransaction(objectStore);\n if (objectStore.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (objectStore.keyPath !== null) {\n if (key !== undefined) {\n throw new DataError();\n }\n }\n const clone = cloneValueForInsertion(value, objectStore.transaction);\n if (objectStore.keyPath !== null) {\n const tempKey = extractKey(objectStore.keyPath, clone);\n if (tempKey.type === \"found\") {\n valueToKey(tempKey.key);\n } else {\n if (!objectStore._rawObjectStore.keyGenerator) {\n throw new DataError();\n } else if (!canInjectKey(objectStore.keyPath, clone)) {\n throw new DataError();\n }\n }\n }\n if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) {\n throw new DataError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n }\n return {\n key,\n value: clone\n };\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store\nclass FDBObjectStore {\n _indexesCache = new Map();\n constructor(transaction, rawObjectStore) {\n this._rawObjectStore = rawObjectStore;\n this._name = rawObjectStore.name;\n this.keyPath = getKeyPath(rawObjectStore.keyPath);\n this.autoIncrement = rawObjectStore.autoIncrement;\n this.transaction = transaction;\n this.indexNames = new FakeDOMStringList(...Array.from(rawObjectStore.rawIndexes.keys()).sort());\n }\n get name() {\n return this._name;\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name\n set name(name) {\n const transaction = this.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n confirmActiveTransaction(this);\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldObjectStoreNames = [...transaction.db.objectStoreNames];\n this._name = name;\n this._rawObjectStore.name = name;\n this.transaction._objectStoresCache.delete(oldName);\n this.transaction._objectStoresCache.set(name, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter(objectStoreName => {\n const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName);\n return objectStore && !objectStore.deleted;\n }).sort());\n const oldScope = new Set(transaction._scope);\n const oldTransactionObjectStoreNames = [...transaction.objectStoreNames];\n this.transaction._scope.delete(oldName);\n transaction._scope.add(name);\n transaction.objectStoreNames = new FakeDOMStringList(...Array.from(transaction._scope).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s object store was not newly created during transaction, set handle’s name to its object store’s name.\"\n if (!this.transaction._createdObjectStores.has(this._rawObjectStore)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawObjectStore.name = oldName;\n this.transaction._objectStoresCache.delete(name);\n this.transaction._objectStoresCache.set(oldName, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(name);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...oldObjectStoreNames);\n transaction._scope = oldScope;\n transaction.objectStoreNames = new FakeDOMStringList(...oldTransactionObjectStoreNames);\n });\n }\n }\n put(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog),\n source: this\n });\n }\n add(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog),\n source: this\n });\n }\n delete(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog),\n source: this\n });\n }\n get(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey\n getKey(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllRecords.bind(this._rawObjectStore, range, count, direction),\n source: this\n });\n }\n clear() {\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog),\n source: this\n });\n }\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // tslint:-next-line max-line-length\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters\n createIndex(name, keyPath, optionalParameters = {}) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false;\n const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false;\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n if (this.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n validateKeyPath(keyPath);\n if (Array.isArray(keyPath) && multiEntry) {\n throw new InvalidAccessError();\n }\n\n // The index that is requested to be created can contain constraints on the data allowed in the index's\n // referenced object store, such as requiring uniqueness of the values referenced by the index's keyPath. If the\n // referenced object store already contains data which violates these constraints, this MUST NOT cause the\n // implementation of createIndex to throw an exception or affect what it returns. The implementation MUST still\n // create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the\n // \"versionchange\" transaction which was used for the createIndex call.\n\n // Save for rollbackLog\n const indexNames = [...this.indexNames];\n const index = new Index(this._rawObjectStore, name, keyPath, multiEntry, unique);\n this.indexNames._push(name);\n this.indexNames._sort();\n this.transaction._createdIndexes.add(index);\n this._rawObjectStore.rawIndexes.set(name, index);\n index.initialize(this.transaction); // This is async by design\n\n this.transaction._rollbackLog.push(() => {\n index.deleted = true;\n this.indexNames = new FakeDOMStringList(...indexNames);\n this._rawObjectStore.rawIndexes.delete(index.name);\n });\n return new FDBIndex(this, index);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index\n index(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this._rawObjectStore.deleted || this.transaction._state === \"finished\") {\n throw new InvalidStateError();\n }\n const index = this._indexesCache.get(name);\n if (index !== undefined) {\n return index;\n }\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (!this.indexNames.contains(name) || rawIndex === undefined) {\n throw new NotFoundError();\n }\n const index2 = new FDBIndex(this, rawIndex);\n this._indexesCache.set(name, index2);\n return index2;\n }\n deleteIndex(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (rawIndex === undefined) {\n throw new NotFoundError();\n }\n this.transaction._rollbackLog.push(() => {\n rawIndex.deleted = false;\n this._rawObjectStore.rawIndexes.set(rawIndex.name, rawIndex);\n this.indexNames._push(rawIndex.name);\n this.indexNames._sort();\n });\n this.indexNames = new FakeDOMStringList(...Array.from(this.indexNames).filter(indexName => {\n return indexName !== name;\n }));\n rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously\n\n this.transaction._execRequestAsync({\n operation: () => {\n const rawIndex2 = this._rawObjectStore.rawIndexes.get(name);\n\n // Hack in case another index is given this name before this async request is processed. It'd be better\n // to have a real unique ID for each index.\n if (rawIndex === rawIndex2) {\n this._rawObjectStore.rawIndexes.delete(name);\n }\n },\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.transaction._execRequestAsync({\n operation: () => {\n return this._rawObjectStore.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBObjectStore\";\n }\n}\nexport default FDBObjectStore;","class Event {\n eventPath = [];\n NONE = 0;\n CAPTURING_PHASE = 1;\n AT_TARGET = 2;\n BUBBLING_PHASE = 3;\n\n // Flags\n propagationStopped = false;\n immediatePropagationStopped = false;\n canceled = false;\n initialized = true;\n dispatched = false;\n target = null;\n currentTarget = null;\n eventPhase = 0;\n defaultPrevented = false;\n isTrusted = false;\n timeStamp = Date.now();\n constructor(type, eventInitDict = {}) {\n this.type = type;\n this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false;\n this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;\n }\n preventDefault() {\n if (this.cancelable) {\n this.canceled = true;\n }\n }\n stopPropagation() {\n this.propagationStopped = true;\n }\n stopImmediatePropagation() {\n this.propagationStopped = true;\n this.immediatePropagationStopped = true;\n }\n}\nexport default Event;","// When running within Node.js (including jsdom), we want to use setImmediate\n// (which runs immediately) rather than setTimeout (which enforces a minimum\n// delay of 1ms, and on Windows only has a resolution of 15ms or so). jsdom\n// doesn't provide setImmediate (to better match the browser environment) and\n// sandboxes scripts, but its sandbox is by necessity imperfect, so we can break\n// out of it:\n//\n// - https://github.com/jsdom/jsdom#executing-scripts\n// - https://github.com/jsdom/jsdom/issues/2729\n// - https://github.com/scala-js/scala-js-macrotask-executor/pull/17\nfunction getSetImmediateFromJsdom() {\n if (typeof navigator !== \"undefined\" && /jsdom/.test(navigator.userAgent)) {\n const outerRealmFunctionConstructor = Node.constructor;\n return new outerRealmFunctionConstructor(\"return setImmediate\")();\n } else {\n return undefined;\n }\n}\n\n// waiting on this PR for typescript types: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1249\n\n// 'postTask' runs right after microtasks, so equivalent to setTimeout but without the 4ms clamping.\n// Using the default priority of 'user-visible' to avoid blocking input while still running fairly quickly.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities\nconst schedulerPostTask = typeof scheduler !== \"undefined\" && (fn => scheduler.postTask(fn));\n\n// fallback for environments that don't support any of the above\nconst doSetTimeout = fn => setTimeout(fn, 0);\n\n// Schedules a task to run later. Use Node.js's setImmediate if available and\n// setTimeout otherwise. Note that options like process.nextTick or\n// queueMicrotask will likely not work: IndexedDB semantics require that\n// transactions are marked as not active when the event loop runs. The next\n// tick queue and microtask queue run within the current event loop macrotask,\n// so they'd process database operations too quickly.\nexport const queueTask = fn => {\n const setImmediate = globalThis.setImmediate || getSetImmediateFromJsdom() || schedulerPostTask || doSetTimeout;\n setImmediate(fn);\n};","import FDBObjectStore from \"./FDBObjectStore.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { AbortError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nconst prioritizedListenerTypes = [\"error\", \"abort\", \"complete\"];\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction\nclass FDBTransaction extends FakeEventTarget {\n _state = \"active\";\n _started = false;\n _rollbackLog = [];\n _objectStoresCache = new Map();\n _openRequest = null;\n error = null;\n onabort = null;\n oncomplete = null;\n onerror = null;\n _prioritizedListeners = new Map();\n _requests = [];\n _createdIndexes = new Set();\n _createdObjectStores = new Set();\n constructor(storeNames, mode, durability, db) {\n super();\n this._scope = new Set(storeNames);\n this.mode = mode;\n this.durability = durability;\n this.db = db;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this._scope).sort());\n for (const type of prioritizedListenerTypes) {\n // Attach prioritized (internal) listeners before any external listeners are attached.\n // This ensures that these listeners run with the same timing regardless of whether\n // the user uses `on*` or `addEventListener` for event listeners.\n this.addEventListener(type, () => {\n this._prioritizedListeners.get(type)?.();\n });\n }\n }\n\n // https://w3c.github.io/IndexedDB/#abort-transaction\n _abort(errName) {\n for (const f of this._rollbackLog.reverse()) {\n f();\n }\n if (errName !== null) {\n const e = new DOMException(undefined, errName);\n this.error = e;\n }\n\n // Should this directly remove from _requests?\n for (const {\n request\n } of this._requests) {\n if (request.readyState !== \"done\") {\n request.readyState = \"done\"; // This will cancel execution of this request's operation\n if (request.source) {\n // https://w3c.github.io/IndexedDB/#ref-for-list-iterate%E2%91%A2\n // For each request of transaction’s request list, abort the steps to asynchronously\n // execute a request for request, set request’s processed flag to true, and queue a\n // database task to run these steps:\n queueTask(() => {\n // Set request’s result to undefined.\n request.result = undefined;\n // Set request’s error to a newly created \"AbortError\" DOMException.\n request.error = new AbortError();\n\n // Fire an event named error at request with its bubbles and cancelable attributes initialized\n // to true.\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [this.db, this];\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n }\n }\n });\n }\n }\n }\n\n // Queue a database task to run these steps:\n queueTask(() => {\n // If transaction is an upgrade transaction, then set transaction’s connection’s associated database’s\n // upgrade transaction to null.\n // (i.e. remove it from the list of `db.connections`)\n const isUpgradeTransaction = this.mode === \"versionchange\";\n if (isUpgradeTransaction) {\n this.db._rawDatabase.connections = this.db._rawDatabase.connections.filter(connection => !connection._rawDatabase.transactions.includes(this));\n }\n // Fire an event named abort at transaction with its bubbles attribute initialized to true.\n const event = new FakeEvent(\"abort\", {\n bubbles: true,\n cancelable: false\n });\n event.eventPath = [this.db];\n this.dispatchEvent(event);\n\n // If transaction is an upgrade transaction, then:\n if (isUpgradeTransaction) {\n // Let request be the open request associated with transaction.\n const request = this._openRequest;\n // Set request’s transaction to null.\n request.transaction = null;\n // Set request’s result to undefined.\n request.result = undefined;\n }\n });\n this._state = \"finished\";\n }\n abort() {\n if (this._state === \"committing\" || this._state === \"finished\") {\n throw new InvalidStateError();\n }\n this._state = \"active\";\n this._abort(null);\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore\n objectStore(name) {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n const objectStore = this._objectStoresCache.get(name);\n if (objectStore !== undefined) {\n return objectStore;\n }\n const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name);\n if (!this._scope.has(name) || rawObjectStore === undefined) {\n throw new NotFoundError();\n }\n const objectStore2 = new FDBObjectStore(this, rawObjectStore);\n this._objectStoresCache.set(name, objectStore2);\n return objectStore2;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request\n _execRequestAsync(obj) {\n const source = obj.source;\n const operation = obj.operation;\n let request = Object.hasOwn(obj, \"request\") ? obj.request : null;\n if (this._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n\n // Request should only be passed for cursors\n if (!request) {\n if (!source) {\n // Special requests like indexes that just need to run some code\n request = new FDBRequest();\n } else {\n request = new FDBRequest();\n request.source = source;\n request.transaction = source.transaction;\n }\n }\n this._requests.push({\n operation,\n request\n });\n return request;\n }\n _start() {\n this._started = true;\n\n // Remove from request queue - cursor ones will be added back if necessary by cursor.continue and such\n let operation;\n let request;\n while (this._requests.length > 0) {\n const r = this._requests.shift();\n\n // This should only be false if transaction was aborted\n if (r && r.request.readyState !== \"done\") {\n request = r.request;\n operation = r.operation;\n break;\n }\n }\n if (request && operation) {\n if (!request.source) {\n // Special requests like indexes that just need to run some code, with error handling already built into\n // operation\n operation();\n } else {\n let defaultAction;\n let event;\n try {\n const result = operation();\n request.readyState = \"done\";\n request.result = result;\n request.error = undefined;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-a-success-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"success\", {\n bubbles: false,\n cancelable: false\n });\n } catch (err) {\n request.readyState = \"done\";\n request.result = undefined;\n request.error = err;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n defaultAction = this._abort.bind(this, err.name);\n }\n try {\n event.eventPath = [this.db, this];\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n defaultAction = undefined; // do not abort again\n }\n }\n\n // Default action of event\n if (!event.canceled) {\n if (defaultAction) {\n defaultAction();\n }\n }\n }\n\n // Give it another chance for new handlers to be set before finishing\n queueTask(this._start.bind(this));\n return;\n }\n\n // Check if transaction complete event needs to be fired\n if (this._state !== \"finished\") {\n // Either aborted or committed already\n this._state = \"finished\";\n if (!this.error) {\n const event = new FakeEvent(\"complete\");\n this.dispatchEvent(event);\n }\n }\n }\n commit() {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n this._state = \"committing\";\n }\n get [Symbol.toStringTag]() {\n return \"IDBTransaction\";\n }\n}\nexport default FDBTransaction;","import { ConstraintError } from \"./errors.js\";\nconst MAX_KEY = 9007199254740992;\nclass KeyGenerator {\n // This is kind of wrong. Should start at 1 and increment only after record is saved\n num = 0;\n next() {\n if (this.num >= MAX_KEY) {\n throw new ConstraintError();\n }\n this.num += 1;\n return this.num;\n }\n\n // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator\n setIfLarger(num) {\n const value = Math.floor(Math.min(num, MAX_KEY)) - 1;\n if (value >= this.num) {\n this.num = value + 1;\n }\n }\n}\nexport default KeyGenerator;","import FDBRecord from \"../FDBRecord.js\";\nimport { DataError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport KeyGenerator from \"./KeyGenerator.js\";\nimport RecordStore from \"./RecordStore.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store\nclass ObjectStore {\n deleted = false;\n records = new RecordStore(true);\n rawIndexes = new Map();\n constructor(rawDatabase, name, keyPath, autoIncrement) {\n this.rawDatabase = rawDatabase;\n this.keyGenerator = autoIncrement === true ? new KeyGenerator() : null;\n this.deleted = false;\n this.name = name;\n this.keyPath = keyPath;\n this.autoIncrement = autoIncrement;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.key) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.key));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(record.key), structuredClone(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store\n storeRecord(newRecord, noOverwrite, rollbackLog) {\n if (this.keyPath !== null) {\n const key = extractKey(this.keyPath, newRecord.value).key;\n if (key !== undefined) {\n newRecord.key = key;\n }\n }\n const rollbackLogForThisOperation = [];\n if (this.keyGenerator !== null && newRecord.key === undefined) {\n let rolledBack = false;\n const keyGeneratorBefore = this.keyGenerator.num;\n const rollbackKeyGenerator = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (this.keyGenerator) {\n this.keyGenerator.num = keyGeneratorBefore;\n }\n };\n rollbackLogForThisOperation.push(rollbackKeyGenerator);\n if (rollbackLog) {\n rollbackLog.push(rollbackKeyGenerator);\n }\n newRecord.key = this.keyGenerator.next();\n\n // Set in value if keyPath defiend but led to no key\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path\n if (this.keyPath !== null) {\n if (Array.isArray(this.keyPath)) {\n throw new Error(\"Cannot have an array key path in an object store with a key generator\");\n }\n let remainingKeyPath = this.keyPath;\n let object = newRecord.value;\n let identifier;\n let i = 0; // Just to run the loop at least once\n while (i >= 0) {\n if (typeof object !== \"object\") {\n throw new DataError();\n }\n i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n if (!Object.hasOwn(object, identifier)) {\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: {}\n });\n }\n object = object[identifier];\n }\n }\n identifier = remainingKeyPath;\n\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: newRecord.key\n });\n }\n } else if (this.keyGenerator !== null && typeof newRecord.key === \"number\") {\n this.keyGenerator.setIfLarger(newRecord.key);\n }\n const existingRecord = this.records.put(newRecord, noOverwrite);\n let rolledBack = false;\n const rollbackStoreRecord = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (existingRecord) {\n // overwrite on rollback\n this.storeRecord(existingRecord, false);\n } else {\n // delete on rollback\n this.deleteRecord(newRecord.key);\n }\n };\n rollbackLogForThisOperation.push(rollbackStoreRecord);\n if (rollbackLog) {\n rollbackLog.push(rollbackStoreRecord);\n }\n\n // Delete existing indexes\n if (existingRecord) {\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(newRecord.key);\n }\n }\n\n // Update indexes\n try {\n for (const rawIndex of this.rawIndexes.values()) {\n if (rawIndex.initialized) {\n rawIndex.storeRecord(newRecord);\n }\n }\n } catch (err) {\n // If this request fails here and preventDefault is used to stop the transaction from aborting, we need to roll back the addition of this record to the store, otherwise it will be present in subsequent requests on this transaction. Same for key generator.\n if (err.name === \"ConstraintError\") {\n for (const rollback of rollbackLogForThisOperation) {\n rollback();\n }\n }\n throw err;\n }\n return newRecord.key;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store\n deleteRecord(key, rollbackLog) {\n const deletedRecords = this.records.delete(key);\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(key);\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store\n clear(rollbackLog) {\n const deletedRecords = this.records.clear();\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.clear();\n }\n }\n count(range) {\n // optimization: if there is no range, or if the range is everything, then we can just count the total size\n if (range === undefined || range.lower === undefined && range.upper === undefined) {\n return this.records.size();\n }\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default ObjectStore;","import FakeEvent from \"./FakeEvent.js\";\nimport { queueTask } from \"./scheduling.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-closing-steps\nconst closeConnection = (connection, forced = false) => {\n connection._closePending = true;\n const transactionsComplete = connection._rawDatabase.transactions.every(transaction => {\n return transaction._state === \"finished\";\n });\n if (transactionsComplete) {\n connection._closed = true;\n connection._rawDatabase.connections = connection._rawDatabase.connections.filter(otherConnection => {\n return connection !== otherConnection;\n });\n if (forced) {\n const event = new FakeEvent(\"close\", {\n bubbles: false,\n cancelable: false\n });\n event.eventPath = [];\n connection.dispatchEvent(event);\n }\n } else {\n queueTask(() => {\n closeConnection(connection, forced);\n });\n }\n};\nexport default closeConnection;","import FDBTransaction from \"./FDBTransaction.js\";\nimport { ConstraintError, InvalidAccessError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport ObjectStore from \"./lib/ObjectStore.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport closeConnection from \"./lib/closeConnection.js\";\n// Common first 3 steps of https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-createobjectstore and https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\nconst confirmActiveVersionchangeTransaction = database => {\n // Let transaction be database’s upgrade transaction if it is not null, or throw an \"InvalidStateError\" DOMException otherwise.\n let transaction;\n if (database._runningVersionchangeTransaction) {\n // Find the latest versionchange transaction\n transaction = database._rawDatabase.transactions.findLast(tx => {\n return tx.mode === \"versionchange\";\n });\n }\n if (!transaction) {\n throw new InvalidStateError();\n }\n\n // If transaction’s state is not active, then throw a \"TransactionInactiveError\" DOMException.\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n return transaction;\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface\nclass FDBDatabase extends FakeEventTarget {\n _closePending = false;\n _closed = false;\n _runningVersionchangeTransaction = false;\n constructor(rawDatabase) {\n super();\n this._rawDatabase = rawDatabase;\n this._rawDatabase.connections.push(this);\n this.name = rawDatabase.name;\n this.version = rawDatabase.version;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(rawDatabase.rawObjectStores.keys()).sort());\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore\n createObjectStore(name, options = {}) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null;\n const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false;\n if (keyPath !== null) {\n validateKeyPath(keyPath);\n }\n if (this._rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n if (autoIncrement && (keyPath === \"\" || Array.isArray(keyPath))) {\n throw new InvalidAccessError();\n }\n\n // Save for rollbackLog\n const objectStoreNames = [...this.objectStoreNames];\n const transactionObjectStoreNames = [...transaction.objectStoreNames];\n const rawObjectStore = new ObjectStore(this._rawDatabase, name, keyPath, autoIncrement);\n this.objectStoreNames._push(name);\n this.objectStoreNames._sort();\n transaction._scope.add(name);\n transaction._createdObjectStores.add(rawObjectStore);\n this._rawDatabase.rawObjectStores.set(name, rawObjectStore);\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n transaction._rollbackLog.push(() => {\n rawObjectStore.deleted = true;\n this.objectStoreNames = new FakeDOMStringList(...objectStoreNames);\n transaction.objectStoreNames = new FakeDOMStringList(...transactionObjectStoreNames);\n transaction._scope.delete(rawObjectStore.name);\n this._rawDatabase.rawObjectStores.delete(rawObjectStore.name);\n });\n return transaction.objectStore(name);\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\n deleteObjectStore(name) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n\n // Let store be the object store named name in database, or throw a \"NotFoundError\" DOMException if none.\n const store = this._rawDatabase.rawObjectStores.get(name);\n if (store === undefined) {\n throw new NotFoundError();\n }\n\n // Remove store from this’s object store set.\n // This method synchronously modifies the objectStoreNames property on the IDBDatabase instance on which it was called.\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this.objectStoreNames).filter(objectStoreName => {\n return objectStoreName !== name;\n }));\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n\n // If there is an object store handle associated with store and transaction, remove all entries from its index set.\n const objectStore = transaction._objectStoresCache.get(name);\n let prevIndexNames;\n if (objectStore) {\n prevIndexNames = [...objectStore.indexNames];\n objectStore.indexNames = new FakeDOMStringList();\n }\n transaction._rollbackLog.push(() => {\n store.deleted = false;\n this._rawDatabase.rawObjectStores.set(store.name, store);\n this.objectStoreNames._push(store.name);\n transaction.objectStoreNames._push(store.name);\n this.objectStoreNames._sort();\n if (objectStore && prevIndexNames) {\n objectStore.indexNames = new FakeDOMStringList(...prevIndexNames);\n }\n });\n\n // Destroy store.\n store.deleted = true;\n this._rawDatabase.rawObjectStores.delete(name);\n transaction._objectStoresCache.delete(name);\n }\n transaction(storeNames, mode, options) {\n mode = mode !== undefined ? mode : \"readonly\";\n if (mode !== \"readonly\" && mode !== \"readwrite\" && mode !== \"versionchange\") {\n throw new TypeError(\"Invalid mode: \" + mode);\n }\n const hasActiveVersionchange = this._rawDatabase.transactions.some(transaction => {\n return transaction._state === \"active\" && transaction.mode === \"versionchange\" && transaction.db === this;\n });\n if (hasActiveVersionchange) {\n throw new InvalidStateError();\n }\n if (this._closePending) {\n throw new InvalidStateError();\n }\n if (!Array.isArray(storeNames)) {\n storeNames = [storeNames];\n }\n if (storeNames.length === 0 && mode !== \"versionchange\") {\n throw new InvalidAccessError();\n }\n for (const storeName of storeNames) {\n if (!this.objectStoreNames.contains(storeName)) {\n throw new NotFoundError(\"No objectStore named \" + storeName + \" in this database\");\n }\n }\n\n // the actual algo is more complex but this passes the IDB tests: https://webidl.spec.whatwg.org/#es-dictionary\n const durability = options?.durability ?? \"default\";\n // invalid enums throw a TypeError: https://webidl.spec.whatwg.org/#es-enumeration\n if (durability !== \"default\" && durability !== \"strict\" && durability !== \"relaxed\") {\n throw new TypeError(\n // based on Firefox's error message\n `'${durability}' (value of 'durability' member of IDBTransactionOptions) ` + `is not a valid value for enumeration IDBTransactionDurability`);\n }\n const tx = new FDBTransaction(storeNames, mode, durability, this);\n this._rawDatabase.transactions.push(tx);\n this._rawDatabase.processTransactions(); // See if can start right away (async)\n\n return tx;\n }\n close() {\n closeConnection(this);\n }\n get [Symbol.toStringTag]() {\n return \"IDBDatabase\";\n }\n}\nexport default FDBDatabase;","import FDBRequest from \"./FDBRequest.js\";\nclass FDBOpenDBRequest extends FDBRequest {\n onupgradeneeded = null;\n onblocked = null;\n get [Symbol.toStringTag]() {\n return \"IDBOpenDBRequest\";\n }\n}\nexport default FDBOpenDBRequest;","import FakeEvent from \"./lib/FakeEvent.js\";\nclass FDBVersionChangeEvent extends FakeEvent {\n constructor(type, parameters = {}) {\n super(type);\n this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null;\n this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0;\n }\n get [Symbol.toStringTag]() {\n return \"IDBVersionChangeEvent\";\n }\n}\nexport default FDBVersionChangeEvent;","/**\n * Minimal polyfill of `Set.prototype.intersection`, available in Node 22+.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/intersection\n * @param set1\n * @param set2\n */\nexport function intersection(set1, set2) {\n if (\"intersection\" in set1) {\n return set1.intersection(set2);\n }\n return new Set([...set1].filter(item => set2.has(item)));\n}","import { queueTask } from \"./scheduling.js\";\nimport { intersection } from \"./intersection.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-database\nclass Database {\n transactions = [];\n rawObjectStores = new Map();\n connections = [];\n constructor(name, version) {\n this.name = name;\n this.version = version;\n this.processTransactions = this.processTransactions.bind(this);\n }\n processTransactions() {\n queueTask(() => {\n const running = this.transactions.filter(transaction => transaction._started && transaction._state !== \"finished\");\n const waiting = this.transactions.filter(transaction => !transaction._started && transaction._state !== \"finished\");\n\n // The next transaction to run is the first waiting one that doesn't overlap with either a running one or a\n // preceding waiting one. This allows non-overlapping transactions to run in parallel.\n // The exception is readonly transactions, which are allowed to run in parallel with other readonly\n // transactions, even with overlapping scopes, since no data is being modified.\n const next = waiting.find((transaction, i) => {\n const anyRunning = running.some(other => !(transaction.mode === \"readonly\" && other.mode === \"readonly\") && intersection(other._scope, transaction._scope).size > 0);\n if (anyRunning) {\n return false;\n }\n\n // If any _preceding_ waiting transactions are blocked, then that's also blocking.\n // E.g. if you have 3 transactions: [a], [a,b], and [b,c], then [a] blocks [a,b] which blocks [b,c]\n // until [a] is complete, even though [a] and [b,c] share no overlap.\n // Note that readonly transactions do not have to be handled as a special case here,\n // because if any transactions with overlapping scopes are blocked, then we can assume they are\n const anyWaiting = waiting.slice(0, i).some(other => intersection(other._scope, transaction._scope).size > 0);\n return !anyWaiting;\n });\n if (next) {\n next.addEventListener(\"complete\", this.processTransactions);\n next.addEventListener(\"abort\", this.processTransactions);\n next._start();\n }\n });\n }\n}\nexport default Database;","// WebIDL requires passing the right number of non-optional arguments, e.g. IDBFactory.open() must have at least 1 arg\nexport function validateRequiredArguments(numArguments, expectedNumArguments, methodName) {\n if (numArguments < expectedNumArguments) {\n // imitate Firefox's error message\n throw new TypeError(`${methodName}: At least ${expectedNumArguments} ${expectedNumArguments === 1 ? \"argument\" : \"arguments\"} ` + `required, but only ${arguments.length} passed`);\n }\n}","import FDBDatabase from \"./FDBDatabase.js\";\nimport FDBOpenDBRequest from \"./FDBOpenDBRequest.js\";\nimport FDBVersionChangeEvent from \"./FDBVersionChangeEvent.js\";\nimport cmp from \"./lib/cmp.js\";\nimport Database from \"./lib/Database.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { AbortError, VersionError } from \"./lib/errors.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nimport { validateRequiredArguments } from \"./lib/validateRequiredArguments.js\";\n// https://w3c.github.io/IndexedDB/#connection-queue\nconst runTaskInConnectionQueue = (connectionQueues, name, task) => {\n // Let queue be the connection queue for storageKey and name.\n // (note FakeIndexedDB does not support storageKeys currently)\n // Add request to queue.\n // Wait until all previous requests in queue have been processed.\n const queue = connectionQueues.get(name) ?? Promise.resolve();\n connectionQueues.set(name, queue.then(task));\n};\nconst waitForOthersClosedDelete = (databases, name, openDatabases, cb) => {\n const anyOpen = openDatabases.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen) {\n queueTask(() => waitForOthersClosedDelete(databases, name, openDatabases, cb));\n return;\n }\n databases.delete(name);\n cb(null);\n};\n\n// https://w3c.github.io/IndexedDB/#delete-a-database\nconst deleteDatabase = (databases, connectionQueues, name, request, cb) => {\n const deleteDBTask = () => {\n return new Promise(resolve => {\n const db = databases.get(name);\n const oldVersion = db !== undefined ? db.version : 0;\n const onComplete = err => {\n try {\n if (err) {\n cb(err);\n } else {\n cb(null, oldVersion);\n }\n } finally {\n resolve();\n }\n };\n try {\n const db = databases.get(name);\n if (db === undefined) {\n onComplete(null);\n return;\n }\n\n // Let openConnections be the set of all connections associated with db.\n const openConnections = db.connections.filter(connection => {\n return !connection._closed;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and null.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: null,\n oldVersion: db.version\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired. (i.e. queue a task)\n queueTask(() => {\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: null,\n oldVersion: db.version\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n waitForOthersClosedDelete(databases, name, openConnections, onComplete);\n });\n } catch (err) {\n onComplete(err);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, deleteDBTask);\n};\n\n// https://w3c.github.io/IndexedDB/#ref-for-database-version%E2%91%A0%E2%91%A2\nconst runVersionchangeTransaction = (connection, version, request, cb) => {\n connection._runningVersionchangeTransaction = true;\n const oldVersion = connection._oldVersion = connection.version;\n\n // Let openConnections be the set of all connections, except connection, associated with db.\n const openConnections = connection._rawDatabase.connections.filter(otherDatabase => {\n return connection !== otherDatabase;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and version.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closed && !openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: version,\n oldVersion\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired.\n // (i.e. queue a task)\n queueTask(() => {\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to fire a version change event named blocked at request with db’s version and version.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: version,\n oldVersion\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n const waitForOthersClosed = () => {\n const anyOpen2 = openConnections.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen2) {\n queueTask(waitForOthersClosed);\n return;\n }\n\n // Set the version of database to version. This change is considered part of the transaction, and so if the\n // transaction is aborted, this change is reverted.\n connection._rawDatabase.version = version;\n connection.version = version;\n\n // Get rid of this setImmediate?\n const transaction = connection.transaction(Array.from(connection.objectStoreNames), \"versionchange\");\n\n // associate the transaction with the open request for later lookup\n transaction._openRequest = request;\n\n // https://w3c.github.io/IndexedDB/#upgrade-a-database\n // Set request’s result to connection.\n request.result = connection;\n // Set request’s done flag to true.\n request.readyState = \"done\";\n // Set request’s transaction to transaction.\n request.transaction = transaction;\n transaction._rollbackLog.push(() => {\n connection._rawDatabase.version = oldVersion;\n connection.version = oldVersion;\n });\n\n // Set transaction’s state to active.\n transaction._state = \"active\";\n\n // Let didThrow be the result of firing a version change event named upgradeneeded at request with old version and version.\n const event = new FDBVersionChangeEvent(\"upgradeneeded\", {\n newVersion: version,\n oldVersion\n });\n let didThrow = false;\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n didThrow = true;\n }\n const concludeUpgrade = () => {\n // If transaction’s state is active, then:\n if (transaction._state === \"active\") {\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n if (didThrow) {\n // If didThrow is true, run abort a transaction with transaction and a newly created \"AbortError\" DOMException.\n transaction._abort(\"AbortError\");\n }\n }\n };\n\n // The \"upgrade a database\" steps are supposed to run as a database task on the database access task source\n // (i.e. off the main thread), but since we're actually running on the main thread, we have to be tricky:\n // 1. If any `upgradeneeded` event handlers errored, abort synchronously\n // 2. Else yield to allow any microtasks to run in response to that event\n if (didThrow) {\n concludeUpgrade();\n } else {\n queueTask(concludeUpgrade);\n }\n transaction._prioritizedListeners.set(\"error\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // throw arguments[0].target.error;\n // console.log(\"error in versionchange transaction - not sure if anything needs to be done here\", e.target.error.name);\n });\n transaction._prioritizedListeners.set(\"abort\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n queueTask(() => {\n // Reset transaction in a tick after onabort (upgrade-transaction-lifecycle-user-aborted.any)\n request.transaction = null;\n cb(new AbortError());\n });\n });\n transaction._prioritizedListeners.set(\"complete\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // Let other complete event handlers run before continuing\n queueTask(() => {\n // Reset transaction in a tick after oncomplete (upgrade-transaction-lifecycle-committed.any.js)\n request.transaction = null;\n if (connection._closePending) {\n cb(new AbortError());\n } else {\n cb(null);\n }\n });\n });\n };\n waitForOthersClosed();\n });\n};\n\n// https://w3c.github.io/IndexedDB/#opening\nconst openDatabase = (databases, connectionQueues, name, version, request, cb) => {\n const openDBTask = () => {\n return new Promise(resolve => {\n const onComplete = err => {\n try {\n if (err) {\n // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these\n // steps are aborted.\n cb(err);\n } else {\n cb(null, connection);\n }\n } finally {\n resolve();\n }\n };\n\n // Let db be the database named name in storageKey, or null otherwise.\n let db = databases.get(name);\n if (db === undefined) {\n // If db is null, let db be a new database with name `name`, version 0 (zero), and with no object stores.\n db = new Database(name, 0);\n databases.set(name, db);\n }\n\n // If version is undefined, let version be 1 if db is null, or db’s version otherwise.\n if (version === undefined) {\n version = db.version !== 0 ? db.version : 1;\n }\n\n // If db’s version is greater than version, return a newly created \"VersionError\" DOMException and abort these steps.\n if (db.version > version) {\n return onComplete(new VersionError());\n }\n\n // Let connection be a new connection to db.\n const connection = new FDBDatabase(db);\n\n // If db’s version is less than version, then:\n if (db.version < version) {\n // (run a version change transaction and resolve so that the next promise in the queue will execute)\n runVersionchangeTransaction(connection, version, request, err => {\n onComplete(err);\n });\n } else {\n onComplete(null);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, openDBTask);\n};\nclass FDBFactory {\n _databases = new Map();\n // https://w3c.github.io/IndexedDB/#connection-queue\n _connectionQueues = new Map(); // promise chain as lightweight FIFO task queue\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-cmp\n cmp(first, second) {\n validateRequiredArguments(arguments.length, 2, \"IDBFactory.cmp\");\n return cmp(first, second);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-deletedatabase\n deleteDatabase(name) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.deleteDatabase\");\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n deleteDatabase(this._databases, this._connectionQueues, name, request, (err, oldVersion) => {\n if (err) {\n request.error = new DOMException(err.message, err.name);\n request.readyState = \"done\";\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = undefined;\n request.readyState = \"done\";\n const event2 = new FDBVersionChangeEvent(\"success\", {\n newVersion: null,\n oldVersion\n });\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version\n open(name, version) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.open\");\n if (arguments.length > 1 && version !== undefined) {\n // Based on spec, not sure why \"MAX_SAFE_INTEGER\" instead of \"unsigned long long\", but it's needed to pass\n // tests\n version = enforceRange(version, \"MAX_SAFE_INTEGER\");\n }\n if (version === 0) {\n throw new TypeError(\"Database version cannot be 0\");\n }\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n openDatabase(this._databases, this._connectionQueues, name, version, request, (err, connection) => {\n if (err) {\n request.result = undefined;\n request.readyState = \"done\";\n request.error = new DOMException(err.message, err.name);\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = connection;\n request.readyState = \"done\";\n const event2 = new FakeEvent(\"success\");\n event2.eventPath = [];\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases\n databases() {\n return Promise.resolve(Array.from(this._databases.entries(), ([name, database]) => {\n const activeVersionChangeConnection = database.connections.find(connection => connection._runningVersionchangeTransaction);\n // If a versionchange is in progress, report the old version. See `get-databases.any.js` test:\n // \"The result of databases() should contain the versions of databases at the time of calling,\n // regardless of versionchange transactions currently running.\"\n const version = activeVersionChangeConnection ? activeVersionChangeConnection._oldVersion : database.version;\n return {\n name,\n version\n };\n }).filter(({\n version\n }) => {\n // Ignore newly-created DBs with active versionchange transactions. See `get-databases.any.js` test:\n // \"The result of databases() should be only those databases which have been created at the\n // time of calling, regardless of versionchange transactions currently running.\"\n return version > 0;\n }));\n }\n get [Symbol.toStringTag]() {\n return \"IDBFactory\";\n }\n}\nexport default FDBFactory;","import FDBFactory from \"./FDBFactory.js\";\nconst fakeIndexedDB = new FDBFactory();\nexport default fakeIndexedDB;","import fakeIndexedDB from \"../build/esm/fakeIndexedDB.js\";\nimport FDBCursor from \"../build/esm/FDBCursor.js\";\nimport FDBCursorWithValue from \"../build/esm/FDBCursorWithValue.js\";\nimport FDBDatabase from \"../build/esm/FDBDatabase.js\";\nimport FDBFactory from \"../build/esm/FDBFactory.js\";\nimport FDBIndex from \"../build/esm/FDBIndex.js\";\nimport FDBKeyRange from \"../build/esm/FDBKeyRange.js\";\nimport FDBObjectStore from \"../build/esm/FDBObjectStore.js\";\nimport FDBOpenDBRequest from \"../build/esm/FDBOpenDBRequest.js\";\nimport FDBRecord from \"../build/esm/FDBRecord.js\";\nimport FDBRequest from \"../build/esm/FDBRequest.js\";\nimport FDBTransaction from \"../build/esm/FDBTransaction.js\";\nimport FDBVersionChangeEvent from \"../build/esm/FDBVersionChangeEvent.js\";\n\n// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js\nvar globalVar =\n typeof window !== \"undefined\"\n ? window\n : typeof WorkerGlobalScope !== \"undefined\"\n ? self\n : typeof global !== \"undefined\"\n ? global\n : Function(\"return this;\")();\n\n// Partly match the native behavior for `globalThis.indexedDB`, `globalThis.IDBCursor`, etc.\n// Per the IDL, `indexedDB` is readonly but the others are readwrite. For us, though, we want it to still\n// be overwritable with `globalThis.<global> = ...`, so we make them all readwrite.\n// https://w3c.github.io/IndexedDB/#idl-index\nconst createPropertyDescriptor = (value) => {\n return {\n value,\n enumerable: false,\n configurable: true,\n writable: true,\n };\n};\n\nObject.defineProperties(globalVar, {\n indexedDB: createPropertyDescriptor(fakeIndexedDB),\n IDBCursor: createPropertyDescriptor(FDBCursor),\n IDBCursorWithValue: createPropertyDescriptor(FDBCursorWithValue),\n IDBDatabase: createPropertyDescriptor(FDBDatabase),\n IDBFactory: createPropertyDescriptor(FDBFactory),\n IDBIndex: createPropertyDescriptor(FDBIndex),\n IDBKeyRange: createPropertyDescriptor(FDBKeyRange),\n IDBObjectStore: createPropertyDescriptor(FDBObjectStore),\n IDBOpenDBRequest: createPropertyDescriptor(FDBOpenDBRequest),\n IDBRecord: createPropertyDescriptor(FDBRecord),\n IDBRequest: createPropertyDescriptor(FDBRequest),\n IDBTransaction: createPropertyDescriptor(FDBTransaction),\n IDBVersionChangeEvent: createPropertyDescriptor(FDBVersionChangeEvent),\n});\n","/**\n * arbi login [--email <email>] [--password <password>] [--signing-key <key>]\n *\n * Authenticates via SDK, stores signing key.\n * Supports password login, SSO login, or signing-key login (for agent recovery).\n * If email/password not provided via flags or env vars, prompts interactively.\n * After login, shows interactive workspace picker.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport {\n performPasswordLogin,\n performSigningKeyLogin,\n performSsoDeviceFlowLogin,\n formatWorkspaceChoices,\n} from '@arbidocs/sdk'\nimport { success, error, dim, ref } from '../output.js'\nimport { store, updateConfig, getConfig, clearChatSession } from '../config.js'\nimport { promptInput, promptPassword, promptSelect } from '../prompts.js'\nimport { checkForUpdates } from '../version-check.js'\nimport { runAction, formatCliError } from '../helpers.js'\nimport { updateCompletionCache } from '../completion-cache.js'\nimport { setupAgent, startListening } from './listen.js'\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Log in to ARBI')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('-k, --signing-key <key>', 'Signing key (base64) for agent recovery login')\n .option('-w, --workspace <id>', 'Workspace ID to select after login')\n .option('--sso', 'Log in with Auth0 SSO (device flow)')\n .option('--agent <name>', 'Agent backend to configure (claude, openclaw)')\n .option('--listen', 'Start DM listener after login')\n .option('--json', 'Emit a single JSON object on success (scripting)')\n .action(\n (opts: {\n email?: string\n password?: string\n signingKey?: string\n workspace?: string\n sso?: boolean\n agent?: string\n listen?: boolean\n json?: boolean\n }) =>\n runAction(async () => {\n const config = store.requireConfig()\n\n // Guard: non-TTY stdin + missing credentials → print a clear error\n // instead of inquirer's confusing \"User force closed the prompt with 0 null\".\n const isTty = process.stdin.isTTY\n const emailFromFlagOrEnv = opts.email || process.env.ARBI_EMAIL\n if (!isTty && !emailFromFlagOrEnv) {\n const msg =\n 'Email is required when stdin is not a TTY. Use --email <email> or set ARBI_EMAIL.'\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(msg)\n process.exit(1)\n }\n const passwordFromFlagOrEnv = opts.password || process.env.ARBI_PASSWORD\n if (!isTty && !passwordFromFlagOrEnv && !opts.signingKey) {\n // `--sso` still needs the master password: ARBI is E2E-encrypted,\n // and the password is the seed for the user's encryption keys.\n // The SSO token only authenticates the user with Auth0; it can't\n // unlock the user's E2E vault on its own. Surface that here so\n // an agent doesn't have to read the source to learn why.\n const why = opts.sso\n ? '\\nNote: --sso still requires --password — the master password is the E2E key seed,\\n' +\n 'the SSO token only proves identity. ARBI has no passwordless mode.'\n : ''\n const msg =\n 'Password is required when stdin is not a TTY. Use --password <password> or set ARBI_PASSWORD.' +\n why\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(msg)\n process.exit(1)\n }\n\n // Resolve email: flag > env var > interactive prompt\n const email = emailFromFlagOrEnv || (await promptInput('Email'))\n\n try {\n let ssoPolling = false\n const { arbi } = opts.signingKey\n ? await performSigningKeyLogin(config, email, opts.signingKey, store)\n : opts.sso\n ? await (async () => {\n const pw = passwordFromFlagOrEnv || (await promptPassword('Password'))\n const result = await performSsoDeviceFlowLogin(config, email, pw, store, {\n onUserCode: (userCode: string, verificationUri: string) => {\n console.log(`\\nOpen this URL in your browser:\\n ${verificationUri}\\n`)\n console.log(`And enter code: ${userCode}\\n`)\n console.log('Waiting for authorization...')\n ssoPolling = true\n },\n onPoll: () => {\n process.stdout.write('.')\n },\n })\n if (ssoPolling) console.log('\\n')\n return result\n })()\n : await (async () => {\n const pw = passwordFromFlagOrEnv || (await promptPassword('Password'))\n return performPasswordLogin(config, email, pw, store)\n })()\n\n // Confirm authentication succeeded (human-readable mode only)\n if (!opts.json) success(`Logged in as ${email}`)\n\n // Clear stale chat session from previous login\n clearChatSession()\n\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n updateCompletionCache(wsList)\n\n // Filter to workspaces where user has a role (member of workspace)\n const memberWorkspaces = wsList.filter((ws) =>\n ws.users?.some((u) => u.user.email === email)\n )\n\n let selectedWorkspace: { external_id: string; name: string } | undefined\n\n if (memberWorkspaces.length === 0) {\n if (!opts.json) {\n console.log('No workspaces found. Create one with: arbi workspace create <name>')\n }\n } else if (opts.workspace) {\n const ws = memberWorkspaces.find((w) => w.external_id === opts.workspace)\n if (!ws) {\n const msg = `Workspace ${opts.workspace} not found or you don't have access.`\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(msg)\n process.exit(1)\n }\n updateConfig({ selectedWorkspaceId: ws.external_id })\n selectedWorkspace = { external_id: ws.external_id, name: ws.name }\n if (!opts.json) success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n } else if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n selectedWorkspace = {\n external_id: memberWorkspaces[0].external_id,\n name: memberWorkspaces[0].name,\n }\n if (!opts.json)\n success(\n `Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`\n )\n } else if (opts.json) {\n // JSON mode with multiple workspaces: don't prompt; caller picks\n // via --workspace or `arbi workspace select`.\n } else {\n const choices = formatWorkspaceChoices(memberWorkspaces)\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = memberWorkspaces.find((w) => w.external_id === selected)!\n selectedWorkspace = { external_id: selected, name: ws.name }\n success(`Workspace: ${ws.name} (${ref(selected)})`)\n dim('\\nTip: Run \"arbi config alias\" to use A as a shortcut for \"arbi ask\"')\n }\n\n // Agent setup + listener (optional)\n if (opts.agent || opts.listen) {\n await setupAgent(opts.agent, config)\n if (opts.listen) {\n await startListening(opts.agent, config)\n }\n }\n\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: true,\n email,\n server: config.baseUrl,\n workspace: selectedWorkspace ?? null,\n workspaces_available: memberWorkspaces.length,\n })\n )\n }\n } catch (err) {\n const msg = formatCliError(err)\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(`Login failed: ${msg}`)\n process.exit(1)\n } finally {\n await checkForUpdates(getConfig()?.autoUpdate)\n }\n })()\n )\n}\n","/**\n * Version check with 24h cache.\n *\n * - On login: warns or auto-updates depending on config.autoUpdate\n * - On errors: hints from cache only (no network)\n * - On update: shows changelog between current and target version\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\nimport { execSync } from 'node:child_process'\nimport { warn } from './output.js'\n\ndeclare const __CLI_VERSION__: string\n\ninterface VersionCache {\n latest: string\n checkedAt: number\n}\n\nconst CACHE_FILE = path.join(os.homedir(), '.arbi', 'version-cache.json')\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000 // 24 hours\n\nfunction readCache(): VersionCache | null {\n try {\n const data = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'))\n if (data.latest && data.checkedAt && Date.now() - data.checkedAt < CACHE_TTL_MS) {\n return data as VersionCache\n }\n } catch {\n // No cache or invalid\n }\n return null\n}\n\nfunction writeCache(latest: string): void {\n try {\n const dir = path.dirname(CACHE_FILE)\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n fs.writeFileSync(CACHE_FILE, JSON.stringify({ latest, checkedAt: Date.now() }) + '\\n')\n } catch {\n // Non-critical\n }\n}\n\nexport function getLatestVersion(skipCache = false): string | null {\n if (!skipCache) {\n const cached = readCache()\n if (cached) return cached.latest\n }\n\n try {\n const latest = execSync('npm view @arbidocs/cli version 2>/dev/null', {\n encoding: 'utf8',\n timeout: 5000,\n }).trim()\n writeCache(latest)\n return latest\n } catch {\n return null\n }\n}\n\nexport function getCurrentVersion(): string {\n return __CLI_VERSION__\n}\n\n// ── Changelog reading ───────────────────────────────────────────────────────\n\n/**\n * Read CHANGELOG.md bundled in the installed @arbidocs/cli package\n * and extract sections between fromVersion (exclusive) and toVersion (inclusive).\n *\n * Call this AFTER npm install so the file on disk is from the new version.\n */\nexport function readChangelog(fromVersion: string, toVersion: string): string | null {\n try {\n const globalRoot = execSync('npm root -g', { encoding: 'utf8', timeout: 5000 }).trim()\n const changelogPath = path.join(globalRoot, '@arbidocs', 'cli', 'CHANGELOG.md')\n const text = fs.readFileSync(changelogPath, 'utf8')\n return extractSections(text, fromVersion, toVersion)\n } catch {\n return null\n }\n}\n\n/**\n * Parse CHANGELOG.md and return all ## sections from toVersion\n * down to (but not including) fromVersion.\n *\n * Filters out: compare-changes links, Chore sections, and Contributors.\n */\nfunction extractSections(changelog: string, fromVersion: string, toVersion: string): string | null {\n const lines = changelog.split('\\n')\n const sections: string[] = []\n let capturing = false\n let skipSection = false\n\n for (const line of lines) {\n // Match \"## v0.3.3\" style headers\n const match = line.match(/^## v(.+)/)\n if (match) {\n skipSection = false\n const version = match[1].trim()\n if (version === fromVersion) {\n // Reached the user's current version — stop\n break\n }\n // Start capturing from toVersion (or any version between to and from)\n if (version === toVersion || capturing) {\n capturing = true\n }\n }\n\n if (!capturing) continue\n\n // Skip [compare changes] links\n if (line.match(/^\\[compare changes\\]/)) continue\n\n // Skip Chore and Contributors ### sections (and their content)\n if (line.match(/^### .*(Chore|Contributors)/)) {\n skipSection = true\n continue\n }\n // A new ### section ends the skip\n if (skipSection && line.match(/^### /)) {\n skipSection = false\n }\n if (skipSection) continue\n\n sections.push(line)\n }\n\n // Collapse multiple blank lines into one\n const result = sections\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n return result || null\n}\n\n/**\n * Print changelog between two versions. Reads from the bundled CHANGELOG.md\n * in the installed package — call AFTER npm install.\n */\nexport function showChangelog(fromVersion: string, toVersion: string): void {\n const changelog = readChangelog(fromVersion, toVersion)\n if (changelog) {\n console.log('\\n' + changelog)\n }\n}\n\n// ── Update checks ───────────────────────────────────────────────────────────\n\n/**\n * Called after login. If auto-update is enabled, updates in place.\n * Otherwise warns with the standard prefix.\n */\nexport async function checkForUpdates(autoUpdate?: boolean): Promise<void> {\n try {\n const latest = getLatestVersion()\n if (!latest || latest === __CLI_VERSION__) return\n\n if (autoUpdate) {\n warn(`\\nYour arbi version is out of date (${__CLI_VERSION__} → ${latest}). Updating...`)\n execSync('npm install -g @arbidocs/cli@latest', { stdio: 'inherit' })\n showChangelog(__CLI_VERSION__, latest)\n console.log(`Updated to ${latest}.`)\n } else {\n warn(\n `\\nYour arbi version is out of date (${__CLI_VERSION__} → ${latest}).` +\n `\\nRun \"arbi update\" to upgrade, or \"arbi update auto\" to always stay up to date.`\n )\n }\n } catch {\n // Silent\n }\n}\n\nconst NAG_FILE = path.join(os.homedir(), '.arbi', 'last-update-hint.json')\nconst NAG_INTERVAL_MS = 24 * 60 * 60 * 1000 // 24h\n\nfunction shouldShowNag(latest: string): boolean {\n // Skip in JSON / scripted paths — an agent piping output to jq shouldn't\n // have its stderr polluted on every error, and a once-a-day human hint is\n // plenty. Detect via env (set explicitly by long-running commands) OR by\n // sniffing `--json` in argv (cheap, covers every short-lived command path\n // including the error branches that drop into hintUpdateOnError).\n if (process.env.ARBI_JSON === '1') return false\n if (process.argv.includes('--json')) return false\n try {\n const data = JSON.parse(fs.readFileSync(NAG_FILE, 'utf8')) as {\n latest?: string\n shownAt?: number\n }\n if (\n data.latest === latest &&\n typeof data.shownAt === 'number' &&\n Date.now() - data.shownAt < NAG_INTERVAL_MS\n ) {\n return false\n }\n } catch {\n // No file yet — first nag of the day, fall through.\n }\n return true\n}\n\nfunction markNagShown(latest: string): void {\n try {\n const dir = path.dirname(NAG_FILE)\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n fs.writeFileSync(NAG_FILE, JSON.stringify({ latest, shownAt: Date.now() }) + '\\n')\n } catch {\n // Non-critical\n }\n}\n\n/**\n * On unexpected errors, hint from cache only (no network call). Gated to once\n * per day per latest-known version, and suppressed entirely when the caller\n * sets ARBI_JSON=1 (commands wrap their --json paths in that flag).\n */\nexport function hintUpdateOnError(): void {\n try {\n const cached = readCache()\n if (!cached || cached.latest === __CLI_VERSION__) return\n if (!shouldShowNag(cached.latest)) return\n warn(\n `Your arbi version is out of date (${__CLI_VERSION__} → ${cached.latest}). Run \"arbi update\".`\n )\n markNagShown(cached.latest)\n } catch {\n // Silent\n }\n}\n","/**\n * Local task persistence — stores background task metadata in ~/.arbi/tasks.json.\n *\n * Simple JSON file, same pattern as session/config files.\n * Auto-prunes tasks older than 7 days on read.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport interface StoredTask {\n id: string\n question: string\n workspaceId: string\n submittedAt: string\n status: 'queued' | 'in_progress' | 'completed' | 'failed'\n model?: string | null\n}\n\nconst MAX_TASKS = 50\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000 // 7 days\n\nfunction getTasksFile(): string {\n const configDir = process.env.ARBI_CONFIG_DIR ?? path.join(os.homedir(), '.arbi')\n return path.join(configDir, 'tasks.json')\n}\n\nfunction ensureDir(filePath: string): void {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n}\n\nfunction readTasks(): StoredTask[] {\n try {\n const content = fs.readFileSync(getTasksFile(), 'utf-8')\n return JSON.parse(content) as StoredTask[]\n } catch {\n return []\n }\n}\n\nfunction writeTasks(tasks: StoredTask[]): void {\n const filePath = getTasksFile()\n ensureDir(filePath)\n fs.writeFileSync(filePath, JSON.stringify(tasks, null, 2) + '\\n', { mode: 0o600 })\n}\n\n/** Read tasks, auto-pruning entries older than 7 days. */\nexport function getTasks(): StoredTask[] {\n const now = Date.now()\n const tasks = readTasks().filter((t) => now - new Date(t.submittedAt).getTime() < MAX_AGE_MS)\n return tasks\n}\n\n/** Add a task (most recent first), cap at MAX_TASKS. */\nexport function addTask(task: StoredTask): void {\n const tasks = [task, ...getTasks().filter((t) => t.id !== task.id)].slice(0, MAX_TASKS)\n writeTasks(tasks)\n}\n\n/** Update the status of a stored task. */\nexport function updateTaskStatus(id: string, status: StoredTask['status']): void {\n const tasks = readTasks()\n const task = tasks.find((t) => t.id === id)\n if (task) {\n task.status = status\n writeTasks(tasks)\n }\n}\n\n/** Get the most recently submitted task. */\nexport function getLatestTask(): StoredTask | null {\n const tasks = getTasks()\n return tasks[0] ?? null\n}\n","/**\n * Background WebSocket notifications — prints events to stderr\n * so they don't interfere with piped stdout.\n *\n * Enabled via `arbi config notifications on`.\n * Started automatically by resolveWorkspace() when enabled.\n */\n\nimport {\n connectWithReconnect,\n formatWsMessage,\n type ReconnectableWsConnection,\n type MessageLevel,\n} from '@arbidocs/sdk'\nimport { isMessageType, type WsResponseCompleteMessage } from '@arbidocs/client'\nimport { updateTaskStatus } from './task-store.js'\nimport { chalk } from './output.js'\n\nlet activeConnection: ReconnectableWsConnection | null = null\n\nfunction timestamp(): string {\n return new Date().toLocaleTimeString('en-GB', { hour12: false })\n}\n\nfunction colorize(level: MessageLevel, text: string): string {\n if (level === 'success') return chalk.green(text)\n if (level === 'error') return chalk.red(text)\n if (level === 'warning') return chalk.yellow(text)\n return text\n}\n\n/**\n * Start background WebSocket notifications.\n * Prints to stderr so stdout stays clean for command output.\n * Safe to call multiple times — only one connection is kept.\n */\nexport async function startBackgroundNotifications(\n baseUrl: string,\n accessToken: string\n): Promise<void> {\n if (activeConnection) return\n\n try {\n activeConnection = await connectWithReconnect({\n baseUrl,\n accessToken,\n onMessage: (msg) => {\n // Sync task store when background tasks complete\n if (isMessageType<WsResponseCompleteMessage>(msg, 'response_complete')) {\n updateTaskStatus(msg.response_id, msg.status)\n }\n\n const { text, level } = formatWsMessage(msg)\n process.stderr.write(`\\n${colorize(level, `[${timestamp()}] ${text}`)}\\n`)\n },\n onClose: () => {\n activeConnection = null\n },\n onReconnecting: (attempt, maxRetries) => {\n process.stderr.write(\n `\\n${chalk.yellow(`[${timestamp()}] Reconnecting... (${attempt}/${maxRetries})`)}\\n`\n )\n },\n onReconnected: () => {\n process.stderr.write(`\\n${chalk.green(`[${timestamp()}] Reconnected`)}\\n`)\n },\n onReconnectFailed: () => {\n process.stderr.write(`\\n${chalk.red(`[${timestamp()}] Reconnection failed`)}\\n`)\n },\n })\n } catch {\n // Silent failure — notifications are best-effort\n }\n}\n\nexport function stopBackgroundNotifications(): void {\n activeConnection?.close()\n activeConnection = null\n}\n\n// Clean up on exit\nprocess.on('exit', stopBackgroundNotifications)\nprocess.on('SIGINT', () => {\n stopBackgroundNotifications()\n process.exit(0)\n})\n","/**\n * Shared CLI helpers — eliminates boilerplate across all commands.\n *\n * Error handling wraps core's throwing functions with process.exit(1).\n * Auth/workspace resolution delegates to core via the CLI's store instance.\n * Table formatting and JSON parsing are CLI-specific.\n */\n\nimport {\n ArbiError,\n ArbiApiError,\n getErrorMessage,\n getErrorCode,\n resolveAuth as coreResolveAuth,\n resolveWorkspace as coreResolveWorkspace,\n formatUserName,\n dm as dmOps,\n type AuthContext,\n type WorkspaceContext,\n type UserInfo,\n} from '@arbidocs/sdk'\nimport { store, getConfig, resolveConfig } from './config.js'\nimport { hintUpdateOnError } from './version-check.js'\nimport { startBackgroundNotifications } from './notifications.js'\nimport { error as cliError, chalk } from './output.js'\n\n// Re-export context types and shared utilities for convenience\nexport type { AuthContext, WorkspaceContext, UserInfo }\nexport { formatUserName }\n\n// ── Error handling ────────────────────────────────────────────────────────────\n\n// ── Connection error diagnosis ─────────────────────────────────────────────\n\n/** Map Node.js error codes to actionable user hints. */\nconst CONNECTION_ERROR_HINTS: Record<string, string> = {\n ECONNREFUSED: 'Connection refused. Is the backend running?',\n ECONNRESET: 'Connection reset by server. The backend may have restarted.',\n ENOTFOUND: 'DNS resolution failed. Check the server URL.',\n ETIMEDOUT: 'Connection timed out. Check network connectivity.',\n UNABLE_TO_VERIFY_LEAF_SIGNATURE:\n 'TLS certificate cannot be verified. The cert may be expired or self-signed.',\n CERT_HAS_EXPIRED: 'TLS certificate has expired. Renew with manage-deployment.',\n ERR_TLS_CERT_ALTNAME_INVALID: 'TLS certificate hostname mismatch. Check the server URL.',\n DEPTH_ZERO_SELF_SIGNED_CERT: 'Self-signed TLS certificate. The cert may need to be renewed.',\n SELF_SIGNED_CERT_IN_CHAIN: 'Self-signed certificate in chain. The cert may need to be renewed.',\n}\n\n/**\n * Turn a raw error into an actionable connection-error message.\n * Returns undefined if the error is not a connection-level problem.\n */\nfunction diagnoseConnectionError(err: unknown): string | undefined {\n const code = getErrorCode(err)\n if (code && code in CONNECTION_ERROR_HINTS) {\n return CONNECTION_ERROR_HINTS[code]\n }\n\n // Catch generic \"fetch failed\" with no deeper cause code\n const msg = err instanceof Error ? err.message : ''\n if (msg === 'fetch failed' || msg.includes('fetch failed')) {\n return 'Network error connecting to the server. Run `arbi health` to diagnose.'\n }\n\n return undefined\n}\n\n/**\n * Format an error message with API error details if available.\n *\n * ArbiApiError.apiError may contain:\n * - from authenticatedFetch: { status, statusText }\n * - from requireData/requireOk: the raw OpenAPI error object ({ detail: string, ... })\n *\n * `detail` is sometimes a string and sometimes itself a structured object\n * (e.g. FastAPI validation errors). We unwrap recursively so an agent never\n * sees `[object Object]` from a 422 — that's the single most common \"I can't\n * tell what went wrong\" complaint.\n */\nexport function formatCliError(err: unknown): string {\n // Check for connection-level errors first (gives the best message for \"fetch failed\")\n const connectionHint = diagnoseConnectionError(err)\n if (connectionHint) return connectionHint\n\n if (err instanceof ArbiApiError && err.apiError && typeof err.apiError === 'object') {\n const base = err.message\n const apiErr = err.apiError as Record<string, unknown>\n const detail = stringifyApiDetail(apiErr.detail ?? apiErr.message ?? apiErr.error ?? apiErr)\n if (detail && !base.includes(detail)) {\n return `${base} — ${detail}`\n }\n return base\n }\n return getErrorMessage(err)\n}\n\n/**\n * Squeeze a FastAPI/openapi error body into a single human-readable line.\n * Handles strings, arrays of {loc, msg, ...} validation errors, and nested\n * `{detail: …}` envelopes.\n */\nfunction stringifyApiDetail(value: unknown): string {\n if (!value) return ''\n if (typeof value === 'string') return value\n if (Array.isArray(value)) {\n // FastAPI 422 shape: [{loc: [...], msg: \"...\", type: \"...\"}, ...]\n const parts = value\n .map((v) => {\n if (typeof v === 'string') return v\n if (v && typeof v === 'object') {\n const rec = v as Record<string, unknown>\n const loc = Array.isArray(rec.loc) ? rec.loc.join('.') : undefined\n const msg = typeof rec.msg === 'string' ? rec.msg : undefined\n if (loc && msg) return `${loc}: ${msg}`\n return stringifyApiDetail(v)\n }\n return ''\n })\n .filter(Boolean)\n return parts.join('; ')\n }\n if (typeof value === 'object') {\n const rec = value as Record<string, unknown>\n if (typeof rec.detail === 'string') return rec.detail\n if (Array.isArray(rec.detail)) return stringifyApiDetail(rec.detail)\n if (typeof rec.message === 'string') return rec.message\n if (typeof rec.error === 'string') return rec.error\n // Last-ditch: serialize without exploding into [object Object]\n try {\n const s = JSON.stringify(value)\n // Don't return the empty-object placeholder\n return s === '{}' ? '' : s\n } catch {\n return ''\n }\n }\n return String(value)\n}\n\n/**\n * Wrap a command action — catches errors, formats message, exits.\n * Every command handler should use this instead of manual try/catch.\n */\nexport function runAction(fn: () => Promise<void>): () => Promise<void> {\n return async () => {\n try {\n await fn()\n process.exit(0)\n } catch (err) {\n cliError(`Error: ${formatCliError(err)}`)\n hintUpdateOnError()\n process.exit(1)\n }\n }\n}\n\n// ── Auth & workspace resolution ───────────────────────────────────────────────\n\n/**\n * Authenticate and return the SDK client + config.\n * Auto-detects config if not already set, then delegates to core.\n */\nexport async function resolveAuth(): Promise<AuthContext> {\n try {\n // Ensure config exists (auto-detect if needed) before core auth\n resolveConfig()\n return await coreResolveAuth(store)\n } catch (err) {\n if (err instanceof ArbiError) {\n cliError(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n/**\n * Authenticate, resolve workspace, and set up headers.\n * Auto-detects config if not already set, then delegates to core.\n *\n * @param skipNotifications - Skip background notification WS. Set to true\n * when the command will open its own WebSocket (upload --watch, watch)\n * to avoid session conflicts (backend enforces one WS per session).\n */\nexport async function resolveWorkspace(\n workspaceOpt?: string,\n { skipNotifications = false }: { skipNotifications?: boolean } = {}\n): Promise<WorkspaceContext> {\n try {\n // Ensure config exists (auto-detect if needed) before core auth\n resolveConfig()\n const ctx = await coreResolveWorkspace(store, workspaceOpt)\n\n // Start background notifications if enabled (skip for commands with their own WS)\n if (!skipNotifications && getConfig()?.notifications !== false) {\n startBackgroundNotifications(ctx.config.baseUrl, ctx.accessToken).catch(() => {})\n }\n\n return ctx\n } catch (err) {\n if (err instanceof ArbiError) {\n cliError(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── DM crypto context ────────────────────────────────────────────────────────\n\n/**\n * Authenticate and create a DM crypto context for E2E encrypted messaging.\n * Returns the arbi client, auth context, and crypto context together.\n */\nexport async function resolveDmCrypto() {\n const authCtx = await resolveAuth()\n const { arbi, loginResult } = authCtx\n const userExtId = arbi.session.getState().userExtId\n if (!userExtId) {\n cliError('No user ID in session — cannot set up DM encryption.')\n process.exit(1)\n }\n const crypto = dmOps.createDmCryptoContext(arbi, loginResult.signingPrivateKey, userExtId)\n return { ...authCtx, crypto }\n}\n\n// ── Table formatting ──────────────────────────────────────────────────────────\n\nexport interface Column {\n header: string\n width: number\n value: (row: Record<string, unknown>) => string\n}\n\n/**\n * Truncate a string to `width` characters, leaving room for a `…` marker so\n * callers can see at a glance that content was cut. Used by `printTable` and\n * by individual commands that render free-text columns (emails, message\n * bodies). Multi-byte characters count as 1.\n */\nexport function truncate(value: string, width: number): string {\n if (width <= 0) return ''\n if (value.length <= width) return value\n if (width === 1) return '…'\n return value.slice(0, width - 1) + '…'\n}\n\n/**\n * Print a formatted table with header + rows.\n * Truncates overflow with `…` so consumers can spot cut-off cells.\n */\nexport function printTable<T extends Record<string, unknown>>(columns: Column[], rows: T[]): void {\n // Header\n console.log(chalk.bold(columns.map((c) => c.header.padEnd(c.width)).join('')))\n\n // Rows\n for (const row of rows) {\n console.log(\n columns\n .map((c) => {\n const val = c.value(row as Record<string, unknown>) ?? ''\n // Reserve 1 char for trailing space so columns stay readable.\n return truncate(val, c.width - 1).padEnd(c.width)\n })\n .join('')\n )\n }\n}\n\n// ── JSON parsing ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a JSON string argument with a helpful error message.\n */\nexport function parseJsonArg<T = Record<string, unknown>>(input: string, example: string): T {\n try {\n return JSON.parse(input) as T\n } catch {\n cliError(`Invalid JSON. Example: ${example}`)\n process.exit(1)\n }\n}\n\n// ── Non-TTY & JSON helpers ───────────────────────────────────────────────────\n\n/**\n * `true` when stdin is a real terminal. Used everywhere we'd otherwise pop an\n * inquirer prompt — agents pipe stdin closed and we must refuse instead of\n * hanging on (or worse, exit-0-on-cancel as the old `dm send` no-args path\n * did).\n */\nexport function isInteractive(): boolean {\n return Boolean(process.stdin.isTTY)\n}\n\n/**\n * Refuse to launch an interactive prompt when stdin isn't a TTY. Prints a\n * recovery hint to stderr and exits 1 — never returns. Call this at the top\n * of any command path that's about to call inquirer.\n */\nexport function requireInteractive(hint: string): void {\n if (isInteractive()) return\n cliError(`Cannot prompt: not running in a terminal. ${hint}`)\n process.exit(1)\n}\n\n/**\n * Pretty-print a JSON-serializable value to stdout with a trailing newline.\n * Keeping every command on the same printer means `--json` output is byte-for-\n * byte identical across the CLI (no stray colors, no missing newline) and the\n * shape stays parseable when piped to `| jq`.\n */\nexport function printJson(value: unknown): void {\n process.stdout.write(JSON.stringify(value, null, 2) + '\\n')\n}\n\n/**\n * Suggest the canonical next command on a \"not found\" error. Keeps recovery\n * hints uniform — without them an agent reading \"X not found.\" has nowhere\n * to go; with them, it knows to call `arbi <thing> --ids` or similar.\n */\nexport function notFoundHint(message: string, hintCommand: string): string {\n return `${message}\\nTry: ${hintCommand}`\n}\n\n/**\n * Find the candidate name closest to `input`. Used for \"Did you mean …?\"\n * hints when commander's built-in suggestions don't fire (e.g. an unknown\n * subcommand sneaks past a parent command that accepts positional args).\n * Cheap leading-prefix match — good enough for short subcommand vocabularies.\n */\nexport function nearestMatch(input: string, candidates: string[]): string | null {\n if (!input || candidates.length === 0) return null\n const lower = input.toLowerCase()\n const prefix = candidates.find((c) => c.startsWith(lower))\n if (prefix) return prefix\n let best: { name: string; score: number } | null = null\n for (const c of candidates) {\n let score = 0\n for (let i = 0; i < Math.min(c.length, lower.length); i++) {\n if (c[i] === lower[i]) score++\n else break\n }\n if (!best || score > best.score) best = { name: c, score }\n }\n return best && best.score >= 1 ? best.name : null\n}\n\n/**\n * Print a \"did you mean X?\" message and exit 1. Shared by the parent\n * commands that have both a default action and subcommands (`dm`, `task`,\n * `agent`, `session`) — commander treats unknown subcommands as positional\n * args there and the default suggestion machinery skips them.\n */\nexport function suggestSubcommandAndExit(\n parentName: string,\n attempted: string,\n candidates: string[]\n): never {\n const suggestion = nearestMatch(attempted, candidates)\n const hint = suggestion ? ` (Did you mean ${suggestion}?)` : ''\n cliError(\n `unknown subcommand '${attempted}' for '${parentName}'${hint}\\nAvailable: ${candidates.join(', ')}`\n )\n process.exit(1)\n}\n\n// ── Shared list / picker primitives ──────────────────────────────────────────\n\n/**\n * Print `data` as JSON when `opts.json` is set, otherwise let the caller render\n * the human table — but in either case route the empty-state message to stderr\n * so `arbi <thing> list | wc -l` stays honest. Returns `true` when the caller\n * should keep going (data has rows and we're not in JSON mode); `false` when\n * the function has already produced output. Collapses the 20+ near-identical\n * blocks that look like:\n *\n * if (opts.json) { printJson(data); return }\n * if (data.length === 0) { stderr.write('No X found.'); return }\n * printTable(...)\n */\nexport function emitListOrTable<T>(\n data: T[],\n opts: { json?: boolean },\n emptyMessage: string\n): boolean {\n if (opts.json) {\n printJson(data)\n return false\n }\n if (data.length === 0) {\n process.stderr.write(`${emptyMessage}\\n`)\n return false\n }\n return true\n}\n\n/**\n * Resolve a user-supplied selector (id OR exact, case-insensitive name) against\n * a list of items that have an `external_id` and `name`. Used to be hand-rolled\n * twice — once in `workspaces.ts` for `workspace select`, once in `doctags.ts`\n * for tag refs — with subtly different ambiguity errors. Centralized so every\n * resolver behaves identically (exit code 3 on ambiguous-name or not-found,\n * matching IDs listed).\n */\nexport interface ResolveOk<T> {\n ok: true\n item: T\n id: string\n}\nexport interface ResolveErr<T> {\n ok: false\n reason: 'not-found' | 'ambiguous'\n matches: T[]\n}\nexport type ResolveResult<T> = ResolveOk<T> | ResolveErr<T>\n\nexport function resolveByIdOrName<T extends { external_id?: string; name?: string | null }>(\n list: T[],\n selector: string\n): ResolveResult<T> {\n const byId = list.find((w) => w.external_id === selector)\n if (byId) return { ok: true, item: byId, id: byId.external_id as string }\n\n const lower = selector.toLowerCase()\n const byName = list.filter((w) => (w.name ?? '').toLowerCase() === lower)\n if (byName.length === 1) return { ok: true, item: byName[0], id: byName[0].external_id as string }\n if (byName.length > 1) return { ok: false, reason: 'ambiguous', matches: byName }\n return { ok: false, reason: 'not-found', matches: [] }\n}\n\n/**\n * Standard error path for `resolveByIdOrName`. Prints a recovery hint and\n * exits with code 3 (\"target not found\", distinct from auth/server failures\n * — see SKILL.md exit-code table).\n */\nexport function failResolveAndExit<T extends { external_id?: string; name?: string | null }>(\n thing: string,\n selector: string,\n res: ResolveErr<T>\n): never {\n if (res.reason === 'ambiguous') {\n cliError(\n `Ambiguous ${thing} \"${selector}\" — matches ${res.matches\n .map((m) => m.external_id)\n .join(', ')}. Use the ID.`\n )\n } else {\n cliError(`${thing} \"${selector}\" not found.`)\n }\n process.exit(3)\n}\n\n/**\n * `--dry-run` output for destructive commands. The convention across the\n * CLI: when the caller passes `--dry-run`, print a `[dry-run]` line with\n * the verb and the resolved targets, then exit 0 WITHOUT calling the SDK.\n * Agents can preview the effect of a delete/remove/leave before committing.\n *\n * The actual SDK call site decides what to pass — for delete-by-id flows\n * that's the resolved ID list; for delete-account flows it's the email;\n * for delete-by-filter (`--all`) it's the count + a sample of IDs.\n */\nexport function dryRun(verb: string, targets: string | string[]): void {\n const list = Array.isArray(targets) ? targets : [targets]\n // Goes to stdout (the canonical preview for an agent) — matches the\n // success() pattern used after a real execution. The [dry-run] prefix\n // is a stable marker so an agent can branch on it.\n process.stdout.write(`[dry-run] Would ${verb}:\\n`)\n for (const t of list) process.stdout.write(` - ${t}\\n`)\n process.stdout.write('[dry-run] (no changes made; drop --dry-run to execute)\\n')\n}\n\n/**\n * Generic picker: fetch items, render them as inquirer choices, and let the\n * user pick one. Replaces the per-command `pickTag/pickDocs/pickConversation`\n * helpers that all duplicated this dance.\n *\n * Empty list → writes the supplied empty-state message to stderr and exits 0\n * (the calling command was about to operate on something — there's just\n * nothing to operate on, which isn't an error). Non-TTY → bails with the\n * supplied hint instead of hanging on inquirer.\n */\nexport async function pickFromList<T>(\n items: T[],\n toChoice: (item: T) => { name: string; value: string; description?: string },\n options: {\n message: string\n emptyMessage: string\n nonTtyHint: string\n }\n): Promise<string> {\n if (items.length === 0) {\n process.stderr.write(`${options.emptyMessage}\\n`)\n process.exit(0)\n }\n requireInteractive(options.nonTtyHint)\n // Lazy import so requireInteractive's exit path doesn't pull inquirer in.\n const { promptSelect } = await import('./prompts.js')\n return promptSelect(options.message, items.map(toChoice))\n}\n","/**\n * arbi listen [--agent <name>]\n *\n * Start the DM listener, optionally setting the agent backend.\n *\n * arbi listen --agent claude Set backend to claude + start listening\n * arbi listen Start listening with previously configured backend\n *\n * Authentication must be completed first via `arbi login`.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { execFileSync } from 'node:child_process'\nimport { resolve, dirname, join } from 'node:path'\nimport { homedir } from 'node:os'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport { startDmListener } from '@arbidocs/sdk'\nimport { ClaudeOrchestrator, OpenClawOrchestrator, type Orchestrator } from '@arbidocs/sdk'\nimport { resolveDmCrypto } from '../helpers.js'\nimport { store, resolveConfig, updateConfig } from '../config.js'\nimport { error as cliError, success, chalk, dim } from '../output.js'\n\nconst AGENT_BACKENDS = ['claude', 'openclaw'] as const\ntype AgentBackend = (typeof AGENT_BACKENDS)[number]\n\nconst AGENT_MIN_VERSIONS: Record<\n AgentBackend,\n { binary: string; minVersion: string; installUrl: string }\n> = {\n claude: {\n binary: 'claude',\n minVersion: '2.0.0',\n installUrl: 'https://docs.anthropic.com/en/docs/claude-code',\n },\n openclaw: {\n binary: 'openclaw',\n minVersion: '2026.2.0',\n installUrl: 'https://docs.openclaw.ai/install',\n },\n}\n\n/**\n * Compare two dotted version strings (\"1.2.3\" vs \"1.10.0\").\n *\n * Returns negative if a < b, positive if a > b, zero if equal. Treats\n * missing components as 0 so \"2026\" matches \"2026.0.0\". Exported for\n * unit tests; the runtime caller is {@link checkAgentDependency}.\n */\nexport function compareVersions(a: string, b: string): number {\n const pa = a.split('.').map(Number)\n const pb = b.split('.').map(Number)\n const len = Math.max(pa.length, pb.length)\n for (let i = 0; i < len; i++) {\n const diff = (pa[i] ?? 0) - (pb[i] ?? 0)\n if (diff !== 0) return diff\n }\n return 0\n}\n\nfunction checkAgentDependency(backend: AgentBackend): void {\n const { binary, minVersion, installUrl } = AGENT_MIN_VERSIONS[backend]\n let version: string\n try {\n version = execFileSync(binary, ['--version'], { encoding: 'utf-8', timeout: 5_000 }).trim()\n } catch {\n cliError(`\"${binary}\" is not installed.\\n Install: ${installUrl}`)\n process.exit(1)\n }\n const match = version.match(/(\\d+\\.\\d+[\\d.]*)/)\n if (match && compareVersions(match[1], minVersion) < 0) {\n cliError(`\"${binary}\" ${match[1]} is too old (need >= ${minVersion}).\\n Update: ${installUrl}`)\n process.exit(1)\n }\n dim(`${binary} ${match?.[1] ?? version} ✓`)\n}\n\nfunction loadSkillContent(): string | undefined {\n const cliRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')\n try {\n return readFileSync(join(cliRoot, 'SKILL.md'), 'utf-8')\n } catch {\n return undefined\n }\n}\n\nfunction installSkill(backend: AgentBackend): void {\n const cliRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')\n let skillContent: string\n try {\n skillContent = readFileSync(join(cliRoot, 'SKILL.md'), 'utf-8')\n } catch {\n return\n }\n\n if (backend === 'claude') {\n const dir = join(homedir(), '.claude', 'commands', 'arbi')\n const target = join(dir, 'SKILL.md')\n try {\n mkdirSync(dir, { recursive: true })\n if (!existsSync(target) || readFileSync(target, 'utf-8') !== skillContent) {\n writeFileSync(target, skillContent, 'utf-8')\n dim(`Installed ARBI skill → ${target}`)\n }\n } catch {\n /* non-fatal */\n }\n } else if (backend === 'openclaw') {\n const workspace = join(homedir(), '.arbi', 'openclaw-workspace')\n const bootstrap = join(workspace, 'BOOTSTRAP.md')\n try {\n mkdirSync(workspace, { recursive: true })\n if (!existsSync(bootstrap) || readFileSync(bootstrap, 'utf-8') !== skillContent) {\n writeFileSync(bootstrap, skillContent, 'utf-8')\n dim(`Installed ARBI skill → ${bootstrap}`)\n }\n } catch {\n /* non-fatal */\n }\n }\n}\n\nfunction createOrchestrator(\n backend: AgentBackend,\n sessionId: string,\n agentId?: string\n): Orchestrator {\n if (backend === 'claude')\n return new ClaudeOrchestrator({ sessionId, skillPrompt: loadSkillContent() })\n // OpenClaw provisions one agent per ARBI user (lowercased ext_id); see\n // ARBI's src/core/openclaw_provisioning.py:_agent_id_for_user. Without\n // this the orchestrator falls back to the legacy single-tenant \"arbi\"\n // agent id which doesn't exist on multi-tenant deployments.\n //\n // ``ARBI_OPENCLAW_HOME``: in multi-tenant deployments ``arbi listen``\n // runs with a per-agent HOME (so the CLI finds .arbi/credentials.json),\n // but openclaw must still resolve its gateway state from the shared real\n // HOME. The supervisor exports this to point at the canonical HOME\n // (e.g. ``/home/node``) so the spawned openclaw subprocess sidesteps\n // the per-agent dir entirely and works without symlinks.\n if (backend === 'openclaw') {\n const spawnHome = process.env.ARBI_OPENCLAW_HOME\n return new OpenClawOrchestrator({ sessionId, agentId, spawnHome })\n }\n throw new Error(`Unknown backend: ${backend}`)\n}\n\nexport async function setupAgent(\n agentName: string | undefined,\n config: { orchestrator?: string }\n): Promise<AgentBackend | undefined> {\n const backend = (agentName ?? config.orchestrator) as AgentBackend | undefined\n if (!backend) return undefined\n if (!AGENT_BACKENDS.includes(backend)) {\n cliError(`Unknown backend: \"${backend}\". Choose from: ${AGENT_BACKENDS.join(', ')}`)\n process.exit(1)\n }\n checkAgentDependency(backend)\n installSkill(backend)\n if (agentName && agentName !== config.orchestrator) {\n updateConfig({ orchestrator: backend })\n dim(`Default agent backend set to \"${backend}\"`)\n }\n return backend\n}\n\nexport async function startListening(\n agentName: string | undefined,\n config: { orchestrator?: string }\n): Promise<void> {\n const backend = (agentName ?? config.orchestrator) as AgentBackend | undefined\n if (!backend) {\n cliError(\n `No agent backend configured. Use --agent to specify one:\\n arbi listen --agent claude`\n )\n process.exit(1)\n }\n\n const creds = store.getCredentials()\n if (!creds?.parentExtId) {\n cliError('DM listener requires a persistent agent identity (parentExtId).')\n process.exit(1)\n }\n\n dim('Starting DM listener...')\n const { arbi, crypto } = await resolveDmCrypto()\n const fullConfig = resolveConfig()\n const sessionId = arbi.session.getState().userExtId ?? 'default'\n // For multi-tenant openclaw, the openclaw agent id is the listener's\n // own user ext_id (lowercased) — every ARBI user gets a dedicated\n // openclaw agent at registration. Claude doesn't use agentId.\n const agentId = backend === 'openclaw' ? sessionId.toLowerCase() : undefined\n const orchestrator = createOrchestrator(backend, sessionId, agentId)\n const accessToken = arbi.session.getState().accessToken\n if (!accessToken) {\n cliError('No access token — run `arbi login` first.')\n process.exit(1)\n }\n\n const listener = await startDmListener({\n arbi,\n accessToken,\n baseUrl: fullConfig.baseUrl,\n crypto,\n orchestrator,\n parentExtId: creds.parentExtId!,\n onLog: (msg) => dim(msg),\n onError: (msg, err) => cliError(`${msg}${err ? `: ${err}` : ''}`),\n })\n\n success(`Listening for DMs as ${chalk.cyan(creds.email)} via ${chalk.cyan(backend)}`)\n dim('Press Ctrl+C to stop.')\n\n const shutdown = () => {\n dim('\\nShutting down...')\n listener.close()\n orchestrator.close?.()\n process.exit(0)\n }\n process.on('SIGINT', shutdown)\n process.on('SIGTERM', shutdown)\n await new Promise(() => {})\n}\n\nexport function registerListenCommand(program: Command): void {\n program\n .command('listen')\n .description(\n 'Start DM listener (foreground; runs until Ctrl-C — use `& disown` or systemd for background)'\n )\n .option('--agent <name>', `Agent backend: ${AGENT_BACKENDS.join(', ')}`)\n .action((opts: { agent?: string }) =>\n (async () => {\n const config = resolveConfig()\n await setupAgent(opts.agent, config)\n await startListening(opts.agent, config)\n })().catch((err) => {\n cliError(`Error: ${err instanceof Error ? err.message : String(err)}`)\n process.exit(1)\n })\n )\n}\n","/**\n * arbi register -e email -p password --verification-code CODE — fully scriptable\n * arbi register — interactive mode\n * arbi register --non-interactive [opts] — CI mode (SUPPORT_API_KEY)\n *\n * When all required flags are provided, no prompts are shown.\n * When some are missing, only the missing values are prompted.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport { createArbiClient } from '@arbidocs/client'\nimport {\n performPasswordLogin,\n formatWorkspaceChoices,\n generateNewWorkspaceKey,\n workspaces as workspaceOps,\n projects as projectOps,\n} from '@arbidocs/sdk'\nimport { success, error, ref } from '../output.js'\nimport { store, requireConfig, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptConfirm, promptSelect } from '../prompts.js'\nimport { runAction, formatCliError } from '../helpers.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\n\n// ── CI verification code fetch ───────────────────────────────────────────────\n\n/** Raised when the central verify-ci endpoint returns a known error we can hint at. */\nexport class RegisterHintError extends Error {\n constructor(\n message: string,\n public readonly kind: 'agent-email-required' | 'bad-api-key' | 'already-registered'\n ) {\n super(message)\n this.name = 'RegisterHintError'\n }\n}\n\n/**\n * SUPPORT_API_KEY deployment keys only accept agent-*@<deploymentDomain> emails.\n * This heuristic lets us warn the caller before we even round-trip to central.\n */\nexport function looksLikeAgentEmail(email: string): boolean {\n const local = email.split('@')[0] ?? ''\n return local.toLowerCase().startsWith('agent-')\n}\n\nasync function getVerificationCode(\n email: string,\n apiKey: string,\n deploymentDomain: string\n): Promise<string> {\n const params = new URLSearchParams({ email })\n const res = await fetch(`${CENTRAL_API_URL}/license-management/verify-ci?${params.toString()}`, {\n method: 'GET',\n headers: { 'x-api-key': apiKey },\n })\n\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n // Translate common, confusing central-API errors into actionable messages.\n if (res.status === 403 && /agent-\\*/i.test(body)) {\n throw new RegisterHintError(\n `This SUPPORT_API_KEY is a deployment key that can only register agent-*@${deploymentDomain} emails. ` +\n `Prefix your email with \"agent-\" (e.g. agent-<id>@${deploymentDomain}) or use a superuser key.`,\n 'agent-email-required'\n )\n }\n if (res.status === 403 && /Invalid API Key/i.test(body)) {\n throw new RegisterHintError(\n 'SUPPORT_API_KEY was rejected by central. Check the key value.',\n 'bad-api-key'\n )\n }\n if (res.status === 404 && /No verification record/i.test(body)) {\n throw new RegisterHintError(\n `No pending verification for ${email}. The email may already be registered — ` +\n `try: arbi login --email ${email}`,\n 'already-registered'\n )\n }\n throw new Error(`Failed to get verification code: ${res.status} ${body}`)\n }\n\n const data = (await res.json()) as { verification_words?: string[]; verification_code?: string }\n const words = data?.verification_words ?? data?.verification_code ?? null\n if (!words) throw new Error('No verification code in response')\n\n return Array.isArray(words) ? words.join(' ') : String(words)\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\ninterface RegisterOpts {\n nonInteractive?: boolean\n email?: string\n password?: string\n verificationCode?: string\n firstName?: string\n lastName?: string\n json?: boolean\n yes?: boolean\n}\n\nexport function registerRegisterCommand(program: Command): void {\n program\n .command('register')\n .description('Register a new ARBI account')\n .option('--non-interactive', 'CI/automation mode (requires SUPPORT_API_KEY env var)')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('-c, --verification-code <code>', 'Verification code (skip prompt)')\n .option('--first-name <name>', 'First name')\n .option('--last-name <name>', 'Last name')\n .option('-y, --yes', 'Skip the post-register \"Log in now?\" confirmation')\n .option('--json', 'Emit a single JSON object on success (scripting)')\n .action((opts: RegisterOpts) =>\n runAction(async () => {\n const config = requireConfig()\n\n if (opts.nonInteractive) {\n await nonInteractiveRegister(config, opts)\n } else {\n await smartRegister(config, opts)\n }\n })()\n )\n}\n\n// ── Smart register (flags > env > prompt) ────────────────────────────────────\n\nasync function smartRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: RegisterOpts\n) {\n // 1. Resolve email: flag > env > prompt\n let email = opts.email || process.env.ARBI_EMAIL || (await promptInput('Email'))\n\n // In interactive mode, auto-append domain only when --email flag was provided without @\n // (users typing at the prompt are expected to enter their full email)\n if ((opts.email || process.env.ARBI_EMAIL) && !email.includes('@')) {\n email = `${email}@${config.deploymentDomain}`\n if (!opts.json) console.log(`Using email: ${email}`)\n }\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // 2. Resolve verification code: flag > prompt\n let verificationCode: string\n if (opts.verificationCode) {\n verificationCode = opts.verificationCode\n } else {\n const codeMethod = await promptSelect('Verification method', [\n { name: 'I have an invitation code', value: 'code' },\n { name: 'Send me a verification email', value: 'email' },\n ])\n\n if (codeMethod === 'code') {\n verificationCode = await promptInput('Invitation code')\n } else {\n console.log('Sending verification email...')\n const verifyResponse = await arbi.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n error(`Failed to send verification email: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n success('Verification email sent. Check your inbox.')\n verificationCode = await promptInput('Verification code')\n }\n }\n\n // 3. Resolve password: flag > env > prompt\n // When provided via flag/env, skip confirmation prompt.\n let pw: string\n const flagOrEnvPassword = opts.password || process.env.ARBI_PASSWORD\n if (flagOrEnvPassword) {\n pw = flagOrEnvPassword\n } else {\n pw = await promptPassword('Password')\n const confirmPw = await promptPassword('Confirm password')\n if (pw !== confirmPw) {\n error('Passwords do not match.')\n process.exit(1)\n }\n }\n\n // 4. Resolve name: flag > prompt (skip prompts if all core flags provided)\n const hasAllCoreFlags =\n !!(opts.email || process.env.ARBI_EMAIL) &&\n !!(opts.password || process.env.ARBI_PASSWORD) &&\n !!opts.verificationCode\n const firstName =\n opts.firstName ||\n (hasAllCoreFlags ? 'User' : (await promptInput('First name', false)) || 'User')\n const lastName =\n opts.lastName || (hasAllCoreFlags ? '' : (await promptInput('Last name', false)) || '')\n\n // 5. Register\n try {\n await arbi.auth.register({\n email,\n password: pw,\n verificationCode,\n firstName,\n lastName,\n })\n if (!opts.json) success(`\\nRegistered successfully as ${email}`)\n } catch (err) {\n if (opts.json) {\n console.log(JSON.stringify({ ok: false, stage: 'register', error: formatCliError(err) }))\n } else {\n error(`Registration failed: ${formatCliError(err)}`)\n }\n process.exit(1)\n }\n\n // 6. If all values were flags, auto-login. Otherwise offer choice (unless --yes).\n const allFlagsProvided =\n !!(opts.email || process.env.ARBI_EMAIL) &&\n !!(opts.password || process.env.ARBI_PASSWORD) &&\n !!opts.verificationCode\n const doLogin = allFlagsProvided || opts.yes || (await promptConfirm('Log in now?'))\n\n if (doLogin) {\n await loginAfterRegister(config, email, pw, { json: opts.json })\n } else if (opts.json) {\n console.log(JSON.stringify({ ok: true, email, server: config.baseUrl, logged_in: false }))\n }\n}\n\n// ── Non-interactive mode (CI with SUPPORT_API_KEY) ───────────────────────────\n\nasync function nonInteractiveRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: RegisterOpts\n) {\n let email = opts.email || process.env.ARBI_EMAIL\n const password = opts.password || process.env.ARBI_PASSWORD\n const supportApiKey = process.env.SUPPORT_API_KEY\n\n if (!email) {\n // In `--json` mode, return a structured error so an agent can branch\n // (`jq -r .error`) instead of having to grep stderr.\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'preflight',\n error: 'Email required',\n hint: 'Use --email <email> or set ARBI_EMAIL',\n })\n )\n process.exit(1)\n }\n error('Email required. Use --email <email> or set ARBI_EMAIL')\n process.exit(1)\n }\n\n // Auto-append deployment domain for bare usernames (bot/test accounts)\n if (!email.includes('@')) {\n email = `${email}@${config.deploymentDomain}`\n if (!opts.json) console.log(`Using email: ${email}`)\n }\n\n if (!password) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'preflight',\n error: 'Password required',\n hint: 'Use --password <password> or set ARBI_PASSWORD',\n })\n )\n process.exit(1)\n }\n error('Password required. Use --password <password> or set ARBI_PASSWORD')\n process.exit(1)\n }\n\n // Preflight: if using SUPPORT_API_KEY but the email doesn't start with \"agent-\",\n // warn client-side BEFORE the round-trip to central. Deployment-scoped keys\n // reject non-agent emails (the common case on box-*.arbibox.com). Superuser\n // keys accept any email; we can't distinguish up front, so we just warn.\n if (supportApiKey && !opts.verificationCode && !looksLikeAgentEmail(email)) {\n const hint =\n `Email \"${email}\" does not start with \"agent-\". ` +\n `SUPPORT_API_KEY deployment keys only accept agent-*@${config.deploymentDomain} emails. ` +\n `If your key is a superuser key this may still succeed — proceeding...`\n if (!opts.json) {\n console.error(`Warning: ${hint}`)\n }\n }\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // Resolve verification code: flag > SUPPORT_API_KEY CI endpoint\n let verificationCode: string\n if (opts.verificationCode) {\n verificationCode = opts.verificationCode\n } else {\n if (!supportApiKey) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'preflight',\n error: 'Verification code required',\n hint: 'Use --verification-code <code> or set SUPPORT_API_KEY for CI mode',\n })\n )\n process.exit(1)\n }\n error(\n 'Verification code required. Use --verification-code <code> or set SUPPORT_API_KEY for CI mode'\n )\n process.exit(1)\n }\n\n // Request verification email\n const verifyResponse = await arbi.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'verify-email',\n error: JSON.stringify(verifyResponse.error),\n })\n )\n } else {\n error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n }\n process.exit(1)\n }\n\n // Fetch code from CI endpoint — surfaces friendly messages for common errors.\n try {\n verificationCode = await getVerificationCode(email, supportApiKey, config.deploymentDomain)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'verify-ci',\n error: msg,\n kind: err instanceof RegisterHintError ? err.kind : undefined,\n })\n )\n } else {\n error(`Error: ${msg}`)\n }\n process.exit(1)\n }\n }\n\n // Register\n try {\n await arbi.auth.register({\n email,\n password,\n verificationCode,\n firstName: opts.firstName ?? 'Test',\n lastName: opts.lastName ?? 'User',\n })\n if (!opts.json) success(`Registered: ${email}`)\n } catch (err) {\n if (opts.json) {\n console.log(JSON.stringify({ ok: false, stage: 'register', error: formatCliError(err) }))\n } else {\n error(`Registration failed: ${formatCliError(err)}`)\n }\n process.exit(1)\n }\n\n // Auto-login and create workspace in non-interactive mode\n await loginAfterRegister(config, email, password, { json: opts.json })\n}\n\n// ── Post-registration login ──────────────────────────────────────────────────\n\nasync function loginAfterRegister(\n config: { baseUrl: string; deploymentDomain: string },\n email: string,\n password: string,\n { json = false }: { json?: boolean } = {}\n) {\n try {\n const { arbi, loginResult } = await performPasswordLogin(config, email, password, store)\n if (!json) success(`Logged in as ${email}`)\n\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n updateCompletionCache(wsList)\n\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.user.email === email))\n\n let selectedWorkspace: { external_id: string; name: string } | undefined\n\n if (memberWorkspaces.length === 0) {\n if (!json) console.log('Creating your first workspace...')\n const userProjects = await projectOps.listProjects(arbi)\n const defaultProjectExtId = userProjects[0]?.external_id\n if (!defaultProjectExtId) throw new Error('No projects found for user')\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(\n arbi,\n 'My First Workspace',\n encryptedKey,\n defaultProjectExtId\n )\n updateConfig({ selectedWorkspaceId: ws.external_id })\n selectedWorkspace = { external_id: ws.external_id, name: ws.name }\n if (!json) success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n } else if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n selectedWorkspace = {\n external_id: memberWorkspaces[0].external_id,\n name: memberWorkspaces[0].name,\n }\n if (!json)\n success(`Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`)\n } else if (json) {\n // JSON mode with multiple workspaces: don't prompt; caller can pick via\n // `arbi workspace select` or `arbi login --workspace <id>`.\n } else {\n const choices = formatWorkspaceChoices(memberWorkspaces)\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = memberWorkspaces.find((w) => w.external_id === selected)!\n selectedWorkspace = { external_id: selected, name: ws.name }\n success(`Workspace: ${ws.name} (${ref(selected)})`)\n }\n\n if (json) {\n console.log(\n JSON.stringify({\n ok: true,\n email,\n server: config.baseUrl,\n logged_in: true,\n workspace: selectedWorkspace ?? null,\n workspaces_available: memberWorkspaces.length,\n })\n )\n }\n } catch (err) {\n if (json) {\n console.log(\n JSON.stringify({ ok: false, stage: 'post-register-login', error: formatCliError(err) })\n )\n } else {\n error(`Login failed: ${formatCliError(err)}`)\n error('You can log in later with: arbi login')\n }\n }\n}\n","/**\n * arbi logout\n */\n\nimport { Command } from 'commander'\nimport { deleteCredentials, updateConfig, clearChatSession } from '../config.js'\nimport { success } from '../output.js'\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out of ARBI')\n .option('--json', 'Emit a single JSON object on success (scripting)')\n .action((opts: { json?: boolean }) => {\n deleteCredentials()\n clearChatSession()\n updateConfig({ selectedWorkspaceId: undefined })\n if (opts.json) {\n console.log(JSON.stringify({ ok: true }))\n } else {\n success('Logged out.')\n }\n })\n}\n","/**\n * arbi status\n *\n * Shows current config + login state (no API calls).\n * `--json` returns a machine-readable object for agent scripting —\n * this is the recommended way for an AI agent to check whether the\n * CLI is configured and logged in before attempting other calls.\n */\n\nimport { Command } from 'commander'\nimport { getConfig, getCredentials } from '../config.js'\nimport { getCachedWorkspaceName } from '../completion-cache.js'\nimport { label, dim } from '../output.js'\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show current configuration and login status')\n .option('--json', 'Output as JSON for scripting')\n .action((opts: { json?: boolean }) => {\n const config = getConfig()\n const creds = getCredentials()\n const wsId = config?.selectedWorkspaceId ?? null\n // Workspace name comes from the completion cache (populated after any\n // `arbi workspaces` / login call). `status` itself stays offline so it\n // remains usable when the network is down.\n const wsName = wsId ? getCachedWorkspaceName(wsId) : null\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n configured: !!config?.baseUrl,\n server: config?.baseUrl ?? null,\n logged_in: !!creds,\n user: creds?.email ?? null,\n workspace: wsId,\n workspace_name: wsName,\n },\n null,\n 2\n )\n )\n return\n }\n\n if (!config?.baseUrl) {\n dim('Not configured. Run: arbi config set-url <url>')\n return\n }\n\n label('Server:', config.baseUrl)\n\n if (creds) {\n label('User:', creds.email)\n } else {\n label('User:', '(not logged in)')\n }\n\n if (wsId) {\n label('Workspace:', wsName ? `${wsName} (${wsId})` : wsId)\n } else {\n label('Workspace:', '(none selected)')\n }\n })\n}\n","/**\n * arbi workspaces — list workspaces\n * arbi workspace select/create/delete/update — workspace CRUD\n * arbi workspace users/add-user/remove-user — user management\n * arbi workspace set-role/copy — role & copy operations\n */\n\nimport { Command } from 'commander'\nimport {\n workspaces,\n projects,\n formatWorkspaceChoices,\n generateEncryptedWorkspaceKey,\n generateNewWorkspaceKey,\n} from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n resolveWorkspace,\n printTable,\n parseJsonArg,\n requireInteractive,\n dryRun,\n} from '../helpers.js'\nimport { store, getConfig, updateConfig, getChatSession, clearChatSession } from '../config.js'\nimport { promptSelect, promptConfirm } from '../prompts.js'\nimport { success, error, ref } from '../output.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\n/**\n * Resolve a workspace selector (ID or exact/unique case-insensitive name) to a\n * workspace ID. Returns a resolution result so callers can surface helpful\n * errors (not found, ambiguous name match) consistently.\n */\ntype WorkspaceRow = {\n external_id: string\n name: string\n shared_document_count?: number\n private_document_count?: number\n wrapped_key?: string | null\n users?: { role: string }[]\n}\n\ntype ResolveResult =\n | { ok: true; id: string; ws: WorkspaceRow }\n | { ok: false; reason: 'not-found' | 'ambiguous'; matches?: WorkspaceRow[] }\n\nfunction resolveWorkspaceSelector(list: WorkspaceRow[], selector: string): ResolveResult {\n // Exact ID match — fast path and unambiguous.\n const byId = list.find((w) => w.external_id === selector)\n if (byId) return { ok: true, id: byId.external_id, ws: byId }\n\n // Case-insensitive name match. Must be unique to avoid foot-guns.\n const lower = selector.toLowerCase()\n const byName = list.filter((w) => (w.name ?? '').toLowerCase() === lower)\n if (byName.length === 1) return { ok: true, id: byName[0].external_id, ws: byName[0] }\n if (byName.length > 1) return { ok: false, reason: 'ambiguous', matches: byName }\n\n return { ok: false, reason: 'not-found' }\n}\n\nfunction printResolveError(list: WorkspaceRow[], selector: string, res: ResolveResult): void {\n if (res.ok) return\n if (res.reason === 'ambiguous') {\n error(`Workspace name \"${selector}\" is ambiguous — multiple matches:`)\n for (const w of res.matches ?? []) error(` ${w.external_id} ${w.name}`)\n error('Use the workspace ID instead.')\n return\n }\n error(`Workspace ${selector} not found.`)\n error('Available workspaces:')\n for (const w of list) error(` ${w.external_id} ${w.name}`)\n}\n\nexport function registerWorkspacesCommand(program: Command): void {\n program\n .command('workspaces')\n .description('List workspaces')\n .option('--json', 'Output as JSON')\n .option('--ids', 'Output only workspace IDs (one per line)')\n .option(\n '--mine',\n 'Only workspaces where you have a membership role (hide deployment-wide common ones)'\n )\n .action((opts: { json?: boolean; ids?: boolean; mine?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const allWorkspaces = await workspaces.listWorkspaces(arbi)\n // Cache the full list so completion still sees common workspaces — only\n // the display below is narrowed when `--mine` is set.\n updateCompletionCache(allWorkspaces)\n const data = opts.mine\n ? allWorkspaces.filter((w) => (w.users as { role: string }[])?.length > 0)\n : allWorkspaces\n\n if (opts.ids) {\n for (const w of data) console.log(w.external_id)\n return\n }\n\n if (opts.json) {\n const selectedId = getConfig()?.selectedWorkspaceId ?? null\n // Caller's email — we look up *our own* membership row to\n // get *our* role, instead of users[0].role which is whatever\n // membership happens to come first in the response and could\n // belong to a co-worker / another agent in the same workspace.\n const myEmail = store.requireCredentials().email\n const out = data.map((w) => {\n // No row in `users` → backend exposes the workspace because it's\n // deployment-wide (\"common\"), not because the caller is a member.\n // Surface that explicitly so callers don't read `role: null` as\n // missing data.\n const myRow = (w.users as { user?: { email?: string }; role: string }[])?.find(\n (u) => u?.user?.email === myEmail\n )\n const role = myRow?.role ?? null\n return {\n id: w.external_id,\n name: w.name,\n docs: (w.shared_document_count as number) + (w.private_document_count as number),\n role,\n is_common: role === null,\n is_selected: w.external_id === selectedId,\n }\n })\n console.log(JSON.stringify(out, null, 2))\n return\n }\n\n if (data.length === 0) {\n process.stderr.write(\n opts.mine\n ? 'No workspaces you are a member of. (Drop --mine to see deployment-wide ones.)\\n'\n : 'No workspaces found.\\n'\n )\n return\n }\n\n const selectedId = getConfig()?.selectedWorkspaceId ?? null\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 30,\n // Asterisk-mark the active workspace so a glance at the table\n // tells you which one `arbi docs / ask / upload` will hit.\n value: (r) => {\n const name = (r.name as string) ?? ''\n return r.external_id === selectedId ? `* ${name}` : ` ${name}`\n },\n },\n {\n header: 'DOCS',\n width: 6,\n value: (r) =>\n String((r.shared_document_count as number) + (r.private_document_count as number)),\n },\n {\n header: 'ROLE',\n width: 12,\n // `common` (italics dimmed) for memberless rows the caller\n // can see only because it's a deployment-wide workspace.\n // Match by the caller's email so we render *our* role, not\n // whichever membership happens to come first in the array.\n value: (r) => {\n const myRow = (r.users as { user?: { email?: string }; role: string }[])?.find(\n (u) => u?.user?.email === store.requireCredentials().email\n )\n return myRow?.role ?? 'common'\n },\n },\n ],\n data\n )\n })()\n )\n\n const workspace = program.command('workspace').description('Workspace management')\n\n workspace\n .command('current')\n .description('Print the currently selected workspace ID (empty string if none)')\n .option('--json', 'Output full details as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const selectedId = getConfig()?.selectedWorkspaceId ?? ''\n if (!opts.json) {\n console.log(selectedId)\n return\n }\n if (!selectedId) {\n console.log(JSON.stringify({ id: null, name: null, docs: 0, role: null }, null, 2))\n return\n }\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n const ws = data.find((w) => w.external_id === selectedId)\n if (!ws) {\n // Stale selection — surface it but don't crash.\n console.log(\n JSON.stringify(\n { id: selectedId, name: null, docs: 0, role: null, stale: true },\n null,\n 2\n )\n )\n return\n }\n console.log(\n JSON.stringify(\n {\n id: ws.external_id,\n name: ws.name,\n docs: (ws.shared_document_count as number) + (ws.private_document_count as number),\n role: (ws.users as { role: string }[])?.[0]?.role ?? null,\n },\n null,\n 2\n )\n )\n })()\n )\n\n workspace\n .command('select [id-or-name]')\n .description(\n 'Select active workspace (accepts ID or unique name; interactive picker if nothing given)'\n )\n .action((idOrName?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n updateCompletionCache(data)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n let selectedId: string\n if (idOrName) {\n const res = resolveWorkspaceSelector(data as WorkspaceRow[], idOrName)\n if (!res.ok) {\n printResolveError(data as WorkspaceRow[], idOrName, res)\n process.exit(1)\n }\n selectedId = res.id\n } else {\n // Interactive picker\n const choices = formatWorkspaceChoices(data)\n selectedId = await promptSelect('Select workspace', choices)\n }\n\n updateConfig({ selectedWorkspaceId: selectedId })\n clearChatSession()\n const ws = data.find((w) => w.external_id === selectedId)!\n success(`Selected: ${ws.name} (${ref(selectedId)})`)\n })()\n )\n\n workspace\n .command('create <name>')\n .description('Create a new workspace')\n .option('-d, --description <text>', 'Workspace description')\n .option('--public', 'Make workspace public', false)\n .option('--select', 'Set the new workspace as the active selection', false)\n .action((name: string, opts: { description?: string; public?: boolean; select?: boolean }) =>\n runAction(async () => {\n const { arbi, loginResult } = await resolveAuth()\n const userProjects = await projects.listProjects(arbi)\n if (!userProjects.length) throw new Error('No projects found. Create a project first.')\n const projectExtId = userProjects[0].external_id\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const data = await workspaces.createWorkspace(\n arbi,\n name,\n encryptedKey,\n projectExtId,\n opts.description,\n opts.public ?? false\n )\n if (opts.select) {\n updateConfig({ selectedWorkspaceId: data.external_id })\n clearChatSession()\n }\n // Agents extract the new ID with: grep -oE 'wrk-[a-z0-9]+'\n success(`Created: ${data.name} (${ref(data.external_id)})`)\n if (opts.select) success(`Selected: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('delete [id-or-name]')\n .description('Delete a workspace (defaults to selected workspace)')\n .option('-y, --yes', 'Skip confirmation prompt (required in non-interactive shells)', false)\n .option('--dry-run', 'Preview which workspace would be deleted (no SDK call)')\n .action((idOrName: string | undefined, opts: { yes?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const config = getConfig()\n\n // Resolve the target. Accept ID or name; default to selected workspace.\n let targetId: string | undefined\n let targetName: string | undefined\n if (idOrName) {\n const data = await workspaces.listWorkspaces(arbi)\n const res = resolveWorkspaceSelector(data as WorkspaceRow[], idOrName)\n if (!res.ok) {\n printResolveError(data as WorkspaceRow[], idOrName, res)\n process.exit(1)\n }\n targetId = res.id\n targetName = res.ws.name\n } else {\n targetId = config?.selectedWorkspaceId\n if (!targetId) {\n error('No workspace ID given and no workspace selected. Run: arbi workspace select')\n process.exit(1)\n }\n }\n\n if (opts.dryRun) {\n const label = targetName ? `${targetId} (\"${targetName}\")` : targetId\n dryRun('delete workspace (along with all its documents, conversations, and tags)', label)\n return\n }\n\n // Confirmation. Destructive operation — protect against fat-finger.\n // In non-TTY (scripts/agents), require --yes explicitly so we never hang.\n const isInteractive = process.stdin.isTTY === true && process.stdout.isTTY === true\n if (!opts.yes) {\n if (!isInteractive) {\n error(\n `Refusing to delete ${targetId} without confirmation. Re-run with --yes (non-interactive shell).`\n )\n process.exit(1)\n }\n const label = targetName ? `\"${targetName}\" (${targetId})` : targetId\n const confirmed = await promptConfirm(\n `Delete workspace ${label}? This removes all documents, conversations, and tags in it.`,\n false\n )\n if (!confirmed) {\n console.log('Cancelled.')\n return\n }\n }\n\n await workspaces.deleteWorkspaces(arbi, [targetId])\n // If we deleted the currently selected workspace, clear selection + chat\n // session so subsequent commands don't operate on a stale ID.\n if (config?.selectedWorkspaceId === targetId) {\n updateConfig({ selectedWorkspaceId: undefined })\n }\n const session = getChatSession()\n if (session.workspaceId === targetId) {\n clearChatSession()\n }\n success(`Deleted workspace ${targetId}`)\n })()\n )\n\n // ── rename / describe / public ───────────────────────────────────────────\n // Named shortcuts over `workspace update` for the three properties agents\n // actually toggle. Same motivation as `doc share/unshare`: agents flub the\n // JSON-patch path more often than they flub a one-flag command.\n workspace\n .command('rename <name>')\n .description('Rename the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((name: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.updateWorkspace(arbi, { name })\n success(`Renamed: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('describe <description>')\n .description(\"Update the workspace's description\")\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((description: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = (await workspaces.updateWorkspace(arbi, {\n description,\n } as Parameters<typeof workspaces.updateWorkspace>[1])) as {\n external_id: string\n name: string\n }\n success(`Updated description: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('public <on-or-off>')\n .description('Toggle workspace visibility (on = public, off = private)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((onOff: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const isPublic = onOff === 'on' || onOff === 'true' || onOff === 'public'\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = (await workspaces.updateWorkspace(arbi, {\n is_public: isPublic,\n } as Parameters<typeof workspaces.updateWorkspace>[1])) as {\n external_id: string\n name: string\n }\n success(\n `Visibility: ${isPublic ? 'public' : 'private'} — ${data.name} (${ref(data.external_id)})`\n )\n })()\n )\n\n workspace\n .command('update <json>')\n .description('Update workspace properties (pass JSON; prefer `rename`/`describe`/`public`)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((json: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi workspace update \\'{\"name\": \"New Name\"}\\'')\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.updateWorkspace(arbi, body)\n success(`Updated: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('users')\n .description('List users in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .action((opts: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.listWorkspaceUsers(arbi)\n\n type User = {\n external_id?: string\n email?: string\n given_name?: string\n family_name?: string\n }\n\n if (opts.json) {\n const out = data.map((r) => {\n const u = (r.user as User) ?? {}\n return {\n user_id: u.external_id ?? null,\n email: u.email ?? null,\n name: [u.given_name, u.family_name].filter(Boolean).join(' ') || null,\n role: r.role,\n document_count: r.document_count,\n conversation_count: r.conversation_count,\n }\n })\n console.log(JSON.stringify(out, null, 2))\n return\n }\n\n if (data.length === 0) {\n console.log('No users found.')\n return\n }\n printTable(\n [\n {\n header: 'USER_ID',\n width: 16,\n value: (r) => (r.user as User)?.external_id ?? '',\n },\n {\n header: 'NAME',\n width: 20,\n value: (r) => {\n const u = r.user as User\n return [u?.given_name, u?.family_name].filter(Boolean).join(' ') || ''\n },\n },\n {\n header: 'EMAIL',\n width: 30,\n value: (r) => (r.user as User)?.email ?? '',\n },\n { header: 'ROLE', width: 14, value: (r) => r.role as string },\n { header: 'DOCS', width: 6, value: (r) => String(r.document_count) },\n { header: 'CONVS', width: 6, value: (r) => String(r.conversation_count) },\n ],\n data\n )\n })()\n )\n\n workspace\n .command('add-user <emails...>')\n .description('Add users to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-r, --role <role>', 'Role: owner, collaborator, guest', 'collaborator')\n .action((emails: string[], opts: { workspace?: string; role?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const role = (opts.role ?? 'collaborator') as 'owner' | 'collaborator' | 'guest'\n const data = await workspaces.addWorkspaceUsers(arbi, emails, role)\n for (const u of data) success(`Added: ${u.user.email} as ${u.role}`)\n })()\n )\n\n workspace\n .command('remove-user <users...>')\n .description('Remove users from the active workspace (accepts usr-ids or emails)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--dry-run', 'Preview which users would be removed (no SDK call)')\n .action((users: string[], opts: { workspace?: string; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n // Accept emails too — humans have the email handy, not the usr- ID.\n // Look up the workspace member list and translate any email\n // arguments before passing through to the SDK.\n const needsLookup = users.some((u) => u.includes('@'))\n let userIds = users\n if (needsLookup) {\n const members = await workspaces.listWorkspaceUsers(arbi)\n userIds = users.map((u) => {\n if (!u.includes('@')) return u\n const hit = members.find((m) => (m as Record<string, unknown>).email === u) as\n | Record<string, unknown>\n | undefined\n if (!hit) {\n error(`Workspace member ${u} not found. Try: arbi workspace users`)\n process.exit(3)\n }\n return hit.external_id as string\n })\n }\n if (opts.dryRun) {\n dryRun(`remove ${userIds.length} user(s) from this workspace`, userIds)\n return\n }\n await workspaces.removeWorkspaceUsers(arbi, userIds)\n success(`Removed ${userIds.length} user(s).`)\n })()\n )\n\n // ── leave ────────────────────────────────────────────────────────────────\n // Symmetric to `add-user`: lets an agent quit a workspace it no longer\n // needs without asking the owner to evict it. Backend's\n // /v1/workspace/users DELETE accepts self-removal — we just pass the\n // current user's id.\n workspace\n .command('leave [id-or-name]')\n .description('Leave a workspace (defaults to the active one)')\n .option('-y, --yes', 'Skip confirmation (required in non-TTY shells)')\n .option('--dry-run', 'Preview which workspace would be left (no SDK call)')\n .action((selector: string | undefined, opts: { yes?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi: userArbi } = await resolveAuth()\n const wsList = await workspaces.listWorkspaces(userArbi)\n const target = selector\n ? resolveWorkspaceSelector(wsList, selector)\n : (() => {\n const activeId = getConfig()?.selectedWorkspaceId\n const hit = wsList.find((w) => w.external_id === activeId)\n return hit\n ? ({ ok: true, id: hit.external_id, ws: hit } as const)\n : ({ ok: false, reason: 'not-found' } as const)\n })()\n if (!target.ok) {\n printResolveError(wsList, selector ?? '(active workspace)', target)\n process.exit(3)\n }\n\n const selfExtId = userArbi.session.getState().userExtId\n if (!selfExtId) {\n error('No user ID in session — cannot resolve self for leave.')\n process.exit(1)\n }\n\n if (opts.dryRun) {\n dryRun('leave workspace', `${target.id} (\"${target.ws.name}\")`)\n return\n }\n\n if (!opts?.yes) {\n requireInteractive('Pass -y/--yes to confirm in non-TTY shells.')\n const confirmed = await promptConfirm(\n `Leave workspace \"${target.ws.name}\" (${target.id})?`,\n false\n )\n if (!confirmed) {\n console.log('Cancelled.')\n return\n }\n }\n\n // Switch to the target workspace context so DELETE /v1/workspace/users\n // operates on the right scope, then self-remove by external_id.\n const { arbi } = await resolveWorkspace(target.id)\n await workspaces.removeWorkspaceUsers(arbi, [selfExtId])\n if (getConfig()?.selectedWorkspaceId === target.id) {\n updateConfig({ selectedWorkspaceId: '' })\n }\n success(`Left workspace \"${target.ws.name}\" (${target.id}).`)\n })()\n )\n\n workspace\n .command('set-role <role> <user-ids...>')\n .description('Update user roles (owner, collaborator, guest)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((role: string, userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.setUserRole(\n arbi,\n userIds,\n role as 'owner' | 'collaborator' | 'guest'\n )\n for (const u of data) success(`Updated: ${u.user.email} → ${u.role}`)\n })()\n )\n\n workspace\n .command('copy <target-workspace> <doc-ids...>')\n .description('Copy documents to another workspace (target accepts ID or unique name)')\n .option('-w, --workspace <id>', 'Source workspace ID (defaults to selected workspace)')\n .action((targetRef: string, docIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n // User-level auth to fetch workspace list (workspace-scoped JWTs cannot call /v1/user/workspaces)\n const { arbi: userArbi } = await resolveAuth()\n const wsList = await workspaces.listWorkspaces(userArbi)\n\n // Accept a workspace name as well as an ID — agents and humans both\n // tend to have the name handy. If multiple workspaces share the name,\n // refuse rather than silently picking one.\n let targetWs = wsList.find((w) => w.external_id === targetRef)\n if (!targetWs) {\n const nameMatches = wsList.filter(\n (w) => (w.name as string)?.toLowerCase() === targetRef.toLowerCase()\n )\n if (nameMatches.length === 1) {\n targetWs = nameMatches[0]\n } else if (nameMatches.length > 1) {\n error(\n `Ambiguous target workspace \"${targetRef}\" — matches ${nameMatches\n .map((w) => w.external_id)\n .join(', ')}. Use the ID.`\n )\n process.exit(3)\n }\n }\n if (!targetWs || !targetWs.wrapped_key) {\n error(`Target workspace ${targetRef} not found or has no encryption key`)\n process.exit(3)\n }\n const targetId = targetWs.external_id as string\n\n // Open source workspace to get workspace-scoped JWT + session key\n const { arbi, loginResult } = await resolveWorkspace(opts.workspace)\n const signingPrivateKeyBase64 = arbi.crypto.bytesToBase64(loginResult.signingPrivateKey)\n\n // Generate target key encrypted with session key\n const targetKey = await generateEncryptedWorkspaceKey(\n arbi,\n targetWs.wrapped_key,\n loginResult.serverSessionKey,\n signingPrivateKeyBase64\n )\n\n const data = await workspaces.copyDocuments(arbi, targetId, docIds, targetKey)\n const copied = data.documents_copied ?? 0\n const requested = docIds.length\n if (copied === 0) {\n error(`Copied 0 of ${requested} document(s). ${data.detail ?? ''}`.trim())\n error('Hint: documents must be fully indexed before they can be copied.')\n process.exit(1)\n }\n if (copied < requested) {\n error(`Copied ${copied} of ${requested} document(s). ${data.detail ?? ''}`.trim())\n return\n }\n success(`Copied ${copied} document(s) to ${targetId}`)\n })()\n )\n}\n","/**\n * arbi docs — list documents (with filtering & output options)\n * arbi doc get [ids...] — get doc details (picker if no IDs)\n * arbi doc delete [ids...] — delete docs (picker if no IDs)\n * arbi doc update [json] — update docs (form if no JSON)\n * arbi doc upload-url <urls...> — upload from URLs\n * arbi doc parsed <doc-id> [stage] — parsed content (stage defaults to 'final')\n * arbi doc summary — status summary counts\n */\n\nimport { writeFileSync } from 'node:fs'\nimport { Command } from 'commander'\nimport { documents, connectWithReconnect, workspaces } from '@arbidocs/sdk'\nimport type { DocumentListFields } from '@arbidocs/sdk'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg, dryRun } from '../helpers.js'\nimport { getConfig } from '../config.js'\nimport { success, error, warn, dim, chalk } from '../output.js'\nimport { promptSearch, promptCheckbox, promptInput, promptSelect } from '../prompts.js'\n\nexport function statusSymbol(status: string | null | undefined): string {\n switch (status) {\n case 'completed':\n return '\\u2713' // ✓\n case 'failed':\n return '\\u2717' // ✗\n case 'skipped':\n return '\\u2013' // –\n case 'queued':\n return '\\u25CB' // ○\n default:\n return '\\u25CF' // ● (processing, parsing, indexing, etc.)\n }\n}\n\nexport function statusColor(status: string | null | undefined): (s: string) => string {\n switch (status) {\n case 'completed':\n return chalk.green\n case 'failed':\n return chalk.red\n case 'queued':\n return chalk.yellow\n case 'processing':\n case 'parsing':\n case 'indexing':\n case 'analysing':\n case 'encrypting':\n return chalk.cyan\n default:\n return (s: string) => s\n }\n}\n\nexport function formatSize(bytes: number | null | undefined): string {\n if (!bytes) return '-'\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)}K`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)}M`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)}G`\n}\n\n/** Apply client-side filters to a document list */\nexport function filterDocs(\n data: Record<string, unknown>[],\n opts: { status?: string; folder?: string; ext?: string; query?: string }\n): Record<string, unknown>[] {\n let result = data\n if (opts.status) {\n const statuses = opts.status.split(',')\n result = result.filter((d) => statuses.includes(d.status as string))\n }\n if (opts.folder) {\n const pattern = opts.folder.toLowerCase()\n result = result.filter((d) => ((d.folder as string) ?? '').toLowerCase().includes(pattern))\n }\n if (opts.ext) {\n const exts = opts.ext\n .split(',')\n .map((e) => (e.startsWith('.') ? e.toLowerCase() : `.${e.toLowerCase()}`))\n result = result.filter((d) => {\n const fn = (d.file_name as string) ?? ''\n const dotIdx = fn.lastIndexOf('.')\n const ext = dotIdx >= 0 ? fn.slice(dotIdx).toLowerCase() : ''\n return exts.includes(ext)\n })\n }\n if (opts.query) {\n const q = opts.query.toLowerCase()\n result = result.filter((d) => {\n const fn = ((d.file_name as string) ?? '').toLowerCase()\n const meta = d.doc_metadata as { title?: string | null; doc_subject?: string | null } | null\n const title = (meta?.title ?? '').toLowerCase()\n const subject = (meta?.doc_subject ?? '').toLowerCase()\n return fn.includes(q) || title.includes(q) || subject.includes(q)\n })\n }\n return result\n}\n\n/** Fetch workspace docs and return as picker choices */\nasync function fetchDocChoices(arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi']) {\n // Use lite mode for the picker — we only need file_name, status, external_id\n const data = await documents.listAll(arbi, { fields: 'lite', order: 'created_desc' })\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\n return data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n}\n\ninterface DocsListOpts {\n workspace?: string\n json?: boolean\n csv?: boolean\n ids?: boolean\n count?: boolean\n status?: string\n folder?: string\n ext?: string\n query?: string\n sort?: string\n limit?: string\n output?: string\n lite?: boolean\n}\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs')\n .description('List documents in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .option('--csv', 'Output as CSV')\n .option('--ids', 'Output only document IDs (one per line)')\n .option('--count', 'Output only the count (combine with --status for filtered count)')\n .option('-s, --status <status>', 'Filter by status (comma-separated: completed,failed,queued)')\n .option('-f, --folder <pattern>', 'Filter by folder (substring match)')\n .option('-e, --ext <extensions>', 'Filter by file extension (comma-separated: pdf,docx,eml)')\n .option('-q, --query <text>', 'Search file name, title, or summary')\n .option('--sort <field>', 'Sort by field (name, status, date, size, created)', 'status')\n .option(\n '-n, --limit <n>',\n 'Stop after N results. Fetching stops early — no unnecessary pages are loaded.'\n )\n .option(\n '--lite',\n 'Use lite field mode: skips per-doc decrypt and returns null metadata and empty doctags. ' +\n 'Much faster on large workspaces; fetch full doc details on demand.'\n )\n .option(\n '-o, --output <path>',\n 'Write output to a file instead of stdout. Extension determines the format when combined with --ids/--json/--csv (default: csv with doc_id, file_name, folder, status)'\n )\n .action((opts: DocsListOpts) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n\n // Fetch workspace metadata (name) so callers don't need a second\n // ``arbi workspace current`` round-trip just to label the result.\n // This is one extra GET /v1/user/workspaces per ``arbi docs`` —\n // cheap, RLS-filtered, and the agent saves a step. Failures are\n // non-fatal: we just omit the name.\n let workspaceName: string | null = null\n try {\n const list = await workspaces.listWorkspaces(arbi)\n workspaceName = list.find((w) => w.external_id === workspaceId)?.name ?? null\n } catch {\n // Network blip or permission shape we don't expect — proceed\n // without the name rather than failing the whole command.\n }\n\n const fields: DocumentListFields | undefined = opts.lite ? 'lite' : undefined\n const hardLimit = opts.limit ? parseInt(opts.limit, 10) : undefined\n\n // Collect rows progressively. We stream output as pages arrive in table/ids/csv\n // modes (no --output) so the terminal updates immediately.\n // For json/--output/count/sort modes we still buffer all pages first since those\n // outputs require the complete set.\n const needsSort = !!(opts.sort && opts.sort !== 'status')\n const bufferAll = !!(opts.json || opts.output || opts.count || needsSort)\n\n const data: Record<string, unknown>[] = []\n let totalFetched = 0\n\n const csvEscape = (s: string | null | undefined) => `\"${(s ?? '').replace(/\"/g, '\"\"')}\"`\n\n const csvHeader =\n 'external_id,status,file_name,file_size,folder,n_pages,tokens,doc_date,title'\n\n const renderRow = (d: Record<string, unknown>): string => {\n const meta = d.doc_metadata as {\n title?: string | null\n doc_date?: string | null\n } | null\n return [\n d.external_id,\n d.status,\n csvEscape((d.file_name as string) ?? ''),\n d.file_size ?? '',\n csvEscape((d.folder as string) ?? ''),\n d.n_pages ?? '',\n d.tokens ?? '',\n meta?.doc_date ?? '',\n csvEscape(meta?.title ?? ''),\n ].join(',')\n }\n\n // Print CSV header eagerly when streaming\n if (!bufferAll && (opts.csv || (!opts.ids && !opts.json && !opts.output))) {\n if (opts.csv) process.stdout.write(csvHeader + '\\n')\n }\n\n for await (const page of documents.listPaginated(arbi, {\n pageSize: 500,\n order: 'created_desc',\n fields,\n })) {\n let filtered = filterDocs(page as Record<string, unknown>[], opts)\n\n // Apply early limit: stop once we have enough\n if (hardLimit !== undefined) {\n const remaining = hardLimit - totalFetched\n if (remaining <= 0) break\n filtered = filtered.slice(0, remaining)\n }\n\n if (filtered.length === 0) {\n // Page may be entirely filtered out; check if we hit the limit\n if (hardLimit !== undefined && totalFetched >= hardLimit) break\n continue\n }\n\n totalFetched += filtered.length\n\n if (bufferAll) {\n data.push(...filtered)\n } else {\n // Streaming output — print rows as they arrive\n if (opts.ids) {\n filtered.forEach((d) => process.stdout.write((d.external_id as string) + '\\n'))\n } else if (opts.csv) {\n filtered.forEach((d) => process.stdout.write(renderRow(d) + '\\n'))\n } else {\n // Table mode — buffer page for printTable (can't stream individual rows\n // without column alignment, so we reprint per page)\n data.push(...filtered)\n }\n }\n\n if (hardLimit !== undefined && totalFetched >= hardLimit) break\n }\n\n if (totalFetched === 0 && data.length === 0) {\n // Machine-readable modes: emit a valid-but-empty payload so scripts\n // can parse the output without special-casing the no-results path.\n if (opts.json) {\n const emptyPayload = JSON.stringify(\n {\n workspace: { external_id: workspaceId, name: workspaceName },\n documents: [],\n },\n null,\n opts.output ? 2 : 0\n )\n if (opts.output) writeFileSync(opts.output, emptyPayload + '\\n')\n else console.log(emptyPayload)\n } else if (opts.ids) {\n if (opts.output) writeFileSync(opts.output, '')\n // Streaming IDs mode: nothing to emit, stay silent (valid empty stream).\n } else if (opts.csv) {\n if (opts.output) writeFileSync(opts.output, csvHeader + '\\n')\n // Streaming CSV already printed the header above.\n } else if (opts.count) {\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log('0')\n } else {\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log('No documents found.')\n }\n return\n }\n\n // For streaming non-table modes we're done — output already printed\n if (!bufferAll && (opts.ids || opts.csv)) {\n return\n }\n\n // Sort (buffered modes)\n if (bufferAll || (!opts.ids && !opts.csv)) {\n const sortField = opts.sort ?? 'status'\n data.sort((a, b) => {\n switch (sortField) {\n case 'name':\n return ((a.file_name as string) ?? '').localeCompare((b.file_name as string) ?? '')\n case 'size':\n return ((b.file_size as number) ?? 0) - ((a.file_size as number) ?? 0)\n case 'date':\n case 'created':\n return ((b.created_at as string) ?? '').localeCompare(\n (a.created_at as string) ?? ''\n )\n case 'status':\n default:\n return ((a.status as string) ?? '').localeCompare((b.status as string) ?? '')\n }\n })\n }\n\n // -- Count mode --\n if (opts.count) {\n if (opts.status || opts.folder || opts.ext || opts.query) {\n console.log(String(data.length))\n } else {\n const counts: Record<string, number> = {}\n data.forEach((d) => {\n const s = (d.status as string) ?? 'unknown'\n counts[s] = (counts[s] ?? 0) + 1\n })\n const withSummary = data.filter((d) => {\n const m = d.doc_metadata as { doc_subject?: string | null } | null\n return m?.doc_subject\n }).length\n const totalPages = data.reduce((sum, d) => sum + ((d.n_pages as number) ?? 0), 0)\n const totalTokens = data.reduce((sum, d) => sum + ((d.tokens as number) ?? 0), 0)\n // Include workspace context so callers (especially agents)\n // can answer \"how many docs in the workspace\" in one shot.\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log(chalk.bold(`Total: ${data.length} documents`))\n for (const [status, count] of Object.entries(counts).sort()) {\n const colorFn = statusColor(status)\n const pct = ((count / data.length) * 100).toFixed(1)\n console.log(` ${colorFn(statusSymbol(status))} ${status}: ${count} (${pct}%)`)\n }\n console.log(` With summaries: ${withSummary}`)\n console.log(` Total pages: ${totalPages.toLocaleString()}`)\n console.log(` Total tokens: ${totalTokens.toLocaleString()}`)\n }\n return\n }\n\n // Small helper: either write the payload to opts.output (if set)\n // or print it to stdout.\n const writeOut = (payload: string, defaultExt: string) => {\n if (opts.output) {\n writeFileSync(opts.output, payload.endsWith('\\n') ? payload : payload + '\\n')\n success(`Wrote ${data.length} rows to ${opts.output} (${defaultExt})`)\n } else {\n console.log(payload.endsWith('\\n') ? payload.slice(0, -1) : payload)\n }\n }\n\n // -- IDs mode (buffered - writing to file) --\n if (opts.ids) {\n writeOut(data.map((d) => d.external_id as string).join('\\n'), 'ids')\n return\n }\n\n // -- JSON mode --\n if (opts.json) {\n // Wrap with workspace context so a single ``arbi docs --json``\n // tells the caller both *what* docs and *which* workspace —\n // saves agents (and any scripted consumer) from a second\n // ``arbi workspace current`` round-trip. Existing scripts\n // expecting a bare array need to read ``.documents`` now.\n const payload = {\n workspace: { external_id: workspaceId, name: workspaceName },\n documents: data,\n }\n writeOut(JSON.stringify(payload, null, opts.output ? 2 : 0), 'json')\n return\n }\n\n // -- CSV mode (buffered - writing to file) --\n if (opts.csv || (opts.output && !opts.ids && !opts.json)) {\n const lines = [csvHeader]\n for (const d of data) {\n lines.push(renderRow(d))\n }\n writeOut(lines.join('\\n'), 'csv')\n return\n }\n\n // -- Table mode (default) --\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log(chalk.dim(`${data.length} documents\\n`))\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n {\n header: 'S',\n width: 4,\n value: (r) => {\n const s = r.status as string | null\n return statusColor(s)(statusSymbol(s))\n },\n },\n {\n header: 'TITLE',\n width: 34,\n value: (r) => {\n const meta = r.doc_metadata as { title?: string | null } | null\n return meta?.title ?? (r.file_name as string) ?? 'Unnamed'\n },\n },\n {\n header: 'SIZE',\n width: 8,\n value: (r) => formatSize(r.file_size as number | null),\n },\n {\n header: 'PAGES',\n width: 6,\n value: (r) => (r.n_pages ? String(r.n_pages) : '-'),\n },\n {\n header: 'DATE',\n width: 12,\n value: (r) => {\n const meta = r.doc_metadata as { doc_date?: string | null } | null\n return meta?.doc_date ?? '-'\n },\n },\n {\n header: 'FOLDER',\n width: 30,\n value: (r) => (r.folder as string) ?? '-',\n },\n ],\n data\n )\n })()\n )\n\n const doc = program.command('doc').description('Document management')\n\n doc\n .command('get [ids...]')\n .description('Get document details (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi)\n const selected = await promptCheckbox('Select documents', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n const data = await documents.getDocuments(arbi, docIds)\n console.log(JSON.stringify(data, null, 2))\n\n // Surface processing errors for failed documents.\n // The backend may include error details in various fields that aren't\n // in the typed schema, so we check the raw object dynamically.\n const docs = Array.isArray(data) ? data : [data]\n for (const d of docs) {\n const raw = d as Record<string, unknown>\n if (raw.status === 'failed') {\n const reason =\n (raw.error_reason as string) ||\n (raw.status_details as string) ||\n (raw.error as string) ||\n null\n const docId = raw.external_id as string\n if (reason) {\n console.error(chalk.red(`\\n⚠ ${docId} processing failed: ${reason}`))\n } else {\n console.error(\n chalk.red(`\\n⚠ ${docId} processing failed (no error details available)`)\n )\n }\n }\n }\n })()\n )\n\n doc\n .command('delete [ids...]')\n .description('Delete documents (interactive picker if no IDs given)')\n .option('--dry-run', 'Preview which docs would be deleted (no SDK call)')\n .action((ids?: string[], opts?: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi)\n const selected = await promptCheckbox('Select documents to delete', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n if (opts?.dryRun) {\n dryRun(`delete ${docIds.length} document(s)`, docIds)\n return\n }\n await documents.deleteDocuments(arbi, docIds)\n success(`Deleted ${docIds.length} document(s).`)\n })()\n )\n\n // ── share / unshare ──────────────────────────────────────────────────────\n // Two named subcommands instead of forcing agents through\n // `doc update '[{\"external_id\":\"…\",\"shared\":true}]'` — toggling one\n // boolean is the most-tripped-over JSON path in the CLI.\n doc\n .command('share <ids...>')\n .description('Mark documents as shared (visible to all workspace members)')\n .action((ids: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n await documents.updateDocuments(\n arbi,\n ids.map((external_id) => ({ external_id, shared: true }))\n )\n success(`Shared ${ids.length} document(s).`)\n })()\n )\n doc\n .command('unshare <ids...>')\n .description('Mark documents as private (owner-only)')\n .action((ids: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n await documents.updateDocuments(\n arbi,\n ids.map((external_id) => ({ external_id, shared: false }))\n )\n success(`Unshared ${ids.length} document(s).`)\n })()\n )\n\n // ── similar ──────────────────────────────────────────────────────────────\n // De-duplication primitive: find near-duplicate documents (same content,\n // different filenames) before deciding to ingest a new file. Pairs are\n // stored at upload time, so this is a cheap cached lookup, not a re-scan.\n doc\n .command('similar [doc-id]')\n .description('Find near-duplicate documents (cached similarity pairs)')\n .option(\n '--threshold <n>',\n 'Minimum cosine similarity score, 0.0–1.0 (default 0.0 = all stored pairs)',\n (v) => parseFloat(v),\n 0.0\n )\n .option('--json', 'Output as JSON')\n .action((docId: string | undefined, opts: { threshold: number; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const res = await arbi.fetch.GET('/v1/document/similar', {\n params: {\n query: {\n ...(docId ? { doc_ext_id: docId } : {}),\n threshold: opts.threshold,\n },\n },\n })\n if (res.error) throw new Error(`similar failed: ${JSON.stringify(res.error)}`)\n // Endpoint returns `{workspace_ext_id, pairs: [...]}` — surface the\n // envelope to --json callers, but flatten to the pairs array for the\n // table view (pairs is what the human cares about).\n const envelope = res.data as {\n workspace_ext_id?: string\n pairs?: Array<Record<string, unknown>>\n }\n const pairs = envelope.pairs ?? []\n if (opts.json) {\n console.log(JSON.stringify(envelope, null, 2))\n return\n }\n if (pairs.length === 0) {\n process.stderr.write(\n docId\n ? `No similar documents found above threshold ${opts.threshold}.\\n`\n : 'No stored similarity pairs.\\n'\n )\n return\n }\n printTable(\n [\n { header: 'DOC A', width: 18, value: (r) => (r.doc_a_ext_id as string) ?? '' },\n { header: 'DOC B', width: 18, value: (r) => (r.doc_b_ext_id as string) ?? '' },\n {\n header: 'SCORE',\n width: 8,\n value: (r) => ((r.score as number) ?? 0).toFixed(3),\n },\n ],\n pairs\n )\n })()\n )\n\n doc\n .command('update [json]')\n .description('Update documents (interactive form if no JSON given)')\n .action((json?: string) =>\n runAction(async () => {\n if (json) {\n const parsed = parseJsonArg<\n Record<string, unknown>[] | { documents: Record<string, unknown>[] }\n >(json, 'arbi doc update \\'[{\"external_id\": \"doc-123\", \"shared\": true}]\\'')\n const docs = Array.isArray(parsed) ? parsed : parsed.documents\n\n const { arbi } = await resolveWorkspace()\n const data = await documents.updateDocuments(\n arbi,\n docs as Parameters<typeof documents.updateDocuments>[1]\n )\n success(`Updated ${data.length} document(s).`)\n } else {\n // Interactive: pick a doc, then ask what to change\n const { arbi } = await resolveWorkspace()\n const choices = await fetchDocChoices(arbi)\n const docId = await promptSearch('Select document to update', choices)\n\n const field = await promptSelect('Field to update', [\n { name: 'Title', value: 'title' },\n { name: 'Shared', value: 'shared' },\n { name: 'Author', value: 'author' },\n { name: 'Abstract', value: 'abstract' },\n { name: 'Date', value: 'date' },\n ])\n\n let value: unknown\n if (field === 'shared') {\n value = await promptSelect('Shared?', [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ])\n } else if (field === 'date') {\n value = (await promptInput('Date (YYYY-MM-DD)', false)) || null\n } else {\n value = await promptInput(`${field.charAt(0).toUpperCase() + field.slice(1)}`)\n }\n\n const data = await documents.updateDocuments(arbi, [\n { external_id: docId, [field]: value },\n ])\n success(`Updated ${data.length} document(s).`)\n }\n })()\n )\n\n doc\n .command('upload-url <urls...>')\n .description('Upload documents from URLs')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--shared', 'Make documents shared', false)\n .option('--json', 'Output results as JSON')\n .action((urls: string[], opts: { workspace?: string; shared?: boolean; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await documents.uploadUrl(arbi, urls, opts.shared ?? false)\n if (opts.json) {\n console.log(\n JSON.stringify({\n docIds: data.doc_ext_ids ?? [],\n skipped: data.skipped ?? [],\n })\n )\n return\n }\n success(`Uploaded: ${(data.doc_ext_ids ?? []).join(', ')}`)\n if (data.skipped && data.skipped.length > 0) {\n warn(\n `Skipped: ${data.skipped.map((s: { file_name: string; reason: string }) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n })()\n )\n\n doc\n .command('parsed <doc-id> [stage]')\n .description('Get parsed document content (stage: marker, subchunk, final; default: final)')\n .action((docId: string, stage?: string) =>\n runAction(async () => {\n const { accessToken, config } = await resolveWorkspace()\n\n // Default to 'final' stage if not specified (most common use case)\n const validStages = ['marker', 'subchunk', 'final']\n const selectedStage = stage ?? 'final'\n if (!validStages.includes(selectedStage)) {\n error(`Invalid stage: ${selectedStage}. Must be one of: ${validStages.join(', ')}`)\n process.exit(1)\n }\n\n const data = await documents.getParsedContent(\n { baseUrl: config.baseUrl, accessToken },\n docId,\n selectedStage\n )\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n doc\n .command('reprocess [ids...]')\n .description('Reprocess failed/completed documents (sets status back to processing)')\n .option('-s, --status <status>', 'Reprocess all docs with this status (e.g. failed)')\n .option('-f, --folder <pattern>', 'Filter by folder (substring match)')\n .option(\n '-e, --ext <extension>',\n 'Filter by file extension (e.g. pdf, docx). Requires --status.'\n )\n .option('--dry-run', 'Show what would be reprocessed without doing it')\n .option('-b, --batch-size <n>', 'Batch size for update requests', '50')\n .option(\n '-i, --interval <seconds>',\n 'Seconds to wait between batches (float allowed, e.g. 0.5). Default 0 — send as fast as the server acks.',\n '0'\n )\n .option(\n '-r, --max-retries <n>',\n 'Retry attempts per failing batch before falling back to per-doc submission.',\n '3'\n )\n .option(\n '--status-interval <seconds>',\n 'Seconds between progress lines (0 to disable periodic printing).',\n '5'\n )\n .option('-v, --verbose', 'Print a log line after each batch in addition to periodic stats.')\n .option('-q, --quiet', 'Suppress periodic progress lines — only print the final summary.')\n .option('-W, --watch', 'Watch document processing progress after submission')\n .option('--no-watch', 'Skip watching document processing')\n .action(\n (\n ids: string[] | undefined,\n opts: {\n status?: string\n folder?: string\n ext?: string\n dryRun?: boolean\n batchSize?: string\n interval?: string\n maxRetries?: string\n statusInterval?: string\n verbose?: boolean\n quiet?: boolean\n watch?: boolean\n }\n ) =>\n runAction(async () => {\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n const { arbi, config, accessToken } = await resolveWorkspace(undefined, {\n skipNotifications: true,\n })\n let docIds: string[]\n const docNames = new Map<string, string>()\n\n if (ids && ids.length > 0) {\n if (opts.ext || opts.folder) {\n warn('--ext/--folder are ignored when explicit IDs are given.')\n }\n docIds = ids\n } else if (opts.status) {\n // Fetch all docs progressively and filter client-side.\n const allDocs = (await documents.listAll(arbi, {\n fields: 'lite',\n order: 'created_desc',\n })) as Record<string, unknown>[]\n let filtered = allDocs.filter((d) => d.status === opts.status)\n if (opts.folder) {\n const pattern = opts.folder.toLowerCase()\n filtered = filtered.filter((d) =>\n ((d.folder as string) ?? '').toLowerCase().includes(pattern)\n )\n }\n if (opts.ext) {\n // Match on file_name suffix; accept \"pdf\" or \".pdf\".\n const ext = opts.ext.toLowerCase().replace(/^\\./, '')\n filtered = filtered.filter((d) =>\n ((d.file_name as string) ?? '').toLowerCase().endsWith('.' + ext)\n )\n }\n docIds = filtered.map((d) => d.external_id as string)\n for (const d of filtered) {\n docNames.set(d.external_id as string, (d.file_name as string) ?? 'Unnamed')\n }\n } else {\n error('Provide document IDs or use --status to select documents to reprocess.')\n process.exit(1)\n return\n }\n\n if (docIds.length === 0) {\n console.log('No documents match the criteria.')\n return\n }\n\n console.log(`${docIds.length} document(s) to reprocess.`)\n\n if (opts.dryRun) {\n docIds.forEach((id) => console.log(` ${id}`))\n console.log(chalk.dim('\\n(dry run — no changes made)'))\n return\n }\n\n const batchSize = parseInt(opts.batchSize ?? '50', 10)\n const maxRetries = parseInt(opts.maxRetries ?? '3', 10)\n const intervalSec = parseFloat(opts.interval ?? '0')\n const intervalMs =\n Number.isFinite(intervalSec) && intervalSec > 0 ? intervalSec * 1000 : 0\n const statusIntervalSec = parseFloat(opts.statusInterval ?? '5')\n const statusIntervalMs =\n Number.isFinite(statusIntervalSec) && statusIntervalSec > 0\n ? statusIntervalSec * 1000\n : 0\n\n const total = docIds.length\n const startMs = Date.now()\n let submitted = 0\n let succeeded = 0\n let failed = 0\n const failedIds: string[] = []\n\n const formatDuration = (ms: number): string => {\n const s = Math.floor(ms / 1000)\n if (s < 60) return `${s}s`\n const m = Math.floor(s / 60)\n if (m < 60) return `${m}m${s % 60}s`\n const h = Math.floor(m / 60)\n return `${h}h${m % 60}m`\n }\n\n // Local HH:MM:SS for the status-line timestamp. Tying each\n // line to a wall-clock makes `elapsed=` sanity-checkable in\n // a running tail and lets the operator cross-reference with\n // other logs.\n const formatClock = (ts: number): string => {\n const d = new Date(ts)\n const pad = (n: number): string => n.toString().padStart(2, '0')\n return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`\n }\n\n // ── Processing watch state (populated when --watch) ──────────\n let procCompleted = 0\n let procFailed = 0\n const procPending = new Set<string>()\n const procFailedDetails = new Map<string, string>()\n\n const printStatus = (prefix = ''): void => {\n const now = Date.now()\n const elapsed = now - startMs\n const submitRate = submitted > 0 ? (submitted / elapsed) * 1000 : 0\n let bar =\n `[${formatClock(now)}] submitted=${submitted}/${total} ` +\n `api_ok=${succeeded} api_err=${failed} ` +\n `rate=${submitRate.toFixed(1)}/s elapsed=${formatDuration(elapsed)}`\n\n if (willWatch) {\n const procRate = procCompleted > 0 ? (procCompleted / elapsed) * 1000 : 0\n const pendingCount = procPending.size\n const eta = procRate > 0 ? pendingCount / procRate : 0\n bar +=\n ` | proc_ok=${procCompleted} proc_err=${procFailed} proc_pending=${pendingCount}` +\n ` rate(proc)=${procRate.toFixed(1)}/s eta(processing)=${formatDuration(eta * 1000)}`\n }\n console.log(`${prefix}${bar}`)\n }\n\n // Periodic progress printer. Holds a reference so we can clear\n // it on exit even if the loop aborts. Quiet mode disables it;\n // the final summary still prints at the end either way.\n let statusTimer: NodeJS.Timeout | undefined\n if (!opts.quiet && statusIntervalMs > 0) {\n statusTimer = setInterval(() => printStatus(' '), statusIntervalMs)\n }\n\n // Exponential backoff helper. Caps at 30s so a retry storm\n // doesn't stall the run indefinitely.\n const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms))\n const backoff = async (attempt: number): Promise<void> => {\n const delayMs = Math.min(1000 * Math.pow(2, attempt), 30000)\n await sleep(delayMs)\n }\n\n const submitBatch = async (batchIds: string[]): Promise<boolean> => {\n const updates = batchIds.map((id) => ({\n external_id: id,\n status: 'processing' as const,\n }))\n try {\n await documents.updateDocuments(\n arbi,\n updates as Parameters<typeof documents.updateDocuments>[1]\n )\n return true\n } catch {\n return false\n }\n }\n\n // ── Open WebSocket before submitting so processing events\n // arrive concurrently with submission. ──────────────────\n let conn: { close: () => void } | null = null\n let onWatchDone: (() => void) | null = null\n let watchDonePromise: Promise<void> | null = null\n let submissionDone = false\n\n if (willWatch) {\n watchDonePromise = new Promise<void>((r) => {\n onWatchDone = r\n })\n\n try {\n conn = await connectWithReconnect({\n baseUrl: config.baseUrl,\n accessToken,\n onReconnecting: (attempt, max) => {\n warn(` WebSocket reconnecting (${attempt}/${max})...`)\n },\n onReconnectFailed: () => {\n error(' WebSocket reconnection failed. Run \"arbi watch\" to resume monitoring.')\n },\n onMessage: (msg) => {\n if (!isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) return\n if (!procPending.has(msg.doc_ext_id)) return\n const docName = docNames.get(msg.doc_ext_id) || msg.file_name\n const extra = msg as Record<string, unknown>\n\n if (msg.status === 'failed') {\n procFailed += 1\n procPending.delete(msg.doc_ext_id)\n\n // Try WS extras first, then fetch error_message from API\n const wsReason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n ''\n\n const logFailure = (reason: string): void => {\n const suffix = reason ? ` — ${reason}` : ''\n procFailedDetails.set(msg.doc_ext_id, `${docName}${suffix}`)\n console.log(` ${docName}: ${chalk.red('processing failed')}${suffix}`)\n if (submissionDone && procPending.size === 0) conn?.close()\n }\n\n if (wsReason) {\n logFailure(wsReason)\n } else {\n // Fetch from REST API — fire-and-forget async\n documents\n .getDocuments(arbi, [msg.doc_ext_id])\n .then((docs) => {\n const d = (docs as Record<string, unknown>[])[0]\n logFailure((d?.error_message as string) || '')\n })\n .catch(() => logFailure(''))\n }\n } else if (\n msg.status === 'completed' ||\n msg.status === 'skipped' ||\n msg.status === 'empty'\n ) {\n procCompleted += 1\n procPending.delete(msg.doc_ext_id)\n }\n\n if (msg.status !== 'failed' && submissionDone && procPending.size === 0) {\n conn?.close()\n }\n },\n onClose: () => {\n onWatchDone?.()\n },\n })\n } catch {\n warn('WebSocket connection failed. Proceeding without processing watch.')\n conn = null\n watchDonePromise = null\n }\n }\n\n try {\n for (let i = 0; i < docIds.length; i += batchSize) {\n const batch = docIds.slice(i, i + batchSize)\n\n // 1. Try the batch, retrying transient failures with\n // exponential backoff up to `maxRetries` attempts.\n let batchOk = false\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n batchOk = await submitBatch(batch)\n if (batchOk) break\n if (attempt < maxRetries) {\n await backoff(attempt)\n }\n }\n\n if (batchOk) {\n succeeded += batch.length\n submitted += batch.length\n for (const id of batch) procPending.add(id)\n if (opts.verbose) {\n console.log(` [${submitted}/${total}] Triggered reprocessing...`)\n }\n } else {\n // 2. Batch persistently failed — fall back to per-doc\n // submission so a single bad doc can't poison the\n // whole batch.\n console.log(\n chalk.dim(\n ` batch of ${batch.length} failed after ${maxRetries} retries, falling back to per-doc`\n )\n )\n for (let j = 0; j < batch.length; j++) {\n const id = batch[j]\n const docOk = await submitBatch([id])\n if (docOk) {\n succeeded += 1\n procPending.add(id)\n } else {\n failed += 1\n failedIds.push(id)\n }\n submitted += 1\n if (intervalMs > 0 && j < batch.length - 1) {\n await sleep(intervalMs)\n }\n }\n }\n\n // Pace subsequent batches per `intervalMs` so a long doc\n // list can't stampede a loaded server.\n if (intervalMs > 0 && i + batchSize < docIds.length) {\n await sleep(intervalMs)\n }\n }\n } finally {\n if (statusTimer) clearInterval(statusTimer)\n }\n\n submissionDone = true\n\n // Submission summary.\n console.log('')\n printStatus()\n if (failed > 0) {\n warn(`${failed} document(s) failed to submit.`)\n const preview = failedIds.slice(0, 20)\n preview.forEach((id) => console.log(` ${chalk.red('✗')} ${id}`))\n if (failedIds.length > preview.length) {\n console.log(chalk.dim(` ... and ${failedIds.length - preview.length} more`))\n }\n }\n if (succeeded > 0) {\n success(`Submitted ${succeeded} document(s) for reprocessing.`)\n }\n\n // ── Wait for processing to complete ──────────────────────────\n if (watchDonePromise && conn && procPending.size > 0) {\n console.log(chalk.bold(`\\nWatching processing for ${procPending.size} document(s)...`))\n\n // Start a new periodic printer for the watch phase\n let watchTimer: NodeJS.Timeout | undefined\n if (!opts.quiet && statusIntervalMs > 0) {\n watchTimer = setInterval(() => printStatus(' '), statusIntervalMs)\n }\n\n await watchDonePromise\n\n if (watchTimer) clearInterval(watchTimer)\n\n // Processing summary\n const totalElapsed = formatDuration(Date.now() - startMs)\n if (procFailedDetails.size > 0) {\n console.log(\n `\\nProcessing complete: completed=${procCompleted} failed=${procFailed} elapsed=${totalElapsed}`\n )\n error('Failed documents:')\n for (const [, detail] of procFailedDetails) {\n error(` ${detail}`)\n }\n } else if (procPending.size > 0) {\n warn(`\\nDisconnected. ${procPending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else {\n success(\n `\\nProcessing complete: completed=${procCompleted} failed=0 elapsed=${totalElapsed} ${chalk.green('✓ all ok')}`\n )\n }\n } else if (succeeded > 0 && !willWatch) {\n dim(\n 'Tip: Use -W/--watch to monitor processing progress, or run \"arbi docs\" to check status.'\n )\n } else if (watchDonePromise && conn && procPending.size === 0) {\n // All completed during submission\n conn.close()\n await watchDonePromise\n const totalElapsed = formatDuration(Date.now() - startMs)\n if (procFailedDetails.size > 0) {\n console.log(\n `\\nProcessing complete: completed=${procCompleted} failed=${procFailed} elapsed=${totalElapsed}`\n )\n error('Failed documents:')\n for (const [, detail] of procFailedDetails) {\n error(` ${detail}`)\n }\n } else {\n success(\n `\\nProcessing complete: completed=${procCompleted} failed=0 elapsed=${totalElapsed} ${chalk.green('✓ all ok')}`\n )\n }\n }\n })()\n )\n}\n","/**\n * Shared types and helpers for the upload command family.\n *\n * Kept in a dedicated module so the legacy multipart path (``upload.ts``) and\n * the direct-to-MinIO path (``upload-direct.ts``) can share the summary shape\n * and printing helper without introducing a circular import between them.\n */\n\nimport { success, warn } from '../output.js'\n\nexport interface UploadSummary {\n totalFiles: number\n uploaded: number\n skipped: number\n duplicates: number\n folders: number\n docIds: string[]\n skippedDetails: Array<{ file_name: string; reason: string }>\n}\n\nexport interface UploadOpts {\n workspace?: string\n watch?: boolean\n dryRun?: boolean\n json?: boolean\n config?: string\n manifest?: string\n log?: string\n resume?: boolean\n failFast?: boolean\n root?: string\n limit?: string\n s3?: boolean\n folder?: string\n}\n\nexport function printSummary(summary: UploadSummary): void {\n console.log('')\n console.log('Upload summary:')\n console.log(` Files found: ${summary.totalFiles}`)\n success(` Uploaded: ${summary.uploaded}`)\n if (summary.skipped > 0) {\n warn(` Skipped: ${summary.skipped}`)\n }\n console.log(` Folders: ${summary.folders}`)\n\n if (summary.skippedDetails.length > 0) {\n console.log('')\n warn('Skipped files:')\n for (const s of summary.skippedDetails) {\n warn(` ${s.file_name}: ${s.reason}`)\n }\n }\n}\n","/**\n * Direct-to-MinIO upload path (``arbi upload --s3``).\n *\n * Files are SecretBox-encrypted on the client and PUT directly to MinIO via\n * presigned URLs; arbi-app is never in the byte path. This module hosts the\n * input-expansion helper and the command runner; they are imported from\n * ``upload.ts`` when the ``--s3`` flag is set.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport {\n documentsNode,\n documents,\n connectWebSocket,\n getRawWorkspaceKey,\n DOC_TERMINAL_STATUSES,\n} from '@arbidocs/sdk'\nimport { resolveWorkspace } from '../helpers.js'\nimport { store, getConfig } from '../config.js'\nimport { success, error, warn, status, dim } from '../output.js'\nimport { printSummary, type UploadOpts, type UploadSummary } from './upload-shared.js'\n\n/** Count the supported files that would actually be uploaded from a directory. */\nfunction countSupportedFiles(dirPath: string): number {\n let count = 0\n for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) {\n const full = `${dirPath}/${entry.name}`\n if (entry.isDirectory()) {\n count += countSupportedFiles(full)\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase()\n if (documents.SUPPORTED_EXTENSIONS.has(ext)) count++\n }\n }\n return count\n}\n\n/**\n * Merge an ``UploadBatchResult`` (returned by the zip / dir / archive helpers)\n * into the running summary + doc → filename map used for --watch.\n */\nfunction mergeBatchResult(\n summary: UploadSummary,\n uploadedDocs: Map<string, string>,\n result: documents.UploadBatchResult,\n sourceLabel: string,\n opts: UploadOpts\n): void {\n for (const [folder, info] of result.folders) {\n summary.folders += 1\n summary.totalFiles += info.fileCount\n if (!opts.json) {\n success(\n ` ${folder || '<root>'}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`)\n }\n }\n for (const docId of info.doc_ext_ids) uploadedDocs.set(docId, sourceLabel)\n }\n summary.uploaded += result.doc_ext_ids.length\n summary.skipped += result.skipped.length\n summary.docIds.push(...result.doc_ext_ids)\n summary.skippedDetails.push(...result.skipped)\n}\n\n/**\n * Classify and validate the positional inputs for the direct-upload flow.\n *\n * Unlike the legacy path, every input is handled client-side: directories are\n * walked, zips are extracted in memory, and 7z/rar archives shell out to the\n * system ``7z`` command. Nothing is rejected up front — the caller decides\n * how to upload each entry in ``runDirectUploadMode``.\n */\nexport type DirectInputKind = 'file' | 'dir' | 'zip' | 'archive'\n\nexport interface DirectInput {\n kind: DirectInputKind\n absolutePath: string\n originalPath: string\n}\n\nexport function classifyDirectInputs(inputPaths: string[]): DirectInput[] {\n const out: DirectInput[] = []\n for (const p of inputPaths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n const resolved = path.resolve(p)\n const stat = fs.statSync(resolved)\n if (stat.isDirectory()) {\n out.push({ kind: 'dir', absolutePath: resolved, originalPath: p })\n continue\n }\n const ext = path.extname(resolved).toLowerCase()\n if (ext === '.zip') {\n out.push({ kind: 'zip', absolutePath: resolved, originalPath: p })\n continue\n }\n if (documentsNode.ARCHIVE_EXTENSIONS.has(ext)) {\n out.push({ kind: 'archive', absolutePath: resolved, originalPath: p })\n continue\n }\n if (!documents.SUPPORTED_EXTENSIONS.has(ext)) {\n warn(`Skipping unsupported file: ${p}`)\n continue\n }\n out.push({ kind: 'file', absolutePath: resolved, originalPath: p })\n }\n return out\n}\n\n/**\n * Execute the upload via the direct-to-MinIO flow.\n *\n * Each positional input is handled based on its kind:\n * - single file: uploaded via ``uploadLocalFilesDirect`` at the workspace\n * root (or under ``--folder`` if supplied)\n * - directory: walked and uploaded via ``uploadLocalDirectoryDirect``,\n * preserving the internal folder structure\n * - zip: extracted in memory and uploaded via ``uploadLocalZipDirect``\n * - 7z / rar: extracted to a temp dir via the system ``7z`` binary, then\n * uploaded via ``uploadLocalArchiveDirect``\n *\n * All extraction happens client-side — arbi-app only ever sees metadata and\n * SecretBox ciphertext via the presigned PUT route.\n */\nexport async function runDirectUploadMode(inputPaths: string[], opts: UploadOpts): Promise<void> {\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n const inputs = classifyDirectInputs(inputPaths)\n if (inputs.length === 0) {\n warn('No supported files found to upload.')\n return\n }\n\n // ── Dry-run: report what each input would produce without touching net ──\n if (opts.dryRun) {\n for (const inp of inputs) {\n if (inp.kind === 'file') {\n const folder = opts.folder ?? '<workspace root>'\n console.log(` ${inp.originalPath} → ${folder}`)\n } else if (inp.kind === 'dir') {\n const count = countSupportedFiles(inp.absolutePath)\n console.log(` ${inp.originalPath}: directory (${count} supported file(s))`)\n } else if (inp.kind === 'zip') {\n console.log(` ${inp.originalPath}: zip archive (contents would be extracted + uploaded)`)\n } else {\n console.log(\n ` ${inp.originalPath}: ${path\n .extname(inp.absolutePath)\n .slice(1)} archive (contents would be extracted + uploaded)`\n )\n }\n }\n console.log(`Would upload ${inputs.length} input(s) via --s3.`)\n return\n }\n\n const { arbi, config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace, {\n skipNotifications: willWatch,\n })\n\n // Unwrap the raw workspace key once — needed for SecretBox encryption and\n // content hashing. Kept in memory only; never logged or persisted.\n const creds = store.requireCredentials()\n const workspaceKey = await getRawWorkspaceKey(arbi, workspaceId, creds.signingPrivateKeyBase64)\n\n const summary: UploadSummary = {\n totalFiles: 0,\n uploaded: 0,\n skipped: 0,\n duplicates: 0,\n folders: 0,\n docIds: [],\n skippedDetails: [],\n }\n const uploadedDocs = new Map<string, string>()\n\n // Progress callbacks shared by the dir / zip / archive helpers.\n const directoryOpts: documentsNode.UploadDirectoryDirectOptions = {\n configExtId: opts.config,\n onBatchStart: (progress) => {\n if (!opts.json) {\n dim(\n ` [${progress.batch}/${progress.totalBatches}] Uploading ${progress.filesInBatch} file(s) from ${progress.folder} via direct-to-MinIO...`\n )\n }\n },\n }\n\n // Collect plain-file inputs and upload them in one direct call at the end\n // so ``--folder`` applies uniformly and we get a single round-trip.\n const plainFiles: string[] = []\n\n for (const inp of inputs) {\n if (inp.kind === 'file') {\n plainFiles.push(inp.absolutePath)\n continue\n }\n\n if (inp.kind === 'dir') {\n const result = await documentsNode.uploadLocalDirectoryDirect(\n arbi,\n workspaceKey,\n inp.absolutePath,\n directoryOpts\n )\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in directory: ${inp.originalPath}`)\n continue\n }\n mergeBatchResult(summary, uploadedDocs, result, inp.originalPath, opts)\n if (!opts.json) {\n success(\n `Uploaded directory: ${inp.originalPath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n continue\n }\n\n if (inp.kind === 'zip') {\n const result = await documentsNode.uploadLocalZipDirect(\n arbi,\n workspaceKey,\n inp.absolutePath,\n directoryOpts\n )\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in zip: ${inp.originalPath}`)\n continue\n }\n mergeBatchResult(summary, uploadedDocs, result, inp.originalPath, opts)\n if (!opts.json) {\n success(\n `Uploaded zip: ${inp.originalPath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n continue\n }\n\n // archive (7z / rar)\n const result = await documentsNode.uploadLocalArchiveDirect(\n arbi,\n workspaceKey,\n inp.absolutePath,\n directoryOpts\n )\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in archive: ${inp.originalPath}`)\n continue\n }\n mergeBatchResult(summary, uploadedDocs, result, inp.originalPath, opts)\n if (!opts.json) {\n success(\n `Uploaded archive: ${inp.originalPath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n }\n\n // Flush any plain-file inputs as a single direct call.\n if (plainFiles.length > 0) {\n if (!opts.json) {\n dim(\n ` Uploading ${plainFiles.length} file(s)${opts.folder ? ` → ${opts.folder}` : ''} via direct-to-MinIO...`\n )\n }\n const result = await documentsNode.uploadLocalFilesDirect(arbi, workspaceKey, plainFiles, {\n folder: opts.folder,\n configExtId: opts.config,\n })\n summary.totalFiles += plainFiles.length\n summary.uploaded += result.doc_ext_ids.length\n summary.skipped += result.skipped.length\n summary.docIds.push(...result.doc_ext_ids)\n summary.skippedDetails.push(...result.skipped)\n for (let i = 0; i < result.doc_ext_ids.length && i < plainFiles.length; i++) {\n uploadedDocs.set(result.doc_ext_ids[i], path.basename(plainFiles[i]))\n }\n if (!opts.json) {\n success(\n ` ${opts.folder || '<root>'}: ${result.doc_ext_ids.length} uploaded, ${result.skipped.length} skipped`\n )\n }\n }\n\n if (opts.json) {\n console.log(JSON.stringify(summary))\n } else {\n printSummary(summary)\n }\n\n // Optional watch pass — reuses the same WS flow as the legacy mode.\n if (willWatch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n const failed = new Map<string, string>()\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n const docName = uploadedDocs.get(msg.doc_ext_id) || msg.file_name\n const extra = msg as Record<string, unknown>\n if (msg.status === 'failed') {\n const reason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n 'Unknown error'\n failed.set(msg.doc_ext_id, reason)\n console.log(` ${docName}: ${status(msg.status)} — ${reason}`)\n pending.delete(msg.doc_ext_id)\n } else {\n console.log(` ${docName}: ${status(msg.status)} (${msg.progress}%)`)\n if (DOC_TERMINAL_STATUSES.has(msg.status)) pending.delete(msg.doc_ext_id)\n }\n if (pending.size === 0) conn.close()\n }\n },\n onClose: () => {\n if (failed.size > 0) {\n error(`\\n${failed.size} document(s) failed to process:`)\n for (const [docId, reason] of failed) {\n error(` ${uploadedDocs.get(docId) || docId}: ${reason}`)\n }\n }\n if (pending.size > 0) {\n warn(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else if (failed.size === 0 && uploadedDocs.size > 0) {\n success('\\nAll documents processed successfully.')\n }\n onDone()\n },\n })\n\n await done\n }\n}\n","/**\n * arbi upload <file...> [--workspace <id>] [--watch] [--dry-run] [--json]\n *\n * Uploads files, directories, or zip archives to the active workspace.\n *\n * - Directories are uploaded with folder structure preserved.\n * - Zip archives are extracted and uploaded with internal folder structure.\n * - Regular files are uploaded individually.\n * - Files are uploaded in batches of 100 per folder to avoid overwhelming the backend.\n *\n * Manifest mode (eDiscovery-grade audit trail):\n * --manifest <file> — read newline-delimited paths from a file instead of\n * positional args. Every line is treated as one input.\n * --log <file> — append a JSONL record per file to this path as the\n * upload progresses. Each record contains the doc id\n * (on success), a terminal status, and the reason\n * string for any non-success outcome. The log is\n * append-only and crash-safe.\n * --resume — read the log file, skip inputs that already have a\n * terminal outcome there (uploaded/duplicate/rejected),\n * and retry any that were marked `error`.\n * --fail-fast — abort the run on the first `error` outcome.\n * --root <dir> — root directory used to derive the backend `folder`\n * path for each file. Defaults to the longest common\n * parent of all inputs.\n *\n * Watch behaviour:\n * --watch / -W — always watch processing progress after upload\n * --no-watch — never watch, even if config watch is on\n * (no flag) — auto-watch in interactive terminals when config watch\n * is on (default); skip in pipes / CI\n *\n * When watching, failed documents show the server error reason if available.\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport { documentsNode, documents, connectWebSocket, DOC_TERMINAL_STATUSES } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getConfig } from '../config.js'\nimport { success, error, warn, status, dim } from '../output.js'\nimport { printSummary, type UploadOpts, type UploadSummary } from './upload-shared.js'\nimport { runDirectUploadMode } from './upload-direct.js'\n\nexport function registerUploadCommand(program: Command): void {\n program\n .command('add [paths...]')\n .alias('upload')\n .description('Add files, directories, or zip archives to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-W, --watch', 'Watch document processing progress after upload')\n .option('--no-watch', 'Skip watching document processing')\n .option('--dry-run', 'Show what would be uploaded without uploading')\n .option('--json', 'Output results as JSON')\n .option('--config <id>', 'Config ext_id to use (e.g. cfg-xxx for SKIP_DUPLICATES)')\n .option('--manifest <file>', 'Read newline-delimited paths from file (eDiscovery mode)')\n .option('--log <file>', 'Append per-file JSONL audit log (eDiscovery mode)')\n .option('--resume', 'Skip paths already completed in --log (requires --log)')\n .option('--fail-fast', 'Abort on first upload error')\n .option('--root <dir>', 'Root directory for backend folder paths (defaults to common parent)')\n .option(\n '--limit <n>',\n 'Max files to upload this run (applied after --resume filter, manifest mode only)'\n )\n .option(\n '-s, --s3',\n 'Upload via the direct-to-MinIO flow (SecretBox on the client, presigned PUT)'\n )\n .option('--folder <name>', 'Backend folder for plain-file uploads (direct upload only)')\n .action((paths: string[] | undefined, opts: UploadOpts) =>\n runAction(async () => {\n const isManifestMode = Boolean(opts.manifest || opts.log || opts.resume)\n const inputPaths: string[] = paths ?? []\n\n if (isManifestMode) {\n if (opts.s3) {\n error('--s3 is not supported with manifest mode yet.')\n process.exit(1)\n }\n await runManifestMode(inputPaths, opts)\n return\n }\n\n if (opts.s3) {\n if (inputPaths.length === 0) {\n error('No paths provided.')\n process.exit(1)\n }\n await runDirectUploadMode(inputPaths, opts)\n return\n }\n\n if (inputPaths.length === 0) {\n error('No paths provided. Pass file/dir args or use --manifest <file>.')\n process.exit(1)\n }\n\n // Validate paths exist before authenticating\n for (const p of inputPaths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n }\n\n // Determine early whether we'll watch — if so, skip background notifications\n // to avoid session conflicts (backend enforces one WS per session).\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n const { config, accessToken } = await resolveWorkspace(opts.workspace, {\n skipNotifications: willWatch,\n })\n\n // Track uploaded doc IDs and their file names for --watch\n const uploadedDocs = new Map<string, string>()\n const auth = { baseUrl: config.baseUrl, accessToken }\n\n // Aggregate summary\n const summary: UploadSummary = {\n totalFiles: 0,\n uploaded: 0,\n skipped: 0,\n duplicates: 0,\n folders: 0,\n docIds: [],\n skippedDetails: [],\n }\n\n // Progress callbacks for batched uploads\n const progressCallbacks: documentsNode.UploadDirectoryOptions = {\n configExtId: opts.config,\n onBatchStart: (progress: documentsNode.UploadProgress) => {\n if (!opts.json) {\n dim(\n ` [${progress.batch}/${progress.totalBatches}] Uploading ${progress.filesInBatch} file(s) from ${progress.folder}...`\n )\n }\n },\n onBatchComplete: (\n progress: documentsNode.UploadProgress & {\n result: {\n doc_ext_ids?: string[]\n skipped?: Array<{ file_name: string; reason: string }>\n }\n }\n ) => {\n const uploaded = progress.result.doc_ext_ids?.length ?? 0\n const skipped = progress.result.skipped?.length ?? 0\n if (!opts.json) {\n success(\n ` [${progress.batch}/${progress.totalBatches}] ${uploaded} uploaded, ${skipped} skipped (${progress.filesUploaded}/${progress.totalFiles} total)`\n )\n }\n },\n }\n\n for (const filePath of inputPaths) {\n const stat = fs.statSync(filePath)\n\n if (stat.isDirectory()) {\n if (opts.dryRun) {\n // Dry run: just count files\n const count = countSupportedFiles(filePath)\n console.log(`${filePath}: ${count} supported file(s) would be uploaded`)\n summary.totalFiles += count\n continue\n }\n\n const result = await documentsNode.uploadDirectory(auth, filePath, progressCallbacks)\n\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in directory: ${filePath}`)\n continue\n }\n\n // Report per-folder results\n if (!opts.json) {\n for (const [folder, info] of result.folders) {\n success(\n ` ${folder}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(\n ` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n success(\n `Uploaded directory: ${filePath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n\n updateSummary(summary, result)\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else if (filePath.toLowerCase().endsWith('.zip')) {\n if (opts.dryRun) {\n console.log(`${filePath}: zip archive (contents would be extracted and uploaded)`)\n continue\n }\n\n const result = await documentsNode.uploadZip(auth, filePath, progressCallbacks)\n\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in zip: ${filePath}`)\n continue\n }\n\n if (!opts.json) {\n for (const [folder, info] of result.folders) {\n success(\n ` ${folder}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(\n ` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n success(`Uploaded zip: ${filePath} (${result.doc_ext_ids.length} document(s) total)`)\n }\n\n updateSummary(summary, result)\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else if (\n documentsNode.ARCHIVE_EXTENSIONS.has(\n filePath.slice(filePath.lastIndexOf('.')).toLowerCase()\n )\n ) {\n if (opts.dryRun) {\n console.log(`${filePath}: archive (contents would be extracted and uploaded)`)\n continue\n }\n\n const result = await documentsNode.uploadArchive(auth, filePath, progressCallbacks)\n\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in archive: ${filePath}`)\n continue\n }\n\n if (!opts.json) {\n for (const [folder, info] of result.folders) {\n success(\n ` ${folder}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(\n ` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n success(\n `Uploaded archive: ${filePath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n\n updateSummary(summary, result)\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else {\n if (opts.dryRun) {\n console.log(`${filePath}: single file would be uploaded`)\n summary.totalFiles += 1\n continue\n }\n\n const result = await documentsNode.uploadLocalFile(auth, filePath)\n\n if (!opts.json) {\n success(`Uploaded: ${result.fileName} (${(result.doc_ext_ids ?? []).join(', ')})`)\n if (result.skipped && result.skipped.length > 0) {\n warn(\n ` Skipped: ${result.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n\n summary.totalFiles += 1\n summary.uploaded += result.doc_ext_ids?.length ?? 0\n summary.docIds.push(...(result.doc_ext_ids ?? []))\n if (result.skipped) {\n summary.skipped += result.skipped.length\n summary.skippedDetails.push(...result.skipped)\n }\n\n for (const id of result.doc_ext_ids ?? []) uploadedDocs.set(id, result.fileName)\n }\n }\n\n if (opts.dryRun) {\n return\n }\n\n // Print or output summary\n if (opts.json) {\n console.log(JSON.stringify(summary))\n } else {\n printSummary(summary)\n }\n\n // Watch processing progress\n if (willWatch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n const failed = new Map<string, string>()\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n const docName = uploadedDocs.get(msg.doc_ext_id) || msg.file_name\n // Backend may include extra error fields not in the TS schema\n const extra = msg as Record<string, unknown>\n\n if (msg.status === 'failed') {\n const reason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n 'Unknown error'\n failed.set(msg.doc_ext_id, reason)\n console.log(` ${docName}: ${status(msg.status)} — ${reason}`)\n pending.delete(msg.doc_ext_id)\n } else {\n console.log(` ${docName}: ${status(msg.status)} (${msg.progress}%)`)\n // Any terminal status (completed, skipped, empty, low-content)\n // clears the row from `pending` so the watch loop can exit. The\n // old code only checked `completed`, so a tiny txt that hit\n // `low-content` (a real terminal state) hung the watch loop\n // forever.\n if (DOC_TERMINAL_STATUSES.has(msg.status as string)) {\n pending.delete(msg.doc_ext_id)\n }\n }\n\n if (pending.size === 0) {\n conn.close()\n }\n }\n },\n onClose: () => {\n if (failed.size > 0) {\n error(`\\n${failed.size} document(s) failed to process:`)\n for (const [docId, reason] of failed) {\n error(` ${uploadedDocs.get(docId) || docId}: ${reason}`)\n }\n }\n if (pending.size > 0) {\n warn(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else if (failed.size === 0 && uploadedDocs.size > 0) {\n success('\\nAll documents processed successfully.')\n }\n onDone()\n },\n })\n\n await done\n } else if (uploadedDocs.size > 0 && !willWatch && !opts.json) {\n dim(\n 'Tip: Use -W/--watch to monitor processing progress, or run \"arbi docs\" to check status.'\n )\n }\n })()\n )\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction updateSummary(summary: UploadSummary, result: documents.UploadBatchResult): void {\n let totalFiles = 0\n for (const [, info] of result.folders) {\n totalFiles += info.fileCount\n summary.folders += 1\n }\n summary.totalFiles += totalFiles\n summary.uploaded += result.doc_ext_ids.length\n summary.skipped += result.skipped.length\n summary.docIds.push(...result.doc_ext_ids)\n summary.skippedDetails.push(...result.skipped)\n}\n\nfunction countSupportedFiles(dirPath: string): number {\n let count = 0\n for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) {\n const fullPath = `${dirPath}/${entry.name}`\n if (entry.isDirectory()) {\n count += countSupportedFiles(fullPath)\n } else if (entry.isFile()) {\n const ext = entry.name.toLowerCase().lastIndexOf('.')\n if (ext >= 0) {\n const extStr = entry.name.slice(ext).toLowerCase()\n if (documents.SUPPORTED_EXTENSIONS.has(extStr)) {\n count++\n }\n }\n }\n }\n return count\n}\n\n// ── Manifest mode (eDiscovery audit trail) ─────────────────────────────────\n\n/** A log line we recognize when reading an existing --log file for --resume. */\ninterface LogEntry {\n path: string\n status: documentsNode.FileStatus | 'pending'\n}\n\n/**\n * Read prior outcomes from a JSONL log so `--resume` can skip anything that\n * already has a terminal non-error status. Returns a map of path → last\n * status seen. Ignores malformed lines and header/footer records.\n */\nfunction readLogState(logPath: string): Map<string, documentsNode.FileStatus> {\n const state = new Map<string, documentsNode.FileStatus>()\n if (!fs.existsSync(logPath)) return state\n const text = fs.readFileSync(logPath, 'utf8')\n for (const line of text.split('\\n')) {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n try {\n const rec = JSON.parse(trimmed) as Partial<LogEntry> & { event?: string }\n if (rec.event) continue // header/footer\n if (typeof rec.path === 'string' && typeof rec.status === 'string') {\n state.set(rec.path, rec.status as documentsNode.FileStatus)\n }\n } catch {\n // ignore malformed lines\n }\n }\n return state\n}\n\n/** Read a newline-delimited manifest file, stripping blank lines and comments. */\nfunction readTextManifest(manifestPath: string): string[] {\n const text = fs.readFileSync(manifestPath, 'utf8')\n const out: string[] = []\n for (const raw of text.split('\\n')) {\n const line = raw.replace(/\\r$/, '').trim()\n if (!line || line.startsWith('#')) continue\n out.push(line)\n }\n return out\n}\n\n// ── CSV manifest (eDiscovery load-file style) ──────────────────────────────\n\n/**\n * Parse a CSV text body. Handles quoted values with commas, escaped double\n * quotes (\"\" → \"), CRLF/LF line endings, and multi-line quoted values.\n * Returns rows as string arrays; caller is responsible for picking out the\n * header.\n */\nfunction parseCsv(text: string): string[][] {\n const rows: string[][] = []\n let row: string[] = []\n let cur = ''\n let inQuotes = false\n let i = 0\n while (i < text.length) {\n const ch = text[i]\n if (inQuotes) {\n if (ch === '\"') {\n if (text[i + 1] === '\"') {\n cur += '\"'\n i += 2\n continue\n }\n inQuotes = false\n i++\n } else {\n cur += ch\n i++\n }\n } else if (ch === '\"' && cur === '') {\n inQuotes = true\n i++\n } else if (ch === ',') {\n row.push(cur)\n cur = ''\n i++\n } else if (ch === '\\n' || ch === '\\r') {\n row.push(cur)\n cur = ''\n rows.push(row)\n row = []\n if (ch === '\\r' && text[i + 1] === '\\n') i += 2\n else i++\n } else {\n cur += ch\n i++\n }\n }\n if (cur !== '' || row.length > 0) {\n row.push(cur)\n rows.push(row)\n }\n // Drop a trailing empty row that a final newline produces\n if (rows.length > 0 && rows[rows.length - 1].length === 1 && rows[rows.length - 1][0] === '') {\n rows.pop()\n }\n return rows\n}\n\nfunction csvField(v: string): string {\n if (v.includes(',') || v.includes('\"') || v.includes('\\n') || v.includes('\\r')) {\n return '\"' + v.replace(/\"/g, '\"\"') + '\"'\n }\n return v\n}\n\nfunction writeCsvAtomic(filePath: string, header: string[], rows: string[][]): void {\n const lines: string[] = [header.map(csvField).join(',')]\n for (const row of rows) {\n const padded = row.slice()\n while (padded.length < header.length) padded.push('')\n lines.push(padded.map(csvField).join(','))\n }\n const tmp = filePath + '.tmp'\n fs.writeFileSync(tmp, lines.join('\\n') + '\\n')\n fs.renameSync(tmp, filePath)\n}\n\n/**\n * A loaded CSV manifest. Keeps the full rows so we can write the file back\n * with any new doc ids applied, preserving every other column.\n *\n * Required columns: `Document Name` (or `Name`) and `Folder` (or `Path`).\n * Optional writable columns: `ARBI Doc ID`, `ARBI Status`. If not present\n * they are auto-appended to the header so the updated CSV carries results.\n */\ninterface CsvManifest {\n filePath: string\n header: string[]\n rows: string[][]\n nameCol: number\n folderCol: number\n docIdCol: number\n statusCol: number\n /** Absolute paths in the order the rows appear. */\n paths: string[]\n /** Map of absolute path → row index, for writing back outcomes. */\n pathToRow: Map<string, number>\n}\n\nfunction findColumn(header: string[], candidates: string[]): number {\n const normalized = header.map((h) => h.trim().toLowerCase())\n for (const cand of candidates) {\n const i = normalized.indexOf(cand.toLowerCase())\n if (i >= 0) return i\n }\n return -1\n}\n\nfunction loadCsvManifest(csvPath: string, rootDir: string | undefined): CsvManifest {\n const text = fs.readFileSync(csvPath, 'utf8')\n const all = parseCsv(text)\n if (all.length === 0) {\n error(`Empty CSV: ${csvPath}`)\n process.exit(1)\n }\n const header = all[0]\n const rows = all.slice(1)\n\n const nameCol = findColumn(header, ['Document Name', 'Name', 'File Name', 'Filename'])\n if (nameCol < 0) {\n error(`CSV ${csvPath} is missing a Document Name / Name column.`)\n process.exit(1)\n }\n const folderCol = findColumn(header, ['Folder', 'Path', 'Directory'])\n if (folderCol < 0) {\n error(`CSV ${csvPath} is missing a Folder / Path column.`)\n process.exit(1)\n }\n\n let docIdCol = findColumn(header, ['ARBI Doc ID', 'Doc ID', 'DocId'])\n let statusCol = findColumn(header, ['ARBI Status', 'Status'])\n if (docIdCol < 0) {\n header.push('ARBI Doc ID')\n docIdCol = header.length - 1\n }\n if (statusCol < 0) {\n header.push('ARBI Status')\n statusCol = header.length - 1\n }\n\n // Pad every row so the new columns exist even if the file was shorter.\n for (const row of rows) {\n while (row.length < header.length) row.push('')\n }\n\n const root = rootDir ? path.resolve(rootDir) : process.cwd()\n const paths: string[] = []\n const pathToRow = new Map<string, number>()\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const name = (row[nameCol] ?? '').trim()\n if (!name) continue\n const folder = (row[folderCol] ?? '').trim()\n const rel = folder ? path.join(folder, name) : name\n const abs = path.resolve(root, rel)\n paths.push(abs)\n pathToRow.set(abs, i)\n }\n\n return {\n filePath: csvPath,\n header,\n rows,\n nameCol,\n folderCol,\n docIdCol,\n statusCol,\n paths,\n pathToRow,\n }\n}\n\n// ── Direct-to-MinIO upload mode ─────────────────────────────────────────────\n\n/**\n * Execute the upload in manifest mode. Reads inputs from --manifest or\n * expands positional args (directories → their supported files), optionally\n * filters via --resume, streams per-file JSONL outcomes to --log, and prints\n * a terminal summary.\n */\nasync function runManifestMode(inputPaths: string[], opts: UploadOpts): Promise<void> {\n if (opts.resume && !opts.log) {\n error('--resume requires --log <file>')\n process.exit(1)\n }\n\n // ── Load inputs: CSV, text manifest, and/or positional args ─────────────\n const rawPaths: string[] = []\n let csv: CsvManifest | null = null\n if (opts.manifest) {\n if (!fs.existsSync(opts.manifest)) {\n error(`Manifest not found: ${opts.manifest}`)\n process.exit(1)\n }\n const ext = path.extname(opts.manifest).toLowerCase()\n if (ext === '.csv' || ext === '.tsv') {\n csv = loadCsvManifest(opts.manifest, opts.root)\n rawPaths.push(...csv.paths)\n } else {\n rawPaths.push(...readTextManifest(opts.manifest))\n }\n }\n for (const p of inputPaths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n const stat = fs.statSync(p)\n if (stat.isDirectory()) {\n rawPaths.push(...documentsNode.walkSupportedFiles(p))\n } else {\n rawPaths.push(path.resolve(p))\n }\n }\n\n if (rawPaths.length === 0) {\n error('Manifest is empty. Nothing to upload.')\n process.exit(1)\n }\n\n // ── Resume filter ───────────────────────────────────────────────────────\n let pathsToUpload = rawPaths\n const priorState = opts.log ? readLogState(opts.log) : new Map<string, documentsNode.FileStatus>()\n let resumedCount = 0\n if (opts.resume) {\n pathsToUpload = rawPaths.filter((p) => {\n const prior = priorState.get(p)\n if (\n prior === 'uploaded' ||\n prior === 'duplicate' ||\n prior === 'rejected' ||\n prior === 'skipped'\n ) {\n resumedCount++\n return false\n }\n return true\n })\n }\n\n // ── Limit (applied after resume filter) ─────────────────────────────────\n let limit: number | null = null\n let limitedOut = 0\n if (opts.limit !== undefined) {\n const n = Number.parseInt(opts.limit, 10)\n if (!Number.isFinite(n) || n <= 0) {\n error(`Invalid --limit: ${opts.limit}. Must be a positive integer.`)\n process.exit(1)\n }\n limit = n\n if (pathsToUpload.length > n) {\n limitedOut = pathsToUpload.length - n\n pathsToUpload = pathsToUpload.slice(0, n)\n }\n }\n\n const isInteractive = process.stdout.isTTY === true\n const humanOutput = !opts.json\n\n if (humanOutput) {\n console.log(\n `Manifest: ${rawPaths.length} file(s)` +\n (csv ? ` from ${path.basename(csv.filePath)}` : '') +\n (resumedCount ? ` (${resumedCount} already done, skipping)` : '') +\n (limit !== null && limitedOut > 0\n ? ` (limit=${limit}, ${limitedOut} deferred to next run)`\n : '')\n )\n }\n\n if (opts.dryRun) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n total: rawPaths.length,\n resumed: resumedCount,\n toUpload: pathsToUpload.length,\n })\n )\n } else {\n console.log(`Would upload ${pathsToUpload.length} file(s)`)\n }\n return\n }\n\n if (pathsToUpload.length === 0) {\n if (humanOutput) success('Nothing to do — all paths already completed in log.')\n return\n }\n\n // ── Authenticate ────────────────────────────────────────────────────────\n // Background notifications follow the same rule as the legacy path: skip\n // them when we'll open our own watch WS (one WS per session). Use\n // `arbi config notifications off` for a persistent silence.\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n const { config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace, {\n skipNotifications: willWatch,\n })\n const auth = { baseUrl: config.baseUrl, accessToken }\n\n // ── Open JSONL log ──────────────────────────────────────────────────────\n let logFd: number | null = null\n if (opts.log) {\n const dir = path.dirname(path.resolve(opts.log))\n fs.mkdirSync(dir, { recursive: true })\n logFd = fs.openSync(opts.log, 'a')\n const header = JSON.stringify({\n ts: new Date().toISOString(),\n event: 'run_start',\n workspace: workspaceId,\n config: opts.config ?? null,\n inputs: rawPaths.length,\n toUpload: pathsToUpload.length,\n resumed: resumedCount,\n })\n fs.writeSync(logFd, header + '\\n')\n fs.fsyncSync(logFd)\n }\n\n const uploadedDocs = new Map<string, string>()\n const runStart = Date.now()\n\n const writeLog = (o: documentsNode.FileOutcome): void => {\n if (logFd === null) return\n const rec = {\n ts: new Date().toISOString(),\n path: o.path,\n folder: o.folder,\n sizeBytes: o.sizeBytes,\n status: o.status,\n ...(o.docId ? { docId: o.docId } : {}),\n ...(o.reason ? { reason: o.reason } : {}),\n attempt: o.attempt,\n ...(o.batchId ? { batchId: o.batchId } : {}),\n }\n fs.writeSync(logFd, JSON.stringify(rec) + '\\n')\n fs.fsyncSync(logFd)\n }\n\n // ── Human-readable streaming output ─────────────────────────────────────\n // Non-error outcomes tick a compact progress counter on stderr; errors\n // and rejections print inline so they stand out.\n const total = pathsToUpload.length\n let done = 0\n let uploadedCount = 0\n let duplicateCount = 0\n let rejectedCount = 0\n let errorCount = 0\n let skippedCount = 0\n\n const renderProgress = (): void => {\n if (!humanOutput || !isInteractive) return\n const pct = total > 0 ? Math.floor((done / total) * 100) : 100\n const line =\n ` ${done}/${total} (${pct}%)` +\n ` ok=${uploadedCount}` +\n (duplicateCount > 0 ? ` dup=${duplicateCount}` : '') +\n (rejectedCount > 0 ? ` rej=${rejectedCount}` : '') +\n (skippedCount > 0 ? ` skip=${skippedCount}` : '') +\n (errorCount > 0 ? ` err=${errorCount}` : '')\n // \\r overwrite; pad with spaces so shorter lines don't leave garbage\n process.stderr.write('\\r' + line.padEnd(80, ' '))\n }\n\n const clearProgress = (): void => {\n if (humanOutput && isInteractive) process.stderr.write('\\r' + ' '.repeat(80) + '\\r')\n }\n\n const printInlineOutcome = (o: documentsNode.FileOutcome): void => {\n if (!humanOutput) return\n const name = path.basename(o.path)\n if (o.status === 'rejected') {\n clearProgress()\n warn(` ✗ ${name}: ${o.reason}`)\n } else if (o.status === 'error') {\n clearProgress()\n error(` ! ${name}: ${o.reason}`)\n }\n }\n\n // ── CSV writeback (checkpoint every 25 outcomes) ────────────────────────\n let sinceCheckpoint = 0\n const CHECKPOINT_EVERY = 25\n const csvStatusText = (o: documentsNode.FileOutcome): string => {\n if (o.status === 'uploaded') return 'uploaded'\n if (o.status === 'duplicate') return `duplicate: ${o.reason ?? ''}`.trim()\n if (o.status === 'rejected') return `rejected: ${o.reason ?? ''}`.trim()\n if (o.status === 'skipped') return `skipped: ${o.reason ?? ''}`.trim()\n return `error: ${o.reason ?? ''}`.trim()\n }\n const flushCsv = (): void => {\n if (csv === null) return\n writeCsvAtomic(csv.filePath, csv.header, csv.rows)\n }\n\n const result = await documentsNode.uploadManifest(auth, pathsToUpload, {\n rootDir: opts.root,\n configExtId: opts.config,\n failFast: opts.failFast,\n onFile: async (outcome) => {\n writeLog(outcome)\n done++\n switch (outcome.status) {\n case 'uploaded':\n uploadedCount++\n if (outcome.docId) uploadedDocs.set(outcome.docId, path.basename(outcome.path))\n break\n case 'duplicate':\n duplicateCount++\n break\n case 'rejected':\n rejectedCount++\n break\n case 'error':\n errorCount++\n break\n case 'skipped':\n skippedCount++\n break\n }\n printInlineOutcome(outcome)\n renderProgress()\n\n if (csv !== null) {\n const rowIdx = csv.pathToRow.get(outcome.path)\n if (rowIdx !== undefined) {\n if (outcome.docId) csv.rows[rowIdx][csv.docIdCol] = outcome.docId\n csv.rows[rowIdx][csv.statusCol] = csvStatusText(outcome)\n sinceCheckpoint++\n if (sinceCheckpoint >= CHECKPOINT_EVERY) {\n flushCsv()\n sinceCheckpoint = 0\n }\n }\n }\n },\n })\n\n // Final CSV flush + log footer\n if (csv !== null && sinceCheckpoint > 0) flushCsv()\n\n if (logFd !== null) {\n const footer = JSON.stringify({\n ts: new Date().toISOString(),\n event: 'run_end',\n ...result.summary,\n elapsedMs: Date.now() - runStart,\n })\n fs.writeSync(logFd, footer + '\\n')\n fs.fsyncSync(logFd)\n fs.closeSync(logFd)\n }\n\n clearProgress()\n\n // ── Summary output ──────────────────────────────────────────────────────\n if (opts.json) {\n console.log(\n JSON.stringify({\n ...result.summary,\n elapsedMs: Date.now() - runStart,\n docIds: result.outcomes.filter((o) => o.docId).map((o) => o.docId),\n })\n )\n } else {\n const elapsed = ((Date.now() - runStart) / 1000).toFixed(1)\n console.log('')\n console.log('Upload summary')\n console.log('──────────────')\n console.log(` Files: ${result.summary.total}`)\n if (result.summary.uploaded > 0) success(` Uploaded: ${result.summary.uploaded}`)\n if (result.summary.duplicate > 0) dim(` Duplicates: ${result.summary.duplicate}`)\n if (result.summary.rejected > 0) warn(` Rejected: ${result.summary.rejected}`)\n if (result.summary.skipped > 0) dim(` Skipped: ${result.summary.skipped}`)\n if (result.summary.error > 0) error(` Errors: ${result.summary.error}`)\n console.log(` Elapsed: ${elapsed}s`)\n if (opts.log) dim(` Log: ${opts.log}`)\n if (csv) dim(` CSV: ${csv.filePath} (updated)`)\n }\n\n // Exit code: 1 if any errors, 0 otherwise\n if (result.summary.error > 0) {\n if (!opts.json) {\n dim('\\nSome files errored. Re-run with --resume to retry failed entries.')\n }\n process.exit(1)\n }\n\n // Watch processing if requested\n if (willWatch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n const failed = new Map<string, string>()\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n const docName = uploadedDocs.get(msg.doc_ext_id) || msg.file_name\n const extra = msg as Record<string, unknown>\n\n if (msg.status === 'failed') {\n const reason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n 'Unknown error'\n failed.set(msg.doc_ext_id, reason)\n console.log(` ${docName}: ${status(msg.status)} — ${reason}`)\n pending.delete(msg.doc_ext_id)\n } else {\n console.log(` ${docName}: ${status(msg.status)} (${msg.progress}%)`)\n // See watch-loop fix above — any terminal status clears pending so\n // the loop exits on `skipped` / `empty` / `low-content` too.\n if (DOC_TERMINAL_STATUSES.has(msg.status as string)) {\n pending.delete(msg.doc_ext_id)\n }\n }\n\n if (pending.size === 0) {\n conn.close()\n }\n }\n },\n onClose: () => {\n if (failed.size > 0) {\n error(`\\n${failed.size} document(s) failed to process:`)\n for (const [docId, reason] of failed) {\n error(` ${uploadedDocs.get(docId) || docId}: ${reason}`)\n }\n }\n if (pending.size > 0) {\n warn(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else if (failed.size === 0 && uploadedDocs.size > 0) {\n success('\\nAll documents processed successfully.')\n }\n onDone()\n },\n })\n\n await done\n }\n}\n","/**\n * arbi download [doc-id] [--output <path>]\n *\n * Interactive doc picker if no doc-id given.\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { success } from '../output.js'\nimport { promptSearch } from '../prompts.js'\n\nexport function registerDownloadCommand(program: Command): void {\n program\n .command('download [doc-id]')\n .description('Download a document (interactive picker if no ID given)')\n .option(\n '-o, --output <path>',\n 'Output file path. Use \"-\" to stream raw bytes to stdout (for piping).'\n )\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option(\n '--json',\n 'Emit a JSON metadata line to stdout after writing the file (doc_id, path, bytes, filename). Implies a file write — use \"-o -\" or pipe stdout to get bytes without JSON.'\n )\n .action(\n (docId: string | undefined, opts: { output?: string; workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi, config, accessToken } = await resolveWorkspace(opts.workspace)\n\n // Pick doc if not given\n if (!docId) {\n const data = await documents.listDocuments(arbi)\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n const choices = data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n docId = await promptSearch('Select document to download', choices)\n }\n\n const res = await documents.downloadDocument(\n { baseUrl: config.baseUrl, accessToken },\n docId\n )\n\n let filename = `${docId}`\n const disposition = res.headers.get('content-disposition')\n if (disposition) {\n const match = disposition.match(/filename[*]?=(?:UTF-8''|\"?)([^\";]+)/i)\n if (match) filename = decodeURIComponent(match[1].replace(/\"/g, ''))\n }\n\n const buffer = Buffer.from(await res.arrayBuffer())\n\n // Stream to stdout if -o -\n if (opts.output === '-') {\n process.stdout.write(buffer)\n return\n }\n\n const outputPath = opts.output || path.join(process.cwd(), filename)\n fs.writeFileSync(outputPath, buffer)\n\n if (opts.json) {\n console.log(\n JSON.stringify({\n doc_id: docId,\n path: outputPath,\n bytes: buffer.length,\n filename: path.basename(outputPath),\n })\n )\n return\n }\n\n success(\n `Downloaded: ${path.basename(outputPath)} (${(buffer.length / (1024 * 1024)).toFixed(1)} MB)`\n )\n })()\n )\n}\n","/**\n * arbi ask <question> [-b] [-n] [-c <msg-id>] [-w <id>] [-q]\n *\n * Default: Streams SSE response from POST /v1/assistant/query.\n * -b/--background: Submits via POST /v1/responses with background=true,\n * returns immediately with a task ID. Use `arbi task` to check status.\n * -c/--continue: Continue from a specific message ID (e.g. a completed\n * background task result). Overrides the automatic chat session.\n *\n * Always includes all workspace documents in retrieval context.\n * Maintains conversation continuity: each response's assistant message ID\n * is saved and sent as previous_response_id in the next query.\n * Use --new to start a fresh conversation.\n *\n * Session handling: The chat session stores the workspace ID alongside the\n * conversation state. When the resolved workspace differs from the stored\n * session workspace (either because the user switched workspaces or passed\n * a different -w flag), the stale session is cleared and a fresh\n * conversation starts automatically.\n */\n\nimport { Command } from 'commander'\nimport {\n streamSSE,\n formatAgentStepLabel,\n formatStreamSummary,\n countCitations,\n stripCitationMarkdown,\n documents,\n assistant,\n responses,\n} from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport {\n getConfig,\n getChatSession,\n updateChatSession,\n clearChatSession,\n saveLastMetadata,\n} from '../config.js'\nimport { addTask } from '../task-store.js'\nimport { chalk } from '../output.js'\n\nexport function registerAskCommand(program: Command): void {\n program\n .command('ask <question...>')\n .description('Ask the RAG assistant a question (no quotes needed)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-c, --continue <msg-id>', 'Continue from a specific message ID')\n .option('--config <id>', 'Config ext_id to use (e.g. cfg-xxx)')\n .option('-n, --new', 'Start a new conversation (ignore previous context)')\n .option('-b, --background', 'Submit as background task — fetch result with `arbi task result`')\n .option('-q, --quiet', 'Suppress agent steps and tool calls')\n .option('--json', 'Output in JSON format (background mode only)')\n .option(\n '--raw-citations',\n 'Keep raw `[text](#cite-N)` markdown links instead of the cleaner `text[N]` form'\n )\n .action(\n (\n words: string[],\n opts: {\n workspace?: string\n continue?: string\n config?: string\n new?: boolean\n background?: boolean\n quiet?: boolean\n json?: boolean\n rawCitations?: boolean\n }\n ) =>\n runAction(async () => {\n // `--json` is meaningful only on the background path — the streaming\n // SSE response is prose, not JSON. Silently ignoring `--json`\n // (the old behavior) means an agent expecting structured output\n // gets back a transcript and no signal anything went wrong. Fail\n // loudly so the caller knows to add `-b`.\n if (opts.json && !opts.background) {\n console.error(\n 'Error: --json only works with -b/--background. Streaming mode emits prose, not JSON.\\nRun: arbi ask -b --json <question> (then `arbi task result`)'\n )\n process.exit(1)\n }\n\n const question = words.join(' ')\n const { arbi, accessToken, workspaceId, config } = await resolveWorkspace(opts.workspace)\n\n // Resolve previousResponseId from flags and session\n let previousResponseId: string | null = null\n\n if (opts.continue) {\n // Explicit message ID — overrides session\n previousResponseId = opts.continue\n } else if (opts.new) {\n clearChatSession()\n } else {\n const session = getChatSession()\n const workspaceChanged =\n session.lastMessageExtId && session.workspaceId && session.workspaceId !== workspaceId\n\n if (workspaceChanged) {\n clearChatSession()\n } else if (session.lastMessageExtId) {\n previousResponseId = session.lastMessageExtId\n }\n }\n\n // Always include all workspace documents in retrieval context\n const docs = await documents.listDocuments(arbi)\n const docIds = docs.map((d) => d.external_id as string)\n\n // ── Background mode ──────────────────────────────────────────────\n // Background tasks start a standalone conversation (no parent ID).\n // Use `arbi ask --continue <msg-id>` to follow up on a result.\n if (opts.background) {\n const result = await responses.submitBackgroundQuery({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceId,\n question,\n docIds,\n previousResponseId: null,\n model: opts.config,\n })\n\n // Store locally for `arbi task list/status/result`\n addTask({\n id: result.id,\n question: question.slice(0, 200),\n workspaceId,\n submittedAt: new Date().toISOString(),\n status: 'queued',\n model: result.model,\n })\n\n if (opts.json) {\n console.log(JSON.stringify({ id: result.id, status: result.status }))\n } else {\n console.log(`Task queued: ${chalk.cyan(result.id)}`)\n console.log(\n chalk.dim('Use `arbi task status` or `arbi task result` to check progress.')\n )\n }\n return\n }\n\n // ── Streaming mode (default) ─────────────────────────────────────\n\n // Query the assistant (retry as new conversation if parent message is stale)\n let res: Response\n try {\n res = await assistant.queryAssistant({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceId,\n question,\n docIds,\n previousResponseId,\n model: opts.config,\n })\n } catch (err) {\n // Detect stale parent message via HTTP 404 or specific error text.\n // This handles edge cases like conversation deletion on the server.\n const isStaleParent =\n previousResponseId &&\n err instanceof Error &&\n (err.message.includes('404') || err.message.includes('Parent message not found'))\n\n if (!isStaleParent) throw err\n\n // Parent message no longer exists — start a new conversation\n clearChatSession()\n res = await assistant.queryAssistant({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceId,\n question,\n docIds,\n previousResponseId: null,\n model: opts.config,\n })\n }\n\n // Resolve verbosity: flag > config > default (true)\n const verbose = opts.quiet === true ? false : getConfig()?.verbose !== false\n\n let elapsedTime: number | null = null\n let firstToken = true\n\n // The backend embeds citations inline as `[claim text](#cite-N)`\n // markdown links inside the streamed tokens. Default behavior: pipe\n // tokens through `stripCitationMarkdown` so a human (and an agent\n // grepping for `\\[\\d+\\]`) sees a clean `claim text[1]` form. Pass\n // `--raw-citations` to keep the original markdown — useful when\n // piping to a markdown renderer that resolves the anchors itself.\n //\n // Streaming complication: a citation marker can be split across\n // token chunks. We buffer the tail until it's safe to flush.\n let buf = ''\n const transform = opts.rawCitations ? (s: string) => s : stripCitationMarkdown\n const flush = (final: boolean) => {\n // If we might be mid-marker, hold the tail. The longest possible\n // partial-marker prefix is `](#cite-` (8 chars) — keep at least\n // 32 chars buffered to cover the inner text too.\n const cut = final ? buf.length : Math.max(0, buf.length - 32)\n if (cut === 0) return\n const out = transform(buf.slice(0, cut))\n buf = buf.slice(cut)\n if (out) process.stdout.write(out)\n }\n\n const result = await streamSSE(res, {\n onToken: (content) => {\n if (firstToken) {\n process.stderr.write(chalk.dim('[ARBI] '))\n firstToken = false\n }\n buf += content\n flush(false)\n },\n onAgentStep: (data) => {\n if (verbose) {\n const label = formatAgentStepLabel(data)\n // Skip \"Writing answer\" — the [agent] prefix is printed inline with the first token\n if (label && data.step !== 'answering') {\n console.error(chalk.dim(`\\n[ARBI] ${label}`))\n }\n }\n },\n onElapsedTime: (t) => {\n elapsedTime = t\n },\n onError: (message) => console.error(chalk.red(`\\nError: ${message}`)),\n })\n\n // Flush any remainder still in the citation-aware buffer.\n flush(true)\n process.stdout.write('\\n')\n\n // Persist metadata for `arbi cite`\n if (result.metadata) {\n saveLastMetadata(result.metadata)\n }\n\n // Print summary line (right-aligned, hidden only in quiet mode)\n const refs = countCitations(result.metadata)\n const summary = opts.quiet !== true ? formatStreamSummary(result, elapsedTime) : ''\n if (summary) {\n const refSuffix = refs > 0 ? ` · ${refs} ref${refs === 1 ? '' : 's'}` : ''\n const text = `[${summary}${refSuffix}]`\n const cols = process.stderr.columns || 80\n const pad = Math.max(0, cols - text.length)\n console.error(chalk.dim(' '.repeat(pad) + text))\n }\n\n // Print citation hint\n if (refs > 0 && opts.quiet !== true) {\n console.error(\n chalk.dim(`[${refs} citation${refs === 1 ? '' : 's'} — arbi cite to browse]`)\n )\n }\n\n // Save conversation state for continuity and history restoration.\n // Always save the resolved workspaceId so future calls can detect changes.\n //\n // The SDK's `streamSSE` only captures `assistantMessageExtId` from\n // `response.created` events; some backend configs don't emit that\n // event yet. The result metadata still has the assistant message's\n // `external_id`, so we fall back to it — otherwise every `arbi ask`\n // would start a new conversation because the session pointer never\n // updates.\n const assistantId =\n result.assistantMessageExtId ?? (result.metadata?.external_id as string | undefined)\n if (assistantId) {\n const updates: Partial<{\n lastMessageExtId: string\n conversationExtId: string\n workspaceId: string\n }> = {\n lastMessageExtId: assistantId,\n workspaceId,\n }\n const conversationExtId =\n result.userMessage?.conversation_ext_id ?? result.metadata?.conversation_ext_id\n if (conversationExtId) {\n updates.conversationExtId = conversationExtId\n }\n updateChatSession(updates)\n } else if (opts.quiet !== true) {\n // No assistant message ID anywhere → the response didn't emit the\n // events the SDK needs (`response.created` / `arbi.message_metadata`\n // / `response.completed`). Probably truncated mid-stream by an\n // upstream agent failure. Warn loudly so the caller knows the\n // next `arbi ask` will start a fresh conversation instead of\n // resuming this one — an agent script that chains multiple asks\n // would otherwise silently fan out into N orphan conversations.\n console.error(\n chalk.yellow(\n '[warn] No assistant message ID received — session not saved. ' +\n 'The next `arbi ask` will start a new conversation.'\n )\n )\n }\n })()\n )\n}\n","/**\n * arbi cite — list all citations from the last response\n * arbi cite <N> — show citation N (markdown block with every field)\n * arbi cite -a / --all — show every citation as markdown blocks\n * arbi cite --json — JSON envelope, same data\n * arbi cite verify <N> — verification block for citation N\n *\n * Reads persisted metadata from `~/.arbi/last-metadata.json`, written by\n * the last `arbi ask` response.\n *\n * ── Design note: one canonical format ───────────────────────────────────────\n *\n * The previous incarnation had three text shapes (default pretty, --raw text\n * dump, --json) and `arbi cite --json | jq …` was the only path to extract\n * a doc_id or chunk_ext_id without parsing fragments of the human output.\n *\n * That put formatting work on the agent. The new default IS the\n * agent-grade format: a markdown block per citation with every field\n * exposed under stable headings (`**Doc ID:** doc-…`, `**Chunk ID:** chk-…`,\n * `**SHA256:** …`) that an agent can extract with a one-line regex — no\n * external tool needed. Humans get the same blocks rendered the same way,\n * with chalk for the headers when stdout is a TTY.\n *\n * `--json` still exists for the rare case where an agent really wants the\n * full structured payload, but it's no longer the *only* path to the\n * underlying IDs. `--raw` is gone — its job (just the passage text) is\n * trivially recovered by extracting the fenced code block from the\n * canonical output.\n */\n\nimport { createHash } from 'node:crypto'\nimport { Command } from 'commander'\nimport { resolveCitations, countCitations, type MessageMetadataPayload } from '@arbidocs/sdk'\nimport { runAction, printJson } from '../helpers.js'\nimport { loadLastMetadata } from '../config.js'\nimport { chalk } from '../output.js'\n\nfunction hashUtf8(s: string): string {\n return createHash('sha256').update(s, 'utf8').digest('hex')\n}\n\ntype Resolved = ReturnType<typeof resolveCitations>[number]\n\nexport function registerCiteCommand(program: Command): void {\n const cite = program\n .command('cite [number]')\n .description('Browse citations from the last `arbi ask` response in this shell')\n .allowExcessArguments(true)\n .option('-a, --all', 'Show all citations as markdown blocks')\n .option('--json', 'Output citations as JSON (full structured payload)')\n .action((numberOrVerb: string | undefined, opts: { all?: boolean; json?: boolean }) =>\n runAction(async () => {\n if (numberOrVerb === 'verify') {\n const argv = process.argv\n const i = argv.indexOf('verify')\n const target = i !== -1 ? argv[i + 1] : undefined\n if (!target) {\n console.error('Usage: arbi cite verify <number>')\n process.exit(1)\n }\n await verifyOne(target, opts)\n return\n }\n await listOrShow(numberOrVerb, opts)\n })()\n )\n\n void cite\n}\n\n// ── Output ──────────────────────────────────────────────────────────────────\n\n/**\n * Render a single citation as a markdown block. Stable headings so a regex\n * like `^\\*\\*Doc ID:\\*\\* (doc-[a-z0-9]+)` reliably extracts the ID; fenced\n * triple-backtick passage so an agent can pull the content with a one-liner.\n * Headers are chalk-bolded when stdout is a TTY — the markdown structure\n * survives in non-TTY output (chalk auto-strips colors).\n */\nfunction renderCitation(r: Resolved): string {\n const firstChunk = r.chunks[0]\n const docTitle = firstChunk?.metadata?.doc_title ?? 'Unknown document'\n const page = firstChunk?.metadata?.page_number\n const docId = firstChunk?.metadata?.doc_ext_id ?? null\n const chunkId = firstChunk?.metadata?.chunk_ext_id ?? null\n const passage = r.chunks.map((c) => c.content).join('\\n\\n')\n const sha = hashUtf8(passage)\n\n const lines: string[] = []\n lines.push(chalk.bold(`## Citation ${r.citationNum}`))\n lines.push('')\n lines.push(`${chalk.bold('**Document:**')} ${docTitle}`)\n if (page != null) lines.push(`${chalk.bold('**Page:**')} ${page}`)\n if (docId) lines.push(`${chalk.bold('**Doc ID:**')} ${docId}`)\n if (chunkId) lines.push(`${chalk.bold('**Chunk ID:**')} ${chunkId}`)\n lines.push(`${chalk.bold('**SHA256:**')} ${sha}`)\n lines.push('')\n lines.push(chalk.bold('### Claim'))\n lines.push(r.citationData.statement ?? '')\n lines.push('')\n lines.push(chalk.bold('### Passage'))\n lines.push('```')\n lines.push(passage)\n lines.push('```')\n return lines.join('\\n')\n}\n\nasync function listOrShow(\n number: string | undefined,\n opts: { all?: boolean; json?: boolean }\n): Promise<void> {\n const raw = loadLastMetadata()\n if (!raw) {\n if (opts.json) {\n printJson({ count: 0, citations: [] })\n return\n }\n process.stderr.write('No citation data available. Run `arbi ask` first.\\n')\n return\n }\n\n const metadata = raw as MessageMetadataPayload\n if (countCitations(metadata) === 0) {\n if (opts.json) {\n printJson({ count: 0, citations: [] })\n return\n }\n process.stderr.write('The last response contained no citations.\\n')\n return\n }\n\n const resolved = resolveCitations(metadata)\n\n if (opts.json) {\n const projection = resolved.map((r) => {\n const passage = r.chunks.map((c) => c.content).join('\\n\\n')\n return {\n num: r.citationNum,\n statement: r.citationData.statement ?? '',\n doc_title: r.chunks[0]?.metadata?.doc_title ?? null,\n page_number: r.chunks[0]?.metadata?.page_number ?? null,\n chunk_ext_ids: r.chunks.map((c) => c.metadata?.chunk_ext_id ?? null),\n doc_ext_ids: [...new Set(r.chunks.map((c) => c.metadata?.doc_ext_id).filter(Boolean))],\n passages: r.chunks.map((c) => c.content),\n passage_hashes: r.chunks.map((c) => hashUtf8(c.content)),\n combined_passage_hash: hashUtf8(passage),\n }\n })\n const filtered = number ? projection.filter((p) => p.num === number) : projection\n printJson({ count: filtered.length, citations: filtered })\n return\n }\n\n // Default: markdown blocks. List mode (no flags) shows a short index;\n // <N>/--all shows the full markdown for one or every citation.\n if (number) {\n const hit = resolved.find((r) => r.citationNum === number)\n if (!hit) {\n console.error(chalk.red(`Citation [${number}] not found.`))\n process.exit(3)\n }\n console.log(renderCitation(hit))\n return\n }\n if (opts.all) {\n for (let i = 0; i < resolved.length; i++) {\n if (i > 0) console.log('\\n---\\n')\n console.log(renderCitation(resolved[i]))\n }\n return\n }\n\n // Index view — one line per citation, but the same parseable shape. An\n // agent that wants the underlying IDs can re-run `arbi cite <N>` for the\n // canonical block.\n console.log(chalk.bold(`# Citations (${resolved.length})`))\n console.log('')\n for (const r of resolved) {\n const docTitle = r.chunks[0]?.metadata?.doc_title ?? 'Unknown document'\n const page = r.chunks[0]?.metadata?.page_number\n const pageSuffix = page != null ? `, p${page}` : ''\n const docId = r.chunks[0]?.metadata?.doc_ext_id\n const statement = (r.citationData.statement ?? '').replace(/\\s+/g, ' ').trim()\n const trimmed = statement.length > 140 ? statement.slice(0, 140) + '…' : statement\n console.log(\n `- ${chalk.bold(`[${r.citationNum}]`)} ${docTitle}${pageSuffix}${docId ? ` (${docId})` : ''}`\n )\n console.log(` ${trimmed}`)\n }\n console.log('')\n console.log(\n chalk.dim('`arbi cite <N>` for the full markdown block; `--json` for the structured payload.')\n )\n}\n\nasync function verifyOne(number: string, opts: { json?: boolean }): Promise<void> {\n const raw = loadLastMetadata()\n if (!raw) {\n if (opts.json) {\n printJson({ verified: false, reason: 'no-last-metadata' })\n return\n }\n process.stderr.write('No citation data available. Run `arbi ask` first.\\n')\n process.exit(1)\n }\n\n const metadata = raw as MessageMetadataPayload\n const resolved = resolveCitations(metadata)\n const citation = resolved.find((r) => r.citationNum === number)\n if (!citation) {\n if (opts.json) {\n printJson({ verified: false, reason: 'not-found', number })\n return\n }\n console.error(chalk.red(`Citation [${number}] not found in last response.`))\n process.exit(3)\n }\n\n const chunks = citation.chunks.map((c) => ({\n chunk_ext_id: c.metadata?.chunk_ext_id ?? null,\n doc_ext_id: c.metadata?.doc_ext_id ?? null,\n doc_title: c.metadata?.doc_title ?? null,\n page_number: c.metadata?.page_number ?? null,\n passage_length: c.content.length,\n passage_sha256: hashUtf8(c.content),\n }))\n\n if (opts.json) {\n printJson({\n verified: chunks.length > 0,\n number,\n statement: citation.citationData.statement ?? '',\n chunks,\n followup_hint:\n 'For independent re-verification, run `arbi doc get <doc_ext_id> --json` and confirm the passage hash matches the doc content.',\n })\n return\n }\n\n // Verify default: a parseable markdown block too. Same `**Doc ID:**` /\n // `**Chunk ID:**` / `**SHA256:**` headers as the cite-show output so the\n // same regex extracts from either.\n console.log(chalk.bold(`## Verification: Citation ${number}`))\n console.log('')\n console.log(`${chalk.bold('**Status:**')} ${chunks.length > 0 ? 'verified' : 'no chunks'}`)\n console.log(`${chalk.bold('**Claim:**')} ${citation.citationData.statement ?? ''}`)\n console.log('')\n for (let i = 0; i < chunks.length; i++) {\n const v = chunks[i]\n console.log(chalk.bold(`### Chunk ${i + 1}/${chunks.length}`))\n console.log(`${chalk.bold('**Doc:**')} ${v.doc_title ?? 'Unknown'}`)\n if (v.page_number != null) console.log(`${chalk.bold('**Page:**')} ${v.page_number}`)\n if (v.doc_ext_id) console.log(`${chalk.bold('**Doc ID:**')} ${v.doc_ext_id}`)\n if (v.chunk_ext_id) console.log(`${chalk.bold('**Chunk ID:**')} ${v.chunk_ext_id}`)\n console.log(`${chalk.bold('**Length:**')} ${v.passage_length} chars`)\n console.log(`${chalk.bold('**SHA256:**')} ${v.passage_sha256}`)\n if (i < chunks.length - 1) console.log('')\n }\n console.log('')\n console.log(\n chalk.dim('Re-verify: `arbi doc get <Doc ID> --json` and compare the passage SHA256.')\n )\n}\n","/**\n * arbi find <query...> — document search without LLM\n *\n * Calls POST /v1/assistant/retrieve for search-only results.\n * Supports semantic, keyword, and hybrid search modes.\n * Output can be grouped by document (default) or flat sorted by relevance.\n */\n\nimport { Command } from 'commander'\nimport { assistant } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { chalk } from '../output.js'\n\n/**\n * Mirrors src/lib/retrieve-limits.ts in the webapp. Kept inline because the\n * CLI package doesn't depend on `src/`. If you change the limit here, change\n * it there too.\n */\nconst MAX_INDIVIDUALLY_SELECTED_DOCS = 5000\n\ninterface FindOpts {\n workspace?: string\n mode?: 'semantic' | 'keyword' | 'hybrid'\n docs?: string\n minScore?: string\n limit?: string\n flat?: boolean\n toc?: string\n fullContext?: string\n json?: boolean\n}\n\n/** Pick the best available score from a chunk. */\nfunction chunkScore(chunk: assistant.Chunk): number {\n return chunk.metadata.rerank_score ?? chunk.metadata.score ?? 0\n}\n\n/** Truncate text to a max length, appending ellipsis if needed. */\nfunction truncate(text: string, max: number): string {\n const oneLine = text.replace(/\\n/g, ' ').trim()\n return oneLine.length > max ? oneLine.slice(0, max - 1) + '…' : oneLine\n}\n\n/** Format a score as a percentage string like \"[92%]\". */\nfunction fmtScore(score: number): string {\n const pct = Math.min(Math.round(score * 100), 100)\n return `[${pct}%]`\n}\n\nexport function registerFindCommand(program: Command): void {\n program\n .command('find <query...>')\n .description('Search documents without LLM generation (retrieve only)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-m, --mode <mode>', 'Search mode: semantic, keyword, hybrid', 'semantic')\n .option(\n '-d, --docs <ids>',\n `Comma-separated document IDs to search within (omit to search the whole workspace; max ${MAX_INDIVIDUALLY_SELECTED_DOCS} when set)`\n )\n .option('--min-score <n>', 'Minimum relevance score 0-1', '0.2')\n .option('-l, --limit <n>', 'Max results to display', '20')\n .option('--flat', 'Flat list sorted by relevance (instead of grouped by document)')\n .option('--toc <ids>', 'Comma-separated doc IDs to fetch table of contents for')\n .option('--full-context <ids>', 'Comma-separated doc IDs to fetch full content for')\n .option('--json', 'Raw JSON output for scripting')\n .action((words: string[], opts: FindOpts) =>\n runAction(async () => {\n const query = words.join(' ')\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n\n // Resolve document IDs\n //\n // No `-d` → send an empty list so the backend searches the whole\n // workspace. The previous behaviour (list every doc client-side and\n // stuff every ID into the request body) blew up on large workspaces:\n // a 35 k-doc workspace produced an ~500 KB request body and a server\n // 500 in milliseconds. The empty-list path is workspace-wide on the\n // server and stays a few hundred bytes on the wire.\n let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs\n .split(',')\n .map((id) => id.trim())\n .filter((id) => id.length > 0)\n if (docIds.length > MAX_INDIVIDUALLY_SELECTED_DOCS) {\n console.error(\n chalk.red(\n `Error: ${docIds.length.toLocaleString()} document IDs supplied — maximum is ${MAX_INDIVIDUALLY_SELECTED_DOCS.toLocaleString()}.\\n` +\n 'Narrow your selection, or omit -d to search the whole workspace.'\n )\n )\n process.exitCode = 1\n return\n }\n } else {\n docIds = []\n }\n\n const searchMode = (opts.mode ?? 'semantic') as 'semantic' | 'keyword' | 'hybrid'\n const tocDocIds = opts.toc ? opts.toc.split(',').map((id) => id.trim()) : undefined\n const fullContextDocIds = opts.fullContext\n ? opts.fullContext.split(',').map((id) => id.trim())\n : undefined\n\n const result = await assistant.retrieve({\n arbi,\n workspaceId,\n query,\n docIds,\n searchMode,\n tocDocIds,\n fullContextDocIds,\n })\n\n // Collect all chunks from retrieval_chunk responses\n const allChunks: assistant.Chunk[] = []\n if (result.retrieval_chunk?.tool_responses) {\n for (const chunks of Object.values(result.retrieval_chunk.tool_responses)) {\n allChunks.push(...chunks)\n }\n }\n\n // Filter by min score and sort descending\n const minScore = parseFloat(opts.minScore ?? '0.2')\n const limit = parseInt(opts.limit ?? '20', 10)\n\n const filtered = allChunks\n .filter((c) => chunkScore(c) >= minScore)\n .sort((a, b) => chunkScore(b) - chunkScore(a))\n .slice(0, limit)\n\n // Count unique documents in results\n const uniqueDocs = new Set(filtered.map((c) => c.metadata.doc_ext_id))\n\n // ── JSON output ──────────────────────────────────────────────────\n // Old behavior dumped the raw retrieval envelope. That's noisy and\n // inconsistent with `arbi docs --json` (which returns a clean array).\n // Emit the filtered, sorted chunks under `results` plus the\n // unfiltered raw payload under `raw` for the rare consumer that\n // wants the retrieval-tool metadata.\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n results: filtered,\n count: filtered.length,\n unique_documents: uniqueDocs.size,\n raw: result,\n },\n null,\n 2\n )\n )\n return\n }\n\n if (filtered.length === 0) {\n process.stderr.write('No results found.\\n')\n return\n }\n\n console.log(\n `\\nFound ${chalk.bold(String(filtered.length))} result${filtered.length === 1 ? '' : 's'} across ${chalk.bold(String(uniqueDocs.size))} document${uniqueDocs.size === 1 ? '' : 's'}\\n`\n )\n\n // ── Flat output ──────────────────────────────────────────────────\n if (opts.flat) {\n for (let i = 0; i < filtered.length; i++) {\n const chunk = filtered[i]\n const score = fmtScore(chunkScore(chunk))\n const doc = chunk.metadata.doc_title ?? chunk.metadata.doc_ext_id ?? ''\n const page = chunk.metadata.page_number ? `p.${chunk.metadata.page_number}` : ''\n const preview = truncate(chunk.content, 80)\n\n console.log(\n ` ${chalk.dim(String(i + 1).padStart(2, ' '))}. ${chalk.yellow(score)} ${chalk.cyan(doc)} ${chalk.dim(page)}`\n )\n console.log(` ${chalk.dim(preview)}`)\n }\n console.log()\n return\n }\n\n // ── Grouped output (default) ─────────────────────────────────────\n const grouped = new Map<string, assistant.Chunk[]>()\n for (const chunk of filtered) {\n const key = chunk.metadata.doc_ext_id ?? 'unknown'\n if (!grouped.has(key)) grouped.set(key, [])\n grouped.get(key)!.push(chunk)\n }\n\n for (const [, chunks] of grouped) {\n const docTitle =\n chunks[0].metadata.doc_title ?? chunks[0].metadata.doc_ext_id ?? 'Unknown'\n const hitCount = chunks.length\n const header = `${docTitle} (${hitCount} hit${hitCount === 1 ? '' : 's'})`\n\n console.log(\n `${chalk.dim('──')} ${chalk.bold(header)} ${chalk.dim('─'.repeat(Math.max(0, 50 - header.length)))}`\n )\n\n for (const chunk of chunks) {\n const score = fmtScore(chunkScore(chunk))\n const page = chunk.metadata.page_number ? `p.${chunk.metadata.page_number}` : ''\n const preview = truncate(chunk.content, 72)\n\n console.log(\n ` ${chalk.yellow(score)} ${chalk.dim(page.padEnd(6))} ${chalk.dim(preview)}`\n )\n }\n console.log()\n }\n })()\n )\n}\n","/**\n * arbi watch — stream workspace activity in real time\n *\n * Flags:\n * --timeout <seconds> Auto-close after N seconds\n * --count <n> Stop after N messages\n * --json Output NDJSON for piping\n */\n\nimport { Command } from 'commander'\nimport { connectWebSocket, formatWsMessage, type MessageLevel } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { chalk } from '../output.js'\n\nfunction colorize(level: MessageLevel, text: string): string {\n if (level === 'success') return chalk.green(text)\n if (level === 'error') return chalk.red(text)\n if (level === 'warning') return chalk.yellow(text)\n return text\n}\n\ninterface WatchOpts {\n workspace?: string\n timeout?: string\n count?: string\n json?: boolean\n type?: string\n}\n\n/**\n * Known event types emitted by the workspace WebSocket. Used both for the\n * `--type` help text and for runtime validation so a typo doesn't silently\n * drop every event.\n */\nconst KNOWN_WATCH_TYPES = [\n 'task_update',\n 'batch_complete',\n 'presence_update',\n 'response_complete',\n 'notification',\n 'error',\n] as const\n\nexport function registerWatchCommand(program: Command): void {\n program\n .command('watch')\n .description('Watch workspace activity in real time')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-t, --timeout <seconds>', 'Auto-close after N seconds')\n .option('-n, --count <n>', 'Stop after N messages')\n .option(\n '--type <comma-list>',\n `Only emit events of these types (default: all). Known: ${KNOWN_WATCH_TYPES.join(',')}`\n )\n .option('--json', 'Output NDJSON (one JSON object per line)')\n .action((opts: WatchOpts) =>\n runAction(async () => {\n const { config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace, {\n skipNotifications: true,\n })\n const timeoutSec = opts.timeout ? parseInt(opts.timeout, 10) : undefined\n const maxCount = opts.count ? parseInt(opts.count, 10) : undefined\n const jsonMode = opts.json ?? false\n\n // Resolve the `--type` filter once up front. Validating against the\n // known list catches typos like `--type messages` (instead of\n // `notification`) immediately rather than silently swallowing every\n // event for the lifetime of the watch.\n const typeFilter = opts.type\n ? new Set(\n opts.type\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n )\n : null\n if (typeFilter) {\n const unknown = [...typeFilter].filter(\n (t) => !(KNOWN_WATCH_TYPES as readonly string[]).includes(t)\n )\n if (unknown.length > 0) {\n console.error(\n `Error: unknown event type(s): ${unknown.join(', ')}\\n` +\n `Known: ${KNOWN_WATCH_TYPES.join(', ')}`\n )\n process.exit(1)\n }\n }\n\n if (!jsonMode) {\n const parts = [`Watching workspace ${workspaceId}...`]\n if (timeoutSec) parts.push(`(timeout: ${timeoutSec}s)`)\n if (maxCount) parts.push(`(max: ${maxCount} messages)`)\n parts.push('(Ctrl+C to stop)')\n console.log(parts.join(' '))\n }\n\n let messageCount = 0\n let timedOut = false\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (typeFilter) {\n const type = (msg as Record<string, unknown>).type as string | undefined\n if (!type || !typeFilter.has(type)) return\n }\n messageCount++\n\n if (jsonMode) {\n console.log(JSON.stringify(msg))\n } else {\n const { text, level } = formatWsMessage(msg)\n console.log(colorize(level, text))\n }\n\n if (maxCount && messageCount >= maxCount) {\n if (!jsonMode) console.log(chalk.dim(`\\nReached ${maxCount} messages, closing.`))\n conn.close()\n }\n },\n onClose: (code, reason) => {\n if (!jsonMode) {\n console.log(\n chalk.yellow(`\\nConnection closed (code ${code}${reason ? ': ' + reason : ''})`)\n )\n }\n onDone()\n },\n })\n\n // Timeout auto-close\n let timer: ReturnType<typeof setTimeout> | undefined\n if (timeoutSec) {\n timer = setTimeout(() => {\n timedOut = true\n if (!jsonMode) console.log(chalk.dim(`\\nTimeout (${timeoutSec}s), closing.`))\n conn.close()\n }, timeoutSec * 1000)\n }\n\n // Clean SIGINT handler\n const sigintHandler = () => {\n if (timer) clearTimeout(timer)\n conn.close()\n }\n process.on('SIGINT', sigintHandler)\n\n await done\n\n // Cleanup\n if (timer) clearTimeout(timer)\n process.removeListener('SIGINT', sigintHandler)\n\n // If the caller asked for N messages and we never got them, surface\n // that explicitly. Old behavior was exit 0 with no output — agents\n // couldn't tell \"got it\" from \"still waiting.\" Match GNU `timeout`'s\n // 124 exit code and emit a terminator JSON line for NDJSON consumers.\n if (timedOut && maxCount && messageCount < maxCount) {\n if (jsonMode) {\n console.log(\n JSON.stringify({\n type: 'timeout',\n received: messageCount,\n expected: maxCount,\n timeout_seconds: timeoutSec,\n })\n )\n } else {\n console.error(\n chalk.yellow(`Timed out before reaching ${maxCount} messages (got ${messageCount}).`)\n )\n }\n process.exit(124)\n }\n })()\n )\n}\n","/**\n * arbi contacts — list contacts\n * arbi contacts add [emails] — add contacts (prompt if no emails)\n * arbi contacts remove [ids] — remove contacts (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { contacts as contactOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n requireInteractive,\n dryRun,\n formatUserName,\n type UserInfo,\n} from '../helpers.js'\nimport { promptCheckbox, promptInput } from '../prompts.js'\nimport { success } from '../output.js'\n\n/**\n * Strip the giant base64 `picture` field from each contact's embedded user\n * record. The full image is rarely useful for an agent (5 KB+ per contact)\n * and a single piped `arbi contacts --json | jq` was unreadable. Callers\n * who need the bytes can pass `--include-pictures`.\n */\nfunction redactPictures<T extends Record<string, unknown>>(rows: T[]): T[] {\n return rows.map((row) => {\n const user = row.user as Record<string, unknown> | null | undefined\n if (!user || typeof user.picture !== 'string' || user.picture.length === 0) return row\n return {\n ...row,\n user: {\n ...user,\n has_picture: true,\n picture: null,\n },\n } as T\n })\n}\n\nexport function registerContactsCommand(program: Command): void {\n const contacts = program.command('contacts').description('Contacts: list, add, remove')\n\n contacts\n .command('list')\n .description('List all contacts')\n .option('--json', 'Output as JSON')\n .option('--include-pictures', 'Keep base64 profile-picture bytes in --json output')\n .action((opts: { json?: boolean; includePictures?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await contactOps.listContacts(arbi)\n\n if (opts.json) {\n // Default: drop the inline base64 picture. Opt-in keeps the bytes\n // for the rare workflow that wants the avatar (download tool, etc).\n printJson(opts.includePictures ? data : redactPictures(data))\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No contacts found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 20,\n value: (r) => formatUserName(r.user as UserInfo | null),\n },\n { header: 'EMAIL', width: 30, value: (r) => r.email as string },\n { header: 'STATUS', width: 18, value: (r) => r.status as string },\n ],\n data\n )\n })()\n )\n\n contacts\n .command('add [emails...]')\n .description('Add contacts by email (prompt if no emails given)')\n .action((emails?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!emails || emails.length === 0) {\n requireInteractive('Pass email(s) as positional args: arbi contacts add foo@x.y bar@x.y')\n const input = await promptInput('Email address(es), comma-separated')\n emails = input\n .split(',')\n .map((e) => e.trim())\n .filter(Boolean)\n if (emails.length === 0) return\n }\n const data = await contactOps.addContacts(arbi, emails)\n // Agents extract IDs from the text:\n // arbi contacts add … | grep -oE 'cnt-[a-z0-9]+'\n for (const c of data) {\n success(`Added: ${c.email} (${c.external_id}) — ${c.status}`)\n }\n })()\n )\n\n contacts\n .command('remove [ids...]')\n .description('Remove contacts (interactive picker if no IDs given)')\n .option('--dry-run', 'Preview which contacts would be removed (no SDK call)')\n .action((ids: string[] | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let contactIds = ids && ids.length > 0 ? ids : undefined\n if (!contactIds) {\n const data = await contactOps.listContacts(arbi)\n if (data.length === 0) {\n process.stderr.write('No contacts found.\\n')\n return\n }\n requireInteractive('Pass contact IDs directly: arbi contacts remove cnt-…')\n contactIds = await promptCheckbox(\n 'Select contacts to remove',\n data.map((c) => {\n const name = formatUserName(c.user as UserInfo | null)\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: c.external_id as string,\n }\n })\n )\n if (contactIds.length === 0) return\n }\n if (opts?.dryRun) {\n dryRun(`remove ${contactIds.length} contact(s)`, contactIds)\n return\n }\n await contactOps.removeContacts(arbi, contactIds)\n success(`Removed ${contactIds.length} contact(s).`)\n })()\n )\n\n // Default action: list. Forward raw argv tail rather than pre-declaring\n // --json on the parent — see comment in tags.ts for the commander-binding\n // bug that motivates this pattern. allowUnknownOption keeps the parent\n // shorthand (e.g. `arbi contacts --json`) working.\n contacts\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = contacts.args ?? []\n await contacts.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi dm list — list DMs (decrypted, filterable)\n * arbi dm send [recipient] [content] — send an E2E encrypted DM\n * arbi dm read [ids...] — mark messages as read\n * arbi dm delete [ids...] — delete messages\n *\n * `dm list` supports `--json` for filtering/iteration (the natural list-view\n * use case). `dm send/read/delete` deliberately do NOT — their text output\n * is the canonical confirmation and carries every useful field (notification\n * ID via `ntf-…`, encryption status via `(encrypted)` suffix). Agents grep\n * the text instead of piping `--json` through jq.\n */\n\nimport { Command } from 'commander'\nimport {\n dm as dmOps,\n contacts as contactOps,\n agents as agentOps,\n workspaces as workspaceOps,\n} from '@arbidocs/sdk'\nimport {\n runAction,\n resolveDmCrypto,\n printTable,\n formatUserName,\n truncate,\n requireInteractive,\n printJson,\n suggestSubcommandAndExit,\n dryRun,\n type UserInfo,\n} from '../helpers.js'\nimport { promptSelect, promptCheckbox, promptInput } from '../prompts.js'\nimport { success, error } from '../output.js'\n\n/**\n * Common shape of one decrypted DM row from the SDK. We type it loosely\n * because the SDK returns `Record<string, unknown>` (it widens the OpenAPI\n * type after stitching in decrypted content).\n */\ntype DmRow = Record<string, unknown>\n\n/**\n * Resolve a `recipient` arg (email OR `usr-/agt-` ext_id) into the values\n * `sendEncryptedDM` needs: the recipient's external_id and their curve25519\n * public key. Walks three lists in order — contacts, persistent agents,\n * current-workspace users — and stops at the first hit. Returns `null` when\n * nothing matches so callers can render a recovery hint with exit code 3.\n *\n * One helper replaces the previous code that searched twice (once for email\n * input, once for ext_id input) with subtly different ordering, which\n * exposed a `recipientExtId === recipient` parsing bug for ext_id inputs.\n */\nasync function resolveRecipient(\n arbi: Awaited<ReturnType<typeof resolveDmCrypto>>['arbi'],\n ref: string\n): Promise<{ extId: string; pubKey: string } | null> {\n const isEmail = ref.includes('@')\n const matchKey: 'email' | 'external_id' = isEmail ? 'email' : 'external_id'\n\n // Contacts: extract the embedded user record's pubkey, fall back to the\n // contact-level external_id when the contact hasn't been registered yet.\n const contacts = await contactOps.listContacts(arbi)\n const contactMatch = contacts.find((c) => {\n if (isEmail) return c.email === ref\n const u = c.user as UserInfo | undefined\n return u?.external_id === ref || c.external_id === ref\n })\n if (contactMatch) {\n const u = contactMatch.user as Record<string, unknown> | undefined\n const extId = (u?.external_id as string) ?? (contactMatch.external_id as string)\n const pubKey = (u?.encryption_public_key as string) ?? ''\n if (pubKey) return { extId, pubKey }\n }\n\n // Agents: parent-owned child identities. Wrapped in try/catch because\n // workspace-scoped tokens can't list cross-workspace agents.\n try {\n const agents = await agentOps.listAgents(arbi)\n const agentMatch = agents.find((a) => (a as Record<string, unknown>)[matchKey] === ref)\n if (agentMatch) {\n return { extId: agentMatch.external_id, pubKey: agentMatch.encryption_public_key }\n }\n } catch {\n // Agent listing not available in this auth context — keep going.\n }\n\n // Workspace members: catches DMs to peers we share a workspace with but\n // haven't explicitly added as contacts.\n try {\n const wsUsers = await workspaceOps.listWorkspaceUsers(arbi)\n const wsMatch = wsUsers.find((wu) => (wu as Record<string, unknown>)[matchKey] === ref)\n if (wsMatch) {\n const u = wsMatch as Record<string, unknown>\n return {\n extId: u.external_id as string,\n pubKey: u.encryption_public_key as string,\n }\n }\n } catch {\n // Workspace-user listing not available — fall through to null.\n }\n\n return null\n}\n\nfunction rowMatchesFilters(\n row: DmRow,\n opts: { unread?: boolean; from?: string; since?: string; thread?: string; myExtId?: string }\n): boolean {\n if (opts.unread && row.read) return false\n\n const sender = row.sender as UserInfo | null\n const recipient = row.recipient as UserInfo | null\n\n if (opts.from) {\n const needle = opts.from.toLowerCase()\n const senderMatch = sender?.email?.toLowerCase() === needle || sender?.external_id === opts.from\n const recipientMatch =\n recipient?.email?.toLowerCase() === needle || recipient?.external_id === opts.from\n if (!senderMatch && !recipientMatch) return false\n }\n\n if (opts.thread) {\n const needle = opts.thread.toLowerCase()\n // `--thread` is \"show everything with this peer,\" in either direction.\n const peer = sender?.external_id === opts.myExtId ? recipient : sender\n const peerMatch = peer?.email?.toLowerCase() === needle || peer?.external_id === opts.thread\n if (!peerMatch) return false\n }\n\n if (opts.since) {\n const cutoff = Date.parse(opts.since)\n if (Number.isFinite(cutoff)) {\n const createdAt = typeof row.created_at === 'string' ? Date.parse(row.created_at) : NaN\n if (!Number.isFinite(createdAt) || createdAt < cutoff) return false\n }\n }\n\n return true\n}\n\nexport function registerDmCommand(program: Command): void {\n const dm = program.command('dm').description('Direct messages (E2E encrypted)')\n\n dm.command('list')\n .description('List direct messages (decrypted, newest first)')\n .option('--unread', 'Only show unread messages')\n .option('--from <email-or-extid>', 'Filter by sender OR recipient (email or usr- id)')\n .option(\n '--thread <email-or-extid>',\n 'Show the full conversation with one peer (both directions)'\n )\n .option('--since <iso>', 'Only messages newer than this ISO timestamp')\n .option('-l, --limit <n>', 'Cap to N most-recent messages', (v) => parseInt(v, 10))\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts: Record<string, unknown>) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as DmRow[]\n\n // `arbi dm` is the DM inbox view — the underlying endpoint also returns\n // workspaceuser_* / contact_accepted notifications, which have no place\n // here. (`arbi notifications` for the firehose, once that lands.)\n // session.userExtId is `string | null`; the filter helper wants\n // `string | undefined`. Coerce here so both shapes mean \"no peer\n // to test against.\"\n const myExtId = arbi.session.getState().userExtId ?? undefined\n const dms = all.filter((r) => (r.type as string) === 'user_message')\n\n const filterOpts = {\n unread: Boolean(opts.unread),\n from: typeof opts.from === 'string' ? opts.from : undefined,\n thread: typeof opts.thread === 'string' ? opts.thread : undefined,\n since: typeof opts.since === 'string' ? opts.since : undefined,\n myExtId,\n }\n const filtered = dms.filter((r) => rowMatchesFilters(r, filterOpts))\n const limited =\n typeof opts.limit === 'number' && opts.limit > 0\n ? filtered.slice(0, opts.limit)\n : filtered\n\n if (opts.json) {\n // Re-tag every row with `encrypted_in_transit: true` — the SDK\n // verifies decryption end-to-end before returning, so the row's\n // mere presence in this list is proof. Surfacing it explicitly\n // matches SKILL.md's contract and lets security review grep for it.\n printJson(limited.map((r) => ({ ...r, encrypted_in_transit: true })))\n return\n }\n\n if (limited.length === 0) {\n // Status, not data. Goes to stderr so `arbi dm list | wc -l` is\n // accurate when there are no messages.\n process.stderr.write('No messages found.\\n')\n return\n }\n\n const peer = (r: DmRow) => {\n const s = r.sender as UserInfo | null\n const recip = r.recipient as UserInfo | null\n return s?.external_id === myExtId ? recip : s\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n {\n header: 'DIR',\n width: 4,\n value: (r) => ((r.sender as UserInfo | null)?.external_id === myExtId ? '→' : '←'),\n },\n {\n header: 'PEER',\n width: 26,\n value: (r) => {\n const p = peer(r)\n return formatUserName(p) || p?.email || ''\n },\n },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n {\n header: 'CONTENT',\n width: 50,\n value: (r) => truncate((r.content as string) ?? '', 49),\n },\n ],\n limited\n )\n })()\n )\n\n dm.command('send [recipient] [content...]')\n .description('Send an E2E encrypted DM (interactive if no args)')\n .action((recipient?: string, contentParts?: string[]) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n\n // Pick recipient from contacts if not given\n if (!recipient) {\n requireInteractive(\n 'Pass recipient + message as arguments: arbi dm send <email-or-id> \"<message>\"'\n )\n const contacts = await contactOps.listContacts(arbi)\n if (contacts.length === 0) {\n error('No contacts found. Add contacts first: arbi contacts add <email>')\n process.exit(1)\n }\n recipient = await promptSelect(\n 'Send to',\n contacts.map((c) => {\n const u = c.user as UserInfo | null\n const name = formatUserName(u)\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: u?.external_id ?? (c.external_id as string),\n description: c.email as string,\n }\n })\n )\n }\n\n // Join variadic content parts or prompt interactively\n let content = contentParts?.length ? contentParts.join(' ') : undefined\n if (!content) {\n requireInteractive(\n 'Pass the message as a positional argument: arbi dm send <email> \"your message\"'\n )\n content = await promptInput('Message')\n }\n\n // Resolve recipient ext_id + encryption public key from one of three\n // sources (contacts, agents, workspace members). The old code did the\n // same six-way search twice (once for email input, once for ext_id);\n // collapsing into one helper removed ~80 LOC and a stack of subtle\n // branching bugs.\n const resolved = await resolveRecipient(arbi, recipient)\n if (!resolved) {\n error(\n `No contact, agent, or workspace member found for: ${recipient}\\n` +\n `Try: arbi contacts add ${recipient.includes('@') ? recipient : '<their-email>'}`\n )\n // Distinct exit code so callers can branch \"fix the reference\" (3)\n // vs \"auth missing\" (2) vs \"server fault\" (1).\n process.exit(3)\n }\n const recipientExtId = resolved.extId\n const recipientPubKey = resolved.pubKey\n\n if (!recipientPubKey) {\n error(\n 'Cannot send encrypted DM — recipient public key not found.\\n' +\n 'Add them as a contact first: arbi contacts add <email>'\n )\n process.exit(3)\n }\n\n const data = await dmOps.sendEncryptedDM(\n arbi,\n [\n {\n recipient_ext_id: recipientExtId,\n content,\n recipient_encryption_public_key: recipientPubKey,\n },\n ],\n crypto\n )\n // The text confirmation carries the security receipt: \"(encrypted)\"\n // makes the encrypted_in_transit invariant visible without needing\n // --json. Agents extract the notification ID with grep -oE 'ntf-…'.\n for (const n of data) {\n success(`Sent (encrypted): ${n.external_id} → ${n.recipient.email}`)\n }\n })()\n )\n\n dm.command('read [ids...]')\n .description('Mark messages as read (interactive picker if no IDs given)')\n .option('--all', 'Mark every unread message as read (no picker)')\n .action((ids?: string[], opts?: Record<string, unknown>) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n\n if (!msgIds && opts?.all) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n msgIds = data.filter((m) => !m.read).map((m) => m.external_id as string)\n }\n\n if (!msgIds) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n const unread = data.filter((m) => !m.read)\n if (unread.length === 0) {\n process.stderr.write('No unread messages.\\n')\n return\n }\n requireInteractive('Pass IDs directly or use --all to mark every unread message read.')\n msgIds = await promptCheckbox(\n 'Select messages to mark as read',\n unread.map((m) => {\n const s = m.sender as UserInfo | null\n const from = formatUserName(s) || s?.email || ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n\n if (msgIds.length === 0) {\n process.stderr.write('No unread messages.\\n')\n return\n }\n const data = await dmOps.markRead(arbi, msgIds)\n success(`Marked ${data.length} message(s) as read.`)\n })()\n )\n\n dm.command('delete [ids...]')\n .description('Delete messages (interactive picker if no IDs given)')\n .option('--all', 'Delete every message in your DM history (no picker, no prompt)')\n .option('--dry-run', 'Preview which messages would be deleted (no SDK call)')\n .action((ids?: string[], opts?: Record<string, unknown>) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n\n if (!msgIds && opts?.all) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n msgIds = data.map((m) => m.external_id as string)\n }\n\n if (!msgIds) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n if (data.length === 0) {\n process.stderr.write('No messages found.\\n')\n return\n }\n requireInteractive('Pass IDs directly or use --all to delete the whole inbox.')\n msgIds = await promptCheckbox(\n 'Select messages to delete',\n data.map((m) => {\n const s = m.sender as UserInfo | null\n const from = formatUserName(s) || s?.email || ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n if (msgIds.length === 0) {\n process.stderr.write('No messages to delete.\\n')\n return\n }\n if (opts?.dryRun) {\n dryRun(`delete ${msgIds.length} message(s)`, msgIds)\n return\n }\n await dmOps.deleteDMs(arbi, msgIds)\n success(`Deleted ${msgIds.length} message(s).`)\n })()\n )\n\n // Default action: list, OR suggest a subcommand if user typed a typo\n // (\"arbi dm lst\" used to return \"too many arguments for 'dm'\" with no hint\n // because commander treated `lst` as a positional arg, not a subcommand).\n dm.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'dm',\n maybe,\n dm.commands.map((c) => c.name())\n )\n }\n await dm.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi tags — list tags in workspace\n * arbi tags create [name] — create a tag (form if no name)\n * arbi tags delete [id] — delete a tag (picker if no ID)\n * arbi tags update [id] [json] — update a tag (picker + form if no args)\n */\n\nimport { Command } from 'commander'\nimport { tags as tagOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n printTable,\n printJson,\n parseJsonArg,\n dryRun,\n} from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\nimport { success, ref } from '../output.js'\n\n/** Fetch workspace tags and return as picker choices */\nasync function fetchTagChoices(arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi']) {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n process.stderr.write('No tags found.\\n')\n process.exit(0)\n }\n return {\n data,\n choices: data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? 'unknown'}, ${t.doctag_count} docs)`,\n value: t.external_id as string,\n description: t.external_id as string,\n })),\n }\n}\n\nexport function registerTagsCommand(program: Command): void {\n const tags = program\n .command('tags')\n .description('Tags: list, create, delete, update, share, unshare, rename')\n\n tags\n .command('list')\n .description('List tags in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .action((opts: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await tagOps.listTags(arbi)\n\n if (opts.json) {\n // Use the shared printer so every --json command emits the same\n // shape (trailing newline, no chalk leakage).\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n // Empty-state text goes to stderr — keeps stdout `[]`-shaped-or-empty\n // so `arbi tags list | wc -l` is honest.\n process.stderr.write('No tags found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 24, value: (r) => r.name as string },\n {\n header: 'TYPE',\n width: 12,\n value: (r) => (r.tag_type as { type?: string })?.type ?? '',\n },\n { header: 'DOCS', width: 6, value: (r) => String(r.doctag_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n tags\n .command('create [name]')\n .description('Create a new tag (interactive form if no name given)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option(\n '-t, --type <type>',\n 'Tag type (checkbox, text, number, select, folder, search, date, assistant)',\n 'checkbox'\n )\n .option('-i, --instruction <text>', 'Tag instruction')\n .option('--shared', 'Make tag shared', false)\n .action(\n (\n name: string | undefined,\n opts: {\n workspace?: string\n type?: string\n instruction?: string\n shared?: boolean\n }\n ) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n\n // Interactive form if name not given\n const interactive = !name\n if (!name) {\n name = await promptInput('Tag name')\n }\n const tagType =\n opts.type ||\n (await promptSelect('Tag type', [\n { name: 'Checkbox', value: 'checkbox' },\n { name: 'Text', value: 'text' },\n { name: 'Number', value: 'number' },\n { name: 'Select', value: 'select' },\n { name: 'Date', value: 'date' },\n { name: 'Folder', value: 'folder' },\n { name: 'Search', value: 'search' },\n { name: 'Assistant', value: 'assistant' },\n ]))\n const instruction = interactive\n ? (opts.instruction ?? ((await promptInput('Instruction (optional)', false)) || null))\n : (opts.instruction ?? null)\n const shared = interactive\n ? opts.shared || (await promptConfirm('Shared?', false))\n : (opts.shared ?? false)\n\n const data = await tagOps.createTag(arbi, {\n name,\n tagType: {\n type: tagType as 'checkbox' | 'text' | 'number' | 'select' | 'search' | 'date',\n options: [],\n },\n instruction,\n shared,\n })\n // Agents extract the new ID from the predictable text:\n // arbi tags create … | grep -oE 'tag-[a-z0-9]+'\n success(`Created: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n tags\n .command('delete [id]')\n .description('Delete a tag (interactive picker if no ID given)')\n .option('--dry-run', 'Preview which tag would be deleted (no SDK call)')\n .action((id: string | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi)\n id = await promptSelect('Select tag to delete', choices)\n }\n if (opts?.dryRun) {\n dryRun('delete tag', id)\n return\n }\n const data = await tagOps.deleteTag(arbi, id)\n success(data?.detail ?? `Deleted tag ${id}`)\n })()\n )\n\n // ── share / unshare / rename ─────────────────────────────────────────────\n // Named shortcuts for the most common `tags update` operations — agents\n // shouldn't have to hand-write {\"shared\":true} JSON for a one-flag toggle.\n tags\n .command('share <id>')\n .description('Mark a tag as shared (visible to other workspace members)')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await tagOps.updateTag(arbi, id, { shared: true })\n success(`Shared: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n tags\n .command('unshare <id>')\n .description('Mark a tag as private (owner-only)')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await tagOps.updateTag(arbi, id, { shared: false })\n success(`Unshared: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n tags\n .command('rename <id> <name>')\n .description('Rename a tag')\n .action((id: string, name: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await tagOps.updateTag(arbi, id, { name })\n success(`Renamed: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n tags\n .command('update [id] [json]')\n .description('Update a tag (interactive picker + form if no args)')\n .action((id?: string, json?: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi)\n id = await promptSelect('Select tag to update', choices)\n }\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(json, 'arbi tags update tag-123 \\'{\"name\": \"New Name\"}\\'')\n } else {\n const field = await promptSelect('Field to update', [\n { name: 'Name', value: 'name' },\n { name: 'Instruction', value: 'instruction' },\n { name: 'Shared', value: 'shared' },\n ])\n if (field === 'shared') {\n body = { shared: await promptConfirm('Shared?') }\n } else {\n body = { [field]: await promptInput(field.charAt(0).toUpperCase() + field.slice(1)) }\n }\n }\n\n const data = await tagOps.updateTag(arbi, id, body)\n success(`Updated: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n // Default action: list. We do NOT pre-declare --json/-w on the parent\n // because that breaks `arbi tags list --json` — commander binds the option\n // to the parent and the inner `list` subcommand's --json never fires.\n // `allowUnknownOption` keeps `arbi tags --json` working by routing those\n // flags into `tags.args` for forwarding to the inner subcommand.\n tags\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = tags.args ?? []\n await tags.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi doctags create [tag-id] [doc-ids...] — assign tag to docs (pickers if no args)\n * arbi doctags delete [tag-id] [doc-ids...] — remove tag from docs (pickers if no args)\n * arbi doctags generate — AI-generate doctags (pickers if no flags)\n */\n\nimport { Command } from 'commander'\nimport { doctags as doctagOps, tags as tagOps, documents } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n requireInteractive,\n resolveByIdOrName,\n failResolveAndExit,\n pickFromList,\n dryRun,\n} from '../helpers.js'\nimport { promptCheckbox } from '../prompts.js'\nimport { success } from '../output.js'\n\n/**\n * Resolve a tag arg (id like `tag-…` or a unique tag name) to its external_id.\n * Delegates to the shared `resolveByIdOrName` so the ambiguous/not-found\n * messages match every other resolver in the CLI.\n */\nasync function resolveTagRef(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n ref: string\n): Promise<string> {\n if (ref.startsWith('tag-')) return ref\n const data = await tagOps.listTags(arbi)\n const res = resolveByIdOrName(data as Array<{ external_id?: string; name?: string }>, ref)\n if (!res.ok) failResolveAndExit('tag', ref, res)\n return res.id\n}\n\n/** Interactive single-tag picker. Delegates the empty/non-TTY handling to\n * `pickFromList` so this stays a one-liner over the formatting concern. */\nfunction pickTag(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n message = 'Select tag'\n): Promise<string> {\n return tagOps.listTags(arbi).then((data) =>\n pickFromList(\n data,\n (t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n description: t.external_id as string,\n }),\n {\n message,\n emptyMessage: 'No tags found.',\n nonTtyHint: 'Pass <tag-id> (or unique tag name) and <doc-ids...> directly.',\n }\n )\n )\n}\n\n/**\n * Multi-select doc picker. Stays separate from `pickFromList` (which is\n * single-select) because doctag operations inherently target a set.\n */\nasync function pickDocs(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n message = 'Select documents'\n): Promise<string[]> {\n const data = await documents.listDocuments(arbi)\n if (data.length === 0) {\n process.stderr.write('No documents found.\\n')\n process.exit(0)\n }\n requireInteractive('Pass <doc-ids...> directly: arbi docs --ids to list them.')\n return promptCheckbox(\n message,\n data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n }))\n )\n}\n\nexport function registerDoctagsCommand(program: Command): void {\n const doctagsCmd = program\n .command('doctags')\n .description('Doctags (tag↔doc links): create, delete, generate')\n\n doctagsCmd\n .command('create [tag] [doc-ids...]')\n .description('Assign a tag to documents (tag accepts ID or unique name; pickers if no args)')\n .option('-n, --note <text>', 'Note for the doctag')\n .action((tagRef?: string, docIds?: string[], opts?: { note?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let tagId = tagRef ? await resolveTagRef(arbi, tagRef) : undefined\n if (!tagId) tagId = await pickTag(arbi, 'Select tag to assign')\n if (!docIds || docIds.length === 0) docIds = await pickDocs(arbi, 'Select documents to tag')\n if (docIds.length === 0) return\n const data = await doctagOps.assignDocTags(arbi, tagId, docIds, opts?.note)\n success(`Created ${data.length} doctag(s) for tag ${tagId}.`)\n })()\n )\n\n doctagsCmd\n .command('delete [tag] [doc-ids...]')\n .description('Remove a tag from documents (tag accepts ID or unique name; pickers if no args)')\n .option('--dry-run', 'Preview which doctag links would be removed (no SDK call)')\n .action(\n (tagRef: string | undefined, docIds: string[] | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let tagId = tagRef ? await resolveTagRef(arbi, tagRef) : undefined\n if (!tagId) tagId = await pickTag(arbi, 'Select tag to remove')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, 'Select documents to untag')\n if (docIds.length === 0) return\n if (opts?.dryRun) {\n dryRun(`remove tag ${tagId} from ${docIds.length} document(s)`, docIds)\n return\n }\n await doctagOps.removeDocTags(arbi, tagId, docIds)\n success(`Removed tag ${tagId} from ${docIds.length} document(s).`)\n })()\n )\n\n doctagsCmd\n .command('generate')\n .description('AI-generate doctags (interactive pickers if no flags)')\n .option('--tags <ids>', 'Comma-separated tag IDs')\n .option('--docs <ids>', 'Comma-separated document IDs')\n .action((opts: { tags?: string; docs?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n\n let tagIds: string[]\n if (opts.tags) {\n tagIds = opts.tags.split(',').map((s) => s.trim())\n } else {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n console.log('No tags found.')\n return\n }\n tagIds = await promptCheckbox(\n 'Select tags to generate',\n data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n }))\n )\n if (tagIds.length === 0) return\n }\n\n let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs.split(',').map((s) => s.trim())\n } else {\n docIds = await pickDocs(arbi, 'Select documents for AI tagging')\n if (docIds.length === 0) return\n }\n\n const data = await doctagOps.generateDocTags(arbi, tagIds, docIds)\n console.log(\n `Generating doctags for ${data.doc_ext_ids.length} doc(s) with ${data.tag_ext_ids.length} tag(s).`\n )\n })()\n )\n}\n","/**\n * arbi convo list — list conversations\n * arbi convo switch <id> — resume an older conversation\n * arbi convo threads [id] — show threads (picker if no ID)\n * arbi convo delete [id] — delete (picker if no ID)\n * arbi convo share [id] — share (picker if no ID)\n * arbi convo title [id] [title] — update title (picker + prompt)\n * arbi convo message <message-id> — get message details\n * arbi convo trace <message-id> — full decrypted execution trace\n * arbi convo delete-message <msg-id> — delete one message + descendants\n *\n * Note the command name is `convo`, not `conversations` — nobody types\n * the long form. There is no alias.\n */\n\nimport { Command } from 'commander'\nimport { conversations as convOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n resolveWorkspace,\n printTable,\n printJson,\n dryRun,\n} from '../helpers.js'\nimport { updateChatSession } from '../config.js'\nimport { promptSelect, promptInput } from '../prompts.js'\nimport { success } from '../output.js'\n\n/** Fetch workspace conversations and return as picker choices */\nasync function pickConversation(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select conversation'\n) {\n const data = await convOps.listConversations(arbi)\n if (data.length === 0) {\n process.stderr.write('No conversations found.\\n')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((c) => ({\n name: `${(c.title as string) ?? 'Untitled'} (${c.message_count} msgs)`,\n value: c.external_id as string,\n description: c.external_id as string,\n }))\n )\n}\n\nexport function registerConversationsCommand(program: Command): void {\n const conv = program\n .command('convo')\n .description('Conversations: list, switch, threads, delete, share, title, message, trace')\n\n conv\n .command('list')\n .description('List conversations in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .action((opts: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await convOps.listConversations(arbi)\n\n if (opts.json) {\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No conversations found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 36, value: (r) => (r.title as string) ?? 'Untitled' },\n { header: 'MSGS', width: 6, value: (r) => String(r.message_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.is_shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n conv\n .command('threads [conversation-id]')\n .description('Show threads (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n const data = await convOps.getConversationThreads(arbi, conversationId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n // ── switch ───────────────────────────────────────────────────────────────\n // CLI equivalent of clicking a different conversation in the frontend\n // sidebar. Looks up the latest message in the target conversation and\n // points the shell's chat-session pointer at it, so the next `arbi ask`\n // continues the chosen conversation. Without this an agent could only\n // continue the most recent conversation (auto-tracked) or pass --continue\n // with a raw message-id it had to find some other way.\n conv\n .command('switch <conversation-id>')\n .description(\n 'Continue a previous conversation — next `arbi ask` resumes from its latest message'\n )\n .action((conversationId: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n const data = (await convOps.getConversationThreads(arbi, conversationId)) as {\n conversation_ext_id?: string\n threads?: Array<{\n leaf_message_ext_id?: string\n history?: Array<Record<string, unknown>>\n }>\n }\n // Threads shape from the backend:\n // { conversation_ext_id, threads: [{leaf_message_ext_id, history: [msg, ...]}, ...] }\n // The \"latest\" point to resume is the longest thread's leaf_message_ext_id\n // (or, if missing, the last assistant message in its history). We don't\n // need to walk all threads — the backend already orders them so the\n // primary thread is index 0.\n const threads = data.threads ?? []\n if (threads.length === 0) {\n process.stderr.write(`Conversation ${conversationId} has no threads.\\n`)\n process.exit(3)\n }\n const primary = threads[0]\n const leafId = primary.leaf_message_ext_id\n const lastAssistant = [...(primary.history ?? [])]\n .reverse()\n .find((m) => (m.role as string) === 'assistant') as Record<string, unknown> | undefined\n const resumeId = leafId ?? (lastAssistant?.external_id as string | undefined)\n if (!resumeId) {\n process.stderr.write(\n `No resumable message in conversation ${conversationId}. ` +\n `(Empty thread or never reached an assistant turn.)\\n`\n )\n process.exit(3)\n }\n updateChatSession({\n conversationExtId: conversationId,\n lastMessageExtId: resumeId,\n workspaceId,\n })\n success(`Switched to conversation ${conversationId} (resume from ${resumeId}).`)\n })()\n )\n\n conv\n .command('delete [conversation-id]')\n .description('Delete a conversation (interactive picker if no ID given)')\n .option('--dry-run', 'Preview which conversation would be deleted (no SDK call)')\n .action((conversationId: string | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(\n arbi,\n workspaceId,\n 'Select conversation to delete'\n )\n if (opts?.dryRun) {\n dryRun('delete conversation', conversationId)\n return\n }\n const data = await convOps.deleteConversation(arbi, conversationId)\n success(data?.detail ?? `Deleted conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('share [conversation-id]')\n .description('Share a conversation (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(arbi, workspaceId, 'Select conversation to share')\n const data = await convOps.shareConversation(arbi, conversationId)\n success(data?.detail ?? `Shared conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('title [conversation-id] [title]')\n .description('Update conversation title (interactive if no args)')\n .action((conversationId?: string, title?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!title) title = await promptInput('New title')\n const data = await convOps.updateConversationTitle(arbi, conversationId, title)\n success(data?.detail ?? `Updated title to: ${title}`)\n })()\n )\n\n conv\n .command('message <message-id>')\n .description('Get message details (full decrypted JSON, useful for debugging)')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n printJson(data)\n })()\n )\n\n // ── trace ────────────────────────────────────────────────────────────────\n // Decrypted execution trace for a single agent response — which tools were\n // called, which docs were cited, intermediate reasoning. Same endpoint as\n // `conversations message` underneath, but presented as the post-mortem\n // primitive an agent reaches for after a step fails. JSON-only by design:\n // human rendering would lose half the structure.\n conv\n .command('trace <message-id>')\n .description('Decrypted execution trace for one agent response (alias for `message`)')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n printJson(data)\n })()\n )\n\n conv\n .command('delete-message <message-id>')\n .description('Delete a message and its descendants')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await convOps.deleteMessage(arbi, messageId)\n success(data?.detail ?? `Deleted message ${messageId}`)\n })()\n )\n\n // Default action: list. Forward raw argv tail rather than pre-declaring\n // --json/-w on the parent — see tags.ts for the commander-binding bug.\n conv\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = conv.args ?? []\n await conv.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi settings — show current user settings\n * arbi settings set — update a setting\n */\n\nimport { Command } from 'commander'\nimport { settings as settingsOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, parseJsonArg, printJson } from '../helpers.js'\nimport { success } from '../output.js'\n\nexport function registerSettingsCommand(program: Command): void {\n const settings = program.command('settings').description('User settings: get, set')\n\n settings\n .command('get')\n .description('Show current user settings (always JSON; --json accepted for consistency)')\n .option('--json', 'Output as JSON (default — always JSON)')\n .action(() =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await settingsOps.getSettings(arbi)\n printJson(data)\n })()\n )\n\n settings\n .command('set <json>')\n .description('Update user settings (pass JSON object)')\n .action((json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi settings set \\'{\"hide_online_status\": true}\\'')\n const { arbi } = await resolveAuth()\n await settingsOps.updateSettings(arbi, body)\n success('Settings updated.')\n })()\n )\n\n // Default action: get\n settings.action(async () => {\n await settings.commands.find((c) => c.name() === 'get')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi agentconfig list — list saved config versions\n * arbi agentconfig get [id] — show config (picker if no ID, 'default' for system)\n * arbi agentconfig save [json] — save new config (interactive if no JSON)\n * arbi agentconfig delete [id] — delete config (picker if no ID)\n * arbi agentconfig schema — dump JSON schema for all config models\n */\n\nimport { Command } from 'commander'\nimport { agentconfig as acOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\nimport { success, ref } from '../output.js'\n\n/** Config sections that have a MODEL_NAME field — the most common thing to change */\nconst MODEL_SECTIONS = [\n 'Agents',\n 'QueryLLM',\n 'EvaluatorLLM',\n 'TitleLLM',\n 'SummariseLLM',\n 'DoctagLLM',\n 'ArtifactLLM',\n] as const\n\n/** Pick a config version from saved versions */\nasync function pickConfig(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi'],\n message = 'Select configuration'\n) {\n const data = await acOps.listConfigs(arbi)\n if (data.versions.length === 0) {\n console.log('No saved configurations found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.versions.map((v) => ({\n name: `${v.title || '(untitled)'} — ${new Date(v.created_at).toLocaleString()}`,\n value: v.external_id,\n description: v.external_id,\n }))\n )\n}\n\n/** Fetch available models for interactive picker */\nasync function fetchModels(arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']) {\n const data = await acOps.getModels(arbi)\n return data.models.map((m) => ({\n name: `${m.model_name} (${m.provider ?? m.api_type})`,\n value: m.model_name,\n description: m.api_type,\n }))\n}\n\n/** Interactive config builder — walks through most common settings */\nasync function buildConfigInteractively(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']\n): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {}\n\n // Title\n const title = await promptInput('Config title (optional)', false)\n if (title) body.title = title\n\n // Pick section to configure\n const section = await promptSelect('Section to configure', [\n { name: 'Agents — main agent model, persona, tools', value: 'Agents' },\n { name: 'QueryLLM — answer review model', value: 'QueryLLM' },\n { name: 'EvaluatorLLM — chunk evaluation', value: 'EvaluatorLLM' },\n { name: 'TitleLLM — title generation', value: 'TitleLLM' },\n { name: 'SummariseLLM — conversation summariser', value: 'SummariseLLM' },\n { name: 'DoctagLLM — AI document tagging', value: 'DoctagLLM' },\n { name: 'ArtifactLLM — skill/memory synthesis', value: 'ArtifactLLM' },\n { name: 'Retriever — search parameters', value: 'Retriever' },\n { name: 'Reranker — reranking model', value: 'Reranker' },\n { name: 'ModelCitation — citation thresholds', value: 'ModelCitation' },\n { name: 'Chunker — chunk size', value: 'Chunker' },\n { name: 'Embedder — embedding model', value: 'Embedder' },\n { name: 'KeywordEmbedder — BM25 parameters', value: 'KeywordEmbedder' },\n ])\n\n const sectionConfig: Record<string, unknown> = {}\n\n // Sections with MODEL_NAME get a model picker\n if ((MODEL_SECTIONS as readonly string[]).includes(section)) {\n const models = await fetchModels(arbi)\n if (models.length > 0) {\n const changeModel = await promptConfirm('Change model?', true)\n if (changeModel) {\n const modelKey = section === 'Agents' ? 'AGENT_MODEL_NAME' : 'MODEL_NAME'\n sectionConfig[modelKey] = await promptSelect('Model', models)\n\n if (section === 'Agents') {\n sectionConfig.AGENT_API_TYPE = 'remote'\n } else {\n sectionConfig.API_TYPE = 'remote'\n }\n }\n }\n }\n\n // Section-specific fields\n if (section === 'Agents') {\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'LLM_AGENT_TEMPERATURE' },\n { name: 'Max tokens', value: 'AGENT_MAX_TOKENS' },\n { name: 'Max iterations', value: 'AGENT_MAX_ITERATIONS' },\n { name: 'Persona', value: 'PERSONA' },\n { name: 'Web search enabled', value: 'WEB_SEARCH' },\n { name: 'Human in the loop', value: 'HUMAN_IN_THE_LOOP' },\n ])\n if (field !== 'done') {\n if (field === 'WEB_SEARCH' || field === 'HUMAN_IN_THE_LOOP') {\n sectionConfig[field] = await promptConfirm(field + '?')\n } else if (field === 'LLM_AGENT_TEMPERATURE') {\n sectionConfig[field] = parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n } else if (field === 'AGENT_MAX_TOKENS' || field === 'AGENT_MAX_ITERATIONS') {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n } else {\n sectionConfig[field] = await promptInput(field)\n }\n }\n } else if (section === 'Retriever') {\n const field = await promptSelect('Field to change', [\n { name: 'Search mode', value: 'SEARCH_MODE' },\n { name: 'Min similarity score', value: 'MIN_RETRIEVAL_SIM_SCORE' },\n { name: 'Max chunks to retrieve', value: 'MAX_TOTAL_CHUNKS_TO_RETRIEVE' },\n { name: 'Max distinct documents', value: 'MAX_DISTINCT_DOCUMENTS' },\n { name: 'Hybrid dense weight', value: 'HYBRID_DENSE_WEIGHT' },\n { name: 'Hybrid sparse weight', value: 'HYBRID_SPARSE_WEIGHT' },\n ])\n if (field === 'SEARCH_MODE') {\n sectionConfig[field] = await promptSelect('Search mode', [\n { name: 'Semantic (dense)', value: 'semantic' },\n { name: 'Keyword (sparse/BM25)', value: 'keyword' },\n { name: 'Hybrid (dense + sparse)', value: 'hybrid' },\n ])\n } else {\n sectionConfig[field] = parseFloat(await promptInput(field))\n }\n } else if (section === 'ModelCitation') {\n const field = await promptSelect('Field to change', [\n { name: 'Similarity threshold', value: 'SIM_THREASHOLD' },\n { name: 'Min char size', value: 'MIN_CHAR_SIZE_TO_ANSWER' },\n { name: 'Max citations', value: 'MAX_NUMB_CITATIONS' },\n ])\n sectionConfig[field] = parseFloat(await promptInput(field))\n } else if (section === 'Chunker') {\n sectionConfig.MAX_CHUNK_TOKENS = parseInt(await promptInput('Max chunk tokens'), 10)\n } else if (section === 'Reranker') {\n const field = await promptSelect('Field to change', [\n { name: 'Max chunks after rerank', value: 'MAX_NUMB_OF_CHUNKS' },\n { name: 'Model', value: 'MODEL_NAME' },\n ])\n if (field === 'MODEL_NAME') {\n const models = await fetchModels(arbi)\n sectionConfig.MODEL_NAME = await promptSelect('Model', models)\n sectionConfig.API_TYPE = 'remote'\n } else {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n }\n } else if (\n section === 'QueryLLM' ||\n section === 'EvaluatorLLM' ||\n section === 'TitleLLM' ||\n section === 'SummariseLLM' ||\n section === 'DoctagLLM' ||\n section === 'ArtifactLLM'\n ) {\n // LLM sections share temperature/max_tokens\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'TEMPERATURE' },\n { name: 'Max tokens', value: 'MAX_TOKENS' },\n ])\n if (field !== 'done') {\n sectionConfig[field] =\n field === 'TEMPERATURE'\n ? parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n : parseInt(await promptInput('Max tokens'), 10)\n }\n }\n\n if (Object.keys(sectionConfig).length > 0) {\n body[section] = sectionConfig\n }\n\n return body\n}\n\nexport function registerAgentconfigCommand(program: Command): void {\n const ac = program\n .command('agentconfig')\n .description('Agent configurations: list, get, save, delete, schema')\n\n ac.command('list')\n .description('List saved configuration versions')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.listConfigs(arbi)\n\n if (data.versions.length === 0) {\n console.log('No saved configurations.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 30, value: (r) => (r.title as string) ?? '(untitled)' },\n {\n header: 'CREATED',\n width: 22,\n value: (r) => new Date(r.created_at as string).toLocaleString(),\n },\n ],\n data.versions\n )\n })\n )\n\n ac.command('get [config-id]')\n .description('Show configuration details (picker if no ID; use \"default\" for system defaults)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) {\n configId = await promptSelect('Which configuration?', [\n { name: 'System defaults', value: 'default', description: 'Built-in defaults' },\n { name: 'Pick from saved versions...', value: '__pick__' },\n ])\n if (configId === '__pick__') {\n configId = await pickConfig(arbi)\n }\n }\n const data = await acOps.getConfig(arbi, configId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n ac.command('save [json]')\n .description('Save a new configuration (interactive if no JSON given)')\n .option('-t, --title <title>', 'Config title')\n .option('--tag <tag-ext-id>', 'Associate with an assistant tag')\n .option('--message <msg-ext-id>', 'Associate with a parent message')\n .action((json?: string, opts?: { title?: string; tag?: string; message?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(\n json,\n 'arbi agentconfig save \\'{\"Agents\": {\"AGENT_MODEL_NAME\": \"GPT4o@OpenAI\"}, \"title\": \"GPT-4o config\"}\\''\n )\n if (opts?.title) body.title = opts.title\n } else {\n body = await buildConfigInteractively(arbi)\n }\n\n if (opts?.tag) body.tag_ext_id = opts.tag\n if (opts?.message) body.parent_message_ext_id = opts.message\n\n const data = await acOps.saveConfig(arbi, body as Parameters<typeof acOps.saveConfig>[1])\n success(`Saved: ${data.title || '(untitled)'} (${ref(data.external_id)})`)\n })()\n )\n\n ac.command('delete [config-id]')\n .description('Delete a configuration (picker if no ID)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) configId = await pickConfig(arbi, 'Select configuration to delete')\n const data = await acOps.deleteConfig(arbi, configId)\n success(data.detail)\n })()\n )\n\n ac.command('schema')\n .description('Show JSON schema for all configuration models')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.getSchema(arbi)\n console.log(JSON.stringify(data, null, 2))\n })\n )\n\n // Default action: list\n ac.action(async () => {\n await ac.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi health — show server health\n * arbi models — list available models\n */\n\nimport { Command } from 'commander'\nimport { health as healthOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\nimport { label, bold, status } from '../output.js'\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command('health')\n .description('Show server health status')\n .option('--json', 'Output raw JSON for scripting')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealth(arbi)\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2))\n // Non-zero exit when server is not healthy, so scripts can gate on it.\n if (data.status && data.status.toLowerCase() !== 'healthy') {\n process.exit(2)\n }\n return\n }\n\n label('Status:', status(data.status))\n if (data.backend_git_hash) label('Backend:', data.backend_git_hash)\n if (data.frontend_docker_version) label('Frontend:', data.frontend_docker_version)\n\n if (data.services.length > 0) {\n bold('\\nServices:')\n for (const s of data.services) {\n console.log(` ${s.name}: ${status(s.status)}${s.detail ? ` — ${s.detail}` : ''}`)\n }\n }\n\n if (data.models_health) {\n bold(`\\nModels (${data.models_health.application}):`)\n for (const m of data.models_health.models) {\n console.log(` ${m.model}: ${status(m.status)}${m.detail ? ` — ${m.detail}` : ''}`)\n }\n }\n })()\n )\n\n program\n .command('models')\n .description('List available AI models')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealthModels(arbi)\n\n if (opts.json) {\n console.log(JSON.stringify(data.models, null, 2))\n return\n }\n\n if (data.models.length === 0) {\n console.log('No models available.')\n return\n }\n\n printTable(\n [\n { header: 'NAME', width: 30, value: (r) => r.model_name as string },\n { header: 'PROVIDER', width: 20, value: (r) => (r.provider as string) ?? '' },\n { header: 'API_TYPE', width: 16, value: (r) => r.api_type as string },\n ],\n data.models\n )\n })()\n )\n}\n","/**\n * arbi tui [--workspace <id>]\n *\n * Launches the interactive terminal UI (@arbidocs/tui).\n * The TUI package is a direct dependency, so it's always available.\n */\n\nimport { Command } from 'commander'\nimport { spawn } from 'node:child_process'\nimport { createRequire } from 'node:module'\n\nexport function registerTuiCommand(program: Command): void {\n program\n .command('tui')\n .description('Launch interactive terminal UI')\n .option('-w, --workspace <id>', 'Workspace ID to use')\n .allowUnknownOption(true)\n .action((opts: { workspace?: string }, cmd: Command) => {\n const require = createRequire(import.meta.url)\n const entryPoint = require.resolve('@arbidocs/tui')\n\n const args: string[] = []\n if (opts.workspace) {\n args.push('-w', opts.workspace)\n }\n args.push(...cmd.args)\n\n const child = spawn(process.execPath, [entryPoint, ...args], {\n stdio: 'inherit',\n env: process.env,\n })\n\n child.on('exit', (code) => process.exit(code ?? 0))\n })\n}\n","/**\n * arbi update — update to latest version (shows changelog)\n * arbi update auto — enable auto-update on login\n */\n\nimport { Command } from 'commander'\nimport { execSync } from 'node:child_process'\nimport { updateConfig } from '../config.js'\nimport { getLatestVersion, getCurrentVersion, showChangelog } from '../version-check.js'\nimport { success, error, dim, label } from '../output.js'\nimport { printJson } from '../helpers.js'\n\nexport function registerUpdateCommand(program: Command): void {\n const update = program\n .command('update')\n .description('Update ARBI CLI to the latest version (use --check to only probe)')\n .option('--check', 'Only report whether an update is available — never install anything')\n .option('--json', 'Output {current, latest, update_available} as JSON (implies --check)')\n .action((opts: { check?: boolean; json?: boolean }) => {\n const current = getCurrentVersion()\n // --json implies --check: an agent calling `arbi update --json` is\n // looking for a status probe, not an in-place reinstall.\n const checkOnly = Boolean(opts.check || opts.json)\n\n if (!checkOnly) {\n label('Current version:', current)\n console.log('Checking for updates...\\n')\n }\n\n try {\n const latest =\n getLatestVersion(true) ||\n execSync('npm view @arbidocs/cli version', { encoding: 'utf8' }).trim()\n\n if (checkOnly) {\n // Non-mutating probe. Exit 0 if up to date, 1 if an update is\n // available — same convention as `git diff --exit-code` so a CI\n // step can branch with `arbi update --check || arbi update`.\n const updateAvailable = latest !== current\n if (opts.json) {\n printJson({ current, latest, update_available: updateAvailable })\n } else if (updateAvailable) {\n label('Current version:', current)\n label('Latest version:', latest)\n console.log('Update available. Run `arbi update` to install.')\n } else {\n label('Current version:', current)\n success('Already up to date.')\n }\n process.exit(updateAvailable ? 1 : 0)\n }\n\n if (latest === current) {\n success('Already up to date.')\n return\n }\n\n success(`New version available: ${latest}`)\n\n console.log('\\nUpdating...\\n')\n execSync('npm install -g @arbidocs/cli@latest', { stdio: 'inherit' })\n\n // Show what changed (reads from the newly installed package)\n showChangelog(current, latest)\n\n success(`\\nUpdated to ${latest}.`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (opts.json) {\n printJson({ current, latest: null, update_available: null, error: msg })\n process.exit(1)\n }\n error(`Update failed: ${msg}`)\n error('\\nYou can update manually with:')\n dim(' npm install -g @arbidocs/cli@latest')\n process.exit(1)\n }\n })\n\n update\n .command('auto')\n .description('Enable automatic updates on login')\n .action(() => {\n updateConfig({ autoUpdate: true })\n success('Auto-update enabled. ARBI CLI will update automatically on login.')\n })\n}\n","/**\n * arbi quickstart — interactive wizard for new users\n *\n * Walks a real user from zero to a working CLI setup:\n * 1. Detect/confirm server URL\n * 2. Register or login\n * 3. Select or create a workspace\n * 4. Ready to go\n */\n\nimport { Command } from 'commander'\nimport { createArbiClient } from '@arbidocs/client'\nimport {\n getErrorMessage,\n performPasswordLogin,\n formatWorkspaceChoices,\n generateNewWorkspaceKey,\n workspaces as workspaceOps,\n projects as projectOps,\n} from '@arbidocs/sdk'\nimport { success, error, ref, dim } from '../output.js'\nimport { store, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptSelect, promptConfirm } from '../prompts.js'\n\n/**\n * @inquirer/prompts throws an `ExitPromptError` when the user hits Ctrl+C.\n * We match by name to avoid importing the class (extra dep).\n */\nfunction isExitPromptError(err: unknown): boolean {\n return err instanceof Error && err.name === 'ExitPromptError'\n}\n\nexport function registerQuickstartCommand(program: Command): void {\n program\n .command('quickstart')\n .description('Interactive setup wizard — configure, register/login, and select a workspace')\n .argument('[url]', 'Server URL (auto-detected if omitted)')\n .action(async (url: string | undefined) => {\n try {\n await runQuickstart(url)\n } catch (err) {\n if (isExitPromptError(err)) {\n // User hit Ctrl+C — exit cleanly without dumping a Node stack trace.\n console.log('\\nSetup cancelled.')\n process.exit(130)\n }\n error(`Quickstart failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n })\n}\n\nasync function runQuickstart(url: string | undefined): Promise<void> {\n console.log('\\nWelcome to ARBI CLI setup!\\n')\n\n // 1. Resolve server URL\n const { config, source } = store.resolveConfigWithFallbacks()\n if (url) {\n const domain = new URL(url).hostname\n config.baseUrl = url.replace(/\\/$/, '')\n config.deploymentDomain = domain\n store.saveConfig(config)\n }\n\n const useDetected = await promptConfirm(`Use server ${config.baseUrl}?`, true)\n if (!useDetected) {\n const customUrl = await promptInput('Server URL')\n try {\n const domain = new URL(customUrl).hostname\n config.baseUrl = customUrl.replace(/\\/$/, '')\n config.deploymentDomain = domain\n store.saveConfig(config)\n } catch {\n error('Invalid URL')\n process.exit(1)\n }\n } else if (source !== 'config') {\n store.saveConfig(config)\n }\n dim(`Server: ${config.baseUrl}`)\n\n // 2. Register or login\n const action = await promptSelect('Do you have an account?', [\n { name: 'Yes, log me in', value: 'login' },\n { name: 'No, register a new account', value: 'register' },\n ])\n\n const arbiClient = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbiClient.crypto.initSodium()\n\n let email: string\n let password: string\n\n if (action === 'register') {\n email = await promptInput('Email')\n password = await promptPassword('Password')\n const confirmPw = await promptPassword('Confirm password')\n if (password !== confirmPw) {\n error('Passwords do not match.')\n process.exit(1)\n }\n\n // Verification\n const codeMethod = await promptSelect('Verification method', [\n { name: 'I have an invitation code', value: 'code' },\n { name: 'Send me a verification email', value: 'email' },\n ])\n\n let verificationCode: string\n if (codeMethod === 'code') {\n verificationCode = await promptInput('Invitation code')\n } else {\n console.log('Sending verification email...')\n const verifyResponse = await arbiClient.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n error(`Failed to send verification email: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n success('Verification email sent. Check your inbox.')\n verificationCode = await promptInput('Verification code')\n }\n\n try {\n const firstName = (await promptInput('First name', false)) || 'User'\n const lastName = (await promptInput('Last name', false)) || ''\n await arbiClient.auth.register({\n email,\n password,\n verificationCode,\n firstName,\n lastName,\n })\n success(`Registered as ${email}`)\n } catch (err) {\n if (isExitPromptError(err)) throw err\n error(`Registration failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n } else {\n email = await promptInput('Email')\n password = await promptPassword('Password')\n }\n\n // 3. Login\n try {\n const { arbi, loginResult } = await performPasswordLogin(config, email, password, store)\n success(`Logged in as ${email}`)\n\n // 4. Select or create workspace\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.user.email === email))\n\n // Get user's personal project for workspace creation\n const userProjects = await projectOps.listProjects(arbi)\n const defaultProjectExtId = userProjects[0]?.external_id\n if (!defaultProjectExtId) throw new Error('No projects found for user')\n\n let workspaceId: string\n let workspaceName: string\n\n if (memberWorkspaces.length === 0) {\n console.log('Creating your first workspace...')\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(\n arbi,\n 'My Workspace',\n encryptedKey,\n defaultProjectExtId\n )\n workspaceId = ws.external_id\n workspaceName = ws.name\n } else {\n const choices = [\n ...formatWorkspaceChoices(memberWorkspaces),\n { name: '+ Create new workspace', value: '__new__', description: '' },\n ]\n const selected = await promptSelect('Select workspace', choices)\n\n if (selected === '__new__') {\n const name = (await promptInput('Workspace name', false)) || 'My Workspace'\n const encKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(arbi, name, encKey, defaultProjectExtId)\n workspaceId = ws.external_id\n workspaceName = ws.name\n } else {\n workspaceId = selected\n workspaceName = memberWorkspaces.find((w) => w.external_id === selected)?.name || ''\n }\n }\n\n updateConfig({ selectedWorkspaceId: workspaceId })\n\n // 5. Summary\n console.log('')\n success('Setup complete!')\n console.log('')\n console.log(` Server: ${ref(config.baseUrl)}`)\n console.log(` Account: ${ref(email)}`)\n console.log(` Workspace: ${workspaceName} (${ref(workspaceId)})`)\n console.log('')\n dim('Try: arbi ask \"hello\"')\n } catch (err) {\n if (isExitPromptError(err)) throw err\n error(`Login failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n}\n","/**\n * arbi agent-create — create a bot/test account non-interactively\n *\n * Requires SUPPORT_API_KEY for CI verification flow.\n * Generates agent-{timestamp}@{deploymentDomain} accounts.\n *\n * Usage:\n * SUPPORT_API_KEY=xxx arbi agent-create\n * SUPPORT_API_KEY=xxx arbi agent-create https://my-server.com\n */\n\nimport { Command } from 'commander'\nimport { createArbiClient } from '@arbidocs/client'\nimport {\n getErrorMessage,\n performPasswordLogin,\n generateNewWorkspaceKey,\n workspaces as workspaceOps,\n projects as projectOps,\n} from '@arbidocs/sdk'\nimport { success, error, ref, dim } from '../output.js'\nimport { store, updateConfig } from '../config.js'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\nconst DEFAULT_PASSWORD = 'agent-dev-1234'\n\nasync function getVerificationCode(email: string, apiKey: string): Promise<string> {\n const params = new URLSearchParams({ email })\n const res = await fetch(`${CENTRAL_API_URL}/license-management/verify-ci?${params.toString()}`, {\n method: 'GET',\n headers: { 'x-api-key': apiKey },\n })\n\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n throw new Error(`Failed to get verification code: ${res.status} ${body}`)\n }\n\n const data = (await res.json()) as { verification_words?: string[]; verification_code?: string }\n const words = data?.verification_words ?? data?.verification_code ?? null\n if (!words) throw new Error('No verification code in response')\n\n return Array.isArray(words) ? words.join(' ') : String(words)\n}\n\nexport function registerAgentCreateCommand(program: Command): void {\n program\n .command('agent-create')\n .description(\n 'Create a standalone bot/test ACCOUNT via SUPPORT_API_KEY (different from ' +\n '`arbi agent create`, which makes a child agent under the current user)'\n )\n .argument('[url]', 'Server URL (auto-detected if omitted)')\n .option('-p, --password <password>', 'Account password', DEFAULT_PASSWORD)\n .option('--workspace-name <name>', 'Workspace name', 'Agent Workspace')\n .option('--email <email>', 'Custom email (default: agent-{timestamp}@{domain})')\n .action(\n async (\n url: string | undefined,\n opts: { password: string; workspaceName: string; email?: string }\n ) => {\n // 1. Resolve server URL\n const { config, source } = store.resolveConfigWithFallbacks()\n if (url) {\n const domain = new URL(url).hostname\n config.baseUrl = url.replace(/\\/$/, '')\n config.deploymentDomain = domain\n store.saveConfig(config)\n dim(`Server: ${config.baseUrl}`)\n } else {\n dim(`Server: ${config.baseUrl} (from ${source})`)\n }\n\n // 2. Check for SUPPORT_API_KEY\n const supportApiKey = process.env.SUPPORT_API_KEY\n if (!supportApiKey) {\n error(\n 'SUPPORT_API_KEY is required.\\n' +\n 'Set it with: export SUPPORT_API_KEY=<key>\\n' +\n 'Or source from .env: source .env && arbi agent-create'\n )\n process.exit(1)\n }\n\n // 3. Resolve email\n const timestamp = Date.now()\n let email = opts.email || `agent-${timestamp}@${config.deploymentDomain}`\n if (!email.includes('@')) {\n email = `${email}@${config.deploymentDomain}`\n }\n dim(`Email: ${email}`)\n\n // 4. Register\n const arbiClient = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbiClient.crypto.initSodium()\n\n const verifyResponse = await arbiClient.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n\n let verificationCode: string\n try {\n verificationCode = await getVerificationCode(email, supportApiKey)\n } catch (err) {\n error(`Failed to get verification code: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n\n try {\n await arbiClient.auth.register({\n email,\n password: opts.password,\n verificationCode,\n firstName: 'Agent',\n lastName: `${timestamp}`,\n })\n } catch (err) {\n error(`Registration failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n\n // 5. Login + create workspace\n try {\n const { arbi, loginResult } = await performPasswordLogin(\n config,\n email,\n opts.password,\n store\n )\n const userProjects = await projectOps.listProjects(arbi)\n const defaultProjectExtId = userProjects[0]?.external_id\n if (!defaultProjectExtId) throw new Error('No projects found for agent')\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(\n arbi,\n opts.workspaceName,\n encryptedKey,\n defaultProjectExtId\n )\n updateConfig({ selectedWorkspaceId: ws.external_id })\n\n console.log('')\n success('Agent account created!')\n console.log('')\n console.log(` Email: ${ref(email)}`)\n console.log(` Password: ${ref(opts.password)}`)\n console.log(` Workspace: ${ws.name} (${ref(ws.external_id)})`)\n console.log(` Server: ${ref(config.baseUrl)}`)\n console.log('')\n dim('Ready to use: arbi ask \"hello\"')\n } catch (err) {\n error(`Post-registration setup failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n }\n )\n}\n","/**\n * arbi agent create — create a persistent agent\n * arbi agent list — list persistent agents\n * arbi agent delete <id> — delete an agent\n */\n\nimport { Command } from 'commander'\nimport { agents as agentOps, generateEncryptedWorkspaceKey } from '@arbidocs/sdk'\nimport { initSodium, generateLoginCredentials, bytesToBase64 } from '@arbidocs/client'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n requireInteractive,\n suggestSubcommandAndExit,\n dryRun,\n formatUserName,\n type UserInfo,\n} from '../helpers.js'\nimport { promptSelect, promptConfirm, promptInput, promptCheckbox } from '../prompts.js'\nimport { success, ref, dim } from '../output.js'\nimport { store, resolveConfig } from '../config.js'\n\n/** Generate a random URL-safe password (20 chars). */\nfunction generatePassword(): string {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'\n const bytes = new Uint8Array(20)\n crypto.getRandomValues(bytes)\n return Array.from(bytes, (b) => chars[b % chars.length]).join('')\n}\n\nexport function registerAgentCommand(program: Command): void {\n const agent = program\n .command('agent')\n .description(\n 'Child agents under your user: list, create, delete ' +\n '(for SUPPORT_API_KEY bot accounts, use `arbi agent-create`)'\n )\n\n // ── create ────────────────────────────────────────────────────────────────\n agent\n .command('create')\n .description(\n 'Create a child persistent agent owned by the current user (different from ' +\n '`arbi agent-create`, which is a SUPPORT_API_KEY bot-account flow)'\n )\n .option('--name <name>', 'Agent name (letters, digits, hyphens, underscores)')\n .option('-w, --workspace <ids...>', 'Workspace IDs to share with the agent')\n .option('--role <role>', 'Workspace role: collaborator or guest', 'collaborator')\n .action((opts: { name?: string; workspace?: string[]; role?: string }) =>\n runAction(async () => {\n const { arbi, loginResult } = await resolveAuth()\n const config = resolveConfig()\n const creds = store.requireCredentials()\n\n let name = opts.name\n if (!name) name = await promptInput('Agent name (letters, digits, hyphens, underscores)')\n if (!name?.trim() || !/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name.trim())) {\n throw new Error('Invalid agent name — use letters, digits, hyphens, underscores')\n }\n\n // Resolve workspaces to share (optional)\n let workspaceIds = opts.workspace ?? []\n if (workspaceIds.length === 0) {\n const { data: allWorkspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n if (allWorkspaces && allWorkspaces.length > 0) {\n workspaceIds = await promptCheckbox(\n 'Share with workspaces (optional — press Enter to skip)',\n allWorkspaces.map((ws) => ({\n name: `${ws.name} (${ws.external_id})`,\n value: ws.external_id,\n }))\n )\n }\n }\n\n // Derive keypair from email + password, same as human registration.\n // Agent email: name.usr-XXXXXXXX@domain — use session state for parent ext_id.\n await initSodium()\n const parentExtId = arbi.session.getState().userExtId ?? ''\n if (!parentExtId) throw new Error('Could not determine current user ext_id')\n\n const agentEmail = `${name.trim()}.${parentExtId}@${config.deploymentDomain}`\n const password = generatePassword()\n\n const { signingPrivateKey } = await generateLoginCredentials(\n { email: agentEmail },\n password,\n config.deploymentDomain\n )\n const signingPubKey = bytesToBase64(signingPrivateKey.slice(32))\n\n const { data: agent, error } = await arbi.fetch.POST('/v1/user/agent', {\n body: {\n name: name.trim(),\n signing_key: signingPubKey,\n recovery_key: bytesToBase64(signingPrivateKey),\n },\n })\n if (!agent) throw new Error(`Failed to create agent: ${JSON.stringify(error)}`)\n\n // Share selected workspaces\n if (workspaceIds.length > 0) {\n const { data: allWs } = await arbi.fetch.GET('/v1/user/workspaces')\n for (const wsId of workspaceIds) {\n const ws = allWs?.find((w) => w.external_id === wsId)\n if (!ws?.wrapped_key) {\n dim(`Skipping ${wsId} — no key found`)\n continue\n }\n const encryptedKey = await generateEncryptedWorkspaceKey(\n arbi,\n ws.wrapped_key,\n loginResult.serverSessionKey,\n creds.signingPrivateKeyBase64\n )\n await arbi.fetch.POST('/v1/workspace/users', {\n body: {\n emails: [agent.email],\n role: (opts.role ?? 'collaborator') as 'collaborator' | 'guest',\n workspace_key: encryptedKey,\n workspace_ext_id: wsId,\n },\n })\n }\n }\n\n console.log('')\n success('Agent created!')\n console.log('')\n console.log(` Email: ${ref(agent.email)}`)\n console.log(` Password: ${ref(password)}`)\n if (workspaceIds.length > 0) console.log(` Workspaces: ${workspaceIds.join(', ')}`)\n console.log('')\n dim(`On the agent machine: arbi login --email ${agent.email} --password <password>`)\n })()\n )\n\n // ── list ─────────────────────────────────────────────────────────────────\n agent\n .command('list')\n .description('List your persistent agents')\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts?: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await agentOps.listAgents(arbi)\n\n if (opts?.json) {\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No agents found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 20, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 24,\n value: (r) => formatUserName(r as unknown as UserInfo) || (r.email as string) || '',\n },\n { header: 'EMAIL', width: 40, value: (r) => (r.email as string) || '' },\n ],\n data\n )\n })()\n )\n\n // ── delete ───────────────────────────────────────────────────────────────\n agent\n .command('delete [agent-id]')\n .description('Delete a persistent agent (picker if no ID)')\n .option('-y, --yes', 'Skip confirmation (required in non-TTY shells)')\n .option('--dry-run', 'Preview which agent would be deleted (no SDK call)')\n .action((agentId: string | undefined, opts: { yes?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n if (!agentId) {\n const data = await agentOps.listAgents(arbi)\n if (data.length === 0) {\n process.stderr.write('No agents to delete.\\n')\n return\n }\n requireInteractive('Pass <agent-id> directly: arbi agent delete <id>')\n agentId = await promptSelect(\n 'Select agent to delete',\n data.map((a) => ({\n name: `${formatUserName(a as unknown as UserInfo) || a.email} (${a.external_id})`,\n value: a.external_id,\n }))\n )\n }\n\n if (opts?.dryRun) {\n dryRun('delete agent', agentId)\n return\n }\n\n if (!opts?.yes) {\n requireInteractive('Pass -y/--yes to confirm in non-TTY shells.')\n const confirmed = await promptConfirm(`Delete agent ${agentId}?`, false)\n if (!confirmed) {\n console.log('Cancelled.')\n return\n }\n }\n\n await agentOps.deleteAgents(arbi, [agentId])\n success(`Agent ${agentId} deleted.`)\n })()\n )\n\n // Default action: list, OR suggest a subcommand if user typed a typo.\n agent.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'agent',\n maybe,\n agent.commands.map((c) => c.name())\n )\n }\n await agent.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi task list List background tasks\n * arbi task status [task-id] Poll and display current status\n * arbi task result [task-id] Fetch and print completed result\n *\n * Management commands for background tasks submitted via `arbi ask -b`.\n * Task metadata is stored locally in ~/.arbi/tasks.json.\n * Status and results are fetched from the backend via GET /v1/responses/{id}.\n */\n\nimport { Command } from 'commander'\nimport { responses } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n} from '../helpers.js'\nimport { getTasks, getLatestTask, updateTaskStatus } from '../task-store.js'\nimport { chalk } from '../output.js'\n\nfunction formatAge(isoDate: string): string {\n const ms = Date.now() - new Date(isoDate).getTime()\n if (ms < 60_000) return `${Math.round(ms / 1000)}s`\n if (ms < 3_600_000) return `${Math.round(ms / 60_000)}m`\n if (ms < 86_400_000) return `${Math.round(ms / 3_600_000)}h`\n return `${Math.round(ms / 86_400_000)}d`\n}\n\nfunction resolveTaskId(taskIdArg?: string): string {\n if (taskIdArg) return taskIdArg\n const latest = getLatestTask()\n if (!latest) {\n console.error(chalk.red('No tasks found. Submit one with: arbi ask -b \"your question\"'))\n process.exit(1)\n }\n return latest.id\n}\n\n/** Shape we return from `task list --json`. Public contract — keep stable. */\ninterface TaskListEntry {\n id: string\n status: string\n question: string\n age_seconds: number\n submitted_at: string\n}\n\nfunction statusColor(s: string): string {\n if (s === 'completed') return chalk.green(s)\n if (s === 'failed') return chalk.red(s)\n if (s === 'queued' || s === 'in_progress') return chalk.yellow(s)\n return s\n}\n\nexport function registerTaskCommand(program: Command): void {\n const task = program\n .command('task')\n .description('Background tasks (from `arbi ask -b`): list, status, result')\n\n // Default action: list, OR suggest a subcommand if user typed a typo.\n task.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'task',\n maybe,\n task.commands.map((c) => c.name())\n )\n }\n await task.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n\n task\n .command('list')\n .description('List background tasks')\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts?: { json?: boolean }) =>\n runAction(async () => {\n const tasks = getTasks()\n if (opts?.json) {\n const out: TaskListEntry[] = tasks.map((t) => ({\n id: t.id,\n status: t.status,\n question: t.question,\n age_seconds: Math.round((Date.now() - new Date(t.submittedAt).getTime()) / 1000),\n submitted_at: t.submittedAt,\n }))\n printJson(out)\n return\n }\n if (tasks.length === 0) {\n // Empty-state hint stays useful for humans but goes to stderr so\n // `arbi task list | wc -l` returns 0, not 1.\n process.stderr.write('No tasks. Submit one with: arbi ask -b \"your question\"\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 20, value: (r) => r.id as string },\n { header: 'STATUS', width: 14, value: (r) => statusColor(r.status as string) },\n { header: 'QUESTION', width: 42, value: (r) => r.question as string },\n { header: 'AGE', width: 6, value: (r) => formatAge(r.submittedAt as string) },\n ],\n tasks as unknown as Record<string, unknown>[]\n )\n })()\n )\n\n task\n .command('status [task-id]')\n .description('Check current task status (defaults to most recent)')\n .option('-w, --workspace <id>', 'Workspace ID')\n .option('--json', 'Output in JSON format')\n .action((taskId?: string, opts?: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const id = resolveTaskId(taskId)\n const { accessToken, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse({ baseUrl: config.baseUrl, accessToken }, id)\n\n if (result.status === 'completed' || result.status === 'failed') {\n updateTaskStatus(id, result.status)\n }\n\n if (opts?.json) {\n console.log(JSON.stringify(result, null, 2))\n } else {\n console.log(`${chalk.bold('ID:')} ${result.id}`)\n console.log(`${chalk.bold('Status:')} ${statusColor(result.status)}`)\n if (result.model) console.log(`${chalk.bold('Model:')} ${result.model}`)\n if (result.usage) {\n console.log(`${chalk.bold('Tokens:')} ${result.usage.total_tokens.toLocaleString()}`)\n }\n }\n })()\n )\n\n task\n .command('result [task-id]')\n .description('Fetch and print the completed task result')\n .option('-w, --workspace <id>', 'Workspace ID')\n .option('--json', 'Output in JSON format')\n .action((taskId?: string, opts?: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const id = resolveTaskId(taskId)\n const { accessToken, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse({ baseUrl: config.baseUrl, accessToken }, id)\n\n if (result.status === 'completed' || result.status === 'failed') {\n updateTaskStatus(id, result.status)\n }\n\n if (opts?.json) {\n console.log(JSON.stringify(result, null, 2))\n return\n }\n\n if (result.status !== 'completed') {\n console.error(\n chalk.yellow(`Task is ${result.status}. Use \\`arbi task status\\` to check progress.`)\n )\n process.exit(1)\n }\n\n const text = responses.extractResponseText(result)\n process.stdout.write(text + '\\n')\n if (result.usage) {\n console.error(chalk.dim(`[${result.usage.total_tokens.toLocaleString()} tokens]`))\n }\n })()\n )\n}\n","/**\n * arbi completion install — append shell completion function to rc file\n * arbi completion uninstall — remove completion block from rc file\n * arbi completion refresh — authenticate + fetch workspaces + update cache\n */\n\nimport { existsSync, readFileSync, writeFileSync, appendFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { Command } from 'commander'\nimport { workspaces } from '@arbidocs/sdk'\nimport { runAction, resolveAuth } from '../helpers.js'\nimport { success, dim } from '../output.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\nconst MARKER_START = '# arbi-cli completion start'\nconst MARKER_END = '# arbi-cli completion end'\n\nconst BASH_COMPLETION = `\n${MARKER_START}\n_arbi_completions() {\n local cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n local candidates\n candidates=$(arbi --get-completions \"\\${COMP_LINE}\" 2>/dev/null)\n COMPREPLY=($(compgen -W \"$candidates\" -- \"$cur\"))\n}\ncomplete -o default -F _arbi_completions arbi\n${MARKER_END}`\n\nconst ZSH_COMPLETION = `\n${MARKER_START}\n_arbi_completions() {\n local candidates\n candidates=(\\${(f)\"$(arbi --get-completions \"\\${words[*]}\" 2>/dev/null)\"})\n compadd -a candidates\n}\ncompdef _arbi_completions arbi\n${MARKER_END}`\n\nfunction getShellRcPath(): string {\n const shell = process.env.SHELL || ''\n if (shell.includes('zsh')) return join(homedir(), '.zshrc')\n return join(homedir(), '.bashrc')\n}\n\nfunction isZsh(): boolean {\n return (process.env.SHELL || '').includes('zsh')\n}\n\nfunction isCompletionInstalled(rcPath: string): boolean {\n if (!existsSync(rcPath)) return false\n const content = readFileSync(rcPath, 'utf-8')\n return content.includes(MARKER_START)\n}\n\nfunction removeCompletionBlock(content: string): string {\n const startIdx = content.indexOf(MARKER_START)\n const endIdx = content.indexOf(MARKER_END)\n if (startIdx === -1 || endIdx === -1) return content\n\n // Remove from the newline before the start marker to end of the end marker line\n const before = content.substring(0, startIdx).replace(/\\n+$/, '')\n const after = content.substring(endIdx + MARKER_END.length)\n return before + after\n}\n\nexport function registerCompletionCommand(program: Command): void {\n const completion = program\n .command('completion')\n .description('Shell tab completion: install, uninstall, refresh')\n\n completion\n .command('install')\n .description('Install shell tab completion (auto-detects bash or zsh — no shell arg needed)')\n .action(() => {\n const rcPath = getShellRcPath()\n\n if (isCompletionInstalled(rcPath)) {\n success(`Completion already installed in ${rcPath}`)\n dim(\"If it's not working, run: source \" + rcPath)\n return\n }\n\n const snippet = isZsh() ? ZSH_COMPLETION : BASH_COMPLETION\n appendFileSync(rcPath, snippet + '\\n')\n success(`Installed tab completion in ${rcPath}`)\n dim('')\n dim(`Run: source ${rcPath}`)\n dim('Then try: arbi <TAB>')\n })\n\n completion\n .command('uninstall')\n .description('Remove shell tab completion')\n .action(() => {\n const rcPath = getShellRcPath()\n\n if (!isCompletionInstalled(rcPath)) {\n dim('Completion is not installed.')\n return\n }\n\n const content = readFileSync(rcPath, 'utf-8')\n const cleaned = removeCompletionBlock(content)\n writeFileSync(rcPath, cleaned)\n success(`Removed tab completion from ${rcPath}`)\n dim(`Run: source ${rcPath}`)\n })\n\n completion\n .command('refresh')\n .description('Refresh cached workspace IDs for tab completion')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n updateCompletionCache(data)\n success(`Cached ${data.length} workspace(s) for tab completion.`)\n })\n )\n}\n","/**\n * arbi local ls [path] — list files in a directory\n * arbi local find <pattern> — find files matching a glob pattern\n * arbi local cat <file> — print file contents\n * arbi local tree [path] — show directory tree\n *\n * Local filesystem operations — allows agents to browse files\n * without requiring shell access. Each command supports `--json` so\n * an agent can parse the output cleanly; SKILL.md positions these\n * commands as AI-friendly, so they have to actually be parseable.\n */\n\nimport { Command } from 'commander'\nimport { readdirSync, readFileSync, statSync, globSync } from 'node:fs'\nimport { resolve, join, basename } from 'node:path'\nimport { homedir } from 'node:os'\nimport { printJson } from '../helpers.js'\n\n/** Resolve ~ and relative paths */\nfunction resolvePath(p?: string): string {\n const raw = p ?? '.'\n const expanded = raw.startsWith('~') ? raw.replace('~', homedir()) : raw\n return resolve(expanded)\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}K`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)}M`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}G`\n}\n\n/** Stat shape returned by --json paths. Public contract — keep stable. */\ninterface LocalEntry {\n name: string\n type: 'dir' | 'file' | 'symlink' | 'other'\n size: number | null\n}\n\nfunction entryToRow(dir: string, name: string): LocalEntry {\n try {\n const stat = statSync(join(dir, name))\n if (stat.isDirectory()) return { name, type: 'dir', size: null }\n if (stat.isSymbolicLink()) return { name, type: 'symlink', size: stat.size }\n if (stat.isFile()) return { name, type: 'file', size: stat.size }\n return { name, type: 'other', size: stat.size }\n } catch {\n return { name, type: 'other', size: null }\n }\n}\n\nexport function registerLocalCommand(program: Command): void {\n const local = program.command('local').description('Local filesystem operations')\n\n // ── ls ──────────────────────────────────────────────────────────────────\n local\n .command('ls [path]')\n .description('List files in a directory')\n .option('-l, --long', 'Show file sizes and types (ignored when --json is set)')\n .option('-a, --all', 'Include dotfiles')\n .option('--json', 'Output as JSON array of {name, type, size}')\n .action((path?: string, opts?: { long?: boolean; all?: boolean; json?: boolean }) => {\n const dir = resolvePath(path)\n let entries: string[]\n try {\n entries = readdirSync(dir)\n } catch {\n console.error(`Cannot read directory: ${dir}`)\n process.exit(1)\n }\n\n const sorted = entries.filter((e) => opts?.all || !e.startsWith('.')).sort()\n\n if (opts?.json) {\n const rows: LocalEntry[] = sorted.map((name) => entryToRow(dir, name))\n printJson(rows)\n return\n }\n\n for (const entry of sorted) {\n if (opts?.long) {\n const row = entryToRow(dir, entry)\n const size = row.size !== null && row.type === 'file' ? formatSize(row.size) : '-'\n console.log(`${row.type.padEnd(5)} ${size.padStart(10)} ${entry}`)\n } else {\n console.log(entry)\n }\n }\n })\n\n // ── find ─────────────────────────────────────────────────────────────────\n local\n .command('find <pattern>')\n .description('Find files matching a glob (e.g. \"**/*.pdf\")')\n .option('-d, --dir <path>', 'Directory to search in', '.')\n .option('--json', 'Output as JSON array of matched paths')\n .action((pattern: string, opts: { dir: string; json?: boolean }) => {\n const dir = resolvePath(opts.dir)\n const results = globSync(pattern, { cwd: dir })\n\n if (opts.json) {\n // Always print an array, even when empty — keeps `arbi local find …\n // --json | jq` honest. Status hints (the human \"No files matching\"\n // line) go to stderr in JSON mode so stdout is purely data.\n if (results.length === 0) {\n process.stderr.write(`No files matching \"${pattern}\" in ${dir}\\n`)\n }\n printJson(results)\n return\n }\n\n if (results.length === 0) {\n process.stderr.write(`No files matching \"${pattern}\" in ${dir}\\n`)\n return\n }\n\n for (const file of results) {\n console.log(file)\n }\n })\n\n // ── cat ──────────────────────────────────────────────────────────────────\n local\n .command('cat <file>')\n .description('Print file contents')\n .option('--head <lines>', 'Only show first N lines')\n .option(\n '--json',\n 'Output as {path, bytes, content} — useful when content has newlines an agent needs to handle'\n )\n .action((file: string, opts: { head?: string; json?: boolean }) => {\n const filePath = resolvePath(file)\n let content: string\n try {\n content = readFileSync(filePath, 'utf-8')\n } catch {\n console.error(`Cannot read file: ${filePath}`)\n process.exit(1)\n }\n\n if (opts.head) {\n const n = parseInt(opts.head, 10)\n content = content.split('\\n').slice(0, n).join('\\n')\n }\n\n if (opts.json) {\n printJson({ path: filePath, bytes: Buffer.byteLength(content, 'utf-8'), content })\n return\n }\n\n console.log(content)\n })\n\n // ── tree ─────────────────────────────────────────────────────────────────\n local\n .command('tree [path]')\n .description('Show directory tree')\n .option('-d, --depth <n>', 'Maximum depth', '3')\n .option('--json', 'Output as nested {name, type, children} tree')\n .action((path?: string, opts?: { depth?: string; json?: boolean }) => {\n const dir = resolvePath(path)\n const maxDepth = parseInt(opts?.depth ?? '3', 10)\n\n if (opts?.json) {\n printJson(buildTree(dir, maxDepth, 0))\n return\n }\n\n console.log(basename(dir) + '/')\n printTree(dir, '', maxDepth, 0)\n })\n}\n\ninterface TreeNode {\n name: string\n type: 'dir' | 'file' | 'symlink' | 'other'\n children?: TreeNode[]\n}\n\nfunction buildTree(dir: string, maxDepth: number, depth: number): TreeNode {\n const node: TreeNode = { name: basename(dir), type: 'dir', children: [] }\n if (depth >= maxDepth) return node\n let entries: string[]\n try {\n entries = readdirSync(dir)\n .filter((e) => !e.startsWith('.'))\n .sort()\n } catch {\n return node\n }\n for (const entry of entries) {\n const full = join(dir, entry)\n let isDir = false\n try {\n isDir = statSync(full).isDirectory()\n } catch {\n node.children!.push({ name: entry, type: 'other' })\n continue\n }\n if (isDir) {\n node.children!.push(buildTree(full, maxDepth, depth + 1))\n } else {\n node.children!.push({ name: entry, type: 'file' })\n }\n }\n return node\n}\n\nfunction printTree(dir: string, prefix: string, maxDepth: number, depth: number): void {\n if (depth >= maxDepth) return\n let entries: string[]\n try {\n entries = readdirSync(dir)\n .filter((e) => !e.startsWith('.'))\n .sort()\n } catch {\n return\n }\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n const isLast = i === entries.length - 1\n const connector = isLast ? '└── ' : '├── '\n const full = join(dir, entry)\n let isDir = false\n try {\n isDir = statSync(full).isDirectory()\n } catch {\n continue\n }\n console.log(`${prefix}${connector}${entry}${isDir ? '/' : ''}`)\n if (isDir) {\n const nextPrefix = prefix + (isLast ? ' ' : '│ ')\n printTree(full, nextPrefix, maxDepth, depth + 1)\n }\n }\n}\n","/**\n * arbi session list — list active sessions\n */\n\nimport { Command } from 'commander'\nimport { sessions as sessionOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n} from '../helpers.js'\n\nfunction humanizeTtl(seconds: number): string {\n if (!Number.isFinite(seconds) || seconds < 0) return ''\n if (seconds < 60) return `${seconds}s`\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`\n if (seconds < 86400) return `${Math.round(seconds / 3600)}h`\n return `${Math.round(seconds / 86400)}d`\n}\n\nexport function registerSessionCommand(program: Command): void {\n const session = program.command('session').description('List and manage sessions')\n\n session\n .command('list')\n .description('List active sessions')\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts?: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await sessionOps.listSessions(arbi)\n\n if (opts?.json) {\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No active sessions.\\n')\n return\n }\n\n printTable(\n [\n {\n header: 'ID',\n width: 18,\n value: (r) => (r.external_id as string) || (r.session_id as string),\n },\n { header: 'NAME', width: 20, value: (r) => (r.name as string) || '' },\n { header: 'STATUS', width: 12, value: (r) => r.status as string },\n {\n header: 'TTL',\n width: 10,\n // Raw `<n>s` was unreadable past a few hours; humanize once the\n // window grows beyond a minute.\n value: (r) => humanizeTtl(r.ttl as number),\n },\n {\n header: 'WORKSPACES',\n width: 12,\n value: (r) => String((r.workspaces as string[])?.length ?? 0),\n },\n ],\n data\n )\n })()\n )\n\n // Default action: list, OR suggest a subcommand if user typed a typo.\n session.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'session',\n maybe,\n session.commands.map((c) => c.name())\n )\n }\n await session.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi notifications list — list non-DM notifications (workspaceuser_invited,\n * contact_accepted, …)\n *\n * `arbi dm list` is intentionally narrowed to `user_message` rows. This view\n * is the firehose for everything else the server pushes — invites, contact\n * accepts, batch completes, etc. — and is the right place for agents that\n * need to react to system-level events without a long-running `arbi watch`\n * subscription.\n *\n * Backed by the same GET /v1/notifications/ endpoint as `dm list`; we just\n * filter to non-DM types.\n */\n\nimport { Command } from 'commander'\nimport { dm as dmOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveDmCrypto,\n printTable,\n printJson,\n truncate,\n suggestSubcommandAndExit,\n dryRun,\n} from '../helpers.js'\n\ntype Row = Record<string, unknown>\n\nexport function registerNotificationsCommand(program: Command): void {\n // `enablePositionalOptions` keeps `--json` (declared on both parent and\n // `list`) attached to whichever command the user actually wrote it after.\n // Without this commander resolves the parent option first and the inner\n // list subcommand's --json never fires.\n const notif = program\n .command('notifications')\n .enablePositionalOptions()\n .description('Non-DM notifications')\n\n notif\n .command('list')\n .description('List non-DM notifications (workspace invites, contact accepts, …)')\n .option('--unread', 'Only show unread notifications')\n .option('--type <comma-list>', 'Filter to specific type(s), e.g. workspaceuser_invited')\n .option('-l, --limit <n>', 'Cap to N most-recent', (v) => parseInt(v, 10))\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts: { unread?: boolean; type?: string; limit?: number; json?: boolean }) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n // `listDecryptedDMs` returns ALL notifications and only DM rows have\n // decryptable content — non-DM rows pass through with `content`\n // already set to whatever the server emitted (usually null/empty).\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as Row[]\n const nonDm = all.filter((r) => (r.type as string) !== 'user_message')\n\n const typeFilter = opts.type\n ? new Set(\n opts.type\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n )\n : null\n\n const filtered = nonDm.filter((r) => {\n if (opts.unread && r.read) return false\n if (typeFilter && !typeFilter.has((r.type as string) ?? '')) return false\n return true\n })\n\n const limited = opts.limit && opts.limit > 0 ? filtered.slice(0, opts.limit) : filtered\n\n if (opts.json) {\n printJson(limited)\n return\n }\n\n if (limited.length === 0) {\n process.stderr.write('No notifications.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n { header: 'TYPE', width: 24, value: (r) => (r.type as string) ?? '' },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n {\n header: 'CONTENT',\n width: 50,\n // Non-DM rows usually carry a JSON-encoded payload in\n // `content`. Show the first slice and let the JSON path\n // expose the full thing for agents that want to introspect.\n value: (r) => truncate((r.content as string) ?? '', 49),\n },\n ],\n limited\n )\n })()\n )\n\n // ── mark-read ────────────────────────────────────────────────────────────\n // Closes the long-running-agent feedback loop: without --all, the\n // `notifications --unread` filter grows unbounded after a burst of\n // workspace invites or task completions.\n notif\n .command('mark-read [ids...]')\n .description('Mark notifications as read (use --all to drain the unread queue)')\n .option('--all', 'Mark every unread non-DM notification as read')\n .action((ids: string[] | undefined, opts: { all?: boolean }) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let toMark = ids && ids.length > 0 ? ids : undefined\n if (!toMark && opts.all) {\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as Row[]\n toMark = all\n .filter((r) => (r.type as string) !== 'user_message' && !r.read)\n .map((r) => r.external_id as string)\n }\n if (!toMark || toMark.length === 0) {\n process.stderr.write('Nothing to mark read. (Pass IDs or --all.)\\n')\n return\n }\n const data = await dmOps.markRead(arbi, toMark)\n process.stdout.write(`Marked ${data.length} notification(s) as read.\\n`)\n })()\n )\n\n // ── delete ───────────────────────────────────────────────────────────────\n notif\n .command('delete [ids...]')\n .description('Delete notifications by ID (or use --all to clear non-DM noise)')\n .option('--all', 'Delete every non-DM notification (workspace invites, contact accepts, ...)')\n .option('--dry-run', 'Preview which notifications would be deleted (no SDK call)')\n .action((ids: string[] | undefined, opts: { all?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let toDelete = ids && ids.length > 0 ? ids : undefined\n if (!toDelete && opts.all) {\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as Row[]\n toDelete = all\n .filter((r) => (r.type as string) !== 'user_message')\n .map((r) => r.external_id as string)\n }\n if (!toDelete || toDelete.length === 0) {\n process.stderr.write('Nothing to delete. (Pass IDs or --all.)\\n')\n return\n }\n if (opts?.dryRun) {\n dryRun(`delete ${toDelete.length} notification(s)`, toDelete)\n return\n }\n await dmOps.deleteDMs(arbi, toDelete)\n process.stdout.write(`Deleted ${toDelete.length} notification(s).\\n`)\n })()\n )\n\n // Default action: forward unknown args (including --json/--unread/etc.) to\n // the `list` subcommand. We avoid pre-declaring those options on the parent\n // because commander 11 binds them to whichever command declared them first\n // — `arbi notifications list --json` then dispatches `list` with an empty\n // opts and the data never gets JSON-formatted.\n notif\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = notif.args ?? []\n const subcommands = notif.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('notifications', firstNonFlag, subcommands)\n }\n await notif.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi project list — list projects\n * arbi project create <name> — create a new project\n * arbi project refresh <id> — refresh project metadata\n *\n * Projects are the tenancy unit above workspaces. Until this command landed\n * the only way to discover a `projectExtId` (needed for `arbi workspace\n * create`) was indirectly via `arbi register` / `arbi agent-create`. Exposing\n * `project list` lets agents bootstrap multi-project setups themselves.\n */\n\nimport { Command } from 'commander'\nimport { projects as projectOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n emitListOrTable,\n} from '../helpers.js'\nimport { success, ref } from '../output.js'\n\nexport function registerProjectCommand(program: Command): void {\n const project = program.command('project').description('Project tenancy: list, create, refresh')\n\n project\n .command('list')\n .description('List your projects')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await projectOps.listProjects(arbi)\n\n if (!emitListOrTable(data, opts, 'No projects found.')) return\n\n printTable(\n [\n { header: 'ID', width: 18, value: (r) => r.external_id as string },\n { header: 'NAME', width: 30, value: (r) => (r.name as string) ?? '' },\n { header: 'PLAN', width: 14, value: (r) => (r.plan as string) ?? '' },\n { header: 'ROLE', width: 14, value: (r) => (r.role as string) ?? '' },\n ],\n data\n )\n })()\n )\n\n project\n .command('create <name>')\n .description('Create a new project')\n .action((name: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await projectOps.createProject(arbi, name)\n // Agents extract the project ID with: grep -oE 'prj-[a-z0-9]+'\n success(`Created project: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n project\n .command('refresh <id>')\n .description('Refresh a project (force plan/usage sync from billing)')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n await projectOps.refreshProject(arbi, id)\n success(`Refreshed project: ${ref(id)}`)\n })()\n )\n\n // Default action: list, with typo suggestion for unknown subcommands.\n project\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = project.args ?? []\n const subcommands = project.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('project', firstNonFlag, subcommands)\n }\n await project.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi files list — list ephemeral files\n * arbi files upload <path> — upload a file\n * arbi files get <id> — show a file's metadata\n * arbi files delete <id> — delete a file\n * arbi files content <id> [-o <path>] — write the file's bytes to disk (or stdout)\n *\n * OpenAI-compatible Files API surface. These files are independent of the\n * workspace document index — they're meant for the Responses API\n * (`arbi ask -b`) where an agent attaches a short-lived file to a single\n * request. Until this command existed, the entire file subsystem was\n * unreachable from the CLI even though the SDK has full coverage.\n */\n\nimport { Command } from 'commander'\nimport { readFileSync } from 'node:fs'\nimport { writeFileSync } from 'node:fs'\nimport { basename, resolve } from 'node:path'\nimport { files as filesOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n emitListOrTable,\n truncate,\n dryRun,\n} from '../helpers.js'\nimport { success, ref, error } from '../output.js'\n\nfunction formatBytes(n: number): string {\n if (n < 1024) return `${n}B`\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)}K`\n if (n < 1024 * 1024 * 1024) return `${(n / (1024 * 1024)).toFixed(1)}M`\n return `${(n / (1024 * 1024 * 1024)).toFixed(1)}G`\n}\n\nexport function registerFilesCommand(program: Command): void {\n const files = program\n .command('files')\n .description('Ephemeral files: list, upload, get, delete, fetch content')\n\n files\n .command('list')\n .description('List ephemeral files attached to your account')\n .option('--purpose <name>', 'Filter by purpose (default: assistants)')\n .option('-l, --limit <n>', 'Cap to N entries', (v) => parseInt(v, 10))\n .option('--json', 'Output as JSON')\n .action((opts: { purpose?: string; limit?: number; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await filesOps.listFiles(arbi, {\n purpose: opts.purpose ?? null,\n limit: opts.limit,\n })\n // The OpenAI envelope is `{ data: [...], object: 'list' }` — surface\n // the array directly for human callers, but let `--json` consumers\n // see whatever shape the SDK returned (some downstream tools want\n // the `object: 'list'` discriminator).\n const items = (data.data ?? []) as Array<Record<string, unknown>>\n\n if (opts.json) {\n printJson(data)\n return\n }\n if (!emitListOrTable(items, opts, 'No files found.')) return\n\n printTable(\n [\n { header: 'ID', width: 30, value: (r) => r.id as string },\n {\n header: 'NAME',\n width: 30,\n value: (r) => truncate((r.filename as string) ?? '', 29),\n },\n { header: 'BYTES', width: 10, value: (r) => formatBytes((r.bytes as number) ?? 0) },\n { header: 'PURPOSE', width: 14, value: (r) => (r.purpose as string) ?? '' },\n ],\n items\n )\n })()\n )\n\n files\n .command('upload <path>')\n .description('Upload a file (file ID is returned for use with arbi ask -b --attach)')\n .option('--purpose <name>', 'OpenAI purpose tag (default: assistants)', 'assistants')\n .action((path: string, opts: { purpose?: string }) =>\n runAction(async () => {\n const { loginResult, config } = await resolveWorkspace()\n const filePath = resolve(path)\n let bytes: Buffer\n try {\n bytes = readFileSync(filePath)\n } catch {\n error(`Cannot read file: ${filePath}`)\n process.exit(3)\n }\n const blob = new Blob([new Uint8Array(bytes)])\n const data = await filesOps.uploadFile(\n {\n baseUrl: config.baseUrl,\n accessToken: loginResult.accessToken,\n } as Parameters<typeof filesOps.uploadFile>[0],\n blob,\n basename(filePath),\n opts.purpose ?? 'assistants'\n )\n // Agents extract the file ID with: grep -oE 'file-[A-Za-z0-9]+'\n success(`Uploaded: ${ref(data.id)} (${formatBytes(data.bytes ?? 0)})`)\n })()\n )\n\n files\n .command('get <id>')\n .description(\"Show a file's metadata (always JSON — the metadata IS the data)\")\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await filesOps.getFile(arbi, id)\n printJson(data)\n })()\n )\n\n files\n .command('delete <id>')\n .description('Delete an ephemeral file')\n .option('--dry-run', 'Preview which file would be deleted (no SDK call)')\n .action((id: string, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n if (opts?.dryRun) {\n dryRun('delete file', id)\n return\n }\n const { arbi } = await resolveWorkspace()\n await filesOps.deleteFile(arbi, id)\n success(`Deleted: ${ref(id)}`)\n })()\n )\n\n files\n .command('content <id>')\n .description(\"Fetch a file's raw bytes (writes to disk or stdout)\")\n .option('-o, --output <path>', 'Output file path (use \"-\" for stdout)')\n .action((id: string, opts: { output?: string }) =>\n runAction(async () => {\n const { loginResult, config } = await resolveWorkspace()\n const res = await filesOps.getFileContent(\n {\n baseUrl: config.baseUrl,\n accessToken: loginResult.accessToken,\n } as Parameters<typeof filesOps.getFileContent>[0],\n id\n )\n const buf = Buffer.from(await res.arrayBuffer())\n if (!opts.output || opts.output === '-') {\n process.stdout.write(buf)\n return\n }\n writeFileSync(resolve(opts.output), buf)\n success(`Wrote ${formatBytes(buf.length)} → ${opts.output}`)\n })()\n )\n\n // Default action: list, with typo suggestion for unknown subcommands.\n files\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = files.args ?? []\n const subcommands = files.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('files', firstNonFlag, subcommands)\n }\n await files.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi usage today — show today's per-user usage against the daily cap\n *\n * Pre-flight cost check before launching long batch jobs. The endpoint is at\n * /v1/user/me/usage/today but no SDK helper wraps it yet, so we call it via\n * the typed openapi-fetch client directly.\n */\n\nimport { Command } from 'commander'\nimport { runAction, resolveAuth, printJson, suggestSubcommandAndExit } from '../helpers.js'\nimport { label, dim } from '../output.js'\n\nexport function registerUsageCommand(program: Command): void {\n const usage = program.command('usage').description(\"Show today's usage against the daily cap\")\n\n usage\n .command('today')\n .description(\"Today's tokens used / remaining (for the current user)\")\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n // Cast through `unknown` to recover the openapi-fetch result shape —\n // strict overload resolution drops it for some path/op combos.\n const res = (await arbi.fetch.GET('/v1/user/me/usage/today')) as {\n data?: Record<string, unknown>\n error?: unknown\n }\n if (res.error) {\n throw new Error(`Failed to fetch usage: ${JSON.stringify(res.error)}`)\n }\n const data = res.data as Record<string, unknown>\n if (opts.json) {\n printJson(data)\n return\n }\n // Best-effort human render. Fields are forward-compatible: we display\n // whatever the server actually returns, so adding new caps server-side\n // doesn't require a CLI release.\n for (const [k, v] of Object.entries(data)) {\n label(`${k}:`, typeof v === 'object' ? JSON.stringify(v) : String(v))\n }\n dim('\\nPass --json for machine-readable output.')\n })()\n )\n\n // Default action: today, with typo suggestion for unknown subcommands.\n usage\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = usage.args ?? []\n const subcommands = usage.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('usage', firstNonFlag, subcommands)\n }\n await usage.commands.find((c) => c.name() === 'today')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi auth profile [--name <n>] [--family <n>] [--picture <path>]\n * arbi auth change-email <new-email> — request verification code\n * arbi auth confirm-email <code> — confirm the new email\n * arbi auth delete-account — start 30-day deletion timer\n * arbi auth cancel-deletion — cancel an in-flight deletion\n * arbi auth sso-config — show whether the deployment supports SSO\n *\n * Self-service user-account operations. None of these were previously\n * reachable from the CLI — agents that needed to rotate credentials or\n * retire an account had to bounce through the web UI. The endpoints all\n * live under /v1/user/* and are wired via the typed openapi-fetch client.\n */\n\nimport { Command } from 'commander'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { runAction, resolveAuth, printJson, suggestSubcommandAndExit } from '../helpers.js'\nimport { success, error, label, dim } from '../output.js'\n\nexport function registerAuthCommand(program: Command): void {\n const auth = program\n .command('auth')\n .description('Self-service account ops: profile, change-email, delete-account, sso-config')\n\n // ── profile ──────────────────────────────────────────────────────────────\n // /v1/user/profile is PATCH-only — there's no read endpoint that returns\n // the display name pair. To \"show\" the current profile we look at the\n // /v1/user/contacts entry that points at ourselves (which carries\n // given/family/picture); that's the only path that doesn't require a\n // separate user-read endpoint. Falls back to `arbi status` if the user\n // hasn't added themselves as a contact.\n auth\n .command('profile')\n .description('Show or update your display profile (given/family name, picture)')\n .option('--name <given>', 'New given name')\n .option('--family <family>', 'New family name (empty string clears it)')\n .option(\n '--picture <path-or-url>',\n 'Profile picture (local path → base64 inline; URL → stored verbatim)'\n )\n .action((opts: { name?: string; family?: string; picture?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const noUpdates = !opts.name && opts.family === undefined && !opts.picture\n if (noUpdates) {\n // No flags → show whatever the workspace-users list exposes about\n // the current user (the only place the backend surfaces given/\n // family/picture in a single round-trip).\n const myExtId = arbi.session.getState().userExtId\n const res = await arbi.fetch.GET('/v1/workspace/users')\n if (res.error || !res.data) {\n error(\n 'No profile-read endpoint exists. To inspect: arbi status --json or arbi contacts --json'\n )\n process.exit(1)\n }\n const me = (res.data as Array<Record<string, unknown>>).find(\n (u) => u.external_id === myExtId\n )\n const profile = me ?? { external_id: myExtId }\n for (const [k, v] of Object.entries(profile)) {\n label(`${k}:`, typeof v === 'object' ? JSON.stringify(v) : String(v))\n }\n dim('\\nPass --name/--family/--picture to update.')\n return\n }\n\n // Read local picture file → data URL (the backend accepts both URLs\n // and `data:image/...;base64,...` strings).\n let picture = opts.picture\n if (picture && !/^https?:|^data:/.test(picture)) {\n try {\n const bytes = readFileSync(resolve(picture))\n const ext = picture.toLowerCase().split('.').pop()\n const mime = ext === 'png' ? 'image/png' : ext === 'gif' ? 'image/gif' : 'image/jpeg'\n picture = `data:${mime};base64,${bytes.toString('base64')}`\n } catch {\n error(`Cannot read picture file: ${picture}`)\n process.exit(3)\n }\n }\n\n const body: Record<string, string | null> = {}\n if (opts.name !== undefined) body.given_name = opts.name\n if (opts.family !== undefined) body.family_name = opts.family\n if (picture !== undefined) body.picture = picture\n\n const res = await arbi.fetch.PATCH('/v1/user/profile', { body })\n if (res.error) throw new Error(`Profile update failed: ${JSON.stringify(res.error)}`)\n success('Profile updated.')\n })()\n )\n\n // ── change-email ─────────────────────────────────────────────────────────\n auth\n .command('change-email <new-email>')\n .description('Request a verification code for an email change (SSO users update at IdP)')\n .action((newEmail: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const res = await arbi.fetch.POST('/v1/user/request-email-change', {\n body: { new_email: newEmail },\n })\n if (res.error) throw new Error(`request-email-change failed: ${JSON.stringify(res.error)}`)\n success(`Verification code sent to ${newEmail}.`)\n dim(`Confirm with: arbi auth confirm-email <code>`)\n })()\n )\n\n // ── confirm-email ────────────────────────────────────────────────────────\n auth\n .command('confirm-email <code>')\n .description('Confirm an email change with the code from change-email')\n .option('--new-email <email>', 'The new email being confirmed (required)')\n .action((code: string, opts: { newEmail?: string }) =>\n runAction(async () => {\n if (!opts.newEmail) {\n error('Missing --new-email. The new address is required to complete the change.')\n process.exit(1)\n }\n const { arbi } = await resolveAuth()\n const res = await arbi.fetch.POST('/v1/user/confirm-email-change', {\n body: { new_email: opts.newEmail, verification_code: code },\n })\n if (res.error) throw new Error(`confirm-email-change failed: ${JSON.stringify(res.error)}`)\n success(`Email changed to ${opts.newEmail}.`)\n })()\n )\n\n // ── delete-account / cancel-deletion REMOVED ────────────────────────────\n // The /v1/user/request-deletion and /v1/user/cancel-deletion endpoints\n // never landed on the backend. I shipped these commands against schema\n // entries that were either hand-edited or generated against a different\n // backend snapshot. The typecheck on the frontend (DeleteAccountDialog /\n // DeletionPendingBanner) caught it; both surfaces are removed in the same\n // PR. Re-add when the backend ships the endpoints for real.\n\n // ── sso-config ───────────────────────────────────────────────────────────\n // The actual pre-login probe: does this deployment support SSO at all, and\n // which Auth0 tenant? Doesn't need authentication.\n //\n // (We do NOT expose /v1/user/sso-status because that endpoint requires an\n // Auth0 sso_token and only returns useful info AFTER the device-code flow\n // completes — it's an internal step of the SSO login machinery, not a CLI\n // workflow agents would call directly.)\n auth\n .command('sso-config')\n .description('Show SSO config for this deployment (sso_enabled, Auth0 domain, audience)')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n // openapi-fetch's strict overload resolution loses the response shape\n // for some path/op combos (the union doesn't narrow); fall back to a\n // typed accessor so we still get the .data / .error contract.\n const res = (await arbi.fetch.GET('/v1/user/sso-config')) as {\n data?: Record<string, unknown>\n error?: unknown\n }\n if (res.error) throw new Error(`sso-config failed: ${JSON.stringify(res.error)}`)\n if (opts.json) {\n printJson(res.data)\n return\n }\n for (const [k, v] of Object.entries(res.data as Record<string, unknown>)) {\n label(`${k}:`, typeof v === 'object' ? JSON.stringify(v) : String(v))\n }\n dim('\\nTo log in: arbi login --sso -e <email> -p <master-password>')\n dim('(--sso still needs --password — the master password is the E2E key seed.)')\n })()\n )\n\n // Default action: profile show, with typo suggestion for unknown subcommands.\n auth\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = auth.args ?? []\n const subcommands = auth.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('auth', firstNonFlag, subcommands)\n }\n await auth.commands.find((c) => c.name() === 'profile')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * ARBI CLI — entry point\n *\n * Wires all commands into commander and runs.\n */\n\n// Suppress SDK middleware logging (console.debug/info go to stdout in Node.js, polluting piped output)\nconsole.debug = () => {}\nconst _origInfo = console.info\nconsole.info = (...args: unknown[]) => {\n if (typeof args[0] === 'string' && args[0].startsWith('[API]')) return\n _origInfo(...args)\n}\n\nimport { Command } from 'commander'\nimport { getCompletions } from './completion.js'\nimport { registerConfigCommand } from './commands/config-cmd.js'\nimport { registerLoginCommand } from './commands/login.js'\nimport { registerRegisterCommand } from './commands/register.js'\nimport { registerLogoutCommand } from './commands/logout.js'\nimport { registerStatusCommand } from './commands/status.js'\nimport { registerWorkspacesCommand } from './commands/workspaces.js'\nimport { registerDocsCommand } from './commands/docs.js'\nimport { registerUploadCommand } from './commands/upload.js'\nimport { registerDownloadCommand } from './commands/download.js'\nimport { registerAskCommand } from './commands/ask.js'\nimport { registerCiteCommand } from './commands/cite.js'\nimport { registerFindCommand } from './commands/find.js'\nimport { registerWatchCommand } from './commands/watch.js'\nimport { registerContactsCommand } from './commands/contacts.js'\nimport { registerDmCommand } from './commands/dm.js'\nimport { registerTagsCommand } from './commands/tags.js'\nimport { registerDoctagsCommand } from './commands/doctags.js'\nimport { registerConversationsCommand } from './commands/conversations.js'\nimport { registerSettingsCommand } from './commands/settings.js'\nimport { registerAgentconfigCommand } from './commands/agentconfig.js'\nimport { registerHealthCommand } from './commands/health.js'\nimport { registerTuiCommand } from './commands/tui.js'\nimport { registerUpdateCommand } from './commands/update.js'\nimport { registerQuickstartCommand } from './commands/quickstart.js'\nimport { registerAgentCreateCommand } from './commands/agent-create.js'\nimport { registerAgentCommand } from './commands/agent.js'\nimport { registerTaskCommand } from './commands/task.js'\nimport { registerCompletionCommand } from './commands/completion.js'\nimport { registerListenCommand } from './commands/listen.js'\nimport { registerLocalCommand } from './commands/local.js'\nimport { registerSessionCommand } from './commands/session.js'\nimport { registerNotificationsCommand } from './commands/notifications.js'\nimport { registerProjectCommand } from './commands/project.js'\nimport { registerFilesCommand } from './commands/files.js'\nimport { registerUsageCommand } from './commands/usage.js'\nimport { registerAuthCommand } from './commands/auth.js'\n\nconst program = new Command()\n\ndeclare const __CLI_VERSION__: string\n\nprogram\n .name('arbi')\n .description('ARBI CLI — interact with ARBI from the terminal')\n .version(__CLI_VERSION__)\n // Self-correcting CLI: any unknown command / unknown option / missing\n // required argument auto-prints the relevant help screen so an agent\n // can read it and retry without a second round-trip to fetch `--help`.\n .showHelpAfterError(true)\n .showSuggestionAfterError(true)\n\nregisterConfigCommand(program)\nregisterLoginCommand(program)\nregisterRegisterCommand(program)\nregisterLogoutCommand(program)\nregisterStatusCommand(program)\nregisterWorkspacesCommand(program)\nregisterDocsCommand(program)\nregisterUploadCommand(program)\nregisterDownloadCommand(program)\nregisterAskCommand(program)\nregisterCiteCommand(program)\nregisterFindCommand(program)\nregisterWatchCommand(program)\nregisterContactsCommand(program)\nregisterDmCommand(program)\nregisterTagsCommand(program)\nregisterDoctagsCommand(program)\nregisterConversationsCommand(program)\nregisterSettingsCommand(program)\nregisterAgentconfigCommand(program)\nregisterHealthCommand(program)\nregisterTuiCommand(program)\nregisterUpdateCommand(program)\nregisterQuickstartCommand(program)\nregisterAgentCreateCommand(program)\nregisterAgentCommand(program)\nregisterTaskCommand(program)\nregisterCompletionCommand(program)\nregisterListenCommand(program)\nregisterSessionCommand(program)\nregisterLocalCommand(program)\nregisterNotificationsCommand(program)\nregisterProjectCommand(program)\nregisterFilesCommand(program)\nregisterUsageCommand(program)\nregisterAuthCommand(program)\n\n// ── Help-screen grouping ────────────────────────────────────────────────────\n// Commander v14's `helpGroup()` keeps the alphabetical-ish registration order\n// from being the user's first impression. We bucket the 30+ top-level\n// commands by INTENT so an agent searching the help can find the verb they\n// want without `grep --help -A 100`.\napplyHelpGroups(program, {\n 'Getting started:': [\n 'quickstart',\n 'login',\n 'register',\n 'logout',\n 'status',\n 'config',\n 'completion',\n ],\n 'Workspaces:': ['workspaces', 'workspace', 'project'],\n 'Documents:': ['docs', 'doc', 'add', 'upload', 'download'],\n 'Search & ask:': ['ask', 'find', 'cite', 'watch'],\n 'Tagging:': ['tags', 'doctags'],\n 'Conversations & messaging:': ['convo', 'dm', 'listen', 'notifications', 'contacts'],\n 'Agents & tasks:': ['agent', 'agent-create', 'task', 'agentconfig', 'session'],\n 'Account:': ['auth', 'usage', 'files'],\n 'System:': ['health', 'models', 'settings', 'tui', 'local', 'update'],\n})\n\nfunction applyHelpGroups(prog: Command, groups: Record<string, string[]>): void {\n for (const [groupLabel, names] of Object.entries(groups)) {\n for (const name of names) {\n const cmd = prog.commands.find((c) => c.name() === name)\n // Commander 14 ships `helpGroup` on the Command instance; tolerate the\n // method being absent (older shims, type-only stub) without crashing.\n const hg = (cmd as unknown as { helpGroup?: (label: string) => unknown })?.helpGroup\n if (cmd && typeof hg === 'function') {\n hg.call(cmd, groupLabel)\n }\n }\n }\n}\n\n// ── Tab completion (runs after all commands are registered) ─────────────────\nconst completionIdx = process.argv.indexOf('--get-completions')\nif (completionIdx !== -1) {\n const line = process.argv[completionIdx + 1] ?? ''\n const candidates = getCompletions(program, line)\n if (candidates.length > 0) process.stdout.write(candidates.join('\\n') + '\\n')\n process.exit(0)\n}\n\nprogram.parse()\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/prompts.ts","../src/completion-cache.ts","../src/completion.ts","../src/config.ts","../src/output.ts","../src/commands/config-cmd.ts","../../../node_modules/fake-indexeddb/build/esm/lib/errors.js","../../../node_modules/fake-indexeddb/build/esm/lib/isSharedArrayBuffer.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyWithoutThrowing.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cmp.js","../../../node_modules/fake-indexeddb/build/esm/FDBKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractKey.js","../../../node_modules/fake-indexeddb/build/esm/lib/cloneValueForInsertion.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursor.js","../../../node_modules/fake-indexeddb/build/esm/FDBCursorWithValue.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEventTarget.js","../../../node_modules/fake-indexeddb/build/esm/FDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeDOMStringList.js","../../../node_modules/fake-indexeddb/build/esm/lib/valueToKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/getKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/lib/isPotentiallyValidKeyRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/enforceRange.js","../../../node_modules/fake-indexeddb/build/esm/lib/extractGetAllOptions.js","../../../node_modules/fake-indexeddb/build/esm/FDBIndex.js","../../../node_modules/fake-indexeddb/build/esm/lib/canInjectKey.js","../../../node_modules/fake-indexeddb/build/esm/FDBRecord.js","../../../node_modules/fake-indexeddb/build/esm/lib/binarySearchTree.js","../../../node_modules/fake-indexeddb/build/esm/lib/RecordStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/Index.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateKeyPath.js","../../../node_modules/fake-indexeddb/build/esm/FDBObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/FakeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/scheduling.js","../../../node_modules/fake-indexeddb/build/esm/FDBTransaction.js","../../../node_modules/fake-indexeddb/build/esm/lib/KeyGenerator.js","../../../node_modules/fake-indexeddb/build/esm/lib/ObjectStore.js","../../../node_modules/fake-indexeddb/build/esm/lib/closeConnection.js","../../../node_modules/fake-indexeddb/build/esm/FDBDatabase.js","../../../node_modules/fake-indexeddb/build/esm/FDBOpenDBRequest.js","../../../node_modules/fake-indexeddb/build/esm/FDBVersionChangeEvent.js","../../../node_modules/fake-indexeddb/build/esm/lib/intersection.js","../../../node_modules/fake-indexeddb/build/esm/lib/Database.js","../../../node_modules/fake-indexeddb/build/esm/lib/validateRequiredArguments.js","../../../node_modules/fake-indexeddb/build/esm/FDBFactory.js","../../../node_modules/fake-indexeddb/build/esm/fakeIndexedDB.js","../../../node_modules/fake-indexeddb/auto/index.mjs","../src/commands/login.ts","../src/version-check.ts","../src/task-store.ts","../src/notifications.ts","../src/helpers.ts","../src/commands/listen.ts","../src/commands/register.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/commands/workspaces.ts","../src/commands/docs.ts","../src/commands/upload-shared.ts","../src/commands/upload-direct.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/ask.ts","../src/commands/cite.ts","../src/commands/find.ts","../src/commands/watch.ts","../src/commands/contacts.ts","../src/commands/dm.ts","../src/commands/tags.ts","../src/commands/doctags.ts","../src/commands/conversations.ts","../src/commands/settings.ts","../src/commands/agentconfig.ts","../src/commands/health.ts","../src/commands/tui.ts","../src/commands/update.ts","../src/commands/quickstart.ts","../src/commands/agent-create.ts","../src/commands/agent.ts","../src/commands/task.ts","../src/commands/completion.ts","../src/commands/local.ts","../src/commands/session.ts","../src/commands/notifications.ts","../src/commands/project.ts","../src/commands/files.ts","../src/commands/usage.ts","../src/commands/auth.ts","../src/commands/skills.ts","../src/index.ts"],"names":["checkbox","confirm","input","password","search","select","path","os","fs","workspaces","program","FileConfigStore","ArbiError","chalk","join","homedir","existsSync","readFileSync","appendFileSync","error","callback","current","confirmActiveTransaction","rolledBack","store","resolve","db","execSync","ensureDir","status","connectWithReconnect","isMessageType","formatWsMessage","getErrorCode","ArbiApiError","getErrorMessage","coreResolveAuth","coreResolveWorkspace","crypto","dmOps","promptSelect","execFileSync","dirname","fileURLToPath","mkdirSync","writeFileSync","ClaudeOrchestrator","OpenClawOrchestrator","startDmListener","performSigningKeyLogin","performSsoDeviceFlowLogin","performPasswordLogin","formatWorkspaceChoices","createArbiClient","projectOps","generateNewWorkspaceKey","workspaceOps","selectedId","projects","label","isInteractive","generateEncryptedWorkspaceKey","documents","wsLabel","documentsNode","getRawWorkspaceKey","result","connectWebSocket","DOC_TERMINAL_STATUSES","countSupportedFiles","done","responses","assistant","stripCitationMarkdown","streamSSE","formatAgentStepLabel","countCitations","formatStreamSummary","createHash","resolveCitations","truncate","colorize","contactOps","formatUserName","ref","agentOps","data","tagOps","doctagOps","convOps","settingsOps","acOps","healthOps","require","createRequire","spawn","CENTRAL_API_URL","getVerificationCode","timestamp","initSodium","generateLoginCredentials","bytesToBase64","agent","statusColor","getShellRcPath","formatSize","statSync","readdirSync","globSync","basename","sessionOps","filesOps","res","Command"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Interactive prompt helpers using @inquirer/prompts.\n *\n * These are only used in interactive (TTY) flows.\n * AI agents and CI should bypass prompts by passing all values via flags/env vars.\n */\n\nimport { select, input, password, confirm, checkbox, search } from '@inquirer/prompts'\n\nexport { select, input, password, confirm, checkbox, search }\n\n/**\n * Prompt user to pick from a list of items.\n * Returns the value of the selected choice.\n */\nexport async function promptSelect<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return select({ message, choices })\n}\n\n/**\n * Prompt user to pick multiple items from a list.\n * Returns array of selected values.\n */\nexport async function promptCheckbox<T>(\n message: string,\n choices: Array<{ name: string; value: T; checked?: boolean }>\n): Promise<T[]> {\n return checkbox({ message, choices })\n}\n\n/**\n * Prompt user to search and pick from a large list.\n * Type-ahead fuzzy filtering — best for docs (could be hundreds).\n */\nexport async function promptSearch<T>(\n message: string,\n choices: Array<{ name: string; value: T; description?: string }>\n): Promise<T> {\n return search({\n message,\n source: async (term) => {\n if (!term) return choices\n const lower = term.toLowerCase()\n return choices.filter((c) => c.name.toLowerCase().includes(lower))\n },\n })\n}\n\n/**\n * Prompt for text input. Returns trimmed string.\n */\nexport async function promptInput(message: string, required = true): Promise<string> {\n return input({\n message,\n validate: required ? (v) => (v.trim() ? true : 'Required') : undefined,\n })\n}\n\n/**\n * Prompt for a password (masked input).\n */\nexport async function promptPassword(message: string): Promise<string> {\n return password({\n message,\n mask: '*',\n validate: (v) => (v ? true : 'Required'),\n })\n}\n\n/**\n * Prompt for yes/no confirmation.\n */\nexport async function promptConfirm(message: string, defaultValue = true): Promise<boolean> {\n return confirm({ message, default: defaultValue })\n}\n","/**\n * Completion cache — stores workspace IDs/names in ~/.arbi/completions.json.\n *\n * Populated as a side-effect of commands that list workspaces (login, register, workspaces).\n * Read synchronously during TAB completion for instant response.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport interface CachedWorkspace {\n id: string\n name: string\n}\n\ninterface CompletionCache {\n workspaces: CachedWorkspace[]\n updatedAt: string\n}\n\nfunction getCacheFile(): string {\n const configDir = process.env.ARBI_CONFIG_DIR ?? path.join(os.homedir(), '.arbi')\n return path.join(configDir, 'completions.json')\n}\n\nfunction ensureDir(filePath: string): void {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n}\n\n/** Read cached workspace IDs (sync for TAB completion speed). */\nexport function getCachedWorkspaceIds(): string[] {\n try {\n const content = fs.readFileSync(getCacheFile(), 'utf-8')\n const cache = JSON.parse(content) as CompletionCache\n return cache.workspaces.map((w) => w.id)\n } catch {\n return []\n }\n}\n\n/**\n * Look up a workspace's name in the completion cache by ID. Used by\n * `arbi status` to render `Workspace: <Name> (wrk-…)` without an API\n * round-trip — `status` is offline by contract.\n */\nexport function getCachedWorkspaceName(id: string): string | null {\n try {\n const content = fs.readFileSync(getCacheFile(), 'utf-8')\n const cache = JSON.parse(content) as CompletionCache\n const hit = cache.workspaces.find((w) => w.id === id)\n return hit?.name?.trim() ? hit.name : null\n } catch {\n return null\n }\n}\n\n/** Update the completion cache with workspace data. */\nexport function updateCompletionCache(\n workspaces: Array<{ external_id?: string; name?: string }>\n): void {\n const cache: CompletionCache = {\n workspaces: workspaces\n .filter((w) => w.external_id)\n .map((w) => ({ id: w.external_id!, name: w.name ?? '' })),\n updatedAt: new Date().toISOString(),\n }\n const filePath = getCacheFile()\n ensureDir(filePath)\n fs.writeFileSync(filePath, JSON.stringify(cache, null, 2) + '\\n', { mode: 0o600 })\n}\n","/**\n * Shell completion engine — walks the Commander program tree dynamically.\n *\n * Called via `arbi --get-completions \"<line>\"`. Derives all candidates from\n * the live Commander registrations, so new commands/options are automatically\n * available without maintaining a static registry.\n */\n\nimport type { Command, Option } from 'commander'\nimport { getCachedWorkspaceIds } from './completion-cache.js'\n\n/** Options that take a workspace ID as their value. */\nconst WORKSPACE_ID_OPTIONS = new Set(['-w', '--workspace'])\n\n/** Collect option flags (short + long) from a Command. */\nfunction getOptionFlags(cmd: Command): string[] {\n const flags: string[] = []\n for (const opt of cmd.options as Option[]) {\n if (opt.short) flags.push(opt.short)\n if (opt.long) flags.push(opt.long)\n }\n return flags\n}\n\n/** Find the Option object that matches a given flag. */\nfunction findOption(cmd: Command, flag: string): Option | undefined {\n return (cmd.options as Option[]).find((o) => o.short === flag || o.long === flag)\n}\n\n/**\n * Return completion candidates for the given input line.\n * Walks the Commander command tree — no static registries needed.\n */\nexport function getCompletions(program: Command, line: string): string[] {\n const parts = line.trim().split(/\\s+/)\n\n // Remove the program name (e.g. \"arbi\" or \"/usr/local/bin/arbi\")\n if (parts.length > 0) {\n const first = parts[0]\n if (first === program.name() || first.endsWith('/' + program.name())) {\n parts.shift()\n }\n }\n\n const endsWithSpace = line.endsWith(' ')\n\n // Walk the command tree to find the deepest matching command\n let current: Command = program\n let consumed = 0\n\n for (let i = 0; i < parts.length; i++) {\n const word = parts[i]\n const sub = current.commands.find(\n (c: Command) => c.name() === word || c.aliases().includes(word)\n )\n if (sub) {\n current = sub\n consumed = i + 1\n } else {\n break\n }\n }\n\n const remaining = parts.slice(consumed)\n const lastWord = remaining.length > 0 ? remaining[remaining.length - 1] : ''\n\n // Check if the previous completed word is a workspace ID option\n const prevWord = endsWithSpace ? remaining[remaining.length - 1] : remaining[remaining.length - 2]\n if (prevWord && WORKSPACE_ID_OPTIONS.has(prevWord)) {\n return getCachedWorkspaceIds()\n }\n\n // Gather candidates: subcommands + option flags\n const subcommands = current.commands.map((c: Command) => c.name())\n const options = getOptionFlags(current)\n const allCandidates = [...subcommands, ...options]\n\n // Nothing typed yet after current command, or cursor is after a space\n if (remaining.length === 0 || (endsWithSpace && remaining.length >= 0)) {\n if (endsWithSpace) {\n // Filter out already-used options (and their short/long pairs)\n const used = new Set<string>()\n for (const part of remaining) {\n if (part.startsWith('-')) {\n used.add(part)\n const opt = findOption(current, part)\n if (opt) {\n if (opt.short) used.add(opt.short)\n if (opt.long) used.add(opt.long)\n }\n }\n }\n return allCandidates.filter((c) => !used.has(c))\n }\n return allCandidates\n }\n\n // Partial word being typed — filter candidates by prefix\n return allCandidates.filter((c) => c.startsWith(lastWord))\n}\n","/**\n * CLI configuration persistence — thin wrapper around @arbidocs/sdk FileConfigStore.\n *\n * Provides module-level functions that delegate to the shared store instance.\n * The `require*` methods catch ArbiError and call process.exit(1) for CLI behavior.\n */\n\nimport chalk from 'chalk'\nimport { FileConfigStore, ArbiError } from '@arbidocs/sdk'\nimport type { CliConfig, CliCredentials, ChatSession } from '@arbidocs/sdk'\n\nexport type { CliConfig, CliCredentials, ChatSession }\n\n/** Shared store instance used by all CLI commands */\nexport const store = new FileConfigStore()\n\n// ── Config ───────────────────────────────────────────────────────────────────\n\nexport function getConfig(): CliConfig | null {\n return store.getConfig()\n}\n\nexport function saveConfig(config: CliConfig): void {\n store.saveConfig(config)\n}\n\nexport function updateConfig(updates: Partial<CliConfig>): void {\n store.updateConfig(updates)\n}\n\nexport function requireConfig(): CliConfig {\n try {\n return store.requireConfig()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n/**\n * Resolve config with auto-detection fallbacks.\n * Tries: config file → ARBI_SERVER_URL env → .env → public/config.json → https://localhost.\n * Prints a dim hint when auto-detecting so the user knows where config came from.\n */\nexport function resolveConfig(): CliConfig {\n const { config, source } = store.resolveConfigWithFallbacks()\n if (source !== 'config') {\n // Use stderr to avoid polluting piped output\n console.error(chalk.dim(`Using server URL from ${source}: ${config.baseUrl}`))\n }\n return config\n}\n\n// ── Credentials ──────────────────────────────────────────────────────────────\n\nexport function getCredentials(): CliCredentials | null {\n return store.getCredentials()\n}\n\nexport function saveCredentials(creds: CliCredentials): void {\n store.saveCredentials(creds)\n}\n\nexport function deleteCredentials(): void {\n store.deleteCredentials()\n}\n\nexport function requireCredentials(): CliCredentials {\n try {\n return store.requireCredentials()\n } catch (err) {\n if (err instanceof ArbiError) {\n console.error(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── Last metadata (citation browsing) ────────────────────────────────────────\n\nexport function saveLastMetadata(metadata: unknown): void {\n store.saveLastMetadata?.(metadata)\n}\n\nexport function loadLastMetadata(): unknown | null {\n return store.loadLastMetadata?.() ?? null\n}\n\n// ── Chat session ─────────────────────────────────────────────────────────────\n\nexport function getChatSession(): ChatSession {\n return store.getChatSession()\n}\n\nexport function saveChatSession(session: ChatSession): void {\n store.saveChatSession(session)\n}\n\nexport function updateChatSession(updates: Partial<ChatSession>): void {\n store.updateChatSession(updates)\n}\n\nexport function clearChatSession(): void {\n store.clearChatSession()\n}\n","/**\n * Colored CLI output helpers — wraps chalk for consistent styling.\n *\n * Success = green, errors = red, warnings = yellow,\n * labels = bold, tips = dim.\n */\n\nimport chalk from 'chalk'\n\n/** Green success message. */\nexport function success(msg: string): void {\n console.log(chalk.green(msg))\n}\n\n/** Red error message to stderr. */\nexport function error(msg: string): void {\n console.error(chalk.red(msg))\n}\n\n/** Yellow warning to stderr. */\nexport function warn(msg: string): void {\n console.error(chalk.yellow(msg))\n}\n\n/** Bold key + normal value on one line. */\nexport function label(key: string, value: string): void {\n console.log(`${chalk.bold(key)} ${value}`)\n}\n\n/** Dim secondary text (tips, hints). */\nexport function dim(msg: string): void {\n console.log(chalk.dim(msg))\n}\n\n/** Bold text. */\nexport function bold(msg: string): void {\n console.log(chalk.bold(msg))\n}\n\n/** Colorize a status word inline: green=healthy/completed/online, red=failed/error, yellow=processing. */\nexport function status(s: string): string {\n const lower = s.toLowerCase()\n if (['healthy', 'completed', 'available', 'online', 'on'].includes(lower)) return chalk.green(s)\n if (['failed', 'error', 'unavailable', 'offline'].includes(lower)) return chalk.red(s)\n if (['processing', 'pending', 'degraded', 'warning'].includes(lower)) return chalk.yellow(s)\n return s\n}\n\n/** Cyan for IDs, URLs, and other reference values. */\nexport function ref(s: string): string {\n return chalk.cyan(s)\n}\n\nexport { chalk }\n","/**\n * arbi config set-url <url>\n * arbi config show\n * arbi config alias\n */\n\nimport { existsSync, readFileSync, appendFileSync } from 'fs'\nimport { homedir } from 'os'\nimport { join } from 'path'\nimport { Command } from 'commander'\nimport { getConfig, updateConfig } from '../config.js'\nimport { success, error, label, dim } from '../output.js'\n\nconst ALIAS_LINE = 'alias A=\"arbi ask\"'\nconst ALIAS_MARKER = '# arbi-cli alias'\n\nfunction getShellRcPath(): string {\n const shell = process.env.SHELL || ''\n if (shell.includes('zsh')) return join(homedir(), '.zshrc')\n return join(homedir(), '.bashrc')\n}\n\nfunction isAliasInstalled(rcPath: string): boolean {\n if (!existsSync(rcPath)) return false\n const content = readFileSync(rcPath, 'utf-8')\n return content.includes(ALIAS_LINE) || content.includes(ALIAS_MARKER)\n}\n\nexport function registerConfigCommand(program: Command): void {\n const config = program\n .command('config')\n .description('CLI configuration: set-url, show, notifications, verbose, watch, alias')\n\n config\n .command('set-url <url>')\n .description('Set the ARBI server URL')\n .action((url: string) => {\n try {\n const parsed = new URL(url)\n const deploymentDomain = parsed.hostname\n updateConfig({ baseUrl: url.replace(/\\/+$/, ''), deploymentDomain })\n label('Server URL:', url)\n label('Domain:', deploymentDomain)\n } catch {\n error(`Invalid URL: ${url}`)\n process.exit(1)\n }\n })\n\n config\n .command('show')\n .description('Show current configuration')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) => {\n const cfg = getConfig()\n if (opts.json) {\n // Project the same fields the plain view shows, so an agent piping\n // `arbi config show --json` doesn't have to learn a second schema.\n // Previously plain showed Verbose/Watch but JSON omitted them, and\n // JSON exposed `orchestrator` that plain never mentioned. Now both\n // surfaces agree.\n const projection = cfg\n ? {\n baseUrl: cfg.baseUrl ?? null,\n deploymentDomain: cfg.deploymentDomain ?? null,\n autoUpdate: cfg.autoUpdate ?? false,\n verbose: cfg.verbose !== false,\n watch: cfg.watch !== false,\n notifications: cfg.notifications !== false,\n orchestrator: cfg.orchestrator ?? null,\n selectedWorkspaceId: cfg.selectedWorkspaceId ?? null,\n }\n : {}\n console.log(JSON.stringify(projection, null, 2))\n return\n }\n if (!cfg) {\n dim('Not configured. Run: arbi config set-url <url>')\n return\n }\n label('Server URL:', cfg.baseUrl)\n label('Domain:', cfg.deploymentDomain)\n label('Auto-update:', cfg.autoUpdate ? 'on' : 'off')\n label('Verbose:', cfg.verbose !== false ? 'on' : 'off')\n label('Watch:', cfg.watch !== false ? 'on' : 'off')\n label('Notifications:', cfg.notifications !== false ? 'on' : 'off')\n // Surface orchestrator in plain output too — it's the only setting that\n // was hidden from humans but visible to scripts.\n if (cfg.orchestrator) label('Orchestrator:', cfg.orchestrator)\n if (cfg.selectedWorkspaceId) {\n label('Workspace:', cfg.selectedWorkspaceId)\n }\n })\n\n config\n .command('notifications [on|off]')\n .description('Toggle background WebSocket notifications')\n .action((toggle?: string) => {\n const cfg = getConfig()\n if (!toggle) {\n label('Notifications:', cfg?.notifications !== false ? 'on' : 'off')\n return\n }\n if (toggle !== 'on' && toggle !== 'off') {\n error('Usage: arbi config notifications [on|off]')\n process.exit(1)\n }\n updateConfig({ notifications: toggle === 'on' })\n success(`Notifications: ${toggle}`)\n })\n\n config\n .command('verbose [on|off]')\n .description('Toggle verbose agent steps in ask (default: on)')\n .action((toggle?: string) => {\n const cfg = getConfig()\n if (!toggle) {\n label('Verbose:', cfg?.verbose !== false ? 'on' : 'off')\n return\n }\n if (toggle !== 'on' && toggle !== 'off') {\n error('Usage: arbi config verbose [on|off]')\n process.exit(1)\n }\n updateConfig({ verbose: toggle === 'on' })\n success(`Verbose: ${toggle}`)\n })\n\n config\n .command('watch [on|off]')\n .description('Toggle upload watch (default: on)')\n .action((toggle?: string) => {\n const cfg = getConfig()\n if (!toggle) {\n label('Watch:', cfg?.watch !== false ? 'on' : 'off')\n return\n }\n if (toggle !== 'on' && toggle !== 'off') {\n error('Usage: arbi config watch [on|off]')\n process.exit(1)\n }\n updateConfig({ watch: toggle === 'on' })\n success(`Watch: ${toggle}`)\n })\n\n config\n .command('alias')\n .description('Append `alias A=\"arbi ask\"` to your shell rc file (idempotent, reversible)')\n .action(() => {\n const rcPath = getShellRcPath()\n\n if (isAliasInstalled(rcPath)) {\n success(`Alias already set up in ${rcPath}`)\n dim('Usage: A what is the meaning of life')\n return\n }\n\n appendFileSync(rcPath, `\\n${ALIAS_MARKER}\\n${ALIAS_LINE}\\n`)\n success(`Added alias A=\"arbi ask\" to ${rcPath}`)\n dim('')\n dim(`Run: source ${rcPath}`)\n dim('Then: A what is the meaning of life')\n })\n}\n","const messages = {\n AbortError: \"A request was aborted, for example through a call to IDBTransaction.abort.\",\n ConstraintError: \"A mutation operation in the transaction failed because a constraint was not satisfied. For example, an object such as an object store or index already exists and a request attempted to create a new one.\",\n DataCloneError: \"The data being stored could not be cloned by the internal structured cloning algorithm.\",\n DataError: \"Data provided to an operation does not meet requirements.\",\n InvalidAccessError: \"An invalid operation was performed on an object. For example transaction creation attempt was made, but an empty scope was provided.\",\n InvalidStateError: \"An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.\",\n NotFoundError: \"The operation failed because the requested database object could not be found. For example, an object store did not exist but was being opened.\",\n ReadOnlyError: 'The mutating operation was attempted in a \"readonly\" transaction.',\n TransactionInactiveError: \"A request was placed against a transaction which is currently not active, or which is finished.\",\n SyntaxError: \"The keypath argument contains an invalid key path\",\n VersionError: \"An attempt was made to open a database using a lower version than the existing version.\"\n};\n\n// Cannot set an error code on an error using the normal setter;\n// this leads to \"Cannot set property code of which has only a getter\"\nconst setErrorCode = (error, value) => {\n Object.defineProperty(error, 'code', {\n value,\n writable: false,\n enumerable: true,\n configurable: false\n });\n};\nexport class AbortError extends DOMException {\n constructor(message = messages.AbortError) {\n super(message, \"AbortError\");\n }\n}\nexport class ConstraintError extends DOMException {\n constructor(message = messages.ConstraintError) {\n super(message, \"ConstraintError\");\n }\n}\nexport class DataCloneError extends DOMException {\n constructor(message = messages.DataCloneError) {\n super(message, \"DataCloneError\");\n }\n}\nexport class DataError extends DOMException {\n constructor(message = messages.DataError) {\n super(message, \"DataError\");\n setErrorCode(this, 0);\n }\n}\nexport class InvalidAccessError extends DOMException {\n constructor(message = messages.InvalidAccessError) {\n super(message, \"InvalidAccessError\");\n }\n}\nexport class InvalidStateError extends DOMException {\n constructor(message = messages.InvalidStateError) {\n super(message, \"InvalidStateError\");\n setErrorCode(this, 11);\n }\n}\nexport class NotFoundError extends DOMException {\n constructor(message = messages.NotFoundError) {\n super(message, \"NotFoundError\");\n }\n}\nexport class ReadOnlyError extends DOMException {\n constructor(message = messages.ReadOnlyError) {\n super(message, \"ReadOnlyError\");\n }\n}\nexport class SyntaxError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"SyntaxError\");\n setErrorCode(this, 12);\n }\n}\nexport class TransactionInactiveError extends DOMException {\n constructor(message = messages.TransactionInactiveError) {\n super(message, \"TransactionInactiveError\");\n setErrorCode(this, 0);\n }\n}\nexport class VersionError extends DOMException {\n constructor(message = messages.VersionError) {\n super(message, \"VersionError\");\n }\n}","export default function isSharedArrayBuffer(input) {\n return typeof SharedArrayBuffer !== \"undefined\" && input instanceof SharedArrayBuffer;\n}","import isSharedArrayBuffer from \"./isSharedArrayBuffer.js\";\nexport const INVALID_TYPE = Symbol(\"INVALID_TYPE\");\nexport const INVALID_VALUE = Symbol(\"INVALID_VALUE\");\n\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// The \"without exceptions\" version is because we typically want to throw exceptions (DataError) but not for\n// the \"is potentially valid key range\" routine.\nconst valueToKeyWithoutThrowing = (input, seen) => {\n if (typeof input === \"number\") {\n if (isNaN(input)) {\n // If input is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return input;\n } else if (Object.prototype.toString.call(input) === \"[object Date]\") {\n const ms = input.valueOf();\n if (isNaN(ms)) {\n // If ms is NaN then return \"invalid value\".\n return INVALID_VALUE;\n }\n return new Date(ms);\n } else if (typeof input === \"string\") {\n return input;\n } else if (\n // https://w3c.github.io/IndexedDB/#ref-for-dfn-buffer-source-type\n input instanceof ArrayBuffer || isSharedArrayBuffer(input) || typeof ArrayBuffer !== \"undefined\" && ArrayBuffer.isView && ArrayBuffer.isView(input)) {\n // We can't consistently test detachedness, so instead we check if byteLength === 0\n // This isn't foolproof, but there's no perfect way to detect if Uint8Arrays or\n // SharedArrayBuffers are detached\n if (\"detached\" in input ? input.detached : input.byteLength === 0) {\n // If input is detached then return \"invalid value\".\n return INVALID_VALUE;\n }\n let arrayBuffer;\n let offset = 0;\n let length = 0;\n if (input instanceof ArrayBuffer || isSharedArrayBuffer(input)) {\n arrayBuffer = input;\n length = input.byteLength;\n } else {\n arrayBuffer = input.buffer;\n offset = input.byteOffset;\n length = input.byteLength;\n }\n return arrayBuffer.slice(offset, offset + length);\n } else if (Array.isArray(input)) {\n if (seen === undefined) {\n seen = new Set();\n } else if (seen.has(input)) {\n // If seen contains input, then return \"invalid value\".\n return INVALID_VALUE;\n }\n seen.add(input);\n\n // This algorithm is tricky to account for `bindings-inject-keys-bypass.any.js`. We _should_ return early when\n // encountering an invalid key/type, but we also need to avoid triggering `Object.prototype['10']` if it's been\n // overridden. One simple way to do this (and which doesn't rely on sparse arrays or other exotic solutions that\n // could cause de-opts) is to use `Array.from()` with a mapper function, which does not trigger the prototype\n // setter [1]. It does prevent an early return, but we can at least short-circuit inside the mapper function\n // (which isn't strictly necessary to pass the WPTs, but is closer to the spec).\n // [1]: See https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.from, specifically\n // the chain CreateDataPropertyOrThrow -> CreateDataProperty -> DefineOwnProperty which defines\n // the array element as an \"own\" property.\n let hasInvalid = false;\n const keys = Array.from({\n length: input.length\n }, (_, i) => {\n if (hasInvalid) {\n return;\n }\n const hop = Object.hasOwn(input, i);\n if (!hop) {\n // If hop is false, return \"invalid value\".\n hasInvalid = true;\n return;\n }\n const entry = input[i];\n const key = valueToKeyWithoutThrowing(entry, seen);\n // If key is \"invalid value\" or \"invalid type\" abort these steps and return \"invalid value\".\n if (key === INVALID_VALUE || key === INVALID_TYPE) {\n hasInvalid = true;\n return;\n }\n return key;\n });\n if (hasInvalid) {\n return INVALID_VALUE;\n }\n return keys;\n } else {\n // Otherwise: Return \"invalid type\".\n return INVALID_TYPE;\n }\n};\nexport default valueToKeyWithoutThrowing;","import { DataError } from \"./errors.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE, INVALID_VALUE } from \"./valueToKeyWithoutThrowing.js\";\n// https://w3c.github.io/IndexedDB/#convert-value-to-key\n// Plus throwing a DataError for invalid value/invalid key, which is commonly done\n// in lots of IndexedDB operations\nconst valueToKey = (input, seen) => {\n const result = valueToKeyWithoutThrowing(input, seen);\n if (result === INVALID_VALUE || result === INVALID_TYPE) {\n // If key is \"invalid value\" or \"invalid type\", throw a \"DataError\" DOMException\n throw new DataError();\n }\n return result;\n};\nexport default valueToKey;","import { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\nconst getType = x => {\n if (typeof x === \"number\") {\n return \"Number\";\n }\n if (Object.prototype.toString.call(x) === \"[object Date]\") {\n return \"Date\";\n }\n if (Array.isArray(x)) {\n return \"Array\";\n }\n if (typeof x === \"string\") {\n return \"String\";\n }\n if (x instanceof ArrayBuffer) {\n return \"Binary\";\n }\n throw new DataError();\n};\n\n// https://w3c.github.io/IndexedDB/#compare-two-keys\nconst cmp = (first, second) => {\n if (second === undefined) {\n throw new TypeError();\n }\n first = valueToKey(first);\n second = valueToKey(second);\n const t1 = getType(first);\n const t2 = getType(second);\n if (t1 !== t2) {\n if (t1 === \"Array\") {\n return 1;\n }\n if (t1 === \"Binary\" && (t2 === \"String\" || t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"String\" && (t2 === \"Date\" || t2 === \"Number\")) {\n return 1;\n }\n if (t1 === \"Date\" && t2 === \"Number\") {\n return 1;\n }\n return -1;\n }\n if (t1 === \"Binary\") {\n first = new Uint8Array(first);\n second = new Uint8Array(second);\n }\n if (t1 === \"Array\" || t1 === \"Binary\") {\n const length = Math.min(first.length, second.length);\n for (let i = 0; i < length; i++) {\n const result = cmp(first[i], second[i]);\n if (result !== 0) {\n return result;\n }\n }\n if (first.length > second.length) {\n return 1;\n }\n if (first.length < second.length) {\n return -1;\n }\n return 0;\n }\n if (t1 === \"Date\") {\n if (first.getTime() === second.getTime()) {\n return 0;\n }\n } else {\n if (first === second) {\n return 0;\n }\n }\n return first > second ? 1 : -1;\n};\nexport default cmp;","import cmp from \"./lib/cmp.js\";\nimport { DataError } from \"./lib/errors.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#range-concept\nclass FDBKeyRange {\n static only(value) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n value = valueToKey(value);\n return new FDBKeyRange(value, value, false, false);\n }\n static lowerBound(lower, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n lower = valueToKey(lower);\n return new FDBKeyRange(lower, undefined, open, true);\n }\n static upperBound(upper, open = false) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n upper = valueToKey(upper);\n return new FDBKeyRange(undefined, upper, true, open);\n }\n static bound(lower, upper, lowerOpen = false, upperOpen = false) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const cmpResult = cmp(lower, upper);\n if (cmpResult === 1 || cmpResult === 0 && (lowerOpen || upperOpen)) {\n throw new DataError();\n }\n lower = valueToKey(lower);\n upper = valueToKey(upper);\n return new FDBKeyRange(lower, upper, lowerOpen, upperOpen);\n }\n constructor(lower, upper, lowerOpen, upperOpen) {\n this.lower = lower;\n this.upper = upper;\n this.lowerOpen = lowerOpen;\n this.upperOpen = upperOpen;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbkeyrange-includes\n includes(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n key = valueToKey(key);\n if (this.lower !== undefined) {\n const cmpResult = cmp(this.lower, key);\n if (cmpResult === 1 || cmpResult === 0 && this.lowerOpen) {\n return false;\n }\n }\n if (this.upper !== undefined) {\n const cmpResult = cmp(this.upper, key);\n if (cmpResult === -1 || cmpResult === 0 && this.upperOpen) {\n return false;\n }\n }\n return true;\n }\n get [Symbol.toStringTag]() {\n return \"IDBKeyRange\";\n }\n}\nexport default FDBKeyRange;","import valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-extracting-a-key-from-a-value-using-a-key-path\nconst extractKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n const result = [];\n for (let item of keyPath) {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in validateKeyPath)\n if (item !== undefined && item !== null && typeof item !== \"string\" && item.toString) {\n item = item.toString();\n }\n const key = extractKey(item, value).key;\n result.push(valueToKey(key));\n }\n return {\n type: \"found\",\n key: result\n };\n }\n if (keyPath === \"\") {\n return {\n type: \"found\",\n key: value\n };\n }\n let remainingKeyPath = keyPath;\n let object = value;\n while (remainingKeyPath !== null) {\n let identifier;\n const i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n } else {\n identifier = remainingKeyPath;\n remainingKeyPath = null;\n }\n\n // special cases: https://w3c.github.io/IndexedDB/#evaluate-a-key-path-on-a-value\n const isSpecialIdentifier = identifier === \"length\" && (typeof object === \"string\" || Array.isArray(object)) || (identifier === \"size\" || identifier === \"type\") && typeof Blob !== \"undefined\" && object instanceof Blob || (identifier === \"name\" || identifier === \"lastModified\") && typeof File !== \"undefined\" && object instanceof File;\n if (!isSpecialIdentifier && (typeof object !== \"object\" || object === null || !Object.hasOwn(object, identifier))) {\n return {\n type: \"notFound\"\n };\n }\n object = object[identifier];\n }\n return {\n type: \"found\",\n key: object\n };\n};\nexport default extractKey;","// https://w3c.github.io/IndexedDB/#clone-value\n// Note that we only need to call this during insertions because the spec does not expect any cloning during retrieval,\n// only `StructuredDeserialize()` (e.g. see [1]). This is also only required for values, not keys, since keys do not\n// require cloning during insertion (e.g. see [2]).\n// [1]: https://w3c.github.io/IndexedDB/#retrieve-multiple-items-from-an-object-store\n// [2]: https://w3c.github.io/IndexedDB/#add-or-put\nexport function cloneValueForInsertion(value, transaction) {\n // Assert: transaction’s state is active.\n if (transaction._state !== \"active\") {\n throw new Error(\"Assert: transaction state is active\");\n }\n\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n try {\n // Let serialized be StructuredSerializeForStorage(value).\n // Let clone be ? StructuredDeserialize(serialized, targetRealm).\n // Return clone.\n return structuredClone(value);\n } finally {\n // Set transaction’s state to active.\n transaction._state = \"active\";\n }\n}","import FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBObjectStore from \"./FDBObjectStore.js\";\nimport cmp from \"./lib/cmp.js\";\nimport { DataError, InvalidAccessError, InvalidStateError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst getEffectiveObjectStore = cursor => {\n if (cursor.source instanceof FDBObjectStore) {\n return cursor.source;\n }\n return cursor.source.objectStore;\n};\n\n// This takes a key range, a list of lower bounds, and a list of upper bounds and combines them all into a single key\n// range. It does not handle gt/gte distinctions, because it doesn't really matter much anyway, since for next/prev\n// cursor iteration it'd also have to look at values to be precise, which would be complicated. This should get us 99%\n// of the way there.\nconst makeKeyRange = (range, lowers, uppers) => {\n // Start with bounds from range\n let lower = range !== undefined ? range.lower : undefined;\n let upper = range !== undefined ? range.upper : undefined;\n\n // Augment with values from lowers and uppers\n for (const lowerTemp of lowers) {\n if (lowerTemp === undefined) {\n continue;\n }\n if (lower === undefined || cmp(lower, lowerTemp) === 1) {\n lower = lowerTemp;\n }\n }\n for (const upperTemp of uppers) {\n if (upperTemp === undefined) {\n continue;\n }\n if (upper === undefined || cmp(upper, upperTemp) === -1) {\n upper = upperTemp;\n }\n }\n if (lower !== undefined && upper !== undefined) {\n return FDBKeyRange.bound(lower, upper);\n }\n if (lower !== undefined) {\n return FDBKeyRange.lowerBound(lower);\n }\n if (upper !== undefined) {\n return FDBKeyRange.upperBound(upper);\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#cursor\nclass FDBCursor {\n _gotValue = false;\n _position = undefined; // Key of previously returned record\n _objectStorePosition = undefined;\n _keyOnly = false;\n _key = undefined;\n _primaryKey = undefined;\n constructor(source, range, direction = \"next\", request, keyOnly = false) {\n this._range = range;\n this._source = source;\n this._direction = direction;\n this._request = request;\n this._keyOnly = keyOnly;\n }\n\n // Read only properties\n get source() {\n return this._source;\n }\n set source(val) {\n /* For babel */\n }\n get request() {\n return this._request;\n }\n set request(val) {\n /* For babel */\n }\n get direction() {\n return this._direction;\n }\n set direction(val) {\n /* For babel */\n }\n get key() {\n return this._key;\n }\n set key(val) {\n /* For babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(val) {\n /* For babel */\n }\n\n // https://w3c.github.io/IndexedDB/#iterate-a-cursor\n _iterate(key, primaryKey) {\n const sourceIsObjectStore = this.source instanceof FDBObjectStore;\n\n // Can't use sourceIsObjectStore because TypeScript\n const records = this.source instanceof FDBObjectStore ? this.source._rawObjectStore.records : this.source._rawIndex.records;\n let foundRecord;\n if (this.direction === \"next\") {\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === -1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === -1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== 1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === -1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"nextunique\") {\n // This could be done without iterating, if the range was defined slightly better (to handle gt/gte cases).\n // But the performance difference should be small, and that wouldn't work anyway for directions where the\n // value needs to be used (like next and prev).\n const range = makeKeyRange(this._range, [key, this._position], []);\n for (const record of records.values(range)) {\n if (key !== undefined) {\n if (cmp(record.key, key) === -1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== 1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prev\") {\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n const cmpResultKey = key !== undefined ? cmp(record.key, key) : undefined;\n const cmpResultPosition = this._position !== undefined ? cmp(record.key, this._position) : undefined;\n if (key !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n }\n if (primaryKey !== undefined) {\n if (cmpResultKey === 1) {\n continue;\n }\n const cmpResultPrimaryKey = cmp(record.value, primaryKey);\n if (cmpResultKey === 0 && cmpResultPrimaryKey === 1) {\n continue;\n }\n }\n if (this._position !== undefined && sourceIsObjectStore) {\n if (cmpResultPosition !== -1) {\n continue;\n }\n }\n if (this._position !== undefined && !sourceIsObjectStore) {\n if (cmpResultPosition === 1) {\n continue;\n }\n if (cmpResultPosition === 0 && cmp(record.value, this._objectStorePosition) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n foundRecord = record;\n break;\n }\n } else if (this.direction === \"prevunique\") {\n let tempRecord;\n const range = makeKeyRange(this._range, [], [key, this._position]);\n for (const record of records.values(range, \"prev\")) {\n if (key !== undefined) {\n if (cmp(record.key, key) === 1) {\n continue;\n }\n }\n if (this._position !== undefined) {\n if (cmp(record.key, this._position) !== -1) {\n continue;\n }\n }\n if (this._range !== undefined) {\n if (!this._range.includes(record.key)) {\n continue;\n }\n }\n tempRecord = record;\n break;\n }\n if (tempRecord) {\n foundRecord = records.get(tempRecord.key);\n }\n }\n let result;\n if (!foundRecord) {\n this._key = undefined;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = undefined;\n }\n\n // \"this instanceof FDBCursorWithValue\" would be better and not require (this as any), but causes runtime\n // error due to circular dependency.\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = undefined;\n }\n result = null;\n } else {\n this._position = foundRecord.key;\n if (!sourceIsObjectStore) {\n this._objectStorePosition = foundRecord.value;\n }\n this._key = foundRecord.key;\n if (sourceIsObjectStore) {\n this._primaryKey = structuredClone(foundRecord.key);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n this.value = structuredClone(foundRecord.value);\n }\n } else {\n this._primaryKey = structuredClone(foundRecord.value);\n if (!this._keyOnly && this.toString() === \"[object IDBCursorWithValue]\") {\n if (this.source instanceof FDBObjectStore) {\n // Can't use sourceIsObjectStore because TypeScript\n throw new Error(\"This should never happen\");\n }\n const value = this.source.objectStore._rawObjectStore.getValue(foundRecord.value);\n this.value = structuredClone(value);\n }\n }\n this._gotValue = true;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n result = this;\n }\n return result;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-update-IDBRequest-any-value\n update(value) {\n if (value === undefined) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n const clone = cloneValueForInsertion(value, transaction);\n if (effectiveObjectStore.keyPath !== null) {\n let tempKey;\n try {\n tempKey = extractKey(effectiveObjectStore.keyPath, clone).key;\n } catch (err) {\n /* Handled immediately below */\n }\n if (cmp(tempKey, effectiveKey) !== 0) {\n throw new DataError();\n }\n }\n const record = {\n key: effectiveKey,\n value: clone\n };\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.storeRecord.bind(effectiveObjectStore._rawObjectStore, record, false, transaction._rollbackLog),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-advance-void-unsigned-long-count\n advance(count) {\n if (!Number.isInteger(count) || count <= 0) {\n throw new TypeError();\n }\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: () => {\n let result;\n for (let i = 0; i < count; i++) {\n result = this._iterate();\n\n // Not sure why this is needed\n if (!result) {\n break;\n }\n }\n return result;\n },\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBCursor-continue-void-any-key\n continue(key) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult <= 0 && (this.direction === \"next\" || this.direction === \"nextunique\") || cmpResult >= 0 && (this.direction === \"prev\" || this.direction === \"prevunique\")) {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n\n // hthttps://w3c.github.io/IndexedDB/#dom-idbcursor-continueprimarykey\n continuePrimaryKey(key, primaryKey) {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (this.source instanceof FDBObjectStore || this.direction !== \"next\" && this.direction !== \"prev\") {\n throw new InvalidAccessError();\n }\n if (!this._gotValue) {\n throw new InvalidStateError();\n }\n\n // Not sure about this\n if (key === undefined || primaryKey === undefined) {\n throw new DataError();\n }\n key = valueToKey(key);\n const cmpResult = cmp(key, this._position);\n if (cmpResult === -1 && this.direction === \"next\" || cmpResult === 1 && this.direction === \"prev\") {\n throw new DataError();\n }\n const cmpResult2 = cmp(primaryKey, this._objectStorePosition);\n if (cmpResult === 0) {\n if (cmpResult2 <= 0 && this.direction === \"next\" || cmpResult2 >= 0 && this.direction === \"prev\") {\n throw new DataError();\n }\n }\n if (this._request) {\n this._request.readyState = \"pending\";\n }\n transaction._execRequestAsync({\n operation: this._iterate.bind(this, key, primaryKey),\n request: this._request,\n source: this.source\n });\n this._gotValue = false;\n }\n delete() {\n const effectiveObjectStore = getEffectiveObjectStore(this);\n const effectiveKey = Object.hasOwn(this.source, \"_rawIndex\") ? this.primaryKey : this._position;\n const transaction = effectiveObjectStore.transaction;\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (effectiveObjectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (!(this.source instanceof FDBObjectStore) && this.source._rawIndex.deleted) {\n throw new InvalidStateError();\n }\n if (!this._gotValue || !Object.hasOwn(this, \"value\")) {\n throw new InvalidStateError();\n }\n return transaction._execRequestAsync({\n operation: effectiveObjectStore._rawObjectStore.deleteRecord.bind(effectiveObjectStore._rawObjectStore, effectiveKey, transaction._rollbackLog),\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursor\";\n }\n}\nexport default FDBCursor;","import FDBCursor from \"./FDBCursor.js\";\nclass FDBCursorWithValue extends FDBCursor {\n value = undefined;\n constructor(source, range, direction, request) {\n super(source, range, direction, request);\n }\n get [Symbol.toStringTag]() {\n return \"IDBCursorWithValue\";\n }\n}\nexport default FDBCursorWithValue;","import { InvalidStateError } from \"./errors.js\";\nconst stopped = (event, listener) => {\n return event.immediatePropagationStopped || event.eventPhase === event.CAPTURING_PHASE && listener.capture === false || event.eventPhase === event.BUBBLING_PHASE && listener.capture === true;\n};\n\n// http://www.w3.org/TR/dom/#concept-event-listener-invoke\nconst invokeEventListeners = (event, obj) => {\n event.currentTarget = obj;\n const errors = [];\n const invoke = callbackOrObject => {\n try {\n const callback = typeof callbackOrObject === \"function\" ? callbackOrObject : callbackOrObject.handleEvent;\n // @ts-expect-error EventCallback's types are not quite right here\n callback.call(event.currentTarget, event);\n } catch (err) {\n errors.push(err);\n }\n };\n\n // The callback might cause obj.listeners to mutate as we traverse it.\n // Take a copy of the array so that nothing sneaks in and we don't lose\n // our place.\n for (const listener of obj.listeners.slice()) {\n if (event.type !== listener.type || stopped(event, listener)) {\n continue;\n }\n invoke(listener.callback);\n }\n const typeToProp = {\n abort: \"onabort\",\n blocked: \"onblocked\",\n close: \"onclose\",\n complete: \"oncomplete\",\n error: \"onerror\",\n success: \"onsuccess\",\n upgradeneeded: \"onupgradeneeded\",\n versionchange: \"onversionchange\"\n };\n const prop = typeToProp[event.type];\n if (prop === undefined) {\n throw new Error(`Unknown event type: \"${event.type}\"`);\n }\n const callback = event.currentTarget[prop];\n if (callback) {\n const listener = {\n callback,\n capture: false,\n type: event.type\n };\n if (!stopped(event, listener)) {\n invoke(listener.callback);\n }\n }\n\n // we want to execute all listeners before deciding if we want to throw, because there could be an error thrown by\n // the first listener, but the second should still be invoked\n if (errors.length) {\n throw new AggregateError(errors);\n }\n};\nclass FakeEventTarget {\n listeners = [];\n\n // These will be overridden in individual subclasses and made not readonly\n\n addEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n this.listeners.push({\n callback,\n capture,\n type\n });\n }\n removeEventListener(type, callback, options) {\n const capture = !!(typeof options === \"object\" && options ? options.capture : options);\n const i = this.listeners.findIndex(listener => {\n return listener.type === type && listener.callback === callback && listener.capture === capture;\n });\n this.listeners.splice(i, 1);\n }\n\n // http://www.w3.org/TR/dom/#dispatching-events\n dispatchEvent(event) {\n if (event.dispatched || !event.initialized) {\n throw new InvalidStateError(\"The object is in an invalid state.\");\n }\n event.isTrusted = false;\n event.dispatched = true;\n event.target = this;\n // NOT SURE WHEN THIS SHOULD BE SET event.eventPath = [];\n\n event.eventPhase = event.CAPTURING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n event.eventPhase = event.AT_TARGET;\n if (!event.propagationStopped) {\n invokeEventListeners(event, event.target);\n }\n if (event.bubbles) {\n event.eventPath.reverse();\n event.eventPhase = event.BUBBLING_PHASE;\n for (const obj of event.eventPath) {\n if (!event.propagationStopped) {\n invokeEventListeners(event, obj);\n }\n }\n }\n event.dispatched = false;\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n if (event.canceled) {\n return false;\n }\n return true;\n }\n}\nexport default FakeEventTarget;","import { InvalidStateError } from \"./lib/errors.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nclass FDBRequest extends FakeEventTarget {\n _result = null;\n _error = null;\n source = null;\n transaction = null;\n readyState = \"pending\";\n onsuccess = null;\n onerror = null;\n get error() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._error;\n }\n set error(value) {\n this._error = value;\n }\n get result() {\n if (this.readyState === \"pending\") {\n throw new InvalidStateError();\n }\n return this._result;\n }\n set result(value) {\n this._result = value;\n }\n get [Symbol.toStringTag]() {\n return \"IDBRequest\";\n }\n}\nexport default FDBRequest;","class FakeDOMStringList {\n constructor(...values) {\n this._values = values;\n for (let i = 0; i < values.length; i++) {\n this[i] = values[i];\n }\n }\n contains(value) {\n return this._values.includes(value);\n }\n item(i) {\n if (i < 0 || i >= this._values.length) {\n return null;\n }\n return this._values[i];\n }\n get length() {\n return this._values.length;\n }\n [Symbol.iterator]() {\n return this._values[Symbol.iterator]();\n }\n\n // Handled by proxy\n\n // Used internally, should not be used by others. I could maybe get rid of these and replace rather than mutate, but too lazy to check the spec.\n _push(...values) {\n for (let i = 0; i < values.length; i++) {\n this[this._values.length + i] = values[i];\n }\n this._values.push(...values);\n }\n _sort(...values) {\n this._values.sort(...values);\n for (let i = 0; i < this._values.length; i++) {\n this[i] = this._values[i];\n }\n return this;\n }\n}\nexport default FakeDOMStringList;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport { DataError } from \"./errors.js\";\nimport valueToKey from \"./valueToKey.js\";\n\n// http://w3c.github.io/IndexedDB/#convert-a-value-to-a-key-range\nconst valueToKeyRange = (value, nullDisallowedFlag = false) => {\n if (value instanceof FDBKeyRange) {\n return value;\n }\n if (value === null || value === undefined) {\n if (nullDisallowedFlag) {\n throw new DataError();\n }\n return new FDBKeyRange(undefined, undefined, false, false);\n }\n const key = valueToKey(value);\n return FDBKeyRange.only(key);\n};\nexport default valueToKeyRange;","// Keys provided as functions or arrays or objects need to be stringified\nconst convertKey = key => typeof key === 'object' && key ? key + '' : key;\n\n// https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-keypath\nexport function getKeyPath(keyPath) {\n // It's important to clone the Array here because of the WPT test:\n // \"Different instances are returned from different store instances.\"\n // Also note that the same instance must be returned across multiple gets\n return Array.isArray(keyPath) ? keyPath.map(convertKey) : convertKey(keyPath);\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport valueToKeyWithoutThrowing, { INVALID_TYPE } from \"./valueToKeyWithoutThrowing.js\";\n\n// https://www.w3.org/TR/IndexedDB/#is-a-potentially-valid-key-range\nconst isPotentiallyValidKeyRange = value => {\n // If value is a key range, return true.\n if (value instanceof FDBKeyRange) {\n return true;\n }\n\n // Let key be the result of converting a value to a key with value.\n const key = valueToKeyWithoutThrowing(value);\n\n // If key is \"invalid type\" return false.\n // Else return true.\n return key !== INVALID_TYPE;\n};\nexport default isPotentiallyValidKeyRange;","// https://heycam.github.io/webidl/#EnforceRange\n\nconst enforceRange = (num, type) => {\n const min = 0;\n const max = type === \"unsigned long\" ? 4294967295 : 9007199254740991;\n if (isNaN(num) || num < min || num > max) {\n throw new TypeError();\n }\n if (num >= 0) {\n return Math.floor(num);\n }\n};\nexport default enforceRange;","import isPotentiallyValidKeyRange from \"./isPotentiallyValidKeyRange.js\";\nimport enforceRange from \"./enforceRange.js\";\n// https://www.w3.org/TR/IndexedDB/#create-request-to-retrieve-multiple-items\nconst extractGetAllOptions = (queryOrOptions, count, numArguments) => {\n let query;\n let direction;\n if (queryOrOptions === undefined || queryOrOptions === null || isPotentiallyValidKeyRange(queryOrOptions)) {\n // queryOrOptions is FDBKeyRange | Key | null | undefined\n query = queryOrOptions;\n if (numArguments > 1 && count !== undefined) {\n count = enforceRange(count, \"unsigned long\");\n }\n } else {\n // queryOrOptions is FDBGetAllOptions\n const getAllOptions = queryOrOptions;\n if (getAllOptions.query !== undefined) {\n query = getAllOptions.query;\n }\n if (getAllOptions.count !== undefined) {\n count = enforceRange(getAllOptions.count, \"unsigned long\");\n }\n if (getAllOptions.direction !== undefined) {\n direction = getAllOptions.direction;\n }\n }\n return {\n query,\n count,\n direction\n };\n};\nexport default extractGetAllOptions;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { ConstraintError, InvalidStateError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nconst confirmActiveTransaction = index => {\n if (index._rawIndex.deleted || index.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (index.objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#idl-def-IDBIndex\nclass FDBIndex {\n constructor(objectStore, rawIndex) {\n this._rawIndex = rawIndex;\n this._name = rawIndex.name;\n this.objectStore = objectStore;\n this.keyPath = getKeyPath(rawIndex.keyPath);\n this.multiEntry = rawIndex.multiEntry;\n this.unique = rawIndex.unique;\n }\n get name() {\n return this._name;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbindex-name\n set name(name) {\n const transaction = this.objectStore.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n if (this._rawIndex.deleted || this.objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this.objectStore.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldIndexNames = [...this.objectStore.indexNames];\n this._name = name;\n this._rawIndex.name = name;\n this.objectStore._indexesCache.delete(oldName);\n this.objectStore._indexesCache.set(name, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(oldName);\n this.objectStore._rawObjectStore.rawIndexes.set(name, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...Array.from(this.objectStore._rawObjectStore.rawIndexes.keys()).filter(indexName => {\n const index = this.objectStore._rawObjectStore.rawIndexes.get(indexName);\n return index && !index.deleted;\n }).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s index was not newly created during transaction, set handle’s name to its index’s name.\"\n if (!this.objectStore.transaction._createdIndexes.has(this._rawIndex)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawIndex.name = oldName;\n this.objectStore._indexesCache.delete(name);\n this.objectStore._indexesCache.set(oldName, this);\n this.objectStore._rawObjectStore.rawIndexes.delete(name);\n this.objectStore._rawObjectStore.rawIndexes.set(oldName, this._rawIndex);\n this.objectStore.indexNames = new FakeDOMStringList(...oldIndexNames);\n });\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-openKeyCursor-IDBRequest-any-range-IDBCursorDirection-direction\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.objectStore.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.objectStore.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n get(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getValue.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllValues.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-getKey-IDBRequest-any-key\n getKey(key) {\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getKey.bind(this._rawIndex, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllKeys.bind(this._rawIndex, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.objectStore.transaction._execRequestAsync({\n operation: this._rawIndex.getAllRecords.bind(this._rawIndex, range, count, direction),\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBIndex-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.objectStore.transaction._execRequestAsync({\n operation: () => {\n return this._rawIndex.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBIndex\";\n }\n}\nexport default FDBIndex;","// http://w3c.github.io/IndexedDB/#check-that-a-key-could-be-injected-into-a-value\nconst canInjectKey = (keyPath, value) => {\n if (Array.isArray(keyPath)) {\n throw new Error(\"The key paths used in this section are always strings and never sequences, since it is not possible to create a object store which has a key generator and also has a key path that is a sequence.\");\n }\n const identifiers = keyPath.split(\".\");\n if (identifiers.length === 0) {\n throw new Error(\"Assert: identifiers is not empty\");\n }\n identifiers.pop();\n for (const identifier of identifiers) {\n if (typeof value !== \"object\" && !Array.isArray(value)) {\n return false;\n }\n const hop = Object.hasOwn(value, identifier);\n if (!hop) {\n return true;\n }\n value = value[identifier];\n }\n return typeof value === \"object\" || Array.isArray(value);\n};\nexport default canInjectKey;","class FDBRecord {\n constructor(key, primaryKey, value) {\n this._key = key;\n this._primaryKey = primaryKey;\n this._value = value;\n }\n get key() {\n return this._key;\n }\n set key(_) {\n /* for babel */\n }\n get primaryKey() {\n return this._primaryKey;\n }\n set primaryKey(_) {\n /* for babel */\n }\n get value() {\n return this._value;\n }\n set value(_) {\n /* for babel */\n }\n get [Symbol.toStringTag]() {\n return \"IDBRecord\";\n }\n}\nexport default FDBRecord;","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport { ConstraintError } from \"./errors.js\";\n// what fraction of the total number of nodes are allowed to be deleted tombstones?\nconst MAX_TOMBSTONE_FACTOR = 2 / 3;\nconst EVERYTHING_KEY_RANGE = new FDBKeyRange(undefined, undefined, false, false);\n/**\n * Simple red-black binary tree with some aspects of a scapegoat tree. The main goal here is simplicity of\n * implementation, tailored to the needs of IndexedDB.\n *\n * Basically this implements a [red-black tree][1] for insertions, but uses the much simpler [scapegoat tree][2]\n * strategy for deletions. Deletions are a simple matter of rebuilding the tree from scratch if more than 2/3 of the\n * tree is full of deleted (tombstone) markers.\n *\n * [1]: https://en.wikipedia.org/wiki/Red%E2%80%93black_tree\n * [2]: https://en.wikipedia.org/wiki/Scapegoat_tree\n */\nexport default class BinarySearchTree {\n _numTombstones = 0;\n _numNodes = 0;\n\n /**\n *\n * @param keysAreUnique - whether keys can be unique, and thus whether we cn skip checking `record.value` when\n * comparing. This is basically used to distinguish ObjectStores (where the value is the entire object, not used\n * as a key) from non-unique Indexes (where both the key and the value are meaningful keys used for sorting)\n */\n constructor(keysAreUnique) {\n this._keysAreUnique = !!keysAreUnique;\n }\n size() {\n return this._numNodes - this._numTombstones;\n }\n get(record) {\n return this._getByComparator(this._root, otherRecord => this._compare(record, otherRecord));\n }\n contains(record) {\n return !!this.get(record);\n }\n _compare(a, b) {\n const keyComparison = cmp(a.key, b.key);\n if (keyComparison !== 0) {\n return keyComparison;\n }\n // if keys are unique, then we can (and must) avoid comparing the values, since they may be non-comparable\n // (e.g. in the case of an ObjectStore, they are record objects)\n return this._keysAreUnique ? 0 : cmp(a.value, b.value);\n }\n _getByComparator(node, comparator) {\n let current = node;\n while (current) {\n const comparison = comparator(current.record);\n if (comparison < 0) {\n current = current.left;\n } else if (comparison > 0) {\n current = current.right;\n } else {\n return current.record;\n }\n }\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param record\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(record, noOverwrite = false) {\n if (!this._root) {\n this._root = {\n record,\n left: undefined,\n right: undefined,\n parent: undefined,\n deleted: false,\n // the root is always black in a red-black tree\n red: false\n };\n this._numNodes++;\n return;\n }\n return this._put(this._root, record, noOverwrite);\n }\n _put(node, record, noOverwrite) {\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n if (node.left) {\n return this._put(node.left, record, noOverwrite);\n } else {\n node.left = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.left);\n }\n } else if (comparison > 0) {\n if (node.right) {\n return this._put(node.right, record, noOverwrite);\n } else {\n node.right = {\n record,\n left: undefined,\n right: undefined,\n parent: node,\n deleted: false,\n red: true\n };\n this._onNewNodeInserted(node.right);\n }\n } else if (node.deleted) {\n // undelete\n node.deleted = false;\n node.record = record;\n this._numTombstones--;\n } else if (noOverwrite) {\n // replace not allowed in case of noOverwrite\n throw new ConstraintError();\n } else {\n // replace, don't add, so no need to increment. return the overwritten record\n const overwrittenRecord = node.record;\n node.record = record;\n return overwrittenRecord;\n }\n }\n delete(record) {\n if (!this._root) {\n return;\n }\n this._delete(this._root, record);\n if (this._numTombstones > this._numNodes * MAX_TOMBSTONE_FACTOR) {\n // to keep the implementation simple, and because most users of fake-indexeddb are not going to be deleting\n // a lot of nodes, just rebuild the whole tree (defragment) if the tree is too full of tombstones,\n // as inspired by the scapegoat tree: https://en.wikipedia.org/wiki/Scapegoat_tree#Deletion\n const records = [...this.getAllRecords()];\n this._root = this._rebuild(records, undefined, false);\n this._numNodes = records.length;\n this._numTombstones = 0;\n }\n }\n _delete(node, record) {\n if (!node) {\n return;\n }\n const comparison = this._compare(record, node.record);\n if (comparison < 0) {\n this._delete(node.left, record);\n } else if (comparison > 0) {\n this._delete(node.right, record);\n } else if (!node.deleted) {\n this._numTombstones++;\n node.deleted = true;\n }\n }\n *getAllRecords(descending = false) {\n yield* this.getRecords(EVERYTHING_KEY_RANGE, descending);\n }\n *getRecords(keyRange, descending = false) {\n yield* this._getRecordsForNode(this._root, keyRange, descending);\n }\n *_getRecordsForNode(node, keyRange, descending = false) {\n if (!node) {\n return;\n }\n yield* this._findRecords(node, keyRange, descending);\n }\n *_findRecords(node, keyRange, descending = false) {\n const {\n lower,\n upper,\n lowerOpen,\n upperOpen\n } = keyRange;\n const {\n record: {\n key\n }\n } = node;\n const lowerComparison = lower === undefined ? -1 : cmp(lower, key);\n const upperComparison = upper === undefined ? 1 : cmp(upper, key);\n\n // if keys are non-unique then we need to go left/right even for equality\n // else we can just do LT/GT rather than LTE/GTE as a slight optimization\n const moreLeft = this._keysAreUnique ? lowerComparison < 0 : lowerComparison <= 0;\n const moreRight = this._keysAreUnique ? upperComparison > 0 : upperComparison >= 0;\n\n // in descending mode we start with rightmost nodes, else leftmost\n const moreStart = descending ? moreRight : moreLeft;\n const moreEnd = descending ? moreLeft : moreRight;\n const start = descending ? \"right\" : \"left\";\n const end = descending ? \"left\" : \"right\";\n\n // does the current record actually match the key range?\n const lowerMatches = lowerOpen ? lowerComparison < 0 : lowerComparison <= 0;\n const upperMatches = upperOpen ? upperComparison > 0 : upperComparison >= 0;\n if (moreStart && node[start]) {\n yield* this._findRecords(node[start], keyRange, descending);\n }\n if (lowerMatches && upperMatches && !node.deleted) {\n yield node.record;\n }\n if (moreEnd && node[end]) {\n yield* this._findRecords(node[end], keyRange, descending);\n }\n }\n _onNewNodeInserted(newNode) {\n this._numNodes++;\n this._rebalanceTree(newNode);\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Insertion\n _rebalanceTree(node) {\n let parent = node.parent;\n do {\n // case 1 - no red/black violation\n if (!parent.red) {\n return;\n }\n const grandparent = parent.parent;\n if (!grandparent) {\n // case #4 - parent is the red root, node is also red, so parent goes black\n parent.red = false;\n return;\n }\n const parentIsRightChild = parent === grandparent.right;\n const uncle = parentIsRightChild ? grandparent.left : grandparent.right;\n if (!uncle || !uncle.red) {\n if (node === (parentIsRightChild ? parent.left : parent.right)) {\n // case #5 - parent is red but uncle is black\n this._rotateSubtree(parent, parentIsRightChild);\n node = parent;\n parent = parentIsRightChild ? grandparent.right : grandparent.left;\n }\n\n // case #6 - node is \"outer\" grandchild of grandparent\n this._rotateSubtree(grandparent, !parentIsRightChild);\n parent.red = false;\n grandparent.red = true;\n return;\n }\n\n // case #2 - parent and uncle are both red, so both of them go black and grandparent goes red\n parent.red = false;\n uncle.red = false;\n grandparent.red = true;\n node = grandparent;\n } while (node.parent ? parent = node.parent : false);\n\n // case #3 - current node is the root, all constraints satisfied\n }\n\n // based on https://en.wikipedia.org/wiki/Red%E2%80%93black_tree#Implementation\n _rotateSubtree(node, right) {\n const parent = node.parent;\n const newRoot = right ? node.left : node.right; // opposite direction\n const newChild = right ? newRoot.right : newRoot.left;\n node[right ? \"left\" : \"right\"] = newChild;\n if (newChild) {\n newChild.parent = node;\n }\n newRoot[right ? \"right\" : \"left\"] = node;\n newRoot.parent = parent;\n node.parent = newRoot;\n if (parent) {\n parent[node === parent.right ? \"right\" : \"left\"] = newRoot;\n } else {\n this._root = newRoot;\n }\n return newRoot;\n }\n\n // rebuild the whole tree from scratch, used to avoid too many deletion tombstones accumulating\n _rebuild(records, parent, red) {\n const {\n length\n } = records;\n if (!length) {\n return undefined;\n }\n const mid = length >>> 1; // like Math.floor(records.length / 2) but fast\n\n const node = {\n record: records[mid],\n left: undefined,\n right: undefined,\n parent,\n deleted: false,\n red\n };\n const left = this._rebuild(records.slice(0, mid), node, !red);\n const right = this._rebuild(records.slice(mid + 1), node, !red);\n node.left = left;\n node.right = right;\n return node;\n }\n}","import FDBKeyRange from \"../FDBKeyRange.js\";\nimport cmp from \"./cmp.js\";\nimport BinarySearchTree from \"./binarySearchTree.js\";\nclass RecordStore {\n constructor(keysAreUnique) {\n this.keysAreUnique = keysAreUnique;\n this.records = new BinarySearchTree(this.keysAreUnique);\n }\n get(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n return this.records.getRecords(range).next().value;\n }\n\n /**\n * Put a new record, and return the overwritten record if an overwrite occurred.\n * @param newRecord\n * @param noOverwrite - throw a ConstraintError in case of overwrite\n */\n put(newRecord, noOverwrite = false) {\n return this.records.put(newRecord, noOverwrite);\n }\n delete(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [...this.records.getRecords(range)];\n for (const record of deletedRecords) {\n this.records.delete(record);\n }\n return deletedRecords;\n }\n deleteByValue(key) {\n const range = key instanceof FDBKeyRange ? key : FDBKeyRange.only(key);\n const deletedRecords = [];\n for (const record of this.records.getAllRecords()) {\n if (range.includes(record.value)) {\n this.records.delete(record);\n deletedRecords.push(record);\n }\n }\n return deletedRecords;\n }\n clear() {\n const deletedRecords = [...this.records.getAllRecords()];\n this.records = new BinarySearchTree(this.keysAreUnique);\n return deletedRecords;\n }\n values(range, direction = \"next\") {\n const descending = direction === \"prev\" || direction === \"prevunique\";\n const records = range ? this.records.getRecords(range, descending) : this.records.getAllRecords(descending);\n return {\n [Symbol.iterator]: () => {\n const next = () => {\n return records.next();\n };\n if (direction === \"next\" || direction === \"prev\") {\n return {\n next\n };\n }\n\n // For nextunique/prevunique, return an iterator that skips seen values\n // Note that we must return the _lowest_ value regardless of direction:\n // > Iterating with \"prevunique\" visits the same records that \"nextunique\"\n // > visits, but in reverse order.\n // https://w3c.github.io/IndexedDB/#dom-idbcursordirection-prevunique\n if (direction === \"nextunique\") {\n let previousValue = undefined;\n return {\n next: () => {\n let current = next();\n // for nextunique, continue if we already emitted the lowest unique value\n while (!current.done && previousValue !== undefined && cmp(previousValue.key, current.value.key) === 0) {\n current = next();\n }\n previousValue = current.value;\n return current;\n }\n };\n }\n\n // prevunique is a bit more complex due to needing to check the next value, which\n // invokes the iterable, so we need to keep a buffer of one \"lookahead\" result\n let current = next();\n let nextResult = next();\n return {\n next: () => {\n while (!nextResult.done && cmp(current.value.key, nextResult.value.key) === 0) {\n // note we return the _lowest_ possible value, hence set the current\n current = nextResult;\n nextResult = next();\n }\n const result = current;\n current = nextResult;\n nextResult = next();\n return result;\n }\n };\n }\n };\n }\n size() {\n return this.records.size();\n }\n}\nexport default RecordStore;","import FDBRecord from \"../FDBRecord.js\";\nimport { ConstraintError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport RecordStore from \"./RecordStore.js\";\nimport valueToKey from \"./valueToKey.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-index\nclass Index {\n deleted = false;\n // Initialized should be used to decide whether to throw an error or abort the versionchange transaction when there is a\n // constraint\n initialized = false;\n constructor(rawObjectStore, name, keyPath, multiEntry, unique) {\n this.rawObjectStore = rawObjectStore;\n this.name = name;\n this.keyPath = keyPath;\n this.multiEntry = multiEntry;\n this.unique = unique;\n this.records = new RecordStore(unique);\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-index\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? record.value : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#index-referenced-value-retrieval-operation\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? this.rawObjectStore.getValue(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-referenced-values-from-an-index\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(this.rawObjectStore.getValue(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbindex-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(this.rawObjectStore.getKey(record.value)), this.rawObjectStore.getValue(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store (step 7)\n storeRecord(newRecord) {\n let indexKey;\n try {\n indexKey = extractKey(this.keyPath, newRecord.value).key;\n } catch (err) {\n if (err.name === \"DataError\") {\n // Invalid key is not an actual error, just means we do not store an entry in this index\n return;\n }\n throw err;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n try {\n valueToKey(indexKey);\n } catch (e) {\n return;\n }\n } else {\n // remove any elements from index key that are not valid keys and remove any duplicate elements from index\n // key such that only one instance of the duplicate value remains.\n const keep = [];\n for (const part of indexKey) {\n if (keep.indexOf(part) < 0) {\n try {\n keep.push(valueToKey(part));\n } catch (err) {\n /* Do nothing */\n }\n }\n }\n indexKey = keep;\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n if (this.unique) {\n const existingRecord = this.records.get(indexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n } else {\n if (this.unique) {\n for (const individualIndexKey of indexKey) {\n const existingRecord = this.records.get(individualIndexKey);\n if (existingRecord) {\n throw new ConstraintError();\n }\n }\n }\n }\n if (!this.multiEntry || !Array.isArray(indexKey)) {\n this.records.put({\n key: indexKey,\n value: newRecord.key\n });\n } else {\n for (const individualIndexKey of indexKey) {\n this.records.put({\n key: individualIndexKey,\n value: newRecord.key\n });\n }\n }\n }\n initialize(transaction) {\n if (this.initialized) {\n throw new Error(\"Index already initialized\");\n }\n transaction._execRequestAsync({\n operation: () => {\n try {\n // Create index based on current value of objectstore\n for (const record of this.rawObjectStore.records.values()) {\n this.storeRecord(record);\n }\n this.initialized = true;\n } catch (err) {\n // console.error(err);\n transaction._abort(err.name);\n }\n },\n source: null\n });\n }\n count(range) {\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default Index;","import { SyntaxError } from \"./errors.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-valid-key-path\nconst validateKeyPath = (keyPath, parent) => {\n // This doesn't make sense to me based on the spec, but it is needed to pass the W3C KeyPath tests (see same\n // comment in extractKey)\n if (keyPath !== undefined && keyPath !== null && typeof keyPath !== \"string\" && keyPath.toString && (parent === \"array\" || !Array.isArray(keyPath))) {\n keyPath = keyPath.toString();\n }\n if (typeof keyPath === \"string\") {\n if (keyPath === \"\" && parent !== \"string\") {\n return;\n }\n try {\n // https://mathiasbynens.be/demo/javascript-identifier-regex for ECMAScript 5.1 / Unicode v7.0.0, with\n // reserved words at beginning removed\n const validIdentifierRegex =\n // eslint-disable-next-line no-misleading-character-class\n /^(?:[$A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])(?:[$0-9A-Z_a-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC])*$/;\n if (keyPath.length >= 1 && validIdentifierRegex.test(keyPath)) {\n return;\n }\n } catch (err) {\n throw new SyntaxError(err.message);\n }\n if (keyPath.indexOf(\" \") >= 0) {\n throw new SyntaxError(\"The keypath argument contains an invalid key path (no spaces allowed).\");\n }\n }\n if (Array.isArray(keyPath) && keyPath.length > 0) {\n if (parent) {\n // No nested arrays\n throw new SyntaxError(\"The keypath argument contains an invalid key path (nested arrays).\");\n }\n for (const part of keyPath) {\n validateKeyPath(part, \"array\");\n }\n return;\n } else if (typeof keyPath === \"string\" && keyPath.indexOf(\".\") >= 0) {\n keyPath = keyPath.split(\".\");\n for (const part of keyPath) {\n validateKeyPath(part, \"string\");\n }\n return;\n }\n throw new SyntaxError();\n};\nexport default validateKeyPath;","import FDBCursor from \"./FDBCursor.js\";\nimport FDBCursorWithValue from \"./FDBCursorWithValue.js\";\nimport FDBIndex from \"./FDBIndex.js\";\nimport FDBKeyRange from \"./FDBKeyRange.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport canInjectKey from \"./lib/canInjectKey.js\";\nimport { ConstraintError, DataError, InvalidAccessError, InvalidStateError, NotFoundError, ReadOnlyError, TransactionInactiveError } from \"./lib/errors.js\";\nimport extractKey from \"./lib/extractKey.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport Index from \"./lib/Index.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport valueToKey from \"./lib/valueToKey.js\";\nimport valueToKeyRange from \"./lib/valueToKeyRange.js\";\nimport { getKeyPath } from \"./lib/getKeyPath.js\";\nimport extractGetAllOptions from \"./lib/extractGetAllOptions.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { cloneValueForInsertion } from \"./lib/cloneValueForInsertion.js\";\nconst confirmActiveTransaction = objectStore => {\n if (objectStore._rawObjectStore.deleted) {\n throw new InvalidStateError();\n }\n if (objectStore.transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n};\nconst buildRecordAddPut = (objectStore, value, key) => {\n confirmActiveTransaction(objectStore);\n if (objectStore.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (objectStore.keyPath !== null) {\n if (key !== undefined) {\n throw new DataError();\n }\n }\n const clone = cloneValueForInsertion(value, objectStore.transaction);\n if (objectStore.keyPath !== null) {\n const tempKey = extractKey(objectStore.keyPath, clone);\n if (tempKey.type === \"found\") {\n valueToKey(tempKey.key);\n } else {\n if (!objectStore._rawObjectStore.keyGenerator) {\n throw new DataError();\n } else if (!canInjectKey(objectStore.keyPath, clone)) {\n throw new DataError();\n }\n }\n }\n if (objectStore.keyPath === null && objectStore._rawObjectStore.keyGenerator === null && key === undefined) {\n throw new DataError();\n }\n if (key !== undefined) {\n key = valueToKey(key);\n }\n return {\n key,\n value: clone\n };\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#object-store\nclass FDBObjectStore {\n _indexesCache = new Map();\n constructor(transaction, rawObjectStore) {\n this._rawObjectStore = rawObjectStore;\n this._name = rawObjectStore.name;\n this.keyPath = getKeyPath(rawObjectStore.keyPath);\n this.autoIncrement = rawObjectStore.autoIncrement;\n this.transaction = transaction;\n this.indexNames = new FakeDOMStringList(...Array.from(rawObjectStore.rawIndexes.keys()).sort());\n }\n get name() {\n return this._name;\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-name\n set name(name) {\n const transaction = this.transaction;\n if (!transaction.db._runningVersionchangeTransaction) {\n throw transaction._state === \"active\" ? new InvalidStateError() : new TransactionInactiveError();\n }\n confirmActiveTransaction(this);\n name = String(name);\n if (name === this._name) {\n return;\n }\n if (this._rawObjectStore.rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n const oldName = this._name;\n const oldObjectStoreNames = [...transaction.db.objectStoreNames];\n this._name = name;\n this._rawObjectStore.name = name;\n this.transaction._objectStoresCache.delete(oldName);\n this.transaction._objectStoresCache.set(name, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(oldName);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(name, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...Array.from(this._rawObjectStore.rawDatabase.rawObjectStores.keys()).filter(objectStoreName => {\n const objectStore = this._rawObjectStore.rawDatabase.rawObjectStores.get(objectStoreName);\n return objectStore && !objectStore.deleted;\n }).sort());\n const oldScope = new Set(transaction._scope);\n const oldTransactionObjectStoreNames = [...transaction.objectStoreNames];\n this.transaction._scope.delete(oldName);\n transaction._scope.add(name);\n transaction.objectStoreNames = new FakeDOMStringList(...Array.from(transaction._scope).sort());\n\n // https://www.w3.org/TR/IndexedDB/#abort-an-upgrade-transaction - \"If handle’s object store was not newly created during transaction, set handle’s name to its object store’s name.\"\n if (!this.transaction._createdObjectStores.has(this._rawObjectStore)) {\n transaction._rollbackLog.push(() => {\n this._name = oldName;\n this._rawObjectStore.name = oldName;\n this.transaction._objectStoresCache.delete(name);\n this.transaction._objectStoresCache.set(oldName, this);\n this._rawObjectStore.rawDatabase.rawObjectStores.delete(name);\n this._rawObjectStore.rawDatabase.rawObjectStores.set(oldName, this._rawObjectStore);\n transaction.db.objectStoreNames = new FakeDOMStringList(...oldObjectStoreNames);\n transaction._scope = oldScope;\n transaction.objectStoreNames = new FakeDOMStringList(...oldTransactionObjectStoreNames);\n });\n }\n }\n put(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, false, this.transaction._rollbackLog),\n source: this\n });\n }\n add(value, key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n const record = buildRecordAddPut(this, value, key);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.storeRecord.bind(this._rawObjectStore, record, true, this.transaction._rollbackLog),\n source: this\n });\n }\n delete(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.deleteRecord.bind(this._rawObjectStore, key, this.transaction._rollbackLog),\n source: this\n });\n }\n get(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getValue.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getall\n getAll(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllValues.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getkey\n getKey(key) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n confirmActiveTransaction(this);\n if (!(key instanceof FDBKeyRange)) {\n key = valueToKey(key);\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getKey.bind(this._rawObjectStore, key),\n source: this\n });\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbobjectstore-getallkeys\n getAllKeys(queryOrOptions, count) {\n const options = extractGetAllOptions(queryOrOptions, count, arguments.length);\n confirmActiveTransaction(this);\n const range = valueToKeyRange(options.query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllKeys.bind(this._rawObjectStore, range, options.count, options.direction),\n source: this\n });\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(options) {\n let query;\n let count;\n let direction;\n if (options !== undefined) {\n if (options.query !== undefined) {\n query = options.query;\n }\n if (options.count !== undefined) {\n count = enforceRange(options.count, \"unsigned long\");\n }\n if (options.direction !== undefined) {\n direction = options.direction;\n }\n }\n confirmActiveTransaction(this);\n const range = valueToKeyRange(query);\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.getAllRecords.bind(this._rawObjectStore, range, count, direction),\n source: this\n });\n }\n clear() {\n confirmActiveTransaction(this);\n if (this.transaction.mode === \"readonly\") {\n throw new ReadOnlyError();\n }\n return this.transaction._execRequestAsync({\n operation: this._rawObjectStore.clear.bind(this._rawObjectStore, this.transaction._rollbackLog),\n source: this\n });\n }\n openCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursorWithValue(this, range, direction, request);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n openKeyCursor(range, direction) {\n confirmActiveTransaction(this);\n if (range === null) {\n range = undefined;\n }\n if (range !== undefined && !(range instanceof FDBKeyRange)) {\n range = FDBKeyRange.only(valueToKey(range));\n }\n const request = new FDBRequest();\n request.source = this;\n request.transaction = this.transaction;\n const cursor = new FDBCursor(this, range, direction, request, true);\n return this.transaction._execRequestAsync({\n operation: cursor._iterate.bind(cursor),\n request,\n source: this\n });\n }\n\n // tslint:-next-line max-line-length\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-createIndex-IDBIndex-DOMString-name-DOMString-sequence-DOMString--keyPath-IDBIndexParameters-optionalParameters\n createIndex(name, keyPath, optionalParameters = {}) {\n if (arguments.length < 2) {\n throw new TypeError();\n }\n const multiEntry = optionalParameters.multiEntry !== undefined ? optionalParameters.multiEntry : false;\n const unique = optionalParameters.unique !== undefined ? optionalParameters.unique : false;\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n if (this.indexNames.contains(name)) {\n throw new ConstraintError();\n }\n validateKeyPath(keyPath);\n if (Array.isArray(keyPath) && multiEntry) {\n throw new InvalidAccessError();\n }\n\n // The index that is requested to be created can contain constraints on the data allowed in the index's\n // referenced object store, such as requiring uniqueness of the values referenced by the index's keyPath. If the\n // referenced object store already contains data which violates these constraints, this MUST NOT cause the\n // implementation of createIndex to throw an exception or affect what it returns. The implementation MUST still\n // create and return an IDBIndex object. Instead the implementation must queue up an operation to abort the\n // \"versionchange\" transaction which was used for the createIndex call.\n\n // Save for rollbackLog\n const indexNames = [...this.indexNames];\n const index = new Index(this._rawObjectStore, name, keyPath, multiEntry, unique);\n this.indexNames._push(name);\n this.indexNames._sort();\n this.transaction._createdIndexes.add(index);\n this._rawObjectStore.rawIndexes.set(name, index);\n index.initialize(this.transaction); // This is async by design\n\n this.transaction._rollbackLog.push(() => {\n index.deleted = true;\n this.indexNames = new FakeDOMStringList(...indexNames);\n this._rawObjectStore.rawIndexes.delete(index.name);\n });\n return new FDBIndex(this, index);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-index\n index(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this._rawObjectStore.deleted || this.transaction._state === \"finished\") {\n throw new InvalidStateError();\n }\n const index = this._indexesCache.get(name);\n if (index !== undefined) {\n return index;\n }\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (!this.indexNames.contains(name) || rawIndex === undefined) {\n throw new NotFoundError();\n }\n const index2 = new FDBIndex(this, rawIndex);\n this._indexesCache.set(name, index2);\n return index2;\n }\n deleteIndex(name) {\n if (arguments.length === 0) {\n throw new TypeError();\n }\n if (this.transaction.mode !== \"versionchange\") {\n throw new InvalidStateError();\n }\n confirmActiveTransaction(this);\n const rawIndex = this._rawObjectStore.rawIndexes.get(name);\n if (rawIndex === undefined) {\n throw new NotFoundError();\n }\n this.transaction._rollbackLog.push(() => {\n rawIndex.deleted = false;\n this._rawObjectStore.rawIndexes.set(rawIndex.name, rawIndex);\n this.indexNames._push(rawIndex.name);\n this.indexNames._sort();\n });\n this.indexNames = new FakeDOMStringList(...Array.from(this.indexNames).filter(indexName => {\n return indexName !== name;\n }));\n rawIndex.deleted = true; // Not sure if this is supposed to happen synchronously\n\n this.transaction._execRequestAsync({\n operation: () => {\n const rawIndex2 = this._rawObjectStore.rawIndexes.get(name);\n\n // Hack in case another index is given this name before this async request is processed. It'd be better\n // to have a real unique ID for each index.\n if (rawIndex === rawIndex2) {\n this._rawObjectStore.rawIndexes.delete(name);\n }\n },\n source: this\n });\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBObjectStore-count-IDBRequest-any-key\n count(key) {\n confirmActiveTransaction(this);\n if (key === null) {\n key = undefined;\n }\n if (key !== undefined && !(key instanceof FDBKeyRange)) {\n key = FDBKeyRange.only(valueToKey(key));\n }\n return this.transaction._execRequestAsync({\n operation: () => {\n return this._rawObjectStore.count(key);\n },\n source: this\n });\n }\n get [Symbol.toStringTag]() {\n return \"IDBObjectStore\";\n }\n}\nexport default FDBObjectStore;","class Event {\n eventPath = [];\n NONE = 0;\n CAPTURING_PHASE = 1;\n AT_TARGET = 2;\n BUBBLING_PHASE = 3;\n\n // Flags\n propagationStopped = false;\n immediatePropagationStopped = false;\n canceled = false;\n initialized = true;\n dispatched = false;\n target = null;\n currentTarget = null;\n eventPhase = 0;\n defaultPrevented = false;\n isTrusted = false;\n timeStamp = Date.now();\n constructor(type, eventInitDict = {}) {\n this.type = type;\n this.bubbles = eventInitDict.bubbles !== undefined ? eventInitDict.bubbles : false;\n this.cancelable = eventInitDict.cancelable !== undefined ? eventInitDict.cancelable : false;\n }\n preventDefault() {\n if (this.cancelable) {\n this.canceled = true;\n }\n }\n stopPropagation() {\n this.propagationStopped = true;\n }\n stopImmediatePropagation() {\n this.propagationStopped = true;\n this.immediatePropagationStopped = true;\n }\n}\nexport default Event;","// When running within Node.js (including jsdom), we want to use setImmediate\n// (which runs immediately) rather than setTimeout (which enforces a minimum\n// delay of 1ms, and on Windows only has a resolution of 15ms or so). jsdom\n// doesn't provide setImmediate (to better match the browser environment) and\n// sandboxes scripts, but its sandbox is by necessity imperfect, so we can break\n// out of it:\n//\n// - https://github.com/jsdom/jsdom#executing-scripts\n// - https://github.com/jsdom/jsdom/issues/2729\n// - https://github.com/scala-js/scala-js-macrotask-executor/pull/17\nfunction getSetImmediateFromJsdom() {\n if (typeof navigator !== \"undefined\" && /jsdom/.test(navigator.userAgent)) {\n const outerRealmFunctionConstructor = Node.constructor;\n return new outerRealmFunctionConstructor(\"return setImmediate\")();\n } else {\n return undefined;\n }\n}\n\n// waiting on this PR for typescript types: https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1249\n\n// 'postTask' runs right after microtasks, so equivalent to setTimeout but without the 4ms clamping.\n// Using the default priority of 'user-visible' to avoid blocking input while still running fairly quickly.\n// See: https://developer.mozilla.org/en-US/docs/Web/API/Prioritized_Task_Scheduling_API#task_priorities\nconst schedulerPostTask = typeof scheduler !== \"undefined\" && (fn => scheduler.postTask(fn));\n\n// fallback for environments that don't support any of the above\nconst doSetTimeout = fn => setTimeout(fn, 0);\n\n// Schedules a task to run later. Use Node.js's setImmediate if available and\n// setTimeout otherwise. Note that options like process.nextTick or\n// queueMicrotask will likely not work: IndexedDB semantics require that\n// transactions are marked as not active when the event loop runs. The next\n// tick queue and microtask queue run within the current event loop macrotask,\n// so they'd process database operations too quickly.\nexport const queueTask = fn => {\n const setImmediate = globalThis.setImmediate || getSetImmediateFromJsdom() || schedulerPostTask || doSetTimeout;\n setImmediate(fn);\n};","import FDBObjectStore from \"./FDBObjectStore.js\";\nimport FDBRequest from \"./FDBRequest.js\";\nimport { AbortError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nconst prioritizedListenerTypes = [\"error\", \"abort\", \"complete\"];\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#transaction\nclass FDBTransaction extends FakeEventTarget {\n _state = \"active\";\n _started = false;\n _rollbackLog = [];\n _objectStoresCache = new Map();\n _openRequest = null;\n error = null;\n onabort = null;\n oncomplete = null;\n onerror = null;\n _prioritizedListeners = new Map();\n _requests = [];\n _createdIndexes = new Set();\n _createdObjectStores = new Set();\n constructor(storeNames, mode, durability, db) {\n super();\n this._scope = new Set(storeNames);\n this.mode = mode;\n this.durability = durability;\n this.db = db;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this._scope).sort());\n for (const type of prioritizedListenerTypes) {\n // Attach prioritized (internal) listeners before any external listeners are attached.\n // This ensures that these listeners run with the same timing regardless of whether\n // the user uses `on*` or `addEventListener` for event listeners.\n this.addEventListener(type, () => {\n this._prioritizedListeners.get(type)?.();\n });\n }\n }\n\n // https://w3c.github.io/IndexedDB/#abort-transaction\n _abort(errName) {\n for (const f of this._rollbackLog.reverse()) {\n f();\n }\n if (errName !== null) {\n const e = new DOMException(undefined, errName);\n this.error = e;\n }\n\n // Should this directly remove from _requests?\n for (const {\n request\n } of this._requests) {\n if (request.readyState !== \"done\") {\n request.readyState = \"done\"; // This will cancel execution of this request's operation\n if (request.source) {\n // https://w3c.github.io/IndexedDB/#ref-for-list-iterate%E2%91%A2\n // For each request of transaction’s request list, abort the steps to asynchronously\n // execute a request for request, set request’s processed flag to true, and queue a\n // database task to run these steps:\n queueTask(() => {\n // Set request’s result to undefined.\n request.result = undefined;\n // Set request’s error to a newly created \"AbortError\" DOMException.\n request.error = new AbortError();\n\n // Fire an event named error at request with its bubbles and cancelable attributes initialized\n // to true.\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [this.db, this];\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n }\n }\n });\n }\n }\n }\n\n // Queue a database task to run these steps:\n queueTask(() => {\n // If transaction is an upgrade transaction, then set transaction’s connection’s associated database’s\n // upgrade transaction to null.\n // (i.e. remove it from the list of `db.connections`)\n const isUpgradeTransaction = this.mode === \"versionchange\";\n if (isUpgradeTransaction) {\n this.db._rawDatabase.connections = this.db._rawDatabase.connections.filter(connection => !connection._rawDatabase.transactions.includes(this));\n }\n // Fire an event named abort at transaction with its bubbles attribute initialized to true.\n const event = new FakeEvent(\"abort\", {\n bubbles: true,\n cancelable: false\n });\n event.eventPath = [this.db];\n this.dispatchEvent(event);\n\n // If transaction is an upgrade transaction, then:\n if (isUpgradeTransaction) {\n // Let request be the open request associated with transaction.\n const request = this._openRequest;\n // Set request’s transaction to null.\n request.transaction = null;\n // Set request’s result to undefined.\n request.result = undefined;\n }\n });\n this._state = \"finished\";\n }\n abort() {\n if (this._state === \"committing\" || this._state === \"finished\") {\n throw new InvalidStateError();\n }\n this._state = \"active\";\n this._abort(null);\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbtransaction-objectstore\n objectStore(name) {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n const objectStore = this._objectStoresCache.get(name);\n if (objectStore !== undefined) {\n return objectStore;\n }\n const rawObjectStore = this.db._rawDatabase.rawObjectStores.get(name);\n if (!this._scope.has(name) || rawObjectStore === undefined) {\n throw new NotFoundError();\n }\n const objectStore2 = new FDBObjectStore(this, rawObjectStore);\n this._objectStoresCache.set(name, objectStore2);\n return objectStore2;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-asynchronously-executing-a-request\n _execRequestAsync(obj) {\n const source = obj.source;\n const operation = obj.operation;\n let request = Object.hasOwn(obj, \"request\") ? obj.request : null;\n if (this._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n\n // Request should only be passed for cursors\n if (!request) {\n if (!source) {\n // Special requests like indexes that just need to run some code\n request = new FDBRequest();\n } else {\n request = new FDBRequest();\n request.source = source;\n request.transaction = source.transaction;\n }\n }\n this._requests.push({\n operation,\n request\n });\n return request;\n }\n _start() {\n this._started = true;\n\n // Remove from request queue - cursor ones will be added back if necessary by cursor.continue and such\n let operation;\n let request;\n while (this._requests.length > 0) {\n const r = this._requests.shift();\n\n // This should only be false if transaction was aborted\n if (r && r.request.readyState !== \"done\") {\n request = r.request;\n operation = r.operation;\n break;\n }\n }\n if (request && operation) {\n if (!request.source) {\n // Special requests like indexes that just need to run some code, with error handling already built into\n // operation\n operation();\n } else {\n let defaultAction;\n let event;\n try {\n const result = operation();\n request.readyState = \"done\";\n request.result = result;\n request.error = undefined;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-a-success-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"success\", {\n bubbles: false,\n cancelable: false\n });\n } catch (err) {\n request.readyState = \"done\";\n request.result = undefined;\n request.error = err;\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-fire-an-error-event\n if (this._state === \"inactive\") {\n this._state = \"active\";\n }\n event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n defaultAction = this._abort.bind(this, err.name);\n }\n try {\n event.eventPath = [this.db, this];\n request.dispatchEvent(event);\n } catch (_err) {\n if (this._state === \"active\") {\n this._abort(\"AbortError\");\n defaultAction = undefined; // do not abort again\n }\n }\n\n // Default action of event\n if (!event.canceled) {\n if (defaultAction) {\n defaultAction();\n }\n }\n }\n\n // Give it another chance for new handlers to be set before finishing\n queueTask(this._start.bind(this));\n return;\n }\n\n // Check if transaction complete event needs to be fired\n if (this._state !== \"finished\") {\n // Either aborted or committed already\n this._state = \"finished\";\n if (!this.error) {\n const event = new FakeEvent(\"complete\");\n this.dispatchEvent(event);\n }\n }\n }\n commit() {\n if (this._state !== \"active\") {\n throw new InvalidStateError();\n }\n this._state = \"committing\";\n }\n get [Symbol.toStringTag]() {\n return \"IDBTransaction\";\n }\n}\nexport default FDBTransaction;","import { ConstraintError } from \"./errors.js\";\nconst MAX_KEY = 9007199254740992;\nclass KeyGenerator {\n // This is kind of wrong. Should start at 1 and increment only after record is saved\n num = 0;\n next() {\n if (this.num >= MAX_KEY) {\n throw new ConstraintError();\n }\n this.num += 1;\n return this.num;\n }\n\n // https://w3c.github.io/IndexedDB/#possibly-update-the-key-generator\n setIfLarger(num) {\n const value = Math.floor(Math.min(num, MAX_KEY)) - 1;\n if (value >= this.num) {\n this.num = value + 1;\n }\n }\n}\nexport default KeyGenerator;","import FDBRecord from \"../FDBRecord.js\";\nimport { DataError } from \"./errors.js\";\nimport extractKey from \"./extractKey.js\";\nimport KeyGenerator from \"./KeyGenerator.js\";\nimport RecordStore from \"./RecordStore.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-object-store\nclass ObjectStore {\n deleted = false;\n records = new RecordStore(true);\n rawIndexes = new Map();\n constructor(rawDatabase, name, keyPath, autoIncrement) {\n this.rawDatabase = rawDatabase;\n this.keyGenerator = autoIncrement === true ? new KeyGenerator() : null;\n this.deleted = false;\n this.name = name;\n this.keyPath = keyPath;\n this.autoIncrement = autoIncrement;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getKey(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.key) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-keys-from-an-object-store\n getAllKeys(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.key));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-retrieving-a-value-from-an-object-store\n getValue(key) {\n const record = this.records.get(key);\n return record !== undefined ? structuredClone(record.value) : undefined;\n }\n\n // http://w3c.github.io/IndexedDB/#retrieve-multiple-values-from-an-object-store\n getAllValues(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(structuredClone(record.value));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbobjectstore-getallrecords\n getAllRecords(range, count, direction) {\n if (count === undefined || count === 0) {\n count = Infinity;\n }\n const records = [];\n for (const record of this.records.values(range, direction)) {\n records.push(new FDBRecord(structuredClone(record.key), structuredClone(record.key), structuredClone(record.value)));\n if (records.length >= count) {\n break;\n }\n }\n return records;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-storing-a-record-into-an-object-store\n storeRecord(newRecord, noOverwrite, rollbackLog) {\n if (this.keyPath !== null) {\n const key = extractKey(this.keyPath, newRecord.value).key;\n if (key !== undefined) {\n newRecord.key = key;\n }\n }\n const rollbackLogForThisOperation = [];\n if (this.keyGenerator !== null && newRecord.key === undefined) {\n let rolledBack = false;\n const keyGeneratorBefore = this.keyGenerator.num;\n const rollbackKeyGenerator = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (this.keyGenerator) {\n this.keyGenerator.num = keyGeneratorBefore;\n }\n };\n rollbackLogForThisOperation.push(rollbackKeyGenerator);\n if (rollbackLog) {\n rollbackLog.push(rollbackKeyGenerator);\n }\n newRecord.key = this.keyGenerator.next();\n\n // Set in value if keyPath defiend but led to no key\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-to-assign-a-key-to-a-value-using-a-key-path\n if (this.keyPath !== null) {\n if (Array.isArray(this.keyPath)) {\n throw new Error(\"Cannot have an array key path in an object store with a key generator\");\n }\n let remainingKeyPath = this.keyPath;\n let object = newRecord.value;\n let identifier;\n let i = 0; // Just to run the loop at least once\n while (i >= 0) {\n if (typeof object !== \"object\") {\n throw new DataError();\n }\n i = remainingKeyPath.indexOf(\".\");\n if (i >= 0) {\n identifier = remainingKeyPath.slice(0, i);\n remainingKeyPath = remainingKeyPath.slice(i + 1);\n if (!Object.hasOwn(object, identifier)) {\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: {}\n });\n }\n object = object[identifier];\n }\n }\n identifier = remainingKeyPath;\n\n // Bypass prototype when setting (See `bindings-inject-values-bypass.any.js`)\n // Equivalent to `object[identifier] = ...` without using `Object.prototype`\n Object.defineProperty(object, identifier, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: newRecord.key\n });\n }\n } else if (this.keyGenerator !== null && typeof newRecord.key === \"number\") {\n this.keyGenerator.setIfLarger(newRecord.key);\n }\n const existingRecord = this.records.put(newRecord, noOverwrite);\n let rolledBack = false;\n const rollbackStoreRecord = () => {\n if (rolledBack) {\n return;\n }\n rolledBack = true;\n if (existingRecord) {\n // overwrite on rollback\n this.storeRecord(existingRecord, false);\n } else {\n // delete on rollback\n this.deleteRecord(newRecord.key);\n }\n };\n rollbackLogForThisOperation.push(rollbackStoreRecord);\n if (rollbackLog) {\n rollbackLog.push(rollbackStoreRecord);\n }\n\n // Delete existing indexes\n if (existingRecord) {\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(newRecord.key);\n }\n }\n\n // Update indexes\n try {\n for (const rawIndex of this.rawIndexes.values()) {\n if (rawIndex.initialized) {\n rawIndex.storeRecord(newRecord);\n }\n }\n } catch (err) {\n // If this request fails here and preventDefault is used to stop the transaction from aborting, we need to roll back the addition of this record to the store, otherwise it will be present in subsequent requests on this transaction. Same for key generator.\n if (err.name === \"ConstraintError\") {\n for (const rollback of rollbackLogForThisOperation) {\n rollback();\n }\n }\n throw err;\n }\n return newRecord.key;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-deleting-records-from-an-object-store\n deleteRecord(key, rollbackLog) {\n const deletedRecords = this.records.delete(key);\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.deleteByValue(key);\n }\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-steps-for-clearing-an-object-store\n clear(rollbackLog) {\n const deletedRecords = this.records.clear();\n if (rollbackLog) {\n for (const record of deletedRecords) {\n rollbackLog.push(() => {\n this.storeRecord(record, true);\n });\n }\n }\n for (const rawIndex of this.rawIndexes.values()) {\n rawIndex.records.clear();\n }\n }\n count(range) {\n // optimization: if there is no range, or if the range is everything, then we can just count the total size\n if (range === undefined || range.lower === undefined && range.upper === undefined) {\n return this.records.size();\n }\n let count = 0;\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for (const record of this.records.values(range)) {\n count += 1;\n }\n return count;\n }\n}\nexport default ObjectStore;","import FakeEvent from \"./FakeEvent.js\";\nimport { queueTask } from \"./scheduling.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-closing-steps\nconst closeConnection = (connection, forced = false) => {\n connection._closePending = true;\n const transactionsComplete = connection._rawDatabase.transactions.every(transaction => {\n return transaction._state === \"finished\";\n });\n if (transactionsComplete) {\n connection._closed = true;\n connection._rawDatabase.connections = connection._rawDatabase.connections.filter(otherConnection => {\n return connection !== otherConnection;\n });\n if (forced) {\n const event = new FakeEvent(\"close\", {\n bubbles: false,\n cancelable: false\n });\n event.eventPath = [];\n connection.dispatchEvent(event);\n }\n } else {\n queueTask(() => {\n closeConnection(connection, forced);\n });\n }\n};\nexport default closeConnection;","import FDBTransaction from \"./FDBTransaction.js\";\nimport { ConstraintError, InvalidAccessError, InvalidStateError, NotFoundError, TransactionInactiveError } from \"./lib/errors.js\";\nimport FakeDOMStringList from \"./lib/FakeDOMStringList.js\";\nimport FakeEventTarget from \"./lib/FakeEventTarget.js\";\nimport ObjectStore from \"./lib/ObjectStore.js\";\nimport validateKeyPath from \"./lib/validateKeyPath.js\";\nimport closeConnection from \"./lib/closeConnection.js\";\n// Common first 3 steps of https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-createobjectstore and https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\nconst confirmActiveVersionchangeTransaction = database => {\n // Let transaction be database’s upgrade transaction if it is not null, or throw an \"InvalidStateError\" DOMException otherwise.\n let transaction;\n if (database._runningVersionchangeTransaction) {\n // Find the latest versionchange transaction\n transaction = database._rawDatabase.transactions.findLast(tx => {\n return tx.mode === \"versionchange\";\n });\n }\n if (!transaction) {\n throw new InvalidStateError();\n }\n\n // If transaction’s state is not active, then throw a \"TransactionInactiveError\" DOMException.\n if (transaction._state !== \"active\") {\n throw new TransactionInactiveError();\n }\n return transaction;\n};\n\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#database-interface\nclass FDBDatabase extends FakeEventTarget {\n _closePending = false;\n _closed = false;\n _runningVersionchangeTransaction = false;\n constructor(rawDatabase) {\n super();\n this._rawDatabase = rawDatabase;\n this._rawDatabase.connections.push(this);\n this.name = rawDatabase.name;\n this.version = rawDatabase.version;\n this.objectStoreNames = new FakeDOMStringList(...Array.from(rawDatabase.rawObjectStores.keys()).sort());\n }\n\n // http://w3c.github.io/IndexedDB/#dom-idbdatabase-createobjectstore\n createObjectStore(name, options = {}) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n const keyPath = options !== null && options.keyPath !== undefined ? options.keyPath : null;\n const autoIncrement = options !== null && options.autoIncrement !== undefined ? options.autoIncrement : false;\n if (keyPath !== null) {\n validateKeyPath(keyPath);\n }\n if (this._rawDatabase.rawObjectStores.has(name)) {\n throw new ConstraintError();\n }\n if (autoIncrement && (keyPath === \"\" || Array.isArray(keyPath))) {\n throw new InvalidAccessError();\n }\n\n // Save for rollbackLog\n const objectStoreNames = [...this.objectStoreNames];\n const transactionObjectStoreNames = [...transaction.objectStoreNames];\n const rawObjectStore = new ObjectStore(this._rawDatabase, name, keyPath, autoIncrement);\n this.objectStoreNames._push(name);\n this.objectStoreNames._sort();\n transaction._scope.add(name);\n transaction._createdObjectStores.add(rawObjectStore);\n this._rawDatabase.rawObjectStores.set(name, rawObjectStore);\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n transaction._rollbackLog.push(() => {\n rawObjectStore.deleted = true;\n this.objectStoreNames = new FakeDOMStringList(...objectStoreNames);\n transaction.objectStoreNames = new FakeDOMStringList(...transactionObjectStoreNames);\n transaction._scope.delete(rawObjectStore.name);\n this._rawDatabase.rawObjectStores.delete(rawObjectStore.name);\n });\n return transaction.objectStore(name);\n }\n\n // https://www.w3.org/TR/IndexedDB/#dom-idbdatabase-deleteobjectstore\n deleteObjectStore(name) {\n if (name === undefined) {\n throw new TypeError();\n }\n const transaction = confirmActiveVersionchangeTransaction(this);\n\n // Let store be the object store named name in database, or throw a \"NotFoundError\" DOMException if none.\n const store = this._rawDatabase.rawObjectStores.get(name);\n if (store === undefined) {\n throw new NotFoundError();\n }\n\n // Remove store from this’s object store set.\n // This method synchronously modifies the objectStoreNames property on the IDBDatabase instance on which it was called.\n this.objectStoreNames = new FakeDOMStringList(...Array.from(this.objectStoreNames).filter(objectStoreName => {\n return objectStoreName !== name;\n }));\n transaction.objectStoreNames = new FakeDOMStringList(...this.objectStoreNames);\n\n // If there is an object store handle associated with store and transaction, remove all entries from its index set.\n const objectStore = transaction._objectStoresCache.get(name);\n let prevIndexNames;\n if (objectStore) {\n prevIndexNames = [...objectStore.indexNames];\n objectStore.indexNames = new FakeDOMStringList();\n }\n transaction._rollbackLog.push(() => {\n store.deleted = false;\n this._rawDatabase.rawObjectStores.set(store.name, store);\n this.objectStoreNames._push(store.name);\n transaction.objectStoreNames._push(store.name);\n this.objectStoreNames._sort();\n if (objectStore && prevIndexNames) {\n objectStore.indexNames = new FakeDOMStringList(...prevIndexNames);\n }\n });\n\n // Destroy store.\n store.deleted = true;\n this._rawDatabase.rawObjectStores.delete(name);\n transaction._objectStoresCache.delete(name);\n }\n transaction(storeNames, mode, options) {\n mode = mode !== undefined ? mode : \"readonly\";\n if (mode !== \"readonly\" && mode !== \"readwrite\" && mode !== \"versionchange\") {\n throw new TypeError(\"Invalid mode: \" + mode);\n }\n const hasActiveVersionchange = this._rawDatabase.transactions.some(transaction => {\n return transaction._state === \"active\" && transaction.mode === \"versionchange\" && transaction.db === this;\n });\n if (hasActiveVersionchange) {\n throw new InvalidStateError();\n }\n if (this._closePending) {\n throw new InvalidStateError();\n }\n if (!Array.isArray(storeNames)) {\n storeNames = [storeNames];\n }\n if (storeNames.length === 0 && mode !== \"versionchange\") {\n throw new InvalidAccessError();\n }\n for (const storeName of storeNames) {\n if (!this.objectStoreNames.contains(storeName)) {\n throw new NotFoundError(\"No objectStore named \" + storeName + \" in this database\");\n }\n }\n\n // the actual algo is more complex but this passes the IDB tests: https://webidl.spec.whatwg.org/#es-dictionary\n const durability = options?.durability ?? \"default\";\n // invalid enums throw a TypeError: https://webidl.spec.whatwg.org/#es-enumeration\n if (durability !== \"default\" && durability !== \"strict\" && durability !== \"relaxed\") {\n throw new TypeError(\n // based on Firefox's error message\n `'${durability}' (value of 'durability' member of IDBTransactionOptions) ` + `is not a valid value for enumeration IDBTransactionDurability`);\n }\n const tx = new FDBTransaction(storeNames, mode, durability, this);\n this._rawDatabase.transactions.push(tx);\n this._rawDatabase.processTransactions(); // See if can start right away (async)\n\n return tx;\n }\n close() {\n closeConnection(this);\n }\n get [Symbol.toStringTag]() {\n return \"IDBDatabase\";\n }\n}\nexport default FDBDatabase;","import FDBRequest from \"./FDBRequest.js\";\nclass FDBOpenDBRequest extends FDBRequest {\n onupgradeneeded = null;\n onblocked = null;\n get [Symbol.toStringTag]() {\n return \"IDBOpenDBRequest\";\n }\n}\nexport default FDBOpenDBRequest;","import FakeEvent from \"./lib/FakeEvent.js\";\nclass FDBVersionChangeEvent extends FakeEvent {\n constructor(type, parameters = {}) {\n super(type);\n this.newVersion = parameters.newVersion !== undefined ? parameters.newVersion : null;\n this.oldVersion = parameters.oldVersion !== undefined ? parameters.oldVersion : 0;\n }\n get [Symbol.toStringTag]() {\n return \"IDBVersionChangeEvent\";\n }\n}\nexport default FDBVersionChangeEvent;","/**\n * Minimal polyfill of `Set.prototype.intersection`, available in Node 22+.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/intersection\n * @param set1\n * @param set2\n */\nexport function intersection(set1, set2) {\n if (\"intersection\" in set1) {\n return set1.intersection(set2);\n }\n return new Set([...set1].filter(item => set2.has(item)));\n}","import { queueTask } from \"./scheduling.js\";\nimport { intersection } from \"./intersection.js\";\n// http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#dfn-database\nclass Database {\n transactions = [];\n rawObjectStores = new Map();\n connections = [];\n constructor(name, version) {\n this.name = name;\n this.version = version;\n this.processTransactions = this.processTransactions.bind(this);\n }\n processTransactions() {\n queueTask(() => {\n const running = this.transactions.filter(transaction => transaction._started && transaction._state !== \"finished\");\n const waiting = this.transactions.filter(transaction => !transaction._started && transaction._state !== \"finished\");\n\n // The next transaction to run is the first waiting one that doesn't overlap with either a running one or a\n // preceding waiting one. This allows non-overlapping transactions to run in parallel.\n // The exception is readonly transactions, which are allowed to run in parallel with other readonly\n // transactions, even with overlapping scopes, since no data is being modified.\n const next = waiting.find((transaction, i) => {\n const anyRunning = running.some(other => !(transaction.mode === \"readonly\" && other.mode === \"readonly\") && intersection(other._scope, transaction._scope).size > 0);\n if (anyRunning) {\n return false;\n }\n\n // If any _preceding_ waiting transactions are blocked, then that's also blocking.\n // E.g. if you have 3 transactions: [a], [a,b], and [b,c], then [a] blocks [a,b] which blocks [b,c]\n // until [a] is complete, even though [a] and [b,c] share no overlap.\n // Note that readonly transactions do not have to be handled as a special case here,\n // because if any transactions with overlapping scopes are blocked, then we can assume they are\n const anyWaiting = waiting.slice(0, i).some(other => intersection(other._scope, transaction._scope).size > 0);\n return !anyWaiting;\n });\n if (next) {\n next.addEventListener(\"complete\", this.processTransactions);\n next.addEventListener(\"abort\", this.processTransactions);\n next._start();\n }\n });\n }\n}\nexport default Database;","// WebIDL requires passing the right number of non-optional arguments, e.g. IDBFactory.open() must have at least 1 arg\nexport function validateRequiredArguments(numArguments, expectedNumArguments, methodName) {\n if (numArguments < expectedNumArguments) {\n // imitate Firefox's error message\n throw new TypeError(`${methodName}: At least ${expectedNumArguments} ${expectedNumArguments === 1 ? \"argument\" : \"arguments\"} ` + `required, but only ${arguments.length} passed`);\n }\n}","import FDBDatabase from \"./FDBDatabase.js\";\nimport FDBOpenDBRequest from \"./FDBOpenDBRequest.js\";\nimport FDBVersionChangeEvent from \"./FDBVersionChangeEvent.js\";\nimport cmp from \"./lib/cmp.js\";\nimport Database from \"./lib/Database.js\";\nimport enforceRange from \"./lib/enforceRange.js\";\nimport { AbortError, VersionError } from \"./lib/errors.js\";\nimport FakeEvent from \"./lib/FakeEvent.js\";\nimport { queueTask } from \"./lib/scheduling.js\";\nimport { validateRequiredArguments } from \"./lib/validateRequiredArguments.js\";\n// https://w3c.github.io/IndexedDB/#connection-queue\nconst runTaskInConnectionQueue = (connectionQueues, name, task) => {\n // Let queue be the connection queue for storageKey and name.\n // (note FakeIndexedDB does not support storageKeys currently)\n // Add request to queue.\n // Wait until all previous requests in queue have been processed.\n const queue = connectionQueues.get(name) ?? Promise.resolve();\n connectionQueues.set(name, queue.then(task));\n};\nconst waitForOthersClosedDelete = (databases, name, openDatabases, cb) => {\n const anyOpen = openDatabases.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen) {\n queueTask(() => waitForOthersClosedDelete(databases, name, openDatabases, cb));\n return;\n }\n databases.delete(name);\n cb(null);\n};\n\n// https://w3c.github.io/IndexedDB/#delete-a-database\nconst deleteDatabase = (databases, connectionQueues, name, request, cb) => {\n const deleteDBTask = () => {\n return new Promise(resolve => {\n const db = databases.get(name);\n const oldVersion = db !== undefined ? db.version : 0;\n const onComplete = err => {\n try {\n if (err) {\n cb(err);\n } else {\n cb(null, oldVersion);\n }\n } finally {\n resolve();\n }\n };\n try {\n const db = databases.get(name);\n if (db === undefined) {\n onComplete(null);\n return;\n }\n\n // Let openConnections be the set of all connections associated with db.\n const openConnections = db.connections.filter(connection => {\n return !connection._closed;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and null.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: null,\n oldVersion: db.version\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired. (i.e. queue a task)\n queueTask(() => {\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to\n // fire a version change event named blocked at request with db’s version and null.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: null,\n oldVersion: db.version\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n waitForOthersClosedDelete(databases, name, openConnections, onComplete);\n });\n } catch (err) {\n onComplete(err);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, deleteDBTask);\n};\n\n// https://w3c.github.io/IndexedDB/#ref-for-database-version%E2%91%A0%E2%91%A2\nconst runVersionchangeTransaction = (connection, version, request, cb) => {\n connection._runningVersionchangeTransaction = true;\n const oldVersion = connection._oldVersion = connection.version;\n\n // Let openConnections be the set of all connections, except connection, associated with db.\n const openConnections = connection._rawDatabase.connections.filter(otherDatabase => {\n return connection !== otherDatabase;\n });\n\n // For each entry of openConnections that does not have its close pending flag set to true, queue a\n // database task to fire a version change event named versionchange at entry with db’s version and version.\n for (const openDatabase2 of openConnections) {\n if (!openDatabase2._closed && !openDatabase2._closePending) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"versionchange\", {\n newVersion: version,\n oldVersion\n });\n openDatabase2.dispatchEvent(event);\n });\n }\n }\n\n // Wait for all of the events to be fired.\n // (i.e. queue a task)\n queueTask(() => {\n const anyOpen = openConnections.some(openDatabase3 => {\n return !openDatabase3._closed && !openDatabase3._closePending;\n });\n\n // If any of the connections in openConnections are still not closed, queue a database task to fire a version change event named blocked at request with db’s version and version.\n if (anyOpen) {\n queueTask(() => {\n const event = new FDBVersionChangeEvent(\"blocked\", {\n newVersion: version,\n oldVersion\n });\n request.dispatchEvent(event);\n });\n }\n\n // Wait until all connections in openConnections are closed.\n const waitForOthersClosed = () => {\n const anyOpen2 = openConnections.some(openDatabase2 => {\n return !openDatabase2._closed && !openDatabase2._closePending;\n });\n if (anyOpen2) {\n queueTask(waitForOthersClosed);\n return;\n }\n\n // Set the version of database to version. This change is considered part of the transaction, and so if the\n // transaction is aborted, this change is reverted.\n connection._rawDatabase.version = version;\n connection.version = version;\n\n // Get rid of this setImmediate?\n const transaction = connection.transaction(Array.from(connection.objectStoreNames), \"versionchange\");\n\n // associate the transaction with the open request for later lookup\n transaction._openRequest = request;\n\n // https://w3c.github.io/IndexedDB/#upgrade-a-database\n // Set request’s result to connection.\n request.result = connection;\n // Set request’s done flag to true.\n request.readyState = \"done\";\n // Set request’s transaction to transaction.\n request.transaction = transaction;\n transaction._rollbackLog.push(() => {\n connection._rawDatabase.version = oldVersion;\n connection.version = oldVersion;\n });\n\n // Set transaction’s state to active.\n transaction._state = \"active\";\n\n // Let didThrow be the result of firing a version change event named upgradeneeded at request with old version and version.\n const event = new FDBVersionChangeEvent(\"upgradeneeded\", {\n newVersion: version,\n oldVersion\n });\n let didThrow = false;\n try {\n request.dispatchEvent(event);\n } catch (_err) {\n didThrow = true;\n }\n const concludeUpgrade = () => {\n // If transaction’s state is active, then:\n if (transaction._state === \"active\") {\n // Set transaction’s state to inactive.\n transaction._state = \"inactive\";\n if (didThrow) {\n // If didThrow is true, run abort a transaction with transaction and a newly created \"AbortError\" DOMException.\n transaction._abort(\"AbortError\");\n }\n }\n };\n\n // The \"upgrade a database\" steps are supposed to run as a database task on the database access task source\n // (i.e. off the main thread), but since we're actually running on the main thread, we have to be tricky:\n // 1. If any `upgradeneeded` event handlers errored, abort synchronously\n // 2. Else yield to allow any microtasks to run in response to that event\n if (didThrow) {\n concludeUpgrade();\n } else {\n queueTask(concludeUpgrade);\n }\n transaction._prioritizedListeners.set(\"error\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // throw arguments[0].target.error;\n // console.log(\"error in versionchange transaction - not sure if anything needs to be done here\", e.target.error.name);\n });\n transaction._prioritizedListeners.set(\"abort\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n queueTask(() => {\n // Reset transaction in a tick after onabort (upgrade-transaction-lifecycle-user-aborted.any)\n request.transaction = null;\n cb(new AbortError());\n });\n });\n transaction._prioritizedListeners.set(\"complete\", () => {\n connection._runningVersionchangeTransaction = false;\n connection._oldVersion = undefined;\n // Let other complete event handlers run before continuing\n queueTask(() => {\n // Reset transaction in a tick after oncomplete (upgrade-transaction-lifecycle-committed.any.js)\n request.transaction = null;\n if (connection._closePending) {\n cb(new AbortError());\n } else {\n cb(null);\n }\n });\n });\n };\n waitForOthersClosed();\n });\n};\n\n// https://w3c.github.io/IndexedDB/#opening\nconst openDatabase = (databases, connectionQueues, name, version, request, cb) => {\n const openDBTask = () => {\n return new Promise(resolve => {\n const onComplete = err => {\n try {\n if (err) {\n // DO THIS HERE: ensure that connection is closed by running the steps for closing a database connection before these\n // steps are aborted.\n cb(err);\n } else {\n cb(null, connection);\n }\n } finally {\n resolve();\n }\n };\n\n // Let db be the database named name in storageKey, or null otherwise.\n let db = databases.get(name);\n if (db === undefined) {\n // If db is null, let db be a new database with name `name`, version 0 (zero), and with no object stores.\n db = new Database(name, 0);\n databases.set(name, db);\n }\n\n // If version is undefined, let version be 1 if db is null, or db’s version otherwise.\n if (version === undefined) {\n version = db.version !== 0 ? db.version : 1;\n }\n\n // If db’s version is greater than version, return a newly created \"VersionError\" DOMException and abort these steps.\n if (db.version > version) {\n return onComplete(new VersionError());\n }\n\n // Let connection be a new connection to db.\n const connection = new FDBDatabase(db);\n\n // If db’s version is less than version, then:\n if (db.version < version) {\n // (run a version change transaction and resolve so that the next promise in the queue will execute)\n runVersionchangeTransaction(connection, version, request, err => {\n onComplete(err);\n });\n } else {\n onComplete(null);\n }\n });\n };\n runTaskInConnectionQueue(connectionQueues, name, openDBTask);\n};\nclass FDBFactory {\n _databases = new Map();\n // https://w3c.github.io/IndexedDB/#connection-queue\n _connectionQueues = new Map(); // promise chain as lightweight FIFO task queue\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-cmp\n cmp(first, second) {\n validateRequiredArguments(arguments.length, 2, \"IDBFactory.cmp\");\n return cmp(first, second);\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-deletedatabase\n deleteDatabase(name) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.deleteDatabase\");\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n deleteDatabase(this._databases, this._connectionQueues, name, request, (err, oldVersion) => {\n if (err) {\n request.error = new DOMException(err.message, err.name);\n request.readyState = \"done\";\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = undefined;\n request.readyState = \"done\";\n const event2 = new FDBVersionChangeEvent(\"success\", {\n newVersion: null,\n oldVersion\n });\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // http://www.w3.org/TR/2015/REC-IndexedDB-20150108/#widl-IDBFactory-open-IDBOpenDBRequest-DOMString-name-unsigned-long-long-version\n open(name, version) {\n validateRequiredArguments(arguments.length, 1, \"IDBFactory.open\");\n if (arguments.length > 1 && version !== undefined) {\n // Based on spec, not sure why \"MAX_SAFE_INTEGER\" instead of \"unsigned long long\", but it's needed to pass\n // tests\n version = enforceRange(version, \"MAX_SAFE_INTEGER\");\n }\n if (version === 0) {\n throw new TypeError(\"Database version cannot be 0\");\n }\n const request = new FDBOpenDBRequest();\n request.source = null;\n queueTask(() => {\n openDatabase(this._databases, this._connectionQueues, name, version, request, (err, connection) => {\n if (err) {\n request.result = undefined;\n request.readyState = \"done\";\n request.error = new DOMException(err.message, err.name);\n const event = new FakeEvent(\"error\", {\n bubbles: true,\n cancelable: true\n });\n event.eventPath = [];\n request.dispatchEvent(event);\n return;\n }\n request.result = connection;\n request.readyState = \"done\";\n const event2 = new FakeEvent(\"success\");\n event2.eventPath = [];\n request.dispatchEvent(event2);\n });\n });\n return request;\n }\n\n // https://w3c.github.io/IndexedDB/#dom-idbfactory-databases\n databases() {\n return Promise.resolve(Array.from(this._databases.entries(), ([name, database]) => {\n const activeVersionChangeConnection = database.connections.find(connection => connection._runningVersionchangeTransaction);\n // If a versionchange is in progress, report the old version. See `get-databases.any.js` test:\n // \"The result of databases() should contain the versions of databases at the time of calling,\n // regardless of versionchange transactions currently running.\"\n const version = activeVersionChangeConnection ? activeVersionChangeConnection._oldVersion : database.version;\n return {\n name,\n version\n };\n }).filter(({\n version\n }) => {\n // Ignore newly-created DBs with active versionchange transactions. See `get-databases.any.js` test:\n // \"The result of databases() should be only those databases which have been created at the\n // time of calling, regardless of versionchange transactions currently running.\"\n return version > 0;\n }));\n }\n get [Symbol.toStringTag]() {\n return \"IDBFactory\";\n }\n}\nexport default FDBFactory;","import FDBFactory from \"./FDBFactory.js\";\nconst fakeIndexedDB = new FDBFactory();\nexport default fakeIndexedDB;","import fakeIndexedDB from \"../build/esm/fakeIndexedDB.js\";\nimport FDBCursor from \"../build/esm/FDBCursor.js\";\nimport FDBCursorWithValue from \"../build/esm/FDBCursorWithValue.js\";\nimport FDBDatabase from \"../build/esm/FDBDatabase.js\";\nimport FDBFactory from \"../build/esm/FDBFactory.js\";\nimport FDBIndex from \"../build/esm/FDBIndex.js\";\nimport FDBKeyRange from \"../build/esm/FDBKeyRange.js\";\nimport FDBObjectStore from \"../build/esm/FDBObjectStore.js\";\nimport FDBOpenDBRequest from \"../build/esm/FDBOpenDBRequest.js\";\nimport FDBRecord from \"../build/esm/FDBRecord.js\";\nimport FDBRequest from \"../build/esm/FDBRequest.js\";\nimport FDBTransaction from \"../build/esm/FDBTransaction.js\";\nimport FDBVersionChangeEvent from \"../build/esm/FDBVersionChangeEvent.js\";\n\n// http://stackoverflow.com/a/33268326/786644 - works in browser, worker, and Node.js\nvar globalVar =\n typeof window !== \"undefined\"\n ? window\n : typeof WorkerGlobalScope !== \"undefined\"\n ? self\n : typeof global !== \"undefined\"\n ? global\n : Function(\"return this;\")();\n\n// Partly match the native behavior for `globalThis.indexedDB`, `globalThis.IDBCursor`, etc.\n// Per the IDL, `indexedDB` is readonly but the others are readwrite. For us, though, we want it to still\n// be overwritable with `globalThis.<global> = ...`, so we make them all readwrite.\n// https://w3c.github.io/IndexedDB/#idl-index\nconst createPropertyDescriptor = (value) => {\n return {\n value,\n enumerable: false,\n configurable: true,\n writable: true,\n };\n};\n\nObject.defineProperties(globalVar, {\n indexedDB: createPropertyDescriptor(fakeIndexedDB),\n IDBCursor: createPropertyDescriptor(FDBCursor),\n IDBCursorWithValue: createPropertyDescriptor(FDBCursorWithValue),\n IDBDatabase: createPropertyDescriptor(FDBDatabase),\n IDBFactory: createPropertyDescriptor(FDBFactory),\n IDBIndex: createPropertyDescriptor(FDBIndex),\n IDBKeyRange: createPropertyDescriptor(FDBKeyRange),\n IDBObjectStore: createPropertyDescriptor(FDBObjectStore),\n IDBOpenDBRequest: createPropertyDescriptor(FDBOpenDBRequest),\n IDBRecord: createPropertyDescriptor(FDBRecord),\n IDBRequest: createPropertyDescriptor(FDBRequest),\n IDBTransaction: createPropertyDescriptor(FDBTransaction),\n IDBVersionChangeEvent: createPropertyDescriptor(FDBVersionChangeEvent),\n});\n","/**\n * arbi login [--email <email>] [--password <password>] [--signing-key <key>]\n *\n * Authenticates via SDK, stores signing key.\n * Supports password login, SSO login, or signing-key login (for agent recovery).\n * If email/password not provided via flags or env vars, prompts interactively.\n * After login, shows interactive workspace picker.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport {\n performPasswordLogin,\n performSigningKeyLogin,\n performSsoDeviceFlowLogin,\n formatWorkspaceChoices,\n} from '@arbidocs/sdk'\nimport { success, error, dim, ref } from '../output.js'\nimport { store, updateConfig, getConfig, clearChatSession } from '../config.js'\nimport { promptInput, promptPassword, promptSelect } from '../prompts.js'\nimport { checkForUpdates } from '../version-check.js'\nimport { runAction, formatCliError } from '../helpers.js'\nimport { updateCompletionCache } from '../completion-cache.js'\nimport { setupAgent, startListening } from './listen.js'\n\nexport function registerLoginCommand(program: Command): void {\n program\n .command('login')\n .description('Log in to ARBI')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('-k, --signing-key <key>', 'Signing key (base64) for agent recovery login')\n .option('-w, --workspace <id>', 'Workspace ID to select after login')\n .option('--sso', 'Log in with Auth0 SSO (device flow)')\n .option('--agent <name>', 'Agent backend to configure (claude, openclaw)')\n .option('--listen', 'Start DM listener after login')\n .option('--json', 'Emit a single JSON object on success (scripting)')\n .action(\n (opts: {\n email?: string\n password?: string\n signingKey?: string\n workspace?: string\n sso?: boolean\n agent?: string\n listen?: boolean\n json?: boolean\n }) =>\n runAction(async () => {\n const config = store.requireConfig()\n\n // Guard: non-TTY stdin + missing credentials → print a clear error\n // instead of inquirer's confusing \"User force closed the prompt with 0 null\".\n const isTty = process.stdin.isTTY\n const emailFromFlagOrEnv = opts.email || process.env.ARBI_EMAIL\n if (!isTty && !emailFromFlagOrEnv) {\n const msg =\n 'Email is required when stdin is not a TTY. Use --email <email> or set ARBI_EMAIL.'\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(msg)\n process.exit(1)\n }\n const passwordFromFlagOrEnv = opts.password || process.env.ARBI_PASSWORD\n if (!isTty && !passwordFromFlagOrEnv && !opts.signingKey) {\n // `--sso` still needs the master password: ARBI is E2E-encrypted,\n // and the password is the seed for the user's encryption keys.\n // The SSO token only authenticates the user with Auth0; it can't\n // unlock the user's E2E vault on its own. Surface that here so\n // an agent doesn't have to read the source to learn why.\n const why = opts.sso\n ? '\\nNote: --sso still requires --password — the master password is the E2E key seed,\\n' +\n 'the SSO token only proves identity. ARBI has no passwordless mode.'\n : ''\n const msg =\n 'Password is required when stdin is not a TTY. Use --password <password> or set ARBI_PASSWORD.' +\n why\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(msg)\n process.exit(1)\n }\n\n // Resolve email: flag > env var > interactive prompt\n const email = emailFromFlagOrEnv || (await promptInput('Email'))\n\n try {\n let ssoPolling = false\n const { arbi } = opts.signingKey\n ? await performSigningKeyLogin(config, email, opts.signingKey, store)\n : opts.sso\n ? await (async () => {\n const pw = passwordFromFlagOrEnv || (await promptPassword('Password'))\n const result = await performSsoDeviceFlowLogin(config, email, pw, store, {\n onUserCode: (userCode: string, verificationUri: string) => {\n console.log(`\\nOpen this URL in your browser:\\n ${verificationUri}\\n`)\n console.log(`And enter code: ${userCode}\\n`)\n console.log('Waiting for authorization...')\n ssoPolling = true\n },\n onPoll: () => {\n process.stdout.write('.')\n },\n })\n if (ssoPolling) console.log('\\n')\n return result\n })()\n : await (async () => {\n const pw = passwordFromFlagOrEnv || (await promptPassword('Password'))\n return performPasswordLogin(config, email, pw, store)\n })()\n\n // Confirm authentication succeeded (human-readable mode only)\n if (!opts.json) success(`Logged in as ${email}`)\n\n // Clear stale chat session from previous login\n clearChatSession()\n\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n updateCompletionCache(wsList)\n\n // Filter to workspaces where user has a role (member of workspace)\n const memberWorkspaces = wsList.filter((ws) =>\n ws.users?.some((u) => u.user.email === email)\n )\n\n let selectedWorkspace: { external_id: string; name: string } | undefined\n\n if (memberWorkspaces.length === 0) {\n if (!opts.json) {\n console.log('No workspaces found. Create one with: arbi workspace create <name>')\n }\n } else if (opts.workspace) {\n const ws = memberWorkspaces.find((w) => w.external_id === opts.workspace)\n if (!ws) {\n const msg = `Workspace ${opts.workspace} not found or you don't have access.`\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(msg)\n process.exit(1)\n }\n updateConfig({ selectedWorkspaceId: ws.external_id })\n selectedWorkspace = { external_id: ws.external_id, name: ws.name }\n if (!opts.json) success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n } else if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n selectedWorkspace = {\n external_id: memberWorkspaces[0].external_id,\n name: memberWorkspaces[0].name,\n }\n if (!opts.json)\n success(\n `Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`\n )\n } else if (opts.json) {\n // JSON mode with multiple workspaces: don't prompt; caller picks\n // via --workspace or `arbi workspace select`.\n } else {\n const choices = formatWorkspaceChoices(memberWorkspaces)\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = memberWorkspaces.find((w) => w.external_id === selected)!\n selectedWorkspace = { external_id: selected, name: ws.name }\n success(`Workspace: ${ws.name} (${ref(selected)})`)\n dim('\\nTip: Run \"arbi config alias\" to use A as a shortcut for \"arbi ask\"')\n }\n\n // Agent setup + listener (optional)\n if (opts.agent || opts.listen) {\n await setupAgent(opts.agent, config)\n if (opts.listen) {\n await startListening(opts.agent, config)\n }\n }\n\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: true,\n email,\n server: config.baseUrl,\n workspace: selectedWorkspace ?? null,\n workspaces_available: memberWorkspaces.length,\n })\n )\n }\n } catch (err) {\n const msg = formatCliError(err)\n if (opts.json) console.log(JSON.stringify({ ok: false, error: msg }))\n else error(`Login failed: ${msg}`)\n process.exit(1)\n } finally {\n await checkForUpdates(getConfig()?.autoUpdate)\n }\n })()\n )\n}\n","/**\n * Version check with 24h cache.\n *\n * - On login: warns or auto-updates depending on config.autoUpdate\n * - On errors: hints from cache only (no network)\n * - On update: shows changelog between current and target version\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\nimport { execSync } from 'node:child_process'\nimport { warn } from './output.js'\n\ndeclare const __CLI_VERSION__: string\n\ninterface VersionCache {\n latest: string\n checkedAt: number\n}\n\nconst CACHE_FILE = path.join(os.homedir(), '.arbi', 'version-cache.json')\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000 // 24 hours\n\nfunction readCache(): VersionCache | null {\n try {\n const data = JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'))\n if (data.latest && data.checkedAt && Date.now() - data.checkedAt < CACHE_TTL_MS) {\n return data as VersionCache\n }\n } catch {\n // No cache or invalid\n }\n return null\n}\n\nfunction writeCache(latest: string): void {\n try {\n const dir = path.dirname(CACHE_FILE)\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n fs.writeFileSync(CACHE_FILE, JSON.stringify({ latest, checkedAt: Date.now() }) + '\\n')\n } catch {\n // Non-critical\n }\n}\n\nexport function getLatestVersion(skipCache = false): string | null {\n if (!skipCache) {\n const cached = readCache()\n if (cached) return cached.latest\n }\n\n try {\n const latest = execSync('npm view @arbidocs/cli version 2>/dev/null', {\n encoding: 'utf8',\n timeout: 5000,\n }).trim()\n writeCache(latest)\n return latest\n } catch {\n return null\n }\n}\n\nexport function getCurrentVersion(): string {\n return __CLI_VERSION__\n}\n\n// ── Changelog reading ───────────────────────────────────────────────────────\n\n/**\n * Read CHANGELOG.md bundled in the installed @arbidocs/cli package\n * and extract sections between fromVersion (exclusive) and toVersion (inclusive).\n *\n * Call this AFTER npm install so the file on disk is from the new version.\n */\nexport function readChangelog(fromVersion: string, toVersion: string): string | null {\n try {\n const globalRoot = execSync('npm root -g', { encoding: 'utf8', timeout: 5000 }).trim()\n const changelogPath = path.join(globalRoot, '@arbidocs', 'cli', 'CHANGELOG.md')\n const text = fs.readFileSync(changelogPath, 'utf8')\n return extractSections(text, fromVersion, toVersion)\n } catch {\n return null\n }\n}\n\n/**\n * Parse CHANGELOG.md and return all ## sections from toVersion\n * down to (but not including) fromVersion.\n *\n * Filters out: compare-changes links, Chore sections, and Contributors.\n */\nfunction extractSections(changelog: string, fromVersion: string, toVersion: string): string | null {\n const lines = changelog.split('\\n')\n const sections: string[] = []\n let capturing = false\n let skipSection = false\n\n for (const line of lines) {\n // Match \"## v0.3.3\" style headers\n const match = line.match(/^## v(.+)/)\n if (match) {\n skipSection = false\n const version = match[1].trim()\n if (version === fromVersion) {\n // Reached the user's current version — stop\n break\n }\n // Start capturing from toVersion (or any version between to and from)\n if (version === toVersion || capturing) {\n capturing = true\n }\n }\n\n if (!capturing) continue\n\n // Skip [compare changes] links\n if (line.match(/^\\[compare changes\\]/)) continue\n\n // Skip Chore and Contributors ### sections (and their content)\n if (line.match(/^### .*(Chore|Contributors)/)) {\n skipSection = true\n continue\n }\n // A new ### section ends the skip\n if (skipSection && line.match(/^### /)) {\n skipSection = false\n }\n if (skipSection) continue\n\n sections.push(line)\n }\n\n // Collapse multiple blank lines into one\n const result = sections\n .join('\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim()\n return result || null\n}\n\n/**\n * Print changelog between two versions. Reads from the bundled CHANGELOG.md\n * in the installed package — call AFTER npm install.\n */\nexport function showChangelog(fromVersion: string, toVersion: string): void {\n const changelog = readChangelog(fromVersion, toVersion)\n if (changelog) {\n console.log('\\n' + changelog)\n }\n}\n\n// ── Update checks ───────────────────────────────────────────────────────────\n\n/**\n * Called after login. If auto-update is enabled, updates in place.\n * Otherwise warns with the standard prefix.\n */\nexport async function checkForUpdates(autoUpdate?: boolean): Promise<void> {\n try {\n const latest = getLatestVersion()\n if (!latest || latest === __CLI_VERSION__) return\n\n if (autoUpdate) {\n warn(`\\nYour arbi version is out of date (${__CLI_VERSION__} → ${latest}). Updating...`)\n execSync('npm install -g @arbidocs/cli@latest', { stdio: 'inherit' })\n showChangelog(__CLI_VERSION__, latest)\n console.log(`Updated to ${latest}.`)\n } else {\n warn(\n `\\nYour arbi version is out of date (${__CLI_VERSION__} → ${latest}).` +\n `\\nRun \"arbi update\" to upgrade, or \"arbi update auto\" to always stay up to date.`\n )\n }\n } catch {\n // Silent\n }\n}\n\nconst NAG_FILE = path.join(os.homedir(), '.arbi', 'last-update-hint.json')\nconst NAG_INTERVAL_MS = 24 * 60 * 60 * 1000 // 24h\n\nfunction shouldShowNag(latest: string): boolean {\n // Skip in JSON / scripted paths — an agent piping output to jq shouldn't\n // have its stderr polluted on every error, and a once-a-day human hint is\n // plenty. Detect via env (set explicitly by long-running commands) OR by\n // sniffing `--json` in argv (cheap, covers every short-lived command path\n // including the error branches that drop into hintUpdateOnError).\n if (process.env.ARBI_JSON === '1') return false\n if (process.argv.includes('--json')) return false\n try {\n const data = JSON.parse(fs.readFileSync(NAG_FILE, 'utf8')) as {\n latest?: string\n shownAt?: number\n }\n if (\n data.latest === latest &&\n typeof data.shownAt === 'number' &&\n Date.now() - data.shownAt < NAG_INTERVAL_MS\n ) {\n return false\n }\n } catch {\n // No file yet — first nag of the day, fall through.\n }\n return true\n}\n\nfunction markNagShown(latest: string): void {\n try {\n const dir = path.dirname(NAG_FILE)\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n fs.writeFileSync(NAG_FILE, JSON.stringify({ latest, shownAt: Date.now() }) + '\\n')\n } catch {\n // Non-critical\n }\n}\n\n/**\n * On unexpected errors, hint from cache only (no network call). Gated to once\n * per day per latest-known version, and suppressed entirely when the caller\n * sets ARBI_JSON=1 (commands wrap their --json paths in that flag).\n */\nexport function hintUpdateOnError(): void {\n try {\n const cached = readCache()\n if (!cached || cached.latest === __CLI_VERSION__) return\n if (!shouldShowNag(cached.latest)) return\n warn(\n `Your arbi version is out of date (${__CLI_VERSION__} → ${cached.latest}). Run \"arbi update\".`\n )\n markNagShown(cached.latest)\n } catch {\n // Silent\n }\n}\n","/**\n * Local task persistence — stores background task metadata in ~/.arbi/tasks.json.\n *\n * Simple JSON file, same pattern as session/config files.\n * Auto-prunes tasks older than 7 days on read.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport interface StoredTask {\n id: string\n question: string\n workspaceId: string\n submittedAt: string\n status: 'queued' | 'in_progress' | 'completed' | 'failed'\n model?: string | null\n}\n\nconst MAX_TASKS = 50\nconst MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000 // 7 days\n\nfunction getTasksFile(): string {\n const configDir = process.env.ARBI_CONFIG_DIR ?? path.join(os.homedir(), '.arbi')\n return path.join(configDir, 'tasks.json')\n}\n\nfunction ensureDir(filePath: string): void {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 })\n }\n}\n\nfunction readTasks(): StoredTask[] {\n try {\n const content = fs.readFileSync(getTasksFile(), 'utf-8')\n return JSON.parse(content) as StoredTask[]\n } catch {\n return []\n }\n}\n\nfunction writeTasks(tasks: StoredTask[]): void {\n const filePath = getTasksFile()\n ensureDir(filePath)\n fs.writeFileSync(filePath, JSON.stringify(tasks, null, 2) + '\\n', { mode: 0o600 })\n}\n\n/** Read tasks, auto-pruning entries older than 7 days. */\nexport function getTasks(): StoredTask[] {\n const now = Date.now()\n const tasks = readTasks().filter((t) => now - new Date(t.submittedAt).getTime() < MAX_AGE_MS)\n return tasks\n}\n\n/** Add a task (most recent first), cap at MAX_TASKS. */\nexport function addTask(task: StoredTask): void {\n const tasks = [task, ...getTasks().filter((t) => t.id !== task.id)].slice(0, MAX_TASKS)\n writeTasks(tasks)\n}\n\n/** Update the status of a stored task. */\nexport function updateTaskStatus(id: string, status: StoredTask['status']): void {\n const tasks = readTasks()\n const task = tasks.find((t) => t.id === id)\n if (task) {\n task.status = status\n writeTasks(tasks)\n }\n}\n\n/** Get the most recently submitted task. */\nexport function getLatestTask(): StoredTask | null {\n const tasks = getTasks()\n return tasks[0] ?? null\n}\n","/**\n * Background WebSocket notifications — prints events to stderr\n * so they don't interfere with piped stdout.\n *\n * Enabled via `arbi config notifications on`.\n * Started automatically by resolveWorkspace() when enabled.\n */\n\nimport {\n connectWithReconnect,\n formatWsMessage,\n type ReconnectableWsConnection,\n type MessageLevel,\n} from '@arbidocs/sdk'\nimport { isMessageType, type WsResponseCompleteMessage } from '@arbidocs/client'\nimport { updateTaskStatus } from './task-store.js'\nimport { chalk } from './output.js'\n\nlet activeConnection: ReconnectableWsConnection | null = null\n\nfunction timestamp(): string {\n return new Date().toLocaleTimeString('en-GB', { hour12: false })\n}\n\nfunction colorize(level: MessageLevel, text: string): string {\n if (level === 'success') return chalk.green(text)\n if (level === 'error') return chalk.red(text)\n if (level === 'warning') return chalk.yellow(text)\n return text\n}\n\n/**\n * Start background WebSocket notifications.\n * Prints to stderr so stdout stays clean for command output.\n * Safe to call multiple times — only one connection is kept.\n */\nexport async function startBackgroundNotifications(\n baseUrl: string,\n accessToken: string\n): Promise<void> {\n if (activeConnection) return\n\n try {\n activeConnection = await connectWithReconnect({\n baseUrl,\n accessToken,\n onMessage: (msg) => {\n // Sync task store when background tasks complete\n if (isMessageType<WsResponseCompleteMessage>(msg, 'response_complete')) {\n updateTaskStatus(msg.response_id, msg.status)\n }\n\n const { text, level } = formatWsMessage(msg)\n process.stderr.write(`\\n${colorize(level, `[${timestamp()}] ${text}`)}\\n`)\n },\n onClose: () => {\n activeConnection = null\n },\n onReconnecting: (attempt, maxRetries) => {\n process.stderr.write(\n `\\n${chalk.yellow(`[${timestamp()}] Reconnecting... (${attempt}/${maxRetries})`)}\\n`\n )\n },\n onReconnected: () => {\n process.stderr.write(`\\n${chalk.green(`[${timestamp()}] Reconnected`)}\\n`)\n },\n onReconnectFailed: () => {\n process.stderr.write(`\\n${chalk.red(`[${timestamp()}] Reconnection failed`)}\\n`)\n },\n })\n } catch {\n // Silent failure — notifications are best-effort\n }\n}\n\nexport function stopBackgroundNotifications(): void {\n activeConnection?.close()\n activeConnection = null\n}\n\n// Clean up on exit\nprocess.on('exit', stopBackgroundNotifications)\nprocess.on('SIGINT', () => {\n stopBackgroundNotifications()\n process.exit(0)\n})\n","/**\n * Shared CLI helpers — eliminates boilerplate across all commands.\n *\n * Error handling wraps core's throwing functions with process.exit(1).\n * Auth/workspace resolution delegates to core via the CLI's store instance.\n * Table formatting and JSON parsing are CLI-specific.\n */\n\nimport {\n ArbiError,\n ArbiApiError,\n getErrorMessage,\n getErrorCode,\n resolveAuth as coreResolveAuth,\n resolveWorkspace as coreResolveWorkspace,\n formatUserName,\n dm as dmOps,\n type AuthContext,\n type WorkspaceContext,\n type UserInfo,\n} from '@arbidocs/sdk'\nimport { store, getConfig, resolveConfig } from './config.js'\nimport { hintUpdateOnError } from './version-check.js'\nimport { startBackgroundNotifications } from './notifications.js'\nimport { error as cliError, chalk } from './output.js'\n\n// Re-export context types and shared utilities for convenience\nexport type { AuthContext, WorkspaceContext, UserInfo }\nexport { formatUserName }\n\n// ── Error handling ────────────────────────────────────────────────────────────\n\n// ── Connection error diagnosis ─────────────────────────────────────────────\n\n/** Map Node.js error codes to actionable user hints. */\nconst CONNECTION_ERROR_HINTS: Record<string, string> = {\n ECONNREFUSED: 'Connection refused. Is the backend running?',\n ECONNRESET: 'Connection reset by server. The backend may have restarted.',\n ENOTFOUND: 'DNS resolution failed. Check the server URL.',\n ETIMEDOUT: 'Connection timed out. Check network connectivity.',\n UNABLE_TO_VERIFY_LEAF_SIGNATURE:\n 'TLS certificate cannot be verified. The cert may be expired or self-signed.',\n CERT_HAS_EXPIRED: 'TLS certificate has expired. Renew with manage-deployment.',\n ERR_TLS_CERT_ALTNAME_INVALID: 'TLS certificate hostname mismatch. Check the server URL.',\n DEPTH_ZERO_SELF_SIGNED_CERT: 'Self-signed TLS certificate. The cert may need to be renewed.',\n SELF_SIGNED_CERT_IN_CHAIN: 'Self-signed certificate in chain. The cert may need to be renewed.',\n}\n\n/**\n * Turn a raw error into an actionable connection-error message.\n * Returns undefined if the error is not a connection-level problem.\n */\nfunction diagnoseConnectionError(err: unknown): string | undefined {\n const code = getErrorCode(err)\n if (code && code in CONNECTION_ERROR_HINTS) {\n return CONNECTION_ERROR_HINTS[code]\n }\n\n // Catch generic \"fetch failed\" with no deeper cause code\n const msg = err instanceof Error ? err.message : ''\n if (msg === 'fetch failed' || msg.includes('fetch failed')) {\n return 'Network error connecting to the server. Run `arbi health` to diagnose.'\n }\n\n return undefined\n}\n\n/**\n * Format an error message with API error details if available.\n *\n * ArbiApiError.apiError may contain:\n * - from authenticatedFetch: { status, statusText }\n * - from requireData/requireOk: the raw OpenAPI error object ({ detail: string, ... })\n *\n * `detail` is sometimes a string and sometimes itself a structured object\n * (e.g. FastAPI validation errors). We unwrap recursively so an agent never\n * sees `[object Object]` from a 422 — that's the single most common \"I can't\n * tell what went wrong\" complaint.\n */\nexport function formatCliError(err: unknown): string {\n // Check for connection-level errors first (gives the best message for \"fetch failed\")\n const connectionHint = diagnoseConnectionError(err)\n if (connectionHint) return connectionHint\n\n if (err instanceof ArbiApiError && err.apiError && typeof err.apiError === 'object') {\n const base = err.message\n const apiErr = err.apiError as Record<string, unknown>\n const detail = stringifyApiDetail(apiErr.detail ?? apiErr.message ?? apiErr.error ?? apiErr)\n if (detail && !base.includes(detail)) {\n return `${base} — ${detail}`\n }\n return base\n }\n return getErrorMessage(err)\n}\n\n/**\n * Squeeze a FastAPI/openapi error body into a single human-readable line.\n * Handles strings, arrays of {loc, msg, ...} validation errors, and nested\n * `{detail: …}` envelopes.\n */\nfunction stringifyApiDetail(value: unknown): string {\n if (!value) return ''\n if (typeof value === 'string') return value\n if (Array.isArray(value)) {\n // FastAPI 422 shape: [{loc: [...], msg: \"...\", type: \"...\"}, ...]\n const parts = value\n .map((v) => {\n if (typeof v === 'string') return v\n if (v && typeof v === 'object') {\n const rec = v as Record<string, unknown>\n const loc = Array.isArray(rec.loc) ? rec.loc.join('.') : undefined\n const msg = typeof rec.msg === 'string' ? rec.msg : undefined\n if (loc && msg) return `${loc}: ${msg}`\n return stringifyApiDetail(v)\n }\n return ''\n })\n .filter(Boolean)\n return parts.join('; ')\n }\n if (typeof value === 'object') {\n const rec = value as Record<string, unknown>\n if (typeof rec.detail === 'string') return rec.detail\n if (Array.isArray(rec.detail)) return stringifyApiDetail(rec.detail)\n if (typeof rec.message === 'string') return rec.message\n if (typeof rec.error === 'string') return rec.error\n // Last-ditch: serialize without exploding into [object Object]\n try {\n const s = JSON.stringify(value)\n // Don't return the empty-object placeholder\n return s === '{}' ? '' : s\n } catch {\n return ''\n }\n }\n return String(value)\n}\n\n/**\n * Wrap a command action — catches errors, formats message, exits.\n * Every command handler should use this instead of manual try/catch.\n */\nexport function runAction(fn: () => Promise<void>): () => Promise<void> {\n return async () => {\n try {\n await fn()\n process.exit(0)\n } catch (err) {\n cliError(`Error: ${formatCliError(err)}`)\n hintUpdateOnError()\n process.exit(1)\n }\n }\n}\n\n// ── Auth & workspace resolution ───────────────────────────────────────────────\n\n/**\n * Authenticate and return the SDK client + config.\n * Auto-detects config if not already set, then delegates to core.\n */\nexport async function resolveAuth(): Promise<AuthContext> {\n try {\n // Ensure config exists (auto-detect if needed) before core auth\n resolveConfig()\n return await coreResolveAuth(store)\n } catch (err) {\n if (err instanceof ArbiError) {\n cliError(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n/**\n * Authenticate, resolve workspace, and set up headers.\n * Auto-detects config if not already set, then delegates to core.\n *\n * @param skipNotifications - Skip background notification WS. Set to true\n * when the command will open its own WebSocket (upload --watch, watch)\n * to avoid session conflicts (backend enforces one WS per session).\n */\nexport async function resolveWorkspace(\n workspaceOpt?: string,\n { skipNotifications = false }: { skipNotifications?: boolean } = {}\n): Promise<WorkspaceContext> {\n try {\n // Ensure config exists (auto-detect if needed) before core auth\n resolveConfig()\n const ctx = await coreResolveWorkspace(store, workspaceOpt)\n\n // Start background notifications if enabled (skip for commands with their own WS)\n if (!skipNotifications && getConfig()?.notifications !== false) {\n startBackgroundNotifications(ctx.config.baseUrl, ctx.accessToken).catch(() => {})\n }\n\n return ctx\n } catch (err) {\n if (err instanceof ArbiError) {\n cliError(err.message)\n process.exit(1)\n }\n throw err\n }\n}\n\n// ── DM crypto context ────────────────────────────────────────────────────────\n\n/**\n * Authenticate and create a DM crypto context for E2E encrypted messaging.\n * Returns the arbi client, auth context, and crypto context together.\n */\nexport async function resolveDmCrypto() {\n const authCtx = await resolveAuth()\n const { arbi, loginResult } = authCtx\n const userExtId = arbi.session.getState().userExtId\n if (!userExtId) {\n cliError('No user ID in session — cannot set up DM encryption.')\n process.exit(1)\n }\n const crypto = dmOps.createDmCryptoContext(arbi, loginResult.signingPrivateKey, userExtId)\n return { ...authCtx, crypto }\n}\n\n// ── Table formatting ──────────────────────────────────────────────────────────\n\nexport interface Column {\n header: string\n width: number\n value: (row: Record<string, unknown>) => string\n}\n\n/**\n * Truncate a string to `width` characters, leaving room for a `…` marker so\n * callers can see at a glance that content was cut. Used by `printTable` and\n * by individual commands that render free-text columns (emails, message\n * bodies). Multi-byte characters count as 1.\n */\nexport function truncate(value: string, width: number): string {\n if (width <= 0) return ''\n if (value.length <= width) return value\n if (width === 1) return '…'\n return value.slice(0, width - 1) + '…'\n}\n\n/**\n * Print a formatted table with header + rows.\n * Truncates overflow with `…` so consumers can spot cut-off cells.\n */\nexport function printTable<T extends Record<string, unknown>>(columns: Column[], rows: T[]): void {\n // Header\n console.log(chalk.bold(columns.map((c) => c.header.padEnd(c.width)).join('')))\n\n // Rows\n for (const row of rows) {\n console.log(\n columns\n .map((c) => {\n const val = c.value(row as Record<string, unknown>) ?? ''\n // Reserve 1 char for trailing space so columns stay readable.\n return truncate(val, c.width - 1).padEnd(c.width)\n })\n .join('')\n )\n }\n}\n\n// ── JSON parsing ──────────────────────────────────────────────────────────────\n\n/**\n * Parse a JSON string argument with a helpful error message.\n */\nexport function parseJsonArg<T = Record<string, unknown>>(input: string, example: string): T {\n try {\n return JSON.parse(input) as T\n } catch {\n cliError(`Invalid JSON. Example: ${example}`)\n process.exit(1)\n }\n}\n\n// ── Non-TTY & JSON helpers ───────────────────────────────────────────────────\n\n/**\n * `true` when stdin is a real terminal. Used everywhere we'd otherwise pop an\n * inquirer prompt — agents pipe stdin closed and we must refuse instead of\n * hanging on (or worse, exit-0-on-cancel as the old `dm send` no-args path\n * did).\n */\nexport function isInteractive(): boolean {\n return Boolean(process.stdin.isTTY)\n}\n\n/**\n * Refuse to launch an interactive prompt when stdin isn't a TTY. Prints a\n * recovery hint to stderr and exits 1 — never returns. Call this at the top\n * of any command path that's about to call inquirer.\n */\nexport function requireInteractive(hint: string): void {\n if (isInteractive()) return\n cliError(`Cannot prompt: not running in a terminal. ${hint}`)\n process.exit(1)\n}\n\n/**\n * Pretty-print a JSON-serializable value to stdout with a trailing newline.\n * Keeping every command on the same printer means `--json` output is byte-for-\n * byte identical across the CLI (no stray colors, no missing newline) and the\n * shape stays parseable when piped to `| jq`.\n */\nexport function printJson(value: unknown): void {\n process.stdout.write(JSON.stringify(value, null, 2) + '\\n')\n}\n\n/**\n * Suggest the canonical next command on a \"not found\" error. Keeps recovery\n * hints uniform — without them an agent reading \"X not found.\" has nowhere\n * to go; with them, it knows to call `arbi <thing> --ids` or similar.\n */\nexport function notFoundHint(message: string, hintCommand: string): string {\n return `${message}\\nTry: ${hintCommand}`\n}\n\n/**\n * Find the candidate name closest to `input`. Used for \"Did you mean …?\"\n * hints when commander's built-in suggestions don't fire (e.g. an unknown\n * subcommand sneaks past a parent command that accepts positional args).\n * Cheap leading-prefix match — good enough for short subcommand vocabularies.\n */\nexport function nearestMatch(input: string, candidates: string[]): string | null {\n if (!input || candidates.length === 0) return null\n const lower = input.toLowerCase()\n const prefix = candidates.find((c) => c.startsWith(lower))\n if (prefix) return prefix\n let best: { name: string; score: number } | null = null\n for (const c of candidates) {\n let score = 0\n for (let i = 0; i < Math.min(c.length, lower.length); i++) {\n if (c[i] === lower[i]) score++\n else break\n }\n if (!best || score > best.score) best = { name: c, score }\n }\n return best && best.score >= 1 ? best.name : null\n}\n\n/**\n * Print a \"did you mean X?\" message and exit 1. Shared by the parent\n * commands that have both a default action and subcommands (`dm`, `task`,\n * `agent`, `session`) — commander treats unknown subcommands as positional\n * args there and the default suggestion machinery skips them.\n */\nexport function suggestSubcommandAndExit(\n parentName: string,\n attempted: string,\n candidates: string[]\n): never {\n const suggestion = nearestMatch(attempted, candidates)\n const hint = suggestion ? ` (Did you mean ${suggestion}?)` : ''\n cliError(\n `unknown subcommand '${attempted}' for '${parentName}'${hint}\\nAvailable: ${candidates.join(', ')}`\n )\n process.exit(1)\n}\n\n// ── Shared list / picker primitives ──────────────────────────────────────────\n\n/**\n * Print `data` as JSON when `opts.json` is set, otherwise let the caller render\n * the human table — but in either case route the empty-state message to stderr\n * so `arbi <thing> list | wc -l` stays honest. Returns `true` when the caller\n * should keep going (data has rows and we're not in JSON mode); `false` when\n * the function has already produced output. Collapses the 20+ near-identical\n * blocks that look like:\n *\n * if (opts.json) { printJson(data); return }\n * if (data.length === 0) { stderr.write('No X found.'); return }\n * printTable(...)\n */\nexport function emitListOrTable<T>(\n data: T[],\n opts: { json?: boolean },\n emptyMessage: string\n): boolean {\n if (opts.json) {\n printJson(data)\n return false\n }\n if (data.length === 0) {\n process.stderr.write(`${emptyMessage}\\n`)\n return false\n }\n return true\n}\n\n/**\n * Resolve a user-supplied selector (id OR exact, case-insensitive name) against\n * a list of items that have an `external_id` and `name`. Used to be hand-rolled\n * twice — once in `workspaces.ts` for `workspace select`, once in `doctags.ts`\n * for tag refs — with subtly different ambiguity errors. Centralized so every\n * resolver behaves identically (exit code 3 on ambiguous-name or not-found,\n * matching IDs listed).\n */\nexport interface ResolveOk<T> {\n ok: true\n item: T\n id: string\n}\nexport interface ResolveErr<T> {\n ok: false\n reason: 'not-found' | 'ambiguous'\n matches: T[]\n}\nexport type ResolveResult<T> = ResolveOk<T> | ResolveErr<T>\n\nexport function resolveByIdOrName<T extends { external_id?: string; name?: string | null }>(\n list: T[],\n selector: string\n): ResolveResult<T> {\n const byId = list.find((w) => w.external_id === selector)\n if (byId) return { ok: true, item: byId, id: byId.external_id as string }\n\n const lower = selector.toLowerCase()\n const byName = list.filter((w) => (w.name ?? '').toLowerCase() === lower)\n if (byName.length === 1) return { ok: true, item: byName[0], id: byName[0].external_id as string }\n if (byName.length > 1) return { ok: false, reason: 'ambiguous', matches: byName }\n return { ok: false, reason: 'not-found', matches: [] }\n}\n\n/**\n * Standard error path for `resolveByIdOrName`. Prints a recovery hint and\n * exits with code 3 (\"target not found\", distinct from auth/server failures\n * — see SKILL.md exit-code table).\n */\nexport function failResolveAndExit<T extends { external_id?: string; name?: string | null }>(\n thing: string,\n selector: string,\n res: ResolveErr<T>\n): never {\n if (res.reason === 'ambiguous') {\n cliError(\n `Ambiguous ${thing} \"${selector}\" — matches ${res.matches\n .map((m) => m.external_id)\n .join(', ')}. Use the ID.`\n )\n } else {\n cliError(`${thing} \"${selector}\" not found.`)\n }\n process.exit(3)\n}\n\n/**\n * `--dry-run` output for destructive commands. The convention across the\n * CLI: when the caller passes `--dry-run`, print a `[dry-run]` line with\n * the verb and the resolved targets, then exit 0 WITHOUT calling the SDK.\n * Agents can preview the effect of a delete/remove/leave before committing.\n *\n * The actual SDK call site decides what to pass — for delete-by-id flows\n * that's the resolved ID list; for delete-account flows it's the email;\n * for delete-by-filter (`--all`) it's the count + a sample of IDs.\n */\nexport function dryRun(verb: string, targets: string | string[]): void {\n const list = Array.isArray(targets) ? targets : [targets]\n // Goes to stdout (the canonical preview for an agent) — matches the\n // success() pattern used after a real execution. The [dry-run] prefix\n // is a stable marker so an agent can branch on it.\n process.stdout.write(`[dry-run] Would ${verb}:\\n`)\n for (const t of list) process.stdout.write(` - ${t}\\n`)\n process.stdout.write('[dry-run] (no changes made; drop --dry-run to execute)\\n')\n}\n\n/**\n * Generic picker: fetch items, render them as inquirer choices, and let the\n * user pick one. Replaces the per-command `pickTag/pickDocs/pickConversation`\n * helpers that all duplicated this dance.\n *\n * Empty list → writes the supplied empty-state message to stderr and exits 0\n * (the calling command was about to operate on something — there's just\n * nothing to operate on, which isn't an error). Non-TTY → bails with the\n * supplied hint instead of hanging on inquirer.\n */\nexport async function pickFromList<T>(\n items: T[],\n toChoice: (item: T) => { name: string; value: string; description?: string },\n options: {\n message: string\n emptyMessage: string\n nonTtyHint: string\n }\n): Promise<string> {\n if (items.length === 0) {\n process.stderr.write(`${options.emptyMessage}\\n`)\n process.exit(0)\n }\n requireInteractive(options.nonTtyHint)\n // Lazy import so requireInteractive's exit path doesn't pull inquirer in.\n const { promptSelect } = await import('./prompts.js')\n return promptSelect(options.message, items.map(toChoice))\n}\n","/**\n * arbi listen [--agent <name>]\n *\n * Start the DM listener, optionally setting the agent backend.\n *\n * arbi listen --agent claude Set backend to claude + start listening\n * arbi listen Start listening with previously configured backend\n *\n * Authentication must be completed first via `arbi login`.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { execFileSync } from 'node:child_process'\nimport { resolve, dirname, join } from 'node:path'\nimport { homedir } from 'node:os'\nimport { fileURLToPath } from 'node:url'\nimport { Command } from 'commander'\nimport { startDmListener } from '@arbidocs/sdk'\nimport { ClaudeOrchestrator, OpenClawOrchestrator, type Orchestrator } from '@arbidocs/sdk'\nimport { resolveDmCrypto } from '../helpers.js'\nimport { store, resolveConfig, updateConfig } from '../config.js'\nimport { error as cliError, success, chalk, dim } from '../output.js'\n\nconst AGENT_BACKENDS = ['claude', 'openclaw'] as const\ntype AgentBackend = (typeof AGENT_BACKENDS)[number]\n\nconst AGENT_MIN_VERSIONS: Record<\n AgentBackend,\n { binary: string; minVersion: string; installUrl: string }\n> = {\n claude: {\n binary: 'claude',\n minVersion: '2.0.0',\n installUrl: 'https://docs.anthropic.com/en/docs/claude-code',\n },\n openclaw: {\n binary: 'openclaw',\n minVersion: '2026.2.0',\n installUrl: 'https://docs.openclaw.ai/install',\n },\n}\n\n/**\n * Compare two dotted version strings (\"1.2.3\" vs \"1.10.0\").\n *\n * Returns negative if a < b, positive if a > b, zero if equal. Treats\n * missing components as 0 so \"2026\" matches \"2026.0.0\". Exported for\n * unit tests; the runtime caller is {@link checkAgentDependency}.\n */\nexport function compareVersions(a: string, b: string): number {\n const pa = a.split('.').map(Number)\n const pb = b.split('.').map(Number)\n const len = Math.max(pa.length, pb.length)\n for (let i = 0; i < len; i++) {\n const diff = (pa[i] ?? 0) - (pb[i] ?? 0)\n if (diff !== 0) return diff\n }\n return 0\n}\n\nfunction checkAgentDependency(backend: AgentBackend): void {\n const { binary, minVersion, installUrl } = AGENT_MIN_VERSIONS[backend]\n let version: string\n try {\n version = execFileSync(binary, ['--version'], { encoding: 'utf-8', timeout: 5_000 }).trim()\n } catch {\n cliError(`\"${binary}\" is not installed.\\n Install: ${installUrl}`)\n process.exit(1)\n }\n const match = version.match(/(\\d+\\.\\d+[\\d.]*)/)\n if (match && compareVersions(match[1], minVersion) < 0) {\n cliError(`\"${binary}\" ${match[1]} is too old (need >= ${minVersion}).\\n Update: ${installUrl}`)\n process.exit(1)\n }\n dim(`${binary} ${match?.[1] ?? version} ✓`)\n}\n\nfunction loadSkillContent(): string | undefined {\n const cliRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')\n try {\n return readFileSync(join(cliRoot, 'SKILL.md'), 'utf-8')\n } catch {\n return undefined\n }\n}\n\nfunction installSkill(backend: AgentBackend): void {\n const cliRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')\n let skillContent: string\n try {\n skillContent = readFileSync(join(cliRoot, 'SKILL.md'), 'utf-8')\n } catch {\n return\n }\n\n if (backend === 'claude') {\n const dir = join(homedir(), '.claude', 'commands', 'arbi')\n const target = join(dir, 'SKILL.md')\n try {\n mkdirSync(dir, { recursive: true })\n if (!existsSync(target) || readFileSync(target, 'utf-8') !== skillContent) {\n writeFileSync(target, skillContent, 'utf-8')\n dim(`Installed ARBI skill → ${target}`)\n }\n } catch {\n /* non-fatal */\n }\n } else if (backend === 'openclaw') {\n const workspace = join(homedir(), '.arbi', 'openclaw-workspace')\n const bootstrap = join(workspace, 'BOOTSTRAP.md')\n try {\n mkdirSync(workspace, { recursive: true })\n if (!existsSync(bootstrap) || readFileSync(bootstrap, 'utf-8') !== skillContent) {\n writeFileSync(bootstrap, skillContent, 'utf-8')\n dim(`Installed ARBI skill → ${bootstrap}`)\n }\n } catch {\n /* non-fatal */\n }\n }\n}\n\nfunction createOrchestrator(\n backend: AgentBackend,\n sessionId: string,\n agentId?: string\n): Orchestrator {\n if (backend === 'claude')\n return new ClaudeOrchestrator({ sessionId, skillPrompt: loadSkillContent() })\n // OpenClaw provisions one agent per ARBI user (lowercased ext_id); see\n // ARBI's src/core/openclaw_provisioning.py:_agent_id_for_user. Without\n // this the orchestrator falls back to the legacy single-tenant \"arbi\"\n // agent id which doesn't exist on multi-tenant deployments.\n //\n // ``ARBI_OPENCLAW_HOME``: in multi-tenant deployments ``arbi listen``\n // runs with a per-agent HOME (so the CLI finds .arbi/credentials.json),\n // but openclaw must still resolve its gateway state from the shared real\n // HOME. The supervisor exports this to point at the canonical HOME\n // (e.g. ``/home/node``) so the spawned openclaw subprocess sidesteps\n // the per-agent dir entirely and works without symlinks.\n if (backend === 'openclaw') {\n const spawnHome = process.env.ARBI_OPENCLAW_HOME\n return new OpenClawOrchestrator({ sessionId, agentId, spawnHome })\n }\n throw new Error(`Unknown backend: ${backend}`)\n}\n\nexport async function setupAgent(\n agentName: string | undefined,\n config: { orchestrator?: string }\n): Promise<AgentBackend | undefined> {\n const backend = (agentName ?? config.orchestrator) as AgentBackend | undefined\n if (!backend) return undefined\n if (!AGENT_BACKENDS.includes(backend)) {\n cliError(`Unknown backend: \"${backend}\". Choose from: ${AGENT_BACKENDS.join(', ')}`)\n process.exit(1)\n }\n checkAgentDependency(backend)\n installSkill(backend)\n if (agentName && agentName !== config.orchestrator) {\n updateConfig({ orchestrator: backend })\n dim(`Default agent backend set to \"${backend}\"`)\n }\n return backend\n}\n\nexport async function startListening(\n agentName: string | undefined,\n config: { orchestrator?: string }\n): Promise<void> {\n const backend = (agentName ?? config.orchestrator) as AgentBackend | undefined\n if (!backend) {\n cliError(\n `No agent backend configured. Use --agent to specify one:\\n arbi listen --agent claude`\n )\n process.exit(1)\n }\n\n const creds = store.getCredentials()\n if (!creds?.parentExtId) {\n cliError('DM listener requires a persistent agent identity (parentExtId).')\n process.exit(1)\n }\n\n dim('Starting DM listener...')\n const { arbi, crypto } = await resolveDmCrypto()\n const fullConfig = resolveConfig()\n const sessionId = arbi.session.getState().userExtId ?? 'default'\n // For multi-tenant openclaw, the openclaw agent id is the listener's\n // own user ext_id (lowercased) — every ARBI user gets a dedicated\n // openclaw agent at registration. Claude doesn't use agentId.\n const agentId = backend === 'openclaw' ? sessionId.toLowerCase() : undefined\n const orchestrator = createOrchestrator(backend, sessionId, agentId)\n const accessToken = arbi.session.getState().accessToken\n if (!accessToken) {\n cliError('No access token — run `arbi login` first.')\n process.exit(1)\n }\n\n const listener = await startDmListener({\n arbi,\n accessToken,\n baseUrl: fullConfig.baseUrl,\n crypto,\n orchestrator,\n parentExtId: creds.parentExtId!,\n onLog: (msg) => dim(msg),\n onError: (msg, err) => cliError(`${msg}${err ? `: ${err}` : ''}`),\n })\n\n success(`Listening for DMs as ${chalk.cyan(creds.email)} via ${chalk.cyan(backend)}`)\n dim('Press Ctrl+C to stop.')\n\n const shutdown = () => {\n dim('\\nShutting down...')\n listener.close()\n orchestrator.close?.()\n process.exit(0)\n }\n process.on('SIGINT', shutdown)\n process.on('SIGTERM', shutdown)\n await new Promise(() => {})\n}\n\nexport function registerListenCommand(program: Command): void {\n program\n .command('listen')\n .description(\n 'Start DM listener (foreground; runs until Ctrl-C — use `& disown` or systemd for background)'\n )\n .option('--agent <name>', `Agent backend: ${AGENT_BACKENDS.join(', ')}`)\n .action((opts: { agent?: string }) =>\n (async () => {\n const config = resolveConfig()\n await setupAgent(opts.agent, config)\n await startListening(opts.agent, config)\n })().catch((err) => {\n cliError(`Error: ${err instanceof Error ? err.message : String(err)}`)\n process.exit(1)\n })\n )\n}\n","/**\n * arbi register -e email -p password --verification-code CODE — fully scriptable\n * arbi register — interactive mode\n * arbi register --non-interactive [opts] — CI mode (SUPPORT_API_KEY)\n *\n * When all required flags are provided, no prompts are shown.\n * When some are missing, only the missing values are prompted.\n */\n\nimport { Command } from 'commander'\nimport 'fake-indexeddb/auto'\nimport { createArbiClient } from '@arbidocs/client'\nimport {\n performPasswordLogin,\n formatWorkspaceChoices,\n generateNewWorkspaceKey,\n workspaces as workspaceOps,\n projects as projectOps,\n} from '@arbidocs/sdk'\nimport { success, error, ref } from '../output.js'\nimport { store, requireConfig, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptConfirm, promptSelect } from '../prompts.js'\nimport { runAction, formatCliError } from '../helpers.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\n\n// ── CI verification code fetch ───────────────────────────────────────────────\n\n/** Raised when the central verify-ci endpoint returns a known error we can hint at. */\nexport class RegisterHintError extends Error {\n constructor(\n message: string,\n public readonly kind: 'agent-email-required' | 'bad-api-key' | 'already-registered'\n ) {\n super(message)\n this.name = 'RegisterHintError'\n }\n}\n\n/**\n * SUPPORT_API_KEY deployment keys only accept agent-*@<deploymentDomain> emails.\n * This heuristic lets us warn the caller before we even round-trip to central.\n */\nexport function looksLikeAgentEmail(email: string): boolean {\n const local = email.split('@')[0] ?? ''\n return local.toLowerCase().startsWith('agent-')\n}\n\nasync function getVerificationCode(\n email: string,\n apiKey: string,\n deploymentDomain: string\n): Promise<string> {\n const params = new URLSearchParams({ email })\n const res = await fetch(`${CENTRAL_API_URL}/license-management/verify-ci?${params.toString()}`, {\n method: 'GET',\n headers: { 'x-api-key': apiKey },\n })\n\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n // Translate common, confusing central-API errors into actionable messages.\n if (res.status === 403 && /agent-\\*/i.test(body)) {\n throw new RegisterHintError(\n `This SUPPORT_API_KEY is a deployment key that can only register agent-*@${deploymentDomain} emails. ` +\n `Prefix your email with \"agent-\" (e.g. agent-<id>@${deploymentDomain}) or use a superuser key.`,\n 'agent-email-required'\n )\n }\n if (res.status === 403 && /Invalid API Key/i.test(body)) {\n throw new RegisterHintError(\n 'SUPPORT_API_KEY was rejected by central. Check the key value.',\n 'bad-api-key'\n )\n }\n if (res.status === 404 && /No verification record/i.test(body)) {\n throw new RegisterHintError(\n `No pending verification for ${email}. The email may already be registered — ` +\n `try: arbi login --email ${email}`,\n 'already-registered'\n )\n }\n throw new Error(`Failed to get verification code: ${res.status} ${body}`)\n }\n\n const data = (await res.json()) as { verification_words?: string[]; verification_code?: string }\n const words = data?.verification_words ?? data?.verification_code ?? null\n if (!words) throw new Error('No verification code in response')\n\n return Array.isArray(words) ? words.join(' ') : String(words)\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\ninterface RegisterOpts {\n nonInteractive?: boolean\n email?: string\n password?: string\n verificationCode?: string\n firstName?: string\n lastName?: string\n json?: boolean\n yes?: boolean\n}\n\nexport function registerRegisterCommand(program: Command): void {\n program\n .command('register')\n .description('Register a new ARBI account')\n .option('--non-interactive', 'CI/automation mode (requires SUPPORT_API_KEY env var)')\n .option('-e, --email <email>', 'Email address (or ARBI_EMAIL env var)')\n .option('-p, --password <password>', 'Password (or ARBI_PASSWORD env var)')\n .option('-c, --verification-code <code>', 'Verification code (skip prompt)')\n .option('--first-name <name>', 'First name')\n .option('--last-name <name>', 'Last name')\n .option('-y, --yes', 'Skip the post-register \"Log in now?\" confirmation')\n .option('--json', 'Emit a single JSON object on success (scripting)')\n .action((opts: RegisterOpts) =>\n runAction(async () => {\n const config = requireConfig()\n\n if (opts.nonInteractive) {\n await nonInteractiveRegister(config, opts)\n } else {\n await smartRegister(config, opts)\n }\n })()\n )\n}\n\n// ── Smart register (flags > env > prompt) ────────────────────────────────────\n\nasync function smartRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: RegisterOpts\n) {\n // 1. Resolve email: flag > env > prompt\n let email = opts.email || process.env.ARBI_EMAIL || (await promptInput('Email'))\n\n // In interactive mode, auto-append domain only when --email flag was provided without @\n // (users typing at the prompt are expected to enter their full email)\n if ((opts.email || process.env.ARBI_EMAIL) && !email.includes('@')) {\n email = `${email}@${config.deploymentDomain}`\n if (!opts.json) console.log(`Using email: ${email}`)\n }\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // 2. Resolve verification code: flag > prompt\n let verificationCode: string\n if (opts.verificationCode) {\n verificationCode = opts.verificationCode\n } else {\n const codeMethod = await promptSelect('Verification method', [\n { name: 'I have an invitation code', value: 'code' },\n { name: 'Send me a verification email', value: 'email' },\n ])\n\n if (codeMethod === 'code') {\n verificationCode = await promptInput('Invitation code')\n } else {\n console.log('Sending verification email...')\n const verifyResponse = await arbi.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n error(`Failed to send verification email: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n success('Verification email sent. Check your inbox.')\n verificationCode = await promptInput('Verification code')\n }\n }\n\n // 3. Resolve password: flag > env > prompt\n // When provided via flag/env, skip confirmation prompt.\n let pw: string\n const flagOrEnvPassword = opts.password || process.env.ARBI_PASSWORD\n if (flagOrEnvPassword) {\n pw = flagOrEnvPassword\n } else {\n pw = await promptPassword('Password')\n const confirmPw = await promptPassword('Confirm password')\n if (pw !== confirmPw) {\n error('Passwords do not match.')\n process.exit(1)\n }\n }\n\n // 4. Resolve name: flag > prompt (skip prompts if all core flags provided)\n const hasAllCoreFlags =\n !!(opts.email || process.env.ARBI_EMAIL) &&\n !!(opts.password || process.env.ARBI_PASSWORD) &&\n !!opts.verificationCode\n const firstName =\n opts.firstName ||\n (hasAllCoreFlags ? 'User' : (await promptInput('First name', false)) || 'User')\n const lastName =\n opts.lastName || (hasAllCoreFlags ? '' : (await promptInput('Last name', false)) || '')\n\n // 5. Register\n try {\n await arbi.auth.register({\n email,\n password: pw,\n verificationCode,\n firstName,\n lastName,\n })\n if (!opts.json) success(`\\nRegistered successfully as ${email}`)\n } catch (err) {\n if (opts.json) {\n console.log(JSON.stringify({ ok: false, stage: 'register', error: formatCliError(err) }))\n } else {\n error(`Registration failed: ${formatCliError(err)}`)\n }\n process.exit(1)\n }\n\n // 6. If all values were flags, auto-login. Otherwise offer choice (unless --yes).\n const allFlagsProvided =\n !!(opts.email || process.env.ARBI_EMAIL) &&\n !!(opts.password || process.env.ARBI_PASSWORD) &&\n !!opts.verificationCode\n const doLogin = allFlagsProvided || opts.yes || (await promptConfirm('Log in now?'))\n\n if (doLogin) {\n await loginAfterRegister(config, email, pw, { json: opts.json })\n } else if (opts.json) {\n console.log(JSON.stringify({ ok: true, email, server: config.baseUrl, logged_in: false }))\n }\n}\n\n// ── Non-interactive mode (CI with SUPPORT_API_KEY) ───────────────────────────\n\nasync function nonInteractiveRegister(\n config: { baseUrl: string; deploymentDomain: string },\n opts: RegisterOpts\n) {\n let email = opts.email || process.env.ARBI_EMAIL\n const password = opts.password || process.env.ARBI_PASSWORD\n const supportApiKey = process.env.SUPPORT_API_KEY\n\n if (!email) {\n // In `--json` mode, return a structured error so an agent can branch\n // (`jq -r .error`) instead of having to grep stderr.\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'preflight',\n error: 'Email required',\n hint: 'Use --email <email> or set ARBI_EMAIL',\n })\n )\n process.exit(1)\n }\n error('Email required. Use --email <email> or set ARBI_EMAIL')\n process.exit(1)\n }\n\n // Auto-append deployment domain for bare usernames (bot/test accounts)\n if (!email.includes('@')) {\n email = `${email}@${config.deploymentDomain}`\n if (!opts.json) console.log(`Using email: ${email}`)\n }\n\n if (!password) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'preflight',\n error: 'Password required',\n hint: 'Use --password <password> or set ARBI_PASSWORD',\n })\n )\n process.exit(1)\n }\n error('Password required. Use --password <password> or set ARBI_PASSWORD')\n process.exit(1)\n }\n\n // Preflight: if using SUPPORT_API_KEY but the email doesn't start with \"agent-\",\n // warn client-side BEFORE the round-trip to central. Deployment-scoped keys\n // reject non-agent emails (the common case on box-*.arbibox.com). Superuser\n // keys accept any email; we can't distinguish up front, so we just warn.\n if (supportApiKey && !opts.verificationCode && !looksLikeAgentEmail(email)) {\n const hint =\n `Email \"${email}\" does not start with \"agent-\". ` +\n `SUPPORT_API_KEY deployment keys only accept agent-*@${config.deploymentDomain} emails. ` +\n `If your key is a superuser key this may still succeed — proceeding...`\n if (!opts.json) {\n console.error(`Warning: ${hint}`)\n }\n }\n\n const arbi = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbi.crypto.initSodium()\n\n // Resolve verification code: flag > SUPPORT_API_KEY CI endpoint\n let verificationCode: string\n if (opts.verificationCode) {\n verificationCode = opts.verificationCode\n } else {\n if (!supportApiKey) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'preflight',\n error: 'Verification code required',\n hint: 'Use --verification-code <code> or set SUPPORT_API_KEY for CI mode',\n })\n )\n process.exit(1)\n }\n error(\n 'Verification code required. Use --verification-code <code> or set SUPPORT_API_KEY for CI mode'\n )\n process.exit(1)\n }\n\n // Request verification email\n const verifyResponse = await arbi.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'verify-email',\n error: JSON.stringify(verifyResponse.error),\n })\n )\n } else {\n error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n }\n process.exit(1)\n }\n\n // Fetch code from CI endpoint — surfaces friendly messages for common errors.\n try {\n verificationCode = await getVerificationCode(email, supportApiKey, config.deploymentDomain)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (opts.json) {\n console.log(\n JSON.stringify({\n ok: false,\n stage: 'verify-ci',\n error: msg,\n kind: err instanceof RegisterHintError ? err.kind : undefined,\n })\n )\n } else {\n error(`Error: ${msg}`)\n }\n process.exit(1)\n }\n }\n\n // Register\n try {\n await arbi.auth.register({\n email,\n password,\n verificationCode,\n firstName: opts.firstName ?? 'Test',\n lastName: opts.lastName ?? 'User',\n })\n if (!opts.json) success(`Registered: ${email}`)\n } catch (err) {\n if (opts.json) {\n console.log(JSON.stringify({ ok: false, stage: 'register', error: formatCliError(err) }))\n } else {\n error(`Registration failed: ${formatCliError(err)}`)\n }\n process.exit(1)\n }\n\n // Auto-login and create workspace in non-interactive mode\n await loginAfterRegister(config, email, password, { json: opts.json })\n}\n\n// ── Post-registration login ──────────────────────────────────────────────────\n\nasync function loginAfterRegister(\n config: { baseUrl: string; deploymentDomain: string },\n email: string,\n password: string,\n { json = false }: { json?: boolean } = {}\n) {\n try {\n const { arbi, loginResult } = await performPasswordLogin(config, email, password, store)\n if (!json) success(`Logged in as ${email}`)\n\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n updateCompletionCache(wsList)\n\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.user.email === email))\n\n let selectedWorkspace: { external_id: string; name: string } | undefined\n\n if (memberWorkspaces.length === 0) {\n if (!json) console.log('Creating your first workspace...')\n const userProjects = await projectOps.listProjects(arbi)\n const defaultProjectExtId = userProjects[0]?.external_id\n if (!defaultProjectExtId) throw new Error('No projects found for user')\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(\n arbi,\n 'My First Workspace',\n encryptedKey,\n defaultProjectExtId\n )\n updateConfig({ selectedWorkspaceId: ws.external_id })\n selectedWorkspace = { external_id: ws.external_id, name: ws.name }\n if (!json) success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n } else if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n selectedWorkspace = {\n external_id: memberWorkspaces[0].external_id,\n name: memberWorkspaces[0].name,\n }\n if (!json)\n success(`Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`)\n } else if (json) {\n // JSON mode with multiple workspaces: don't prompt; caller can pick via\n // `arbi workspace select` or `arbi login --workspace <id>`.\n } else {\n const choices = formatWorkspaceChoices(memberWorkspaces)\n const selected = await promptSelect('Select workspace', choices)\n updateConfig({ selectedWorkspaceId: selected })\n const ws = memberWorkspaces.find((w) => w.external_id === selected)!\n selectedWorkspace = { external_id: selected, name: ws.name }\n success(`Workspace: ${ws.name} (${ref(selected)})`)\n }\n\n if (json) {\n console.log(\n JSON.stringify({\n ok: true,\n email,\n server: config.baseUrl,\n logged_in: true,\n workspace: selectedWorkspace ?? null,\n workspaces_available: memberWorkspaces.length,\n })\n )\n }\n } catch (err) {\n if (json) {\n console.log(\n JSON.stringify({ ok: false, stage: 'post-register-login', error: formatCliError(err) })\n )\n } else {\n error(`Login failed: ${formatCliError(err)}`)\n error('You can log in later with: arbi login')\n }\n }\n}\n","/**\n * arbi logout\n */\n\nimport { Command } from 'commander'\nimport { deleteCredentials, updateConfig, clearChatSession } from '../config.js'\nimport { success } from '../output.js'\n\nexport function registerLogoutCommand(program: Command): void {\n program\n .command('logout')\n .description('Log out of ARBI')\n .option('--json', 'Emit a single JSON object on success (scripting)')\n .action((opts: { json?: boolean }) => {\n deleteCredentials()\n clearChatSession()\n updateConfig({ selectedWorkspaceId: undefined })\n if (opts.json) {\n console.log(JSON.stringify({ ok: true }))\n } else {\n success('Logged out.')\n }\n })\n}\n","/**\n * arbi status\n *\n * Shows current config + login state (no API calls).\n * `--json` returns a machine-readable object for agent scripting —\n * this is the recommended way for an AI agent to check whether the\n * CLI is configured and logged in before attempting other calls.\n */\n\nimport { Command } from 'commander'\nimport { getConfig, getCredentials } from '../config.js'\nimport { getCachedWorkspaceName } from '../completion-cache.js'\nimport { label, dim } from '../output.js'\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show current configuration and login status')\n .option('--json', 'Output as JSON for scripting')\n .action((opts: { json?: boolean }) => {\n const config = getConfig()\n const creds = getCredentials()\n const wsId = config?.selectedWorkspaceId ?? null\n // Workspace name comes from the completion cache (populated after any\n // `arbi workspaces` / login call). `status` itself stays offline so it\n // remains usable when the network is down.\n const wsName = wsId ? getCachedWorkspaceName(wsId) : null\n\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n configured: !!config?.baseUrl,\n server: config?.baseUrl ?? null,\n logged_in: !!creds,\n user: creds?.email ?? null,\n workspace: wsId,\n workspace_name: wsName,\n },\n null,\n 2\n )\n )\n return\n }\n\n if (!config?.baseUrl) {\n dim('Not configured. Run: arbi config set-url <url>')\n return\n }\n\n label('Server:', config.baseUrl)\n\n if (creds) {\n label('User:', creds.email)\n } else {\n label('User:', '(not logged in)')\n }\n\n if (wsId) {\n label('Workspace:', wsName ? `${wsName} (${wsId})` : wsId)\n } else {\n label('Workspace:', '(none selected)')\n }\n })\n}\n","/**\n * arbi workspaces — list workspaces\n * arbi workspace select/create/delete/update — workspace CRUD\n * arbi workspace users/add-user/remove-user — user management\n * arbi workspace set-role/copy — role & copy operations\n */\n\nimport { Command } from 'commander'\nimport {\n workspaces,\n projects,\n formatWorkspaceChoices,\n generateEncryptedWorkspaceKey,\n generateNewWorkspaceKey,\n} from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n resolveWorkspace,\n printTable,\n parseJsonArg,\n requireInteractive,\n dryRun,\n} from '../helpers.js'\nimport { store, getConfig, updateConfig, getChatSession, clearChatSession } from '../config.js'\nimport { promptSelect, promptConfirm } from '../prompts.js'\nimport { success, error, ref } from '../output.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\n/**\n * Resolve a workspace selector (ID or exact/unique case-insensitive name) to a\n * workspace ID. Returns a resolution result so callers can surface helpful\n * errors (not found, ambiguous name match) consistently.\n */\ntype WorkspaceRow = {\n external_id: string\n name: string\n shared_document_count?: number\n private_document_count?: number\n wrapped_key?: string | null\n users?: { role: string }[]\n}\n\ntype ResolveResult =\n | { ok: true; id: string; ws: WorkspaceRow }\n | { ok: false; reason: 'not-found' | 'ambiguous'; matches?: WorkspaceRow[] }\n\nfunction resolveWorkspaceSelector(list: WorkspaceRow[], selector: string): ResolveResult {\n // Exact ID match — fast path and unambiguous.\n const byId = list.find((w) => w.external_id === selector)\n if (byId) return { ok: true, id: byId.external_id, ws: byId }\n\n // Case-insensitive name match. Must be unique to avoid foot-guns.\n const lower = selector.toLowerCase()\n const byName = list.filter((w) => (w.name ?? '').toLowerCase() === lower)\n if (byName.length === 1) return { ok: true, id: byName[0].external_id, ws: byName[0] }\n if (byName.length > 1) return { ok: false, reason: 'ambiguous', matches: byName }\n\n return { ok: false, reason: 'not-found' }\n}\n\nfunction printResolveError(list: WorkspaceRow[], selector: string, res: ResolveResult): void {\n if (res.ok) return\n if (res.reason === 'ambiguous') {\n error(`Workspace name \"${selector}\" is ambiguous — multiple matches:`)\n for (const w of res.matches ?? []) error(` ${w.external_id} ${w.name}`)\n error('Use the workspace ID instead.')\n return\n }\n error(`Workspace ${selector} not found.`)\n error('Available workspaces:')\n for (const w of list) error(` ${w.external_id} ${w.name}`)\n}\n\nexport function registerWorkspacesCommand(program: Command): void {\n program\n .command('workspaces')\n .description('List workspaces')\n .option('--json', 'Output as JSON')\n .option('--ids', 'Output only workspace IDs (one per line)')\n .option(\n '--mine',\n 'Only workspaces where you have a membership role (hide deployment-wide common ones)'\n )\n .action((opts: { json?: boolean; ids?: boolean; mine?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const allWorkspaces = await workspaces.listWorkspaces(arbi)\n // Cache the full list so completion still sees common workspaces — only\n // the display below is narrowed when `--mine` is set.\n updateCompletionCache(allWorkspaces)\n const data = opts.mine\n ? allWorkspaces.filter((w) => (w.users as { role: string }[])?.length > 0)\n : allWorkspaces\n\n if (opts.ids) {\n for (const w of data) console.log(w.external_id)\n return\n }\n\n if (opts.json) {\n const selectedId = getConfig()?.selectedWorkspaceId ?? null\n // Caller's email — we look up *our own* membership row to\n // get *our* role, instead of users[0].role which is whatever\n // membership happens to come first in the response and could\n // belong to a co-worker / another agent in the same workspace.\n const myEmail = store.requireCredentials().email\n const out = data.map((w) => {\n // No row in `users` → backend exposes the workspace because it's\n // deployment-wide (\"common\"), not because the caller is a member.\n // Surface that explicitly so callers don't read `role: null` as\n // missing data.\n const myRow = (w.users as { user?: { email?: string }; role: string }[])?.find(\n (u) => u?.user?.email === myEmail\n )\n const role = myRow?.role ?? null\n return {\n id: w.external_id,\n name: w.name,\n docs: (w.shared_document_count as number) + (w.private_document_count as number),\n role,\n is_common: role === null,\n is_selected: w.external_id === selectedId,\n }\n })\n console.log(JSON.stringify(out, null, 2))\n return\n }\n\n if (data.length === 0) {\n process.stderr.write(\n opts.mine\n ? 'No workspaces you are a member of. (Drop --mine to see deployment-wide ones.)\\n'\n : 'No workspaces found.\\n'\n )\n return\n }\n\n const selectedId = getConfig()?.selectedWorkspaceId ?? null\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 30,\n // Asterisk-mark the active workspace so a glance at the table\n // tells you which one `arbi docs / ask / upload` will hit.\n value: (r) => {\n const name = (r.name as string) ?? ''\n return r.external_id === selectedId ? `* ${name}` : ` ${name}`\n },\n },\n {\n header: 'DOCS',\n width: 6,\n value: (r) =>\n String((r.shared_document_count as number) + (r.private_document_count as number)),\n },\n {\n header: 'ROLE',\n width: 12,\n // `common` (italics dimmed) for memberless rows the caller\n // can see only because it's a deployment-wide workspace.\n // Match by the caller's email so we render *our* role, not\n // whichever membership happens to come first in the array.\n value: (r) => {\n const myRow = (r.users as { user?: { email?: string }; role: string }[])?.find(\n (u) => u?.user?.email === store.requireCredentials().email\n )\n return myRow?.role ?? 'common'\n },\n },\n ],\n data\n )\n })()\n )\n\n const workspace = program.command('workspace').description('Workspace management')\n\n workspace\n .command('current')\n .description('Print the currently selected workspace ID (empty string if none)')\n .option('--json', 'Output full details as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const selectedId = getConfig()?.selectedWorkspaceId ?? ''\n if (!opts.json) {\n console.log(selectedId)\n return\n }\n if (!selectedId) {\n console.log(JSON.stringify({ id: null, name: null, docs: 0, role: null }, null, 2))\n return\n }\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n const ws = data.find((w) => w.external_id === selectedId)\n if (!ws) {\n // Stale selection — surface it but don't crash.\n console.log(\n JSON.stringify(\n { id: selectedId, name: null, docs: 0, role: null, stale: true },\n null,\n 2\n )\n )\n return\n }\n console.log(\n JSON.stringify(\n {\n id: ws.external_id,\n name: ws.name,\n docs: (ws.shared_document_count as number) + (ws.private_document_count as number),\n role: (ws.users as { role: string }[])?.[0]?.role ?? null,\n },\n null,\n 2\n )\n )\n })()\n )\n\n workspace\n .command('select [id-or-name]')\n .description(\n 'Select active workspace (accepts ID or unique name; interactive picker if nothing given)'\n )\n .action((idOrName?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n updateCompletionCache(data)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n let selectedId: string\n if (idOrName) {\n const res = resolveWorkspaceSelector(data as WorkspaceRow[], idOrName)\n if (!res.ok) {\n printResolveError(data as WorkspaceRow[], idOrName, res)\n process.exit(1)\n }\n selectedId = res.id\n } else {\n // Interactive picker\n const choices = formatWorkspaceChoices(data)\n selectedId = await promptSelect('Select workspace', choices)\n }\n\n updateConfig({ selectedWorkspaceId: selectedId })\n clearChatSession()\n const ws = data.find((w) => w.external_id === selectedId)!\n success(`Selected: ${ws.name} (${ref(selectedId)})`)\n })()\n )\n\n workspace\n .command('create <name>')\n .description('Create a new workspace')\n .option('-d, --description <text>', 'Workspace description')\n .option('--public', 'Make workspace public', false)\n .option('--select', 'Set the new workspace as the active selection', false)\n .action((name: string, opts: { description?: string; public?: boolean; select?: boolean }) =>\n runAction(async () => {\n const { arbi, loginResult } = await resolveAuth()\n const userProjects = await projects.listProjects(arbi)\n if (!userProjects.length) throw new Error('No projects found. Create a project first.')\n const projectExtId = userProjects[0].external_id\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const data = await workspaces.createWorkspace(\n arbi,\n name,\n encryptedKey,\n projectExtId,\n opts.description,\n opts.public ?? false\n )\n if (opts.select) {\n updateConfig({ selectedWorkspaceId: data.external_id })\n clearChatSession()\n }\n // Agents extract the new ID with: grep -oE 'wrk-[a-z0-9]+'\n success(`Created: ${data.name} (${ref(data.external_id)})`)\n if (opts.select) success(`Selected: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('delete [id-or-name]')\n .description('Delete a workspace (defaults to selected workspace)')\n .option('-y, --yes', 'Skip confirmation prompt (required in non-interactive shells)', false)\n .option('--dry-run', 'Preview which workspace would be deleted (no SDK call)')\n .action((idOrName: string | undefined, opts: { yes?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const config = getConfig()\n\n // Resolve the target. Accept ID or name; default to selected workspace.\n let targetId: string | undefined\n let targetName: string | undefined\n if (idOrName) {\n const data = await workspaces.listWorkspaces(arbi)\n const res = resolveWorkspaceSelector(data as WorkspaceRow[], idOrName)\n if (!res.ok) {\n printResolveError(data as WorkspaceRow[], idOrName, res)\n process.exit(1)\n }\n targetId = res.id\n targetName = res.ws.name\n } else {\n targetId = config?.selectedWorkspaceId\n if (!targetId) {\n error('No workspace ID given and no workspace selected. Run: arbi workspace select')\n process.exit(1)\n }\n }\n\n if (opts.dryRun) {\n const label = targetName ? `${targetId} (\"${targetName}\")` : targetId\n dryRun('delete workspace (along with all its documents, conversations, and tags)', label)\n return\n }\n\n // Confirmation. Destructive operation — protect against fat-finger.\n // In non-TTY (scripts/agents), require --yes explicitly so we never hang.\n const isInteractive = process.stdin.isTTY === true && process.stdout.isTTY === true\n if (!opts.yes) {\n if (!isInteractive) {\n error(\n `Refusing to delete ${targetId} without confirmation. Re-run with --yes (non-interactive shell).`\n )\n process.exit(1)\n }\n const label = targetName ? `\"${targetName}\" (${targetId})` : targetId\n const confirmed = await promptConfirm(\n `Delete workspace ${label}? This removes all documents, conversations, and tags in it.`,\n false\n )\n if (!confirmed) {\n console.log('Cancelled.')\n return\n }\n }\n\n await workspaces.deleteWorkspaces(arbi, [targetId])\n // If we deleted the currently selected workspace, clear selection + chat\n // session so subsequent commands don't operate on a stale ID.\n if (config?.selectedWorkspaceId === targetId) {\n updateConfig({ selectedWorkspaceId: undefined })\n }\n const session = getChatSession()\n if (session.workspaceId === targetId) {\n clearChatSession()\n }\n success(`Deleted workspace ${targetId}`)\n })()\n )\n\n // ── rename / describe / public ───────────────────────────────────────────\n // Named shortcuts over `workspace update` for the three properties agents\n // actually toggle. Same motivation as `doc share/unshare`: agents flub the\n // JSON-patch path more often than they flub a one-flag command.\n workspace\n .command('rename <name>')\n .description('Rename the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((name: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.updateWorkspace(arbi, { name })\n success(`Renamed: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('describe <description>')\n .description(\"Update the workspace's description\")\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((description: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = (await workspaces.updateWorkspace(arbi, {\n description,\n } as Parameters<typeof workspaces.updateWorkspace>[1])) as {\n external_id: string\n name: string\n }\n success(`Updated description: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('public <on-or-off>')\n .description('Toggle workspace visibility (on = public, off = private)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((onOff: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const isPublic = onOff === 'on' || onOff === 'true' || onOff === 'public'\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = (await workspaces.updateWorkspace(arbi, {\n is_public: isPublic,\n } as Parameters<typeof workspaces.updateWorkspace>[1])) as {\n external_id: string\n name: string\n }\n success(\n `Visibility: ${isPublic ? 'public' : 'private'} — ${data.name} (${ref(data.external_id)})`\n )\n })()\n )\n\n workspace\n .command('update <json>')\n .description('Update workspace properties (pass JSON; prefer `rename`/`describe`/`public`)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((json: string, opts: { workspace?: string }) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi workspace update \\'{\"name\": \"New Name\"}\\'')\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.updateWorkspace(arbi, body)\n success(`Updated: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('users')\n .description('List users in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .action((opts: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.listWorkspaceUsers(arbi)\n\n type User = {\n external_id?: string\n email?: string\n given_name?: string\n family_name?: string\n }\n\n if (opts.json) {\n const out = data.map((r) => {\n const u = (r.user as User) ?? {}\n return {\n user_id: u.external_id ?? null,\n email: u.email ?? null,\n name: [u.given_name, u.family_name].filter(Boolean).join(' ') || null,\n role: r.role,\n document_count: r.document_count,\n conversation_count: r.conversation_count,\n }\n })\n console.log(JSON.stringify(out, null, 2))\n return\n }\n\n if (data.length === 0) {\n console.log('No users found.')\n return\n }\n printTable(\n [\n {\n header: 'USER_ID',\n width: 16,\n value: (r) => (r.user as User)?.external_id ?? '',\n },\n {\n header: 'NAME',\n width: 20,\n value: (r) => {\n const u = r.user as User\n return [u?.given_name, u?.family_name].filter(Boolean).join(' ') || ''\n },\n },\n {\n header: 'EMAIL',\n width: 30,\n value: (r) => (r.user as User)?.email ?? '',\n },\n { header: 'ROLE', width: 14, value: (r) => r.role as string },\n { header: 'DOCS', width: 6, value: (r) => String(r.document_count) },\n { header: 'CONVS', width: 6, value: (r) => String(r.conversation_count) },\n ],\n data\n )\n })()\n )\n\n workspace\n .command('add-user <emails...>')\n .description('Add users to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-r, --role <role>', 'Role: owner, collaborator, guest', 'collaborator')\n .action((emails: string[], opts: { workspace?: string; role?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const role = (opts.role ?? 'collaborator') as 'owner' | 'collaborator' | 'guest'\n const data = await workspaces.addWorkspaceUsers(arbi, emails, role)\n for (const u of data) success(`Added: ${u.user.email} as ${u.role}`)\n })()\n )\n\n workspace\n .command('remove-user <users...>')\n .description('Remove users from the active workspace (accepts usr-ids or emails)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--dry-run', 'Preview which users would be removed (no SDK call)')\n .action((users: string[], opts: { workspace?: string; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n // Accept emails too — humans have the email handy, not the usr- ID.\n // Look up the workspace member list and translate any email\n // arguments before passing through to the SDK.\n const needsLookup = users.some((u) => u.includes('@'))\n let userIds = users\n if (needsLookup) {\n const members = await workspaces.listWorkspaceUsers(arbi)\n userIds = users.map((u) => {\n if (!u.includes('@')) return u\n const hit = members.find((m) => (m as Record<string, unknown>).email === u) as\n | Record<string, unknown>\n | undefined\n if (!hit) {\n error(`Workspace member ${u} not found. Try: arbi workspace users`)\n process.exit(3)\n }\n return hit.external_id as string\n })\n }\n if (opts.dryRun) {\n dryRun(`remove ${userIds.length} user(s) from this workspace`, userIds)\n return\n }\n await workspaces.removeWorkspaceUsers(arbi, userIds)\n success(`Removed ${userIds.length} user(s).`)\n })()\n )\n\n // ── leave ────────────────────────────────────────────────────────────────\n // Symmetric to `add-user`: lets an agent quit a workspace it no longer\n // needs without asking the owner to evict it. Backend's\n // /v1/workspace/users DELETE accepts self-removal — we just pass the\n // current user's id.\n workspace\n .command('leave [id-or-name]')\n .description('Leave a workspace (defaults to the active one)')\n .option('-y, --yes', 'Skip confirmation (required in non-TTY shells)')\n .option('--dry-run', 'Preview which workspace would be left (no SDK call)')\n .action((selector: string | undefined, opts: { yes?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi: userArbi } = await resolveAuth()\n const wsList = await workspaces.listWorkspaces(userArbi)\n const target = selector\n ? resolveWorkspaceSelector(wsList, selector)\n : (() => {\n const activeId = getConfig()?.selectedWorkspaceId\n const hit = wsList.find((w) => w.external_id === activeId)\n return hit\n ? ({ ok: true, id: hit.external_id, ws: hit } as const)\n : ({ ok: false, reason: 'not-found' } as const)\n })()\n if (!target.ok) {\n printResolveError(wsList, selector ?? '(active workspace)', target)\n process.exit(3)\n }\n\n const selfExtId = userArbi.session.getState().userExtId\n if (!selfExtId) {\n error('No user ID in session — cannot resolve self for leave.')\n process.exit(1)\n }\n\n if (opts.dryRun) {\n dryRun('leave workspace', `${target.id} (\"${target.ws.name}\")`)\n return\n }\n\n if (!opts?.yes) {\n requireInteractive('Pass -y/--yes to confirm in non-TTY shells.')\n const confirmed = await promptConfirm(\n `Leave workspace \"${target.ws.name}\" (${target.id})?`,\n false\n )\n if (!confirmed) {\n console.log('Cancelled.')\n return\n }\n }\n\n // Switch to the target workspace context so DELETE /v1/workspace/users\n // operates on the right scope, then self-remove by external_id.\n const { arbi } = await resolveWorkspace(target.id)\n await workspaces.removeWorkspaceUsers(arbi, [selfExtId])\n if (getConfig()?.selectedWorkspaceId === target.id) {\n updateConfig({ selectedWorkspaceId: '' })\n }\n success(`Left workspace \"${target.ws.name}\" (${target.id}).`)\n })()\n )\n\n workspace\n .command('set-role <role> <user-ids...>')\n .description('Update user roles (owner, collaborator, guest)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((role: string, userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.setUserRole(\n arbi,\n userIds,\n role as 'owner' | 'collaborator' | 'guest'\n )\n for (const u of data) success(`Updated: ${u.user.email} → ${u.role}`)\n })()\n )\n\n workspace\n .command('copy <target-workspace> <doc-ids...>')\n .description('Copy documents to another workspace (target accepts ID or unique name)')\n .option('-w, --workspace <id>', 'Source workspace ID (defaults to selected workspace)')\n .action((targetRef: string, docIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n // User-level auth to fetch workspace list (workspace-scoped JWTs cannot call /v1/user/workspaces)\n const { arbi: userArbi } = await resolveAuth()\n const wsList = await workspaces.listWorkspaces(userArbi)\n\n // Accept a workspace name as well as an ID — agents and humans both\n // tend to have the name handy. If multiple workspaces share the name,\n // refuse rather than silently picking one.\n let targetWs = wsList.find((w) => w.external_id === targetRef)\n if (!targetWs) {\n const nameMatches = wsList.filter(\n (w) => (w.name as string)?.toLowerCase() === targetRef.toLowerCase()\n )\n if (nameMatches.length === 1) {\n targetWs = nameMatches[0]\n } else if (nameMatches.length > 1) {\n error(\n `Ambiguous target workspace \"${targetRef}\" — matches ${nameMatches\n .map((w) => w.external_id)\n .join(', ')}. Use the ID.`\n )\n process.exit(3)\n }\n }\n if (!targetWs || !targetWs.wrapped_key) {\n error(`Target workspace ${targetRef} not found or has no encryption key`)\n process.exit(3)\n }\n const targetId = targetWs.external_id as string\n\n // Open source workspace to get workspace-scoped JWT + session key\n const { arbi, loginResult } = await resolveWorkspace(opts.workspace)\n const signingPrivateKeyBase64 = arbi.crypto.bytesToBase64(loginResult.signingPrivateKey)\n\n // Generate target key encrypted with session key\n const targetKey = await generateEncryptedWorkspaceKey(\n arbi,\n targetWs.wrapped_key,\n loginResult.serverSessionKey,\n signingPrivateKeyBase64\n )\n\n const data = await workspaces.copyDocuments(arbi, targetId, docIds, targetKey)\n const copied = data.documents_copied ?? 0\n const requested = docIds.length\n if (copied === 0) {\n error(`Copied 0 of ${requested} document(s). ${data.detail ?? ''}`.trim())\n error('Hint: documents must be fully indexed before they can be copied.')\n process.exit(1)\n }\n if (copied < requested) {\n error(`Copied ${copied} of ${requested} document(s). ${data.detail ?? ''}`.trim())\n return\n }\n success(`Copied ${copied} document(s) to ${targetId}`)\n })()\n )\n}\n","/**\n * arbi docs — list documents (with filtering & output options)\n * arbi doc get [ids...] — get doc details (picker if no IDs)\n * arbi doc delete [ids...] — delete docs (picker if no IDs)\n * arbi doc update [json] — update docs (form if no JSON)\n * arbi doc upload-url <urls...> — upload from URLs\n * arbi doc parsed <doc-id> [stage] — parsed content (stage defaults to 'final')\n * arbi doc summary — status summary counts\n */\n\nimport { writeFileSync } from 'node:fs'\nimport { Command } from 'commander'\nimport { documents, connectWithReconnect, workspaces } from '@arbidocs/sdk'\nimport type { DocumentListFields } from '@arbidocs/sdk'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg, dryRun } from '../helpers.js'\nimport { getConfig } from '../config.js'\nimport { success, error, warn, dim, chalk } from '../output.js'\nimport { promptSearch, promptCheckbox, promptInput, promptSelect } from '../prompts.js'\n\nexport function statusSymbol(status: string | null | undefined): string {\n switch (status) {\n case 'completed':\n return '\\u2713' // ✓\n case 'failed':\n return '\\u2717' // ✗\n case 'skipped':\n return '\\u2013' // –\n case 'queued':\n return '\\u25CB' // ○\n default:\n return '\\u25CF' // ● (processing, parsing, indexing, etc.)\n }\n}\n\nexport function statusColor(status: string | null | undefined): (s: string) => string {\n switch (status) {\n case 'completed':\n return chalk.green\n case 'failed':\n return chalk.red\n case 'queued':\n return chalk.yellow\n case 'processing':\n case 'parsing':\n case 'indexing':\n case 'analysing':\n case 'encrypting':\n return chalk.cyan\n default:\n return (s: string) => s\n }\n}\n\nexport function formatSize(bytes: number | null | undefined): string {\n if (!bytes) return '-'\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(0)}K`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)}M`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)}G`\n}\n\n/** Apply client-side filters to a document list */\nexport function filterDocs(\n data: Record<string, unknown>[],\n opts: { status?: string; folder?: string; ext?: string; query?: string }\n): Record<string, unknown>[] {\n let result = data\n if (opts.status) {\n const statuses = opts.status.split(',')\n result = result.filter((d) => statuses.includes(d.status as string))\n }\n if (opts.folder) {\n const pattern = opts.folder.toLowerCase()\n result = result.filter((d) => ((d.folder as string) ?? '').toLowerCase().includes(pattern))\n }\n if (opts.ext) {\n const exts = opts.ext\n .split(',')\n .map((e) => (e.startsWith('.') ? e.toLowerCase() : `.${e.toLowerCase()}`))\n result = result.filter((d) => {\n const fn = (d.file_name as string) ?? ''\n const dotIdx = fn.lastIndexOf('.')\n const ext = dotIdx >= 0 ? fn.slice(dotIdx).toLowerCase() : ''\n return exts.includes(ext)\n })\n }\n if (opts.query) {\n const q = opts.query.toLowerCase()\n result = result.filter((d) => {\n const fn = ((d.file_name as string) ?? '').toLowerCase()\n const meta = d.doc_metadata as { title?: string | null; doc_subject?: string | null } | null\n const title = (meta?.title ?? '').toLowerCase()\n const subject = (meta?.doc_subject ?? '').toLowerCase()\n return fn.includes(q) || title.includes(q) || subject.includes(q)\n })\n }\n return result\n}\n\n/** Fetch workspace docs and return as picker choices */\nasync function fetchDocChoices(arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi']) {\n // Use lite mode for the picker — we only need file_name, status, external_id\n const data = await documents.listAll(arbi, { fields: 'lite', order: 'created_desc' })\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\n return data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n}\n\ninterface DocsListOpts {\n workspace?: string\n json?: boolean\n csv?: boolean\n ids?: boolean\n count?: boolean\n status?: string\n folder?: string\n ext?: string\n query?: string\n sort?: string\n limit?: string\n output?: string\n lite?: boolean\n}\n\nexport function registerDocsCommand(program: Command): void {\n program\n .command('docs')\n .description('List documents in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .option('--csv', 'Output as CSV')\n .option('--ids', 'Output only document IDs (one per line)')\n .option('--count', 'Output only the count (combine with --status for filtered count)')\n .option('-s, --status <status>', 'Filter by status (comma-separated: completed,failed,queued)')\n .option('-f, --folder <pattern>', 'Filter by folder (substring match)')\n .option('-e, --ext <extensions>', 'Filter by file extension (comma-separated: pdf,docx,eml)')\n .option('-q, --query <text>', 'Search file name, title, or summary')\n .option('--sort <field>', 'Sort by field (name, status, date, size, created)', 'status')\n .option(\n '-n, --limit <n>',\n 'Stop after N results. Fetching stops early — no unnecessary pages are loaded.'\n )\n .option(\n '--lite',\n 'Use lite field mode: skips per-doc decrypt and returns null metadata and empty doctags. ' +\n 'Much faster on large workspaces; fetch full doc details on demand.'\n )\n .option(\n '-o, --output <path>',\n 'Write output to a file instead of stdout. Extension determines the format when combined with --ids/--json/--csv (default: csv with doc_id, file_name, folder, status)'\n )\n .action((opts: DocsListOpts) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n\n // Fetch workspace metadata (name) so callers don't need a second\n // ``arbi workspace current`` round-trip just to label the result.\n // This is one extra GET /v1/user/workspaces per ``arbi docs`` —\n // cheap, RLS-filtered, and the agent saves a step. Failures are\n // non-fatal: we just omit the name.\n let workspaceName: string | null = null\n try {\n const list = await workspaces.listWorkspaces(arbi)\n workspaceName = list.find((w) => w.external_id === workspaceId)?.name ?? null\n } catch {\n // Network blip or permission shape we don't expect — proceed\n // without the name rather than failing the whole command.\n }\n\n const fields: DocumentListFields | undefined = opts.lite ? 'lite' : undefined\n const hardLimit = opts.limit ? parseInt(opts.limit, 10) : undefined\n\n // Collect rows progressively. We stream output as pages arrive in table/ids/csv\n // modes (no --output) so the terminal updates immediately.\n // For json/--output/count/sort modes we still buffer all pages first since those\n // outputs require the complete set.\n const needsSort = !!(opts.sort && opts.sort !== 'status')\n const bufferAll = !!(opts.json || opts.output || opts.count || needsSort)\n\n const data: Record<string, unknown>[] = []\n let totalFetched = 0\n\n const csvEscape = (s: string | null | undefined) => `\"${(s ?? '').replace(/\"/g, '\"\"')}\"`\n\n const csvHeader =\n 'external_id,status,file_name,file_size,folder,n_pages,tokens,doc_date,title'\n\n const renderRow = (d: Record<string, unknown>): string => {\n const meta = d.doc_metadata as {\n title?: string | null\n doc_date?: string | null\n } | null\n return [\n d.external_id,\n d.status,\n csvEscape((d.file_name as string) ?? ''),\n d.file_size ?? '',\n csvEscape((d.folder as string) ?? ''),\n d.n_pages ?? '',\n d.tokens ?? '',\n meta?.doc_date ?? '',\n csvEscape(meta?.title ?? ''),\n ].join(',')\n }\n\n // Print CSV header eagerly when streaming\n if (!bufferAll && (opts.csv || (!opts.ids && !opts.json && !opts.output))) {\n if (opts.csv) process.stdout.write(csvHeader + '\\n')\n }\n\n for await (const page of documents.listPaginated(arbi, {\n pageSize: 500,\n order: 'created_desc',\n fields,\n })) {\n let filtered = filterDocs(page as Record<string, unknown>[], opts)\n\n // Apply early limit: stop once we have enough\n if (hardLimit !== undefined) {\n const remaining = hardLimit - totalFetched\n if (remaining <= 0) break\n filtered = filtered.slice(0, remaining)\n }\n\n if (filtered.length === 0) {\n // Page may be entirely filtered out; check if we hit the limit\n if (hardLimit !== undefined && totalFetched >= hardLimit) break\n continue\n }\n\n totalFetched += filtered.length\n\n if (bufferAll) {\n data.push(...filtered)\n } else {\n // Streaming output — print rows as they arrive\n if (opts.ids) {\n filtered.forEach((d) => process.stdout.write((d.external_id as string) + '\\n'))\n } else if (opts.csv) {\n filtered.forEach((d) => process.stdout.write(renderRow(d) + '\\n'))\n } else {\n // Table mode — buffer page for printTable (can't stream individual rows\n // without column alignment, so we reprint per page)\n data.push(...filtered)\n }\n }\n\n if (hardLimit !== undefined && totalFetched >= hardLimit) break\n }\n\n if (totalFetched === 0 && data.length === 0) {\n // Machine-readable modes: emit a valid-but-empty payload so scripts\n // can parse the output without special-casing the no-results path.\n if (opts.json) {\n const emptyPayload = JSON.stringify(\n {\n workspace: { external_id: workspaceId, name: workspaceName },\n documents: [],\n },\n null,\n opts.output ? 2 : 0\n )\n if (opts.output) writeFileSync(opts.output, emptyPayload + '\\n')\n else console.log(emptyPayload)\n } else if (opts.ids) {\n if (opts.output) writeFileSync(opts.output, '')\n // Streaming IDs mode: nothing to emit, stay silent (valid empty stream).\n } else if (opts.csv) {\n if (opts.output) writeFileSync(opts.output, csvHeader + '\\n')\n // Streaming CSV already printed the header above.\n } else if (opts.count) {\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log('0')\n } else {\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log('No documents found.')\n }\n return\n }\n\n // For streaming non-table modes we're done — output already printed\n if (!bufferAll && (opts.ids || opts.csv)) {\n return\n }\n\n // Sort (buffered modes)\n if (bufferAll || (!opts.ids && !opts.csv)) {\n const sortField = opts.sort ?? 'status'\n data.sort((a, b) => {\n switch (sortField) {\n case 'name':\n return ((a.file_name as string) ?? '').localeCompare((b.file_name as string) ?? '')\n case 'size':\n return ((b.file_size as number) ?? 0) - ((a.file_size as number) ?? 0)\n case 'date':\n case 'created':\n return ((b.created_at as string) ?? '').localeCompare(\n (a.created_at as string) ?? ''\n )\n case 'status':\n default:\n return ((a.status as string) ?? '').localeCompare((b.status as string) ?? '')\n }\n })\n }\n\n // -- Count mode --\n if (opts.count) {\n if (opts.status || opts.folder || opts.ext || opts.query) {\n console.log(String(data.length))\n } else {\n const counts: Record<string, number> = {}\n data.forEach((d) => {\n const s = (d.status as string) ?? 'unknown'\n counts[s] = (counts[s] ?? 0) + 1\n })\n const withSummary = data.filter((d) => {\n const m = d.doc_metadata as { doc_subject?: string | null } | null\n return m?.doc_subject\n }).length\n const totalPages = data.reduce((sum, d) => sum + ((d.n_pages as number) ?? 0), 0)\n const totalTokens = data.reduce((sum, d) => sum + ((d.tokens as number) ?? 0), 0)\n // Include workspace context so callers (especially agents)\n // can answer \"how many docs in the workspace\" in one shot.\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log(chalk.bold(`Total: ${data.length} documents`))\n for (const [status, count] of Object.entries(counts).sort()) {\n const colorFn = statusColor(status)\n const pct = ((count / data.length) * 100).toFixed(1)\n console.log(` ${colorFn(statusSymbol(status))} ${status}: ${count} (${pct}%)`)\n }\n console.log(` With summaries: ${withSummary}`)\n console.log(` Total pages: ${totalPages.toLocaleString()}`)\n console.log(` Total tokens: ${totalTokens.toLocaleString()}`)\n }\n return\n }\n\n // Small helper: either write the payload to opts.output (if set)\n // or print it to stdout.\n const writeOut = (payload: string, defaultExt: string) => {\n if (opts.output) {\n writeFileSync(opts.output, payload.endsWith('\\n') ? payload : payload + '\\n')\n success(`Wrote ${data.length} rows to ${opts.output} (${defaultExt})`)\n } else {\n console.log(payload.endsWith('\\n') ? payload.slice(0, -1) : payload)\n }\n }\n\n // -- IDs mode (buffered - writing to file) --\n if (opts.ids) {\n writeOut(data.map((d) => d.external_id as string).join('\\n'), 'ids')\n return\n }\n\n // -- JSON mode --\n if (opts.json) {\n // Wrap with workspace context so a single ``arbi docs --json``\n // tells the caller both *what* docs and *which* workspace —\n // saves agents (and any scripted consumer) from a second\n // ``arbi workspace current`` round-trip. Existing scripts\n // expecting a bare array need to read ``.documents`` now.\n const payload = {\n workspace: { external_id: workspaceId, name: workspaceName },\n documents: data,\n }\n writeOut(JSON.stringify(payload, null, opts.output ? 2 : 0), 'json')\n return\n }\n\n // -- CSV mode (buffered - writing to file) --\n if (opts.csv || (opts.output && !opts.ids && !opts.json)) {\n const lines = [csvHeader]\n for (const d of data) {\n lines.push(renderRow(d))\n }\n writeOut(lines.join('\\n'), 'csv')\n return\n }\n\n // -- Table mode (default) --\n const wsLabel = workspaceName ? `${workspaceName} (${workspaceId})` : workspaceId\n console.log(chalk.dim(`Workspace: ${wsLabel}`))\n console.log(chalk.dim(`${data.length} documents\\n`))\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n {\n header: 'S',\n width: 4,\n value: (r) => {\n const s = r.status as string | null\n return statusColor(s)(statusSymbol(s))\n },\n },\n {\n header: 'TITLE',\n width: 34,\n value: (r) => {\n const meta = r.doc_metadata as { title?: string | null } | null\n return meta?.title ?? (r.file_name as string) ?? 'Unnamed'\n },\n },\n {\n header: 'SIZE',\n width: 8,\n value: (r) => formatSize(r.file_size as number | null),\n },\n {\n header: 'PAGES',\n width: 6,\n value: (r) => (r.n_pages ? String(r.n_pages) : '-'),\n },\n {\n header: 'DATE',\n width: 12,\n value: (r) => {\n const meta = r.doc_metadata as { doc_date?: string | null } | null\n return meta?.doc_date ?? '-'\n },\n },\n {\n header: 'FOLDER',\n width: 30,\n value: (r) => (r.folder as string) ?? '-',\n },\n ],\n data\n )\n })()\n )\n\n const doc = program.command('doc').description('Document management')\n\n doc\n .command('get [ids...]')\n .description('Get document details (interactive picker if no IDs given)')\n .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi)\n const selected = await promptCheckbox('Select documents', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n const data = await documents.getDocuments(arbi, docIds)\n console.log(JSON.stringify(data, null, 2))\n\n // Surface processing errors for failed documents.\n // The backend may include error details in various fields that aren't\n // in the typed schema, so we check the raw object dynamically.\n const docs = Array.isArray(data) ? data : [data]\n for (const d of docs) {\n const raw = d as Record<string, unknown>\n if (raw.status === 'failed') {\n const reason =\n (raw.error_reason as string) ||\n (raw.status_details as string) ||\n (raw.error as string) ||\n null\n const docId = raw.external_id as string\n if (reason) {\n console.error(chalk.red(`\\n⚠ ${docId} processing failed: ${reason}`))\n } else {\n console.error(\n chalk.red(`\\n⚠ ${docId} processing failed (no error details available)`)\n )\n }\n }\n }\n })()\n )\n\n doc\n .command('delete [ids...]')\n .description('Delete documents (interactive picker if no IDs given)')\n .option('--dry-run', 'Preview which docs would be deleted (no SDK call)')\n .action((ids?: string[], opts?: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi)\n const selected = await promptCheckbox('Select documents to delete', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n if (opts?.dryRun) {\n dryRun(`delete ${docIds.length} document(s)`, docIds)\n return\n }\n await documents.deleteDocuments(arbi, docIds)\n success(`Deleted ${docIds.length} document(s).`)\n })()\n )\n\n // ── share / unshare ──────────────────────────────────────────────────────\n // Two named subcommands instead of forcing agents through\n // `doc update '[{\"external_id\":\"…\",\"shared\":true}]'` — toggling one\n // boolean is the most-tripped-over JSON path in the CLI.\n doc\n .command('share <ids...>')\n .description('Mark documents as shared (visible to all workspace members)')\n .action((ids: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n await documents.updateDocuments(\n arbi,\n ids.map((external_id) => ({ external_id, shared: true }))\n )\n success(`Shared ${ids.length} document(s).`)\n })()\n )\n doc\n .command('unshare <ids...>')\n .description('Mark documents as private (owner-only)')\n .action((ids: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n await documents.updateDocuments(\n arbi,\n ids.map((external_id) => ({ external_id, shared: false }))\n )\n success(`Unshared ${ids.length} document(s).`)\n })()\n )\n\n // ── similar ──────────────────────────────────────────────────────────────\n // De-duplication primitive: find near-duplicate documents (same content,\n // different filenames) before deciding to ingest a new file. Pairs are\n // stored at upload time, so this is a cheap cached lookup, not a re-scan.\n doc\n .command('similar [doc-id]')\n .description('Find near-duplicate documents (cached similarity pairs)')\n .option(\n '--threshold <n>',\n 'Minimum cosine similarity score, 0.0–1.0 (default 0.0 = all stored pairs)',\n (v) => parseFloat(v),\n 0.0\n )\n .option('--json', 'Output as JSON')\n .action((docId: string | undefined, opts: { threshold: number; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const res = await arbi.fetch.GET('/v1/document/similar', {\n params: {\n query: {\n ...(docId ? { doc_ext_id: docId } : {}),\n threshold: opts.threshold,\n },\n },\n })\n if (res.error) throw new Error(`similar failed: ${JSON.stringify(res.error)}`)\n // Endpoint returns `{workspace_ext_id, pairs: [...]}` — surface the\n // envelope to --json callers, but flatten to the pairs array for the\n // table view (pairs is what the human cares about).\n const envelope = res.data as {\n workspace_ext_id?: string\n pairs?: Array<Record<string, unknown>>\n }\n const pairs = envelope.pairs ?? []\n if (opts.json) {\n console.log(JSON.stringify(envelope, null, 2))\n return\n }\n if (pairs.length === 0) {\n process.stderr.write(\n docId\n ? `No similar documents found above threshold ${opts.threshold}.\\n`\n : 'No stored similarity pairs.\\n'\n )\n return\n }\n printTable(\n [\n { header: 'DOC A', width: 18, value: (r) => (r.doc_a_ext_id as string) ?? '' },\n { header: 'DOC B', width: 18, value: (r) => (r.doc_b_ext_id as string) ?? '' },\n {\n header: 'SCORE',\n width: 8,\n value: (r) => ((r.score as number) ?? 0).toFixed(3),\n },\n ],\n pairs\n )\n })()\n )\n\n doc\n .command('update [json]')\n .description('Update documents (interactive form if no JSON given)')\n .action((json?: string) =>\n runAction(async () => {\n if (json) {\n const parsed = parseJsonArg<\n Record<string, unknown>[] | { documents: Record<string, unknown>[] }\n >(json, 'arbi doc update \\'[{\"external_id\": \"doc-123\", \"shared\": true}]\\'')\n const docs = Array.isArray(parsed) ? parsed : parsed.documents\n\n const { arbi } = await resolveWorkspace()\n const data = await documents.updateDocuments(\n arbi,\n docs as Parameters<typeof documents.updateDocuments>[1]\n )\n success(`Updated ${data.length} document(s).`)\n } else {\n // Interactive: pick a doc, then ask what to change\n const { arbi } = await resolveWorkspace()\n const choices = await fetchDocChoices(arbi)\n const docId = await promptSearch('Select document to update', choices)\n\n const field = await promptSelect('Field to update', [\n { name: 'Title', value: 'title' },\n { name: 'Shared', value: 'shared' },\n { name: 'Author', value: 'author' },\n { name: 'Abstract', value: 'abstract' },\n { name: 'Date', value: 'date' },\n ])\n\n let value: unknown\n if (field === 'shared') {\n value = await promptSelect('Shared?', [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ])\n } else if (field === 'date') {\n value = (await promptInput('Date (YYYY-MM-DD)', false)) || null\n } else {\n value = await promptInput(`${field.charAt(0).toUpperCase() + field.slice(1)}`)\n }\n\n const data = await documents.updateDocuments(arbi, [\n { external_id: docId, [field]: value },\n ])\n success(`Updated ${data.length} document(s).`)\n }\n })()\n )\n\n doc\n .command('upload-url <urls...>')\n .description('Upload documents from URLs')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--shared', 'Make documents shared', false)\n .option('--json', 'Output results as JSON')\n .action((urls: string[], opts: { workspace?: string; shared?: boolean; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await documents.uploadUrl(arbi, urls, opts.shared ?? false)\n if (opts.json) {\n console.log(\n JSON.stringify({\n docIds: data.doc_ext_ids ?? [],\n skipped: data.skipped ?? [],\n })\n )\n return\n }\n success(`Uploaded: ${(data.doc_ext_ids ?? []).join(', ')}`)\n if (data.skipped && data.skipped.length > 0) {\n warn(\n `Skipped: ${data.skipped.map((s: { file_name: string; reason: string }) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n })()\n )\n\n doc\n .command('parsed <doc-id> [stage]')\n .description('Get parsed document content (stage: marker, subchunk, final; default: final)')\n .action((docId: string, stage?: string) =>\n runAction(async () => {\n const { accessToken, config } = await resolveWorkspace()\n\n // Default to 'final' stage if not specified (most common use case)\n const validStages = ['marker', 'subchunk', 'final']\n const selectedStage = stage ?? 'final'\n if (!validStages.includes(selectedStage)) {\n error(`Invalid stage: ${selectedStage}. Must be one of: ${validStages.join(', ')}`)\n process.exit(1)\n }\n\n const data = await documents.getParsedContent(\n { baseUrl: config.baseUrl, accessToken },\n docId,\n selectedStage\n )\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n doc\n .command('reprocess [ids...]')\n .description('Reprocess failed/completed documents (sets status back to processing)')\n .option('-s, --status <status>', 'Reprocess all docs with this status (e.g. failed)')\n .option('-f, --folder <pattern>', 'Filter by folder (substring match)')\n .option(\n '-e, --ext <extension>',\n 'Filter by file extension (e.g. pdf, docx). Requires --status.'\n )\n .option('--dry-run', 'Show what would be reprocessed without doing it')\n .option('-b, --batch-size <n>', 'Batch size for update requests', '50')\n .option(\n '-i, --interval <seconds>',\n 'Seconds to wait between batches (float allowed, e.g. 0.5). Default 0 — send as fast as the server acks.',\n '0'\n )\n .option(\n '-r, --max-retries <n>',\n 'Retry attempts per failing batch before falling back to per-doc submission.',\n '3'\n )\n .option(\n '--status-interval <seconds>',\n 'Seconds between progress lines (0 to disable periodic printing).',\n '5'\n )\n .option('-v, --verbose', 'Print a log line after each batch in addition to periodic stats.')\n .option('-q, --quiet', 'Suppress periodic progress lines — only print the final summary.')\n .option('-W, --watch', 'Watch document processing progress after submission')\n .option('--no-watch', 'Skip watching document processing')\n .action(\n (\n ids: string[] | undefined,\n opts: {\n status?: string\n folder?: string\n ext?: string\n dryRun?: boolean\n batchSize?: string\n interval?: string\n maxRetries?: string\n statusInterval?: string\n verbose?: boolean\n quiet?: boolean\n watch?: boolean\n }\n ) =>\n runAction(async () => {\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n const { arbi, config, accessToken } = await resolveWorkspace(undefined, {\n skipNotifications: true,\n })\n let docIds: string[]\n const docNames = new Map<string, string>()\n\n if (ids && ids.length > 0) {\n if (opts.ext || opts.folder) {\n warn('--ext/--folder are ignored when explicit IDs are given.')\n }\n docIds = ids\n } else if (opts.status) {\n // Fetch all docs progressively and filter client-side.\n const allDocs = (await documents.listAll(arbi, {\n fields: 'lite',\n order: 'created_desc',\n })) as Record<string, unknown>[]\n let filtered = allDocs.filter((d) => d.status === opts.status)\n if (opts.folder) {\n const pattern = opts.folder.toLowerCase()\n filtered = filtered.filter((d) =>\n ((d.folder as string) ?? '').toLowerCase().includes(pattern)\n )\n }\n if (opts.ext) {\n // Match on file_name suffix; accept \"pdf\" or \".pdf\".\n const ext = opts.ext.toLowerCase().replace(/^\\./, '')\n filtered = filtered.filter((d) =>\n ((d.file_name as string) ?? '').toLowerCase().endsWith('.' + ext)\n )\n }\n docIds = filtered.map((d) => d.external_id as string)\n for (const d of filtered) {\n docNames.set(d.external_id as string, (d.file_name as string) ?? 'Unnamed')\n }\n } else {\n error('Provide document IDs or use --status to select documents to reprocess.')\n process.exit(1)\n return\n }\n\n if (docIds.length === 0) {\n console.log('No documents match the criteria.')\n return\n }\n\n console.log(`${docIds.length} document(s) to reprocess.`)\n\n if (opts.dryRun) {\n docIds.forEach((id) => console.log(` ${id}`))\n console.log(chalk.dim('\\n(dry run — no changes made)'))\n return\n }\n\n const batchSize = parseInt(opts.batchSize ?? '50', 10)\n const maxRetries = parseInt(opts.maxRetries ?? '3', 10)\n const intervalSec = parseFloat(opts.interval ?? '0')\n const intervalMs =\n Number.isFinite(intervalSec) && intervalSec > 0 ? intervalSec * 1000 : 0\n const statusIntervalSec = parseFloat(opts.statusInterval ?? '5')\n const statusIntervalMs =\n Number.isFinite(statusIntervalSec) && statusIntervalSec > 0\n ? statusIntervalSec * 1000\n : 0\n\n const total = docIds.length\n const startMs = Date.now()\n let submitted = 0\n let succeeded = 0\n let failed = 0\n const failedIds: string[] = []\n\n const formatDuration = (ms: number): string => {\n const s = Math.floor(ms / 1000)\n if (s < 60) return `${s}s`\n const m = Math.floor(s / 60)\n if (m < 60) return `${m}m${s % 60}s`\n const h = Math.floor(m / 60)\n return `${h}h${m % 60}m`\n }\n\n // Local HH:MM:SS for the status-line timestamp. Tying each\n // line to a wall-clock makes `elapsed=` sanity-checkable in\n // a running tail and lets the operator cross-reference with\n // other logs.\n const formatClock = (ts: number): string => {\n const d = new Date(ts)\n const pad = (n: number): string => n.toString().padStart(2, '0')\n return `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`\n }\n\n // ── Processing watch state (populated when --watch) ──────────\n let procCompleted = 0\n let procFailed = 0\n const procPending = new Set<string>()\n const procFailedDetails = new Map<string, string>()\n\n const printStatus = (prefix = ''): void => {\n const now = Date.now()\n const elapsed = now - startMs\n const submitRate = submitted > 0 ? (submitted / elapsed) * 1000 : 0\n let bar =\n `[${formatClock(now)}] submitted=${submitted}/${total} ` +\n `api_ok=${succeeded} api_err=${failed} ` +\n `rate=${submitRate.toFixed(1)}/s elapsed=${formatDuration(elapsed)}`\n\n if (willWatch) {\n const procRate = procCompleted > 0 ? (procCompleted / elapsed) * 1000 : 0\n const pendingCount = procPending.size\n const eta = procRate > 0 ? pendingCount / procRate : 0\n bar +=\n ` | proc_ok=${procCompleted} proc_err=${procFailed} proc_pending=${pendingCount}` +\n ` rate(proc)=${procRate.toFixed(1)}/s eta(processing)=${formatDuration(eta * 1000)}`\n }\n console.log(`${prefix}${bar}`)\n }\n\n // Periodic progress printer. Holds a reference so we can clear\n // it on exit even if the loop aborts. Quiet mode disables it;\n // the final summary still prints at the end either way.\n let statusTimer: NodeJS.Timeout | undefined\n if (!opts.quiet && statusIntervalMs > 0) {\n statusTimer = setInterval(() => printStatus(' '), statusIntervalMs)\n }\n\n // Exponential backoff helper. Caps at 30s so a retry storm\n // doesn't stall the run indefinitely.\n const sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, ms))\n const backoff = async (attempt: number): Promise<void> => {\n const delayMs = Math.min(1000 * Math.pow(2, attempt), 30000)\n await sleep(delayMs)\n }\n\n const submitBatch = async (batchIds: string[]): Promise<boolean> => {\n const updates = batchIds.map((id) => ({\n external_id: id,\n status: 'processing' as const,\n }))\n try {\n await documents.updateDocuments(\n arbi,\n updates as Parameters<typeof documents.updateDocuments>[1]\n )\n return true\n } catch {\n return false\n }\n }\n\n // ── Open WebSocket before submitting so processing events\n // arrive concurrently with submission. ──────────────────\n let conn: { close: () => void } | null = null\n let onWatchDone: (() => void) | null = null\n let watchDonePromise: Promise<void> | null = null\n let submissionDone = false\n\n if (willWatch) {\n watchDonePromise = new Promise<void>((r) => {\n onWatchDone = r\n })\n\n try {\n conn = await connectWithReconnect({\n baseUrl: config.baseUrl,\n accessToken,\n onReconnecting: (attempt, max) => {\n warn(` WebSocket reconnecting (${attempt}/${max})...`)\n },\n onReconnectFailed: () => {\n error(' WebSocket reconnection failed. Run \"arbi watch\" to resume monitoring.')\n },\n onMessage: (msg) => {\n if (!isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) return\n if (!procPending.has(msg.doc_ext_id)) return\n const docName = docNames.get(msg.doc_ext_id) || msg.file_name\n const extra = msg as Record<string, unknown>\n\n if (msg.status === 'failed') {\n procFailed += 1\n procPending.delete(msg.doc_ext_id)\n\n // Try WS extras first, then fetch error_message from API\n const wsReason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n ''\n\n const logFailure = (reason: string): void => {\n const suffix = reason ? ` — ${reason}` : ''\n procFailedDetails.set(msg.doc_ext_id, `${docName}${suffix}`)\n console.log(` ${docName}: ${chalk.red('processing failed')}${suffix}`)\n if (submissionDone && procPending.size === 0) conn?.close()\n }\n\n if (wsReason) {\n logFailure(wsReason)\n } else {\n // Fetch from REST API — fire-and-forget async\n documents\n .getDocuments(arbi, [msg.doc_ext_id])\n .then((docs) => {\n const d = (docs as Record<string, unknown>[])[0]\n logFailure((d?.error_message as string) || '')\n })\n .catch(() => logFailure(''))\n }\n } else if (\n msg.status === 'completed' ||\n msg.status === 'skipped' ||\n msg.status === 'empty'\n ) {\n procCompleted += 1\n procPending.delete(msg.doc_ext_id)\n }\n\n if (msg.status !== 'failed' && submissionDone && procPending.size === 0) {\n conn?.close()\n }\n },\n onClose: () => {\n onWatchDone?.()\n },\n })\n } catch {\n warn('WebSocket connection failed. Proceeding without processing watch.')\n conn = null\n watchDonePromise = null\n }\n }\n\n try {\n for (let i = 0; i < docIds.length; i += batchSize) {\n const batch = docIds.slice(i, i + batchSize)\n\n // 1. Try the batch, retrying transient failures with\n // exponential backoff up to `maxRetries` attempts.\n let batchOk = false\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n batchOk = await submitBatch(batch)\n if (batchOk) break\n if (attempt < maxRetries) {\n await backoff(attempt)\n }\n }\n\n if (batchOk) {\n succeeded += batch.length\n submitted += batch.length\n for (const id of batch) procPending.add(id)\n if (opts.verbose) {\n console.log(` [${submitted}/${total}] Triggered reprocessing...`)\n }\n } else {\n // 2. Batch persistently failed — fall back to per-doc\n // submission so a single bad doc can't poison the\n // whole batch.\n console.log(\n chalk.dim(\n ` batch of ${batch.length} failed after ${maxRetries} retries, falling back to per-doc`\n )\n )\n for (let j = 0; j < batch.length; j++) {\n const id = batch[j]\n const docOk = await submitBatch([id])\n if (docOk) {\n succeeded += 1\n procPending.add(id)\n } else {\n failed += 1\n failedIds.push(id)\n }\n submitted += 1\n if (intervalMs > 0 && j < batch.length - 1) {\n await sleep(intervalMs)\n }\n }\n }\n\n // Pace subsequent batches per `intervalMs` so a long doc\n // list can't stampede a loaded server.\n if (intervalMs > 0 && i + batchSize < docIds.length) {\n await sleep(intervalMs)\n }\n }\n } finally {\n if (statusTimer) clearInterval(statusTimer)\n }\n\n submissionDone = true\n\n // Submission summary.\n console.log('')\n printStatus()\n if (failed > 0) {\n warn(`${failed} document(s) failed to submit.`)\n const preview = failedIds.slice(0, 20)\n preview.forEach((id) => console.log(` ${chalk.red('✗')} ${id}`))\n if (failedIds.length > preview.length) {\n console.log(chalk.dim(` ... and ${failedIds.length - preview.length} more`))\n }\n }\n if (succeeded > 0) {\n success(`Submitted ${succeeded} document(s) for reprocessing.`)\n }\n\n // ── Wait for processing to complete ──────────────────────────\n if (watchDonePromise && conn && procPending.size > 0) {\n console.log(chalk.bold(`\\nWatching processing for ${procPending.size} document(s)...`))\n\n // Start a new periodic printer for the watch phase\n let watchTimer: NodeJS.Timeout | undefined\n if (!opts.quiet && statusIntervalMs > 0) {\n watchTimer = setInterval(() => printStatus(' '), statusIntervalMs)\n }\n\n await watchDonePromise\n\n if (watchTimer) clearInterval(watchTimer)\n\n // Processing summary\n const totalElapsed = formatDuration(Date.now() - startMs)\n if (procFailedDetails.size > 0) {\n console.log(\n `\\nProcessing complete: completed=${procCompleted} failed=${procFailed} elapsed=${totalElapsed}`\n )\n error('Failed documents:')\n for (const [, detail] of procFailedDetails) {\n error(` ${detail}`)\n }\n } else if (procPending.size > 0) {\n warn(`\\nDisconnected. ${procPending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else {\n success(\n `\\nProcessing complete: completed=${procCompleted} failed=0 elapsed=${totalElapsed} ${chalk.green('✓ all ok')}`\n )\n }\n } else if (succeeded > 0 && !willWatch) {\n dim(\n 'Tip: Use -W/--watch to monitor processing progress, or run \"arbi docs\" to check status.'\n )\n } else if (watchDonePromise && conn && procPending.size === 0) {\n // All completed during submission\n conn.close()\n await watchDonePromise\n const totalElapsed = formatDuration(Date.now() - startMs)\n if (procFailedDetails.size > 0) {\n console.log(\n `\\nProcessing complete: completed=${procCompleted} failed=${procFailed} elapsed=${totalElapsed}`\n )\n error('Failed documents:')\n for (const [, detail] of procFailedDetails) {\n error(` ${detail}`)\n }\n } else {\n success(\n `\\nProcessing complete: completed=${procCompleted} failed=0 elapsed=${totalElapsed} ${chalk.green('✓ all ok')}`\n )\n }\n }\n })()\n )\n}\n","/**\n * Shared types and helpers for the upload command family.\n *\n * Kept in a dedicated module so the legacy multipart path (``upload.ts``) and\n * the direct-to-MinIO path (``upload-direct.ts``) can share the summary shape\n * and printing helper without introducing a circular import between them.\n */\n\nimport { success, warn } from '../output.js'\n\nexport interface UploadSummary {\n totalFiles: number\n uploaded: number\n skipped: number\n duplicates: number\n folders: number\n docIds: string[]\n skippedDetails: Array<{ file_name: string; reason: string }>\n}\n\nexport interface UploadOpts {\n workspace?: string\n watch?: boolean\n dryRun?: boolean\n json?: boolean\n config?: string\n manifest?: string\n log?: string\n resume?: boolean\n failFast?: boolean\n root?: string\n limit?: string\n s3?: boolean\n folder?: string\n /** Work-product type for the uploaded docs (source, skill, memory,\n * artifact, webpage). Use ``skill`` with ``--folder skills/<slug>``\n * to upload a SKILL.md the agent will pick up on slash invocation. */\n wpType?: 'source' | 'skill' | 'memory' | 'artifact' | 'webpage'\n}\n\nexport function printSummary(summary: UploadSummary): void {\n console.log('')\n console.log('Upload summary:')\n console.log(` Files found: ${summary.totalFiles}`)\n success(` Uploaded: ${summary.uploaded}`)\n if (summary.skipped > 0) {\n warn(` Skipped: ${summary.skipped}`)\n }\n console.log(` Folders: ${summary.folders}`)\n\n if (summary.skippedDetails.length > 0) {\n console.log('')\n warn('Skipped files:')\n for (const s of summary.skippedDetails) {\n warn(` ${s.file_name}: ${s.reason}`)\n }\n }\n}\n","/**\n * Direct-to-MinIO upload path (``arbi upload --s3``).\n *\n * Files are SecretBox-encrypted on the client and PUT directly to MinIO via\n * presigned URLs; arbi-app is never in the byte path. This module hosts the\n * input-expansion helper and the command runner; they are imported from\n * ``upload.ts`` when the ``--s3`` flag is set.\n */\n\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport {\n documentsNode,\n documents,\n connectWebSocket,\n getRawWorkspaceKey,\n DOC_TERMINAL_STATUSES,\n} from '@arbidocs/sdk'\nimport { resolveWorkspace } from '../helpers.js'\nimport { store, getConfig } from '../config.js'\nimport { success, error, warn, status, dim } from '../output.js'\nimport { printSummary, type UploadOpts, type UploadSummary } from './upload-shared.js'\n\n/** Count the supported files that would actually be uploaded from a directory. */\nfunction countSupportedFiles(dirPath: string): number {\n let count = 0\n for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) {\n const full = `${dirPath}/${entry.name}`\n if (entry.isDirectory()) {\n count += countSupportedFiles(full)\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase()\n if (documents.SUPPORTED_EXTENSIONS.has(ext)) count++\n }\n }\n return count\n}\n\n/**\n * Merge an ``UploadBatchResult`` (returned by the zip / dir / archive helpers)\n * into the running summary + doc → filename map used for --watch.\n */\nfunction mergeBatchResult(\n summary: UploadSummary,\n uploadedDocs: Map<string, string>,\n result: documents.UploadBatchResult,\n sourceLabel: string,\n opts: UploadOpts\n): void {\n for (const [folder, info] of result.folders) {\n summary.folders += 1\n summary.totalFiles += info.fileCount\n if (!opts.json) {\n success(\n ` ${folder || '<root>'}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`)\n }\n }\n for (const docId of info.doc_ext_ids) uploadedDocs.set(docId, sourceLabel)\n }\n summary.uploaded += result.doc_ext_ids.length\n summary.skipped += result.skipped.length\n summary.docIds.push(...result.doc_ext_ids)\n summary.skippedDetails.push(...result.skipped)\n}\n\n/**\n * Classify and validate the positional inputs for the direct-upload flow.\n *\n * Unlike the legacy path, every input is handled client-side: directories are\n * walked, zips are extracted in memory, and 7z/rar archives shell out to the\n * system ``7z`` command. Nothing is rejected up front — the caller decides\n * how to upload each entry in ``runDirectUploadMode``.\n */\nexport type DirectInputKind = 'file' | 'dir' | 'zip' | 'archive'\n\nexport interface DirectInput {\n kind: DirectInputKind\n absolutePath: string\n originalPath: string\n}\n\nexport function classifyDirectInputs(inputPaths: string[]): DirectInput[] {\n const out: DirectInput[] = []\n for (const p of inputPaths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n const resolved = path.resolve(p)\n const stat = fs.statSync(resolved)\n if (stat.isDirectory()) {\n out.push({ kind: 'dir', absolutePath: resolved, originalPath: p })\n continue\n }\n const ext = path.extname(resolved).toLowerCase()\n if (ext === '.zip') {\n out.push({ kind: 'zip', absolutePath: resolved, originalPath: p })\n continue\n }\n if (documentsNode.ARCHIVE_EXTENSIONS.has(ext)) {\n out.push({ kind: 'archive', absolutePath: resolved, originalPath: p })\n continue\n }\n if (!documents.SUPPORTED_EXTENSIONS.has(ext)) {\n warn(`Skipping unsupported file: ${p}`)\n continue\n }\n out.push({ kind: 'file', absolutePath: resolved, originalPath: p })\n }\n return out\n}\n\n/**\n * Execute the upload via the direct-to-MinIO flow.\n *\n * Each positional input is handled based on its kind:\n * - single file: uploaded via ``uploadLocalFilesDirect`` at the workspace\n * root (or under ``--folder`` if supplied)\n * - directory: walked and uploaded via ``uploadLocalDirectoryDirect``,\n * preserving the internal folder structure\n * - zip: extracted in memory and uploaded via ``uploadLocalZipDirect``\n * - 7z / rar: extracted to a temp dir via the system ``7z`` binary, then\n * uploaded via ``uploadLocalArchiveDirect``\n *\n * All extraction happens client-side — arbi-app only ever sees metadata and\n * SecretBox ciphertext via the presigned PUT route.\n */\nexport async function runDirectUploadMode(inputPaths: string[], opts: UploadOpts): Promise<void> {\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n const inputs = classifyDirectInputs(inputPaths)\n if (inputs.length === 0) {\n warn('No supported files found to upload.')\n return\n }\n\n // ── Dry-run: report what each input would produce without touching net ──\n if (opts.dryRun) {\n for (const inp of inputs) {\n if (inp.kind === 'file') {\n const folder = opts.folder ?? '<workspace root>'\n console.log(` ${inp.originalPath} → ${folder}`)\n } else if (inp.kind === 'dir') {\n const count = countSupportedFiles(inp.absolutePath)\n console.log(` ${inp.originalPath}: directory (${count} supported file(s))`)\n } else if (inp.kind === 'zip') {\n console.log(` ${inp.originalPath}: zip archive (contents would be extracted + uploaded)`)\n } else {\n console.log(\n ` ${inp.originalPath}: ${path\n .extname(inp.absolutePath)\n .slice(1)} archive (contents would be extracted + uploaded)`\n )\n }\n }\n console.log(`Would upload ${inputs.length} input(s) via --s3.`)\n return\n }\n\n const { arbi, config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace, {\n skipNotifications: willWatch,\n })\n\n // Unwrap the raw workspace key once — needed for SecretBox encryption and\n // content hashing. Kept in memory only; never logged or persisted.\n const creds = store.requireCredentials()\n const workspaceKey = await getRawWorkspaceKey(arbi, workspaceId, creds.signingPrivateKeyBase64)\n\n const summary: UploadSummary = {\n totalFiles: 0,\n uploaded: 0,\n skipped: 0,\n duplicates: 0,\n folders: 0,\n docIds: [],\n skippedDetails: [],\n }\n const uploadedDocs = new Map<string, string>()\n\n // Progress callbacks shared by the dir / zip / archive helpers.\n const directoryOpts: documentsNode.UploadDirectoryDirectOptions = {\n configExtId: opts.config,\n onBatchStart: (progress) => {\n if (!opts.json) {\n dim(\n ` [${progress.batch}/${progress.totalBatches}] Uploading ${progress.filesInBatch} file(s) from ${progress.folder} via direct-to-MinIO...`\n )\n }\n },\n }\n\n // Collect plain-file inputs and upload them in one direct call at the end\n // so ``--folder`` applies uniformly and we get a single round-trip.\n const plainFiles: string[] = []\n\n for (const inp of inputs) {\n if (inp.kind === 'file') {\n plainFiles.push(inp.absolutePath)\n continue\n }\n\n if (inp.kind === 'dir') {\n const result = await documentsNode.uploadLocalDirectoryDirect(\n arbi,\n workspaceKey,\n inp.absolutePath,\n directoryOpts\n )\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in directory: ${inp.originalPath}`)\n continue\n }\n mergeBatchResult(summary, uploadedDocs, result, inp.originalPath, opts)\n if (!opts.json) {\n success(\n `Uploaded directory: ${inp.originalPath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n continue\n }\n\n if (inp.kind === 'zip') {\n const result = await documentsNode.uploadLocalZipDirect(\n arbi,\n workspaceKey,\n inp.absolutePath,\n directoryOpts\n )\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in zip: ${inp.originalPath}`)\n continue\n }\n mergeBatchResult(summary, uploadedDocs, result, inp.originalPath, opts)\n if (!opts.json) {\n success(\n `Uploaded zip: ${inp.originalPath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n continue\n }\n\n // archive (7z / rar)\n const result = await documentsNode.uploadLocalArchiveDirect(\n arbi,\n workspaceKey,\n inp.absolutePath,\n directoryOpts\n )\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in archive: ${inp.originalPath}`)\n continue\n }\n mergeBatchResult(summary, uploadedDocs, result, inp.originalPath, opts)\n if (!opts.json) {\n success(\n `Uploaded archive: ${inp.originalPath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n }\n\n // Flush any plain-file inputs as a single direct call.\n if (plainFiles.length > 0) {\n if (!opts.json) {\n dim(\n ` Uploading ${plainFiles.length} file(s)${opts.folder ? ` → ${opts.folder}` : ''} via direct-to-MinIO...`\n )\n }\n const result = await documentsNode.uploadLocalFilesDirect(arbi, workspaceKey, plainFiles, {\n folder: opts.folder,\n configExtId: opts.config,\n })\n summary.totalFiles += plainFiles.length\n summary.uploaded += result.doc_ext_ids.length\n summary.skipped += result.skipped.length\n summary.docIds.push(...result.doc_ext_ids)\n summary.skippedDetails.push(...result.skipped)\n for (let i = 0; i < result.doc_ext_ids.length && i < plainFiles.length; i++) {\n uploadedDocs.set(result.doc_ext_ids[i], path.basename(plainFiles[i]))\n }\n if (!opts.json) {\n success(\n ` ${opts.folder || '<root>'}: ${result.doc_ext_ids.length} uploaded, ${result.skipped.length} skipped`\n )\n }\n }\n\n if (opts.json) {\n console.log(JSON.stringify(summary))\n } else {\n printSummary(summary)\n }\n\n // Optional watch pass — reuses the same WS flow as the legacy mode.\n if (willWatch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n const failed = new Map<string, string>()\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n const docName = uploadedDocs.get(msg.doc_ext_id) || msg.file_name\n const extra = msg as Record<string, unknown>\n if (msg.status === 'failed') {\n const reason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n 'Unknown error'\n failed.set(msg.doc_ext_id, reason)\n console.log(` ${docName}: ${status(msg.status)} — ${reason}`)\n pending.delete(msg.doc_ext_id)\n } else {\n console.log(` ${docName}: ${status(msg.status)} (${msg.progress}%)`)\n if (DOC_TERMINAL_STATUSES.has(msg.status)) pending.delete(msg.doc_ext_id)\n }\n if (pending.size === 0) conn.close()\n }\n },\n onClose: () => {\n if (failed.size > 0) {\n error(`\\n${failed.size} document(s) failed to process:`)\n for (const [docId, reason] of failed) {\n error(` ${uploadedDocs.get(docId) || docId}: ${reason}`)\n }\n }\n if (pending.size > 0) {\n warn(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else if (failed.size === 0 && uploadedDocs.size > 0) {\n success('\\nAll documents processed successfully.')\n }\n onDone()\n },\n })\n\n await done\n }\n}\n","/**\n * arbi upload <file...> [--workspace <id>] [--watch] [--dry-run] [--json]\n *\n * Uploads files, directories, or zip archives to the active workspace.\n *\n * - Directories are uploaded with folder structure preserved.\n * - Zip archives are extracted and uploaded with internal folder structure.\n * - Regular files are uploaded individually.\n * - Files are uploaded in batches of 100 per folder to avoid overwhelming the backend.\n *\n * Manifest mode (eDiscovery-grade audit trail):\n * --manifest <file> — read newline-delimited paths from a file instead of\n * positional args. Every line is treated as one input.\n * --log <file> — append a JSONL record per file to this path as the\n * upload progresses. Each record contains the doc id\n * (on success), a terminal status, and the reason\n * string for any non-success outcome. The log is\n * append-only and crash-safe.\n * --resume — read the log file, skip inputs that already have a\n * terminal outcome there (uploaded/duplicate/rejected),\n * and retry any that were marked `error`.\n * --fail-fast — abort the run on the first `error` outcome.\n * --root <dir> — root directory used to derive the backend `folder`\n * path for each file. Defaults to the longest common\n * parent of all inputs.\n *\n * Watch behaviour:\n * --watch / -W — always watch processing progress after upload\n * --no-watch — never watch, even if config watch is on\n * (no flag) — auto-watch in interactive terminals when config watch\n * is on (default); skip in pipes / CI\n *\n * When watching, failed documents show the server error reason if available.\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport { documentsNode, documents, connectWebSocket, DOC_TERMINAL_STATUSES } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getConfig } from '../config.js'\nimport { success, error, warn, status, dim } from '../output.js'\nimport { printSummary, type UploadOpts, type UploadSummary } from './upload-shared.js'\nimport { runDirectUploadMode } from './upload-direct.js'\n\nexport function registerUploadCommand(program: Command): void {\n program\n .command('add [paths...]')\n .alias('upload')\n .description('Add files, directories, or zip archives to the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-W, --watch', 'Watch document processing progress after upload')\n .option('--no-watch', 'Skip watching document processing')\n .option('--dry-run', 'Show what would be uploaded without uploading')\n .option('--json', 'Output results as JSON')\n .option('--config <id>', 'Config ext_id to use (e.g. cfg-xxx for SKIP_DUPLICATES)')\n .option('--manifest <file>', 'Read newline-delimited paths from file (eDiscovery mode)')\n .option('--log <file>', 'Append per-file JSONL audit log (eDiscovery mode)')\n .option('--resume', 'Skip paths already completed in --log (requires --log)')\n .option('--fail-fast', 'Abort on first upload error')\n .option('--root <dir>', 'Root directory for backend folder paths (defaults to common parent)')\n .option(\n '--limit <n>',\n 'Max files to upload this run (applied after --resume filter, manifest mode only)'\n )\n .option(\n '-s, --s3',\n 'Upload via the direct-to-MinIO flow (SecretBox on the client, presigned PUT)'\n )\n .option('--folder <name>', 'Backend folder for plain-file uploads (direct upload only)')\n .option(\n '--wp-type <type>',\n 'Work product type: source (default), skill, memory, artifact, webpage. ' +\n 'Use --wp-type skill with --folder skills/<slug> to upload a SKILL.md.'\n )\n .action((paths: string[] | undefined, opts: UploadOpts) =>\n runAction(async () => {\n const isManifestMode = Boolean(opts.manifest || opts.log || opts.resume)\n const inputPaths: string[] = paths ?? []\n\n if (isManifestMode) {\n if (opts.s3) {\n error('--s3 is not supported with manifest mode yet.')\n process.exit(1)\n }\n await runManifestMode(inputPaths, opts)\n return\n }\n\n if (opts.s3) {\n if (inputPaths.length === 0) {\n error('No paths provided.')\n process.exit(1)\n }\n await runDirectUploadMode(inputPaths, opts)\n return\n }\n\n if (inputPaths.length === 0) {\n error('No paths provided. Pass file/dir args or use --manifest <file>.')\n process.exit(1)\n }\n\n // Validate paths exist before authenticating\n for (const p of inputPaths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n }\n\n // Determine early whether we'll watch — if so, skip background notifications\n // to avoid session conflicts (backend enforces one WS per session).\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n const { config, accessToken } = await resolveWorkspace(opts.workspace, {\n skipNotifications: willWatch,\n })\n\n // Track uploaded doc IDs and their file names for --watch\n const uploadedDocs = new Map<string, string>()\n const auth = { baseUrl: config.baseUrl, accessToken }\n\n // Aggregate summary\n const summary: UploadSummary = {\n totalFiles: 0,\n uploaded: 0,\n skipped: 0,\n duplicates: 0,\n folders: 0,\n docIds: [],\n skippedDetails: [],\n }\n\n // Progress callbacks for batched uploads\n const progressCallbacks: documentsNode.UploadDirectoryOptions = {\n configExtId: opts.config,\n onBatchStart: (progress: documentsNode.UploadProgress) => {\n if (!opts.json) {\n dim(\n ` [${progress.batch}/${progress.totalBatches}] Uploading ${progress.filesInBatch} file(s) from ${progress.folder}...`\n )\n }\n },\n onBatchComplete: (\n progress: documentsNode.UploadProgress & {\n result: {\n doc_ext_ids?: string[]\n skipped?: Array<{ file_name: string; reason: string }>\n }\n }\n ) => {\n const uploaded = progress.result.doc_ext_ids?.length ?? 0\n const skipped = progress.result.skipped?.length ?? 0\n if (!opts.json) {\n success(\n ` [${progress.batch}/${progress.totalBatches}] ${uploaded} uploaded, ${skipped} skipped (${progress.filesUploaded}/${progress.totalFiles} total)`\n )\n }\n },\n }\n\n for (const filePath of inputPaths) {\n const stat = fs.statSync(filePath)\n\n if (stat.isDirectory()) {\n if (opts.dryRun) {\n // Dry run: just count files\n const count = countSupportedFiles(filePath)\n console.log(`${filePath}: ${count} supported file(s) would be uploaded`)\n summary.totalFiles += count\n continue\n }\n\n const result = await documentsNode.uploadDirectory(auth, filePath, progressCallbacks)\n\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in directory: ${filePath}`)\n continue\n }\n\n // Report per-folder results\n if (!opts.json) {\n for (const [folder, info] of result.folders) {\n success(\n ` ${folder}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(\n ` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n success(\n `Uploaded directory: ${filePath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n\n updateSummary(summary, result)\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else if (filePath.toLowerCase().endsWith('.zip')) {\n if (opts.dryRun) {\n console.log(`${filePath}: zip archive (contents would be extracted and uploaded)`)\n continue\n }\n\n const result = await documentsNode.uploadZip(auth, filePath, progressCallbacks)\n\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in zip: ${filePath}`)\n continue\n }\n\n if (!opts.json) {\n for (const [folder, info] of result.folders) {\n success(\n ` ${folder}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(\n ` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n success(`Uploaded zip: ${filePath} (${result.doc_ext_ids.length} document(s) total)`)\n }\n\n updateSummary(summary, result)\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else if (\n documentsNode.ARCHIVE_EXTENSIONS.has(\n filePath.slice(filePath.lastIndexOf('.')).toLowerCase()\n )\n ) {\n if (opts.dryRun) {\n console.log(`${filePath}: archive (contents would be extracted and uploaded)`)\n continue\n }\n\n const result = await documentsNode.uploadArchive(auth, filePath, progressCallbacks)\n\n if (result.doc_ext_ids.length === 0 && result.skipped.length === 0) {\n warn(`No supported files found in archive: ${filePath}`)\n continue\n }\n\n if (!opts.json) {\n for (const [folder, info] of result.folders) {\n success(\n ` ${folder}: ${info.fileCount} file(s) → ${info.doc_ext_ids.length} uploaded`\n )\n if (info.skipped.length > 0) {\n warn(\n ` Skipped: ${info.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n success(\n `Uploaded archive: ${filePath} (${result.doc_ext_ids.length} document(s) total)`\n )\n }\n\n updateSummary(summary, result)\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else {\n if (opts.dryRun) {\n console.log(`${filePath}: single file would be uploaded`)\n summary.totalFiles += 1\n continue\n }\n\n const result = await documentsNode.uploadLocalFile(auth, filePath, {\n folder: opts.folder,\n wpType: opts.wpType,\n })\n\n if (!opts.json) {\n success(`Uploaded: ${result.fileName} (${(result.doc_ext_ids ?? []).join(', ')})`)\n if (result.skipped && result.skipped.length > 0) {\n warn(\n ` Skipped: ${result.skipped.map((s) => `${s.file_name} (${s.reason})`).join(', ')}`\n )\n }\n }\n\n summary.totalFiles += 1\n summary.uploaded += result.doc_ext_ids?.length ?? 0\n summary.docIds.push(...(result.doc_ext_ids ?? []))\n if (result.skipped) {\n summary.skipped += result.skipped.length\n summary.skippedDetails.push(...result.skipped)\n }\n\n for (const id of result.doc_ext_ids ?? []) uploadedDocs.set(id, result.fileName)\n }\n }\n\n if (opts.dryRun) {\n return\n }\n\n // Print or output summary\n if (opts.json) {\n console.log(JSON.stringify(summary))\n } else {\n printSummary(summary)\n }\n\n // Watch processing progress\n if (willWatch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n const failed = new Map<string, string>()\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n const docName = uploadedDocs.get(msg.doc_ext_id) || msg.file_name\n // Backend may include extra error fields not in the TS schema\n const extra = msg as Record<string, unknown>\n\n if (msg.status === 'failed') {\n const reason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n 'Unknown error'\n failed.set(msg.doc_ext_id, reason)\n console.log(` ${docName}: ${status(msg.status)} — ${reason}`)\n pending.delete(msg.doc_ext_id)\n } else {\n console.log(` ${docName}: ${status(msg.status)} (${msg.progress}%)`)\n // Any terminal status (completed, skipped, empty, low-content)\n // clears the row from `pending` so the watch loop can exit. The\n // old code only checked `completed`, so a tiny txt that hit\n // `low-content` (a real terminal state) hung the watch loop\n // forever.\n if (DOC_TERMINAL_STATUSES.has(msg.status as string)) {\n pending.delete(msg.doc_ext_id)\n }\n }\n\n if (pending.size === 0) {\n conn.close()\n }\n }\n },\n onClose: () => {\n if (failed.size > 0) {\n error(`\\n${failed.size} document(s) failed to process:`)\n for (const [docId, reason] of failed) {\n error(` ${uploadedDocs.get(docId) || docId}: ${reason}`)\n }\n }\n if (pending.size > 0) {\n warn(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else if (failed.size === 0 && uploadedDocs.size > 0) {\n success('\\nAll documents processed successfully.')\n }\n onDone()\n },\n })\n\n await done\n } else if (uploadedDocs.size > 0 && !willWatch && !opts.json) {\n dim(\n 'Tip: Use -W/--watch to monitor processing progress, or run \"arbi docs\" to check status.'\n )\n }\n })()\n )\n}\n\n// ── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction updateSummary(summary: UploadSummary, result: documents.UploadBatchResult): void {\n let totalFiles = 0\n for (const [, info] of result.folders) {\n totalFiles += info.fileCount\n summary.folders += 1\n }\n summary.totalFiles += totalFiles\n summary.uploaded += result.doc_ext_ids.length\n summary.skipped += result.skipped.length\n summary.docIds.push(...result.doc_ext_ids)\n summary.skippedDetails.push(...result.skipped)\n}\n\nfunction countSupportedFiles(dirPath: string): number {\n let count = 0\n for (const entry of fs.readdirSync(dirPath, { withFileTypes: true })) {\n const fullPath = `${dirPath}/${entry.name}`\n if (entry.isDirectory()) {\n count += countSupportedFiles(fullPath)\n } else if (entry.isFile()) {\n const ext = entry.name.toLowerCase().lastIndexOf('.')\n if (ext >= 0) {\n const extStr = entry.name.slice(ext).toLowerCase()\n if (documents.SUPPORTED_EXTENSIONS.has(extStr)) {\n count++\n }\n }\n }\n }\n return count\n}\n\n// ── Manifest mode (eDiscovery audit trail) ─────────────────────────────────\n\n/** A log line we recognize when reading an existing --log file for --resume. */\ninterface LogEntry {\n path: string\n status: documentsNode.FileStatus | 'pending'\n}\n\n/**\n * Read prior outcomes from a JSONL log so `--resume` can skip anything that\n * already has a terminal non-error status. Returns a map of path → last\n * status seen. Ignores malformed lines and header/footer records.\n */\nfunction readLogState(logPath: string): Map<string, documentsNode.FileStatus> {\n const state = new Map<string, documentsNode.FileStatus>()\n if (!fs.existsSync(logPath)) return state\n const text = fs.readFileSync(logPath, 'utf8')\n for (const line of text.split('\\n')) {\n const trimmed = line.trim()\n if (!trimmed || trimmed.startsWith('#')) continue\n try {\n const rec = JSON.parse(trimmed) as Partial<LogEntry> & { event?: string }\n if (rec.event) continue // header/footer\n if (typeof rec.path === 'string' && typeof rec.status === 'string') {\n state.set(rec.path, rec.status as documentsNode.FileStatus)\n }\n } catch {\n // ignore malformed lines\n }\n }\n return state\n}\n\n/** Read a newline-delimited manifest file, stripping blank lines and comments. */\nfunction readTextManifest(manifestPath: string): string[] {\n const text = fs.readFileSync(manifestPath, 'utf8')\n const out: string[] = []\n for (const raw of text.split('\\n')) {\n const line = raw.replace(/\\r$/, '').trim()\n if (!line || line.startsWith('#')) continue\n out.push(line)\n }\n return out\n}\n\n// ── CSV manifest (eDiscovery load-file style) ──────────────────────────────\n\n/**\n * Parse a CSV text body. Handles quoted values with commas, escaped double\n * quotes (\"\" → \"), CRLF/LF line endings, and multi-line quoted values.\n * Returns rows as string arrays; caller is responsible for picking out the\n * header.\n */\nfunction parseCsv(text: string): string[][] {\n const rows: string[][] = []\n let row: string[] = []\n let cur = ''\n let inQuotes = false\n let i = 0\n while (i < text.length) {\n const ch = text[i]\n if (inQuotes) {\n if (ch === '\"') {\n if (text[i + 1] === '\"') {\n cur += '\"'\n i += 2\n continue\n }\n inQuotes = false\n i++\n } else {\n cur += ch\n i++\n }\n } else if (ch === '\"' && cur === '') {\n inQuotes = true\n i++\n } else if (ch === ',') {\n row.push(cur)\n cur = ''\n i++\n } else if (ch === '\\n' || ch === '\\r') {\n row.push(cur)\n cur = ''\n rows.push(row)\n row = []\n if (ch === '\\r' && text[i + 1] === '\\n') i += 2\n else i++\n } else {\n cur += ch\n i++\n }\n }\n if (cur !== '' || row.length > 0) {\n row.push(cur)\n rows.push(row)\n }\n // Drop a trailing empty row that a final newline produces\n if (rows.length > 0 && rows[rows.length - 1].length === 1 && rows[rows.length - 1][0] === '') {\n rows.pop()\n }\n return rows\n}\n\nfunction csvField(v: string): string {\n if (v.includes(',') || v.includes('\"') || v.includes('\\n') || v.includes('\\r')) {\n return '\"' + v.replace(/\"/g, '\"\"') + '\"'\n }\n return v\n}\n\nfunction writeCsvAtomic(filePath: string, header: string[], rows: string[][]): void {\n const lines: string[] = [header.map(csvField).join(',')]\n for (const row of rows) {\n const padded = row.slice()\n while (padded.length < header.length) padded.push('')\n lines.push(padded.map(csvField).join(','))\n }\n const tmp = filePath + '.tmp'\n fs.writeFileSync(tmp, lines.join('\\n') + '\\n')\n fs.renameSync(tmp, filePath)\n}\n\n/**\n * A loaded CSV manifest. Keeps the full rows so we can write the file back\n * with any new doc ids applied, preserving every other column.\n *\n * Required columns: `Document Name` (or `Name`) and `Folder` (or `Path`).\n * Optional writable columns: `ARBI Doc ID`, `ARBI Status`. If not present\n * they are auto-appended to the header so the updated CSV carries results.\n */\ninterface CsvManifest {\n filePath: string\n header: string[]\n rows: string[][]\n nameCol: number\n folderCol: number\n docIdCol: number\n statusCol: number\n /** Absolute paths in the order the rows appear. */\n paths: string[]\n /** Map of absolute path → row index, for writing back outcomes. */\n pathToRow: Map<string, number>\n}\n\nfunction findColumn(header: string[], candidates: string[]): number {\n const normalized = header.map((h) => h.trim().toLowerCase())\n for (const cand of candidates) {\n const i = normalized.indexOf(cand.toLowerCase())\n if (i >= 0) return i\n }\n return -1\n}\n\nfunction loadCsvManifest(csvPath: string, rootDir: string | undefined): CsvManifest {\n const text = fs.readFileSync(csvPath, 'utf8')\n const all = parseCsv(text)\n if (all.length === 0) {\n error(`Empty CSV: ${csvPath}`)\n process.exit(1)\n }\n const header = all[0]\n const rows = all.slice(1)\n\n const nameCol = findColumn(header, ['Document Name', 'Name', 'File Name', 'Filename'])\n if (nameCol < 0) {\n error(`CSV ${csvPath} is missing a Document Name / Name column.`)\n process.exit(1)\n }\n const folderCol = findColumn(header, ['Folder', 'Path', 'Directory'])\n if (folderCol < 0) {\n error(`CSV ${csvPath} is missing a Folder / Path column.`)\n process.exit(1)\n }\n\n let docIdCol = findColumn(header, ['ARBI Doc ID', 'Doc ID', 'DocId'])\n let statusCol = findColumn(header, ['ARBI Status', 'Status'])\n if (docIdCol < 0) {\n header.push('ARBI Doc ID')\n docIdCol = header.length - 1\n }\n if (statusCol < 0) {\n header.push('ARBI Status')\n statusCol = header.length - 1\n }\n\n // Pad every row so the new columns exist even if the file was shorter.\n for (const row of rows) {\n while (row.length < header.length) row.push('')\n }\n\n const root = rootDir ? path.resolve(rootDir) : process.cwd()\n const paths: string[] = []\n const pathToRow = new Map<string, number>()\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i]\n const name = (row[nameCol] ?? '').trim()\n if (!name) continue\n const folder = (row[folderCol] ?? '').trim()\n const rel = folder ? path.join(folder, name) : name\n const abs = path.resolve(root, rel)\n paths.push(abs)\n pathToRow.set(abs, i)\n }\n\n return {\n filePath: csvPath,\n header,\n rows,\n nameCol,\n folderCol,\n docIdCol,\n statusCol,\n paths,\n pathToRow,\n }\n}\n\n// ── Direct-to-MinIO upload mode ─────────────────────────────────────────────\n\n/**\n * Execute the upload in manifest mode. Reads inputs from --manifest or\n * expands positional args (directories → their supported files), optionally\n * filters via --resume, streams per-file JSONL outcomes to --log, and prints\n * a terminal summary.\n */\nasync function runManifestMode(inputPaths: string[], opts: UploadOpts): Promise<void> {\n if (opts.resume && !opts.log) {\n error('--resume requires --log <file>')\n process.exit(1)\n }\n\n // ── Load inputs: CSV, text manifest, and/or positional args ─────────────\n const rawPaths: string[] = []\n let csv: CsvManifest | null = null\n if (opts.manifest) {\n if (!fs.existsSync(opts.manifest)) {\n error(`Manifest not found: ${opts.manifest}`)\n process.exit(1)\n }\n const ext = path.extname(opts.manifest).toLowerCase()\n if (ext === '.csv' || ext === '.tsv') {\n csv = loadCsvManifest(opts.manifest, opts.root)\n rawPaths.push(...csv.paths)\n } else {\n rawPaths.push(...readTextManifest(opts.manifest))\n }\n }\n for (const p of inputPaths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n const stat = fs.statSync(p)\n if (stat.isDirectory()) {\n rawPaths.push(...documentsNode.walkSupportedFiles(p))\n } else {\n rawPaths.push(path.resolve(p))\n }\n }\n\n if (rawPaths.length === 0) {\n error('Manifest is empty. Nothing to upload.')\n process.exit(1)\n }\n\n // ── Resume filter ───────────────────────────────────────────────────────\n let pathsToUpload = rawPaths\n const priorState = opts.log ? readLogState(opts.log) : new Map<string, documentsNode.FileStatus>()\n let resumedCount = 0\n if (opts.resume) {\n pathsToUpload = rawPaths.filter((p) => {\n const prior = priorState.get(p)\n if (\n prior === 'uploaded' ||\n prior === 'duplicate' ||\n prior === 'rejected' ||\n prior === 'skipped'\n ) {\n resumedCount++\n return false\n }\n return true\n })\n }\n\n // ── Limit (applied after resume filter) ─────────────────────────────────\n let limit: number | null = null\n let limitedOut = 0\n if (opts.limit !== undefined) {\n const n = Number.parseInt(opts.limit, 10)\n if (!Number.isFinite(n) || n <= 0) {\n error(`Invalid --limit: ${opts.limit}. Must be a positive integer.`)\n process.exit(1)\n }\n limit = n\n if (pathsToUpload.length > n) {\n limitedOut = pathsToUpload.length - n\n pathsToUpload = pathsToUpload.slice(0, n)\n }\n }\n\n const isInteractive = process.stdout.isTTY === true\n const humanOutput = !opts.json\n\n if (humanOutput) {\n console.log(\n `Manifest: ${rawPaths.length} file(s)` +\n (csv ? ` from ${path.basename(csv.filePath)}` : '') +\n (resumedCount ? ` (${resumedCount} already done, skipping)` : '') +\n (limit !== null && limitedOut > 0\n ? ` (limit=${limit}, ${limitedOut} deferred to next run)`\n : '')\n )\n }\n\n if (opts.dryRun) {\n if (opts.json) {\n console.log(\n JSON.stringify({\n total: rawPaths.length,\n resumed: resumedCount,\n toUpload: pathsToUpload.length,\n })\n )\n } else {\n console.log(`Would upload ${pathsToUpload.length} file(s)`)\n }\n return\n }\n\n if (pathsToUpload.length === 0) {\n if (humanOutput) success('Nothing to do — all paths already completed in log.')\n return\n }\n\n // ── Authenticate ────────────────────────────────────────────────────────\n // Background notifications follow the same rule as the legacy path: skip\n // them when we'll open our own watch WS (one WS per session). Use\n // `arbi config notifications off` for a persistent silence.\n const watchPref = getConfig()?.watch !== false\n const willWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n const { config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace, {\n skipNotifications: willWatch,\n })\n const auth = { baseUrl: config.baseUrl, accessToken }\n\n // ── Open JSONL log ──────────────────────────────────────────────────────\n let logFd: number | null = null\n if (opts.log) {\n const dir = path.dirname(path.resolve(opts.log))\n fs.mkdirSync(dir, { recursive: true })\n logFd = fs.openSync(opts.log, 'a')\n const header = JSON.stringify({\n ts: new Date().toISOString(),\n event: 'run_start',\n workspace: workspaceId,\n config: opts.config ?? null,\n inputs: rawPaths.length,\n toUpload: pathsToUpload.length,\n resumed: resumedCount,\n })\n fs.writeSync(logFd, header + '\\n')\n fs.fsyncSync(logFd)\n }\n\n const uploadedDocs = new Map<string, string>()\n const runStart = Date.now()\n\n const writeLog = (o: documentsNode.FileOutcome): void => {\n if (logFd === null) return\n const rec = {\n ts: new Date().toISOString(),\n path: o.path,\n folder: o.folder,\n sizeBytes: o.sizeBytes,\n status: o.status,\n ...(o.docId ? { docId: o.docId } : {}),\n ...(o.reason ? { reason: o.reason } : {}),\n attempt: o.attempt,\n ...(o.batchId ? { batchId: o.batchId } : {}),\n }\n fs.writeSync(logFd, JSON.stringify(rec) + '\\n')\n fs.fsyncSync(logFd)\n }\n\n // ── Human-readable streaming output ─────────────────────────────────────\n // Non-error outcomes tick a compact progress counter on stderr; errors\n // and rejections print inline so they stand out.\n const total = pathsToUpload.length\n let done = 0\n let uploadedCount = 0\n let duplicateCount = 0\n let rejectedCount = 0\n let errorCount = 0\n let skippedCount = 0\n\n const renderProgress = (): void => {\n if (!humanOutput || !isInteractive) return\n const pct = total > 0 ? Math.floor((done / total) * 100) : 100\n const line =\n ` ${done}/${total} (${pct}%)` +\n ` ok=${uploadedCount}` +\n (duplicateCount > 0 ? ` dup=${duplicateCount}` : '') +\n (rejectedCount > 0 ? ` rej=${rejectedCount}` : '') +\n (skippedCount > 0 ? ` skip=${skippedCount}` : '') +\n (errorCount > 0 ? ` err=${errorCount}` : '')\n // \\r overwrite; pad with spaces so shorter lines don't leave garbage\n process.stderr.write('\\r' + line.padEnd(80, ' '))\n }\n\n const clearProgress = (): void => {\n if (humanOutput && isInteractive) process.stderr.write('\\r' + ' '.repeat(80) + '\\r')\n }\n\n const printInlineOutcome = (o: documentsNode.FileOutcome): void => {\n if (!humanOutput) return\n const name = path.basename(o.path)\n if (o.status === 'rejected') {\n clearProgress()\n warn(` ✗ ${name}: ${o.reason}`)\n } else if (o.status === 'error') {\n clearProgress()\n error(` ! ${name}: ${o.reason}`)\n }\n }\n\n // ── CSV writeback (checkpoint every 25 outcomes) ────────────────────────\n let sinceCheckpoint = 0\n const CHECKPOINT_EVERY = 25\n const csvStatusText = (o: documentsNode.FileOutcome): string => {\n if (o.status === 'uploaded') return 'uploaded'\n if (o.status === 'duplicate') return `duplicate: ${o.reason ?? ''}`.trim()\n if (o.status === 'rejected') return `rejected: ${o.reason ?? ''}`.trim()\n if (o.status === 'skipped') return `skipped: ${o.reason ?? ''}`.trim()\n return `error: ${o.reason ?? ''}`.trim()\n }\n const flushCsv = (): void => {\n if (csv === null) return\n writeCsvAtomic(csv.filePath, csv.header, csv.rows)\n }\n\n const result = await documentsNode.uploadManifest(auth, pathsToUpload, {\n rootDir: opts.root,\n configExtId: opts.config,\n failFast: opts.failFast,\n onFile: async (outcome) => {\n writeLog(outcome)\n done++\n switch (outcome.status) {\n case 'uploaded':\n uploadedCount++\n if (outcome.docId) uploadedDocs.set(outcome.docId, path.basename(outcome.path))\n break\n case 'duplicate':\n duplicateCount++\n break\n case 'rejected':\n rejectedCount++\n break\n case 'error':\n errorCount++\n break\n case 'skipped':\n skippedCount++\n break\n }\n printInlineOutcome(outcome)\n renderProgress()\n\n if (csv !== null) {\n const rowIdx = csv.pathToRow.get(outcome.path)\n if (rowIdx !== undefined) {\n if (outcome.docId) csv.rows[rowIdx][csv.docIdCol] = outcome.docId\n csv.rows[rowIdx][csv.statusCol] = csvStatusText(outcome)\n sinceCheckpoint++\n if (sinceCheckpoint >= CHECKPOINT_EVERY) {\n flushCsv()\n sinceCheckpoint = 0\n }\n }\n }\n },\n })\n\n // Final CSV flush + log footer\n if (csv !== null && sinceCheckpoint > 0) flushCsv()\n\n if (logFd !== null) {\n const footer = JSON.stringify({\n ts: new Date().toISOString(),\n event: 'run_end',\n ...result.summary,\n elapsedMs: Date.now() - runStart,\n })\n fs.writeSync(logFd, footer + '\\n')\n fs.fsyncSync(logFd)\n fs.closeSync(logFd)\n }\n\n clearProgress()\n\n // ── Summary output ──────────────────────────────────────────────────────\n if (opts.json) {\n console.log(\n JSON.stringify({\n ...result.summary,\n elapsedMs: Date.now() - runStart,\n docIds: result.outcomes.filter((o) => o.docId).map((o) => o.docId),\n })\n )\n } else {\n const elapsed = ((Date.now() - runStart) / 1000).toFixed(1)\n console.log('')\n console.log('Upload summary')\n console.log('──────────────')\n console.log(` Files: ${result.summary.total}`)\n if (result.summary.uploaded > 0) success(` Uploaded: ${result.summary.uploaded}`)\n if (result.summary.duplicate > 0) dim(` Duplicates: ${result.summary.duplicate}`)\n if (result.summary.rejected > 0) warn(` Rejected: ${result.summary.rejected}`)\n if (result.summary.skipped > 0) dim(` Skipped: ${result.summary.skipped}`)\n if (result.summary.error > 0) error(` Errors: ${result.summary.error}`)\n console.log(` Elapsed: ${elapsed}s`)\n if (opts.log) dim(` Log: ${opts.log}`)\n if (csv) dim(` CSV: ${csv.filePath} (updated)`)\n }\n\n // Exit code: 1 if any errors, 0 otherwise\n if (result.summary.error > 0) {\n if (!opts.json) {\n dim('\\nSome files errored. Re-run with --resume to retry failed entries.')\n }\n process.exit(1)\n }\n\n // Watch processing if requested\n if (willWatch && uploadedDocs.size > 0) {\n const pending = new Set(uploadedDocs.keys())\n const failed = new Map<string, string>()\n console.log(`\\nWatching ${pending.size} document(s)...`)\n\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (isMessageType<WsTaskUpdateMessage>(msg, 'task_update')) {\n if (!pending.has(msg.doc_ext_id)) return\n const docName = uploadedDocs.get(msg.doc_ext_id) || msg.file_name\n const extra = msg as Record<string, unknown>\n\n if (msg.status === 'failed') {\n const reason =\n (extra.error_reason as string) ||\n (extra.status_details as string) ||\n (extra.detail as string) ||\n 'Unknown error'\n failed.set(msg.doc_ext_id, reason)\n console.log(` ${docName}: ${status(msg.status)} — ${reason}`)\n pending.delete(msg.doc_ext_id)\n } else {\n console.log(` ${docName}: ${status(msg.status)} (${msg.progress}%)`)\n // See watch-loop fix above — any terminal status clears pending so\n // the loop exits on `skipped` / `empty` / `low-content` too.\n if (DOC_TERMINAL_STATUSES.has(msg.status as string)) {\n pending.delete(msg.doc_ext_id)\n }\n }\n\n if (pending.size === 0) {\n conn.close()\n }\n }\n },\n onClose: () => {\n if (failed.size > 0) {\n error(`\\n${failed.size} document(s) failed to process:`)\n for (const [docId, reason] of failed) {\n error(` ${uploadedDocs.get(docId) || docId}: ${reason}`)\n }\n }\n if (pending.size > 0) {\n warn(`\\nConnection closed. ${pending.size} document(s) still processing.`)\n dim('Run \"arbi watch\" to continue monitoring, or \"arbi docs\" to check status.')\n } else if (failed.size === 0 && uploadedDocs.size > 0) {\n success('\\nAll documents processed successfully.')\n }\n onDone()\n },\n })\n\n await done\n }\n}\n","/**\n * arbi download [doc-id] [--output <path>]\n *\n * Interactive doc picker if no doc-id given.\n */\n\nimport { Command } from 'commander'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport { documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { success } from '../output.js'\nimport { promptSearch } from '../prompts.js'\n\nexport function registerDownloadCommand(program: Command): void {\n program\n .command('download [doc-id]')\n .description('Download a document (interactive picker if no ID given)')\n .option(\n '-o, --output <path>',\n 'Output file path. Use \"-\" to stream raw bytes to stdout (for piping).'\n )\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option(\n '--json',\n 'Emit a JSON metadata line to stdout after writing the file (doc_id, path, bytes, filename). Implies a file write — use \"-o -\" or pipe stdout to get bytes without JSON.'\n )\n .action(\n (docId: string | undefined, opts: { output?: string; workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi, config, accessToken } = await resolveWorkspace(opts.workspace)\n\n // Pick doc if not given\n if (!docId) {\n const data = await documents.listDocuments(arbi)\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n const choices = data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n description: d.external_id as string,\n }))\n docId = await promptSearch('Select document to download', choices)\n }\n\n const res = await documents.downloadDocument(\n { baseUrl: config.baseUrl, accessToken },\n docId\n )\n\n let filename = `${docId}`\n const disposition = res.headers.get('content-disposition')\n if (disposition) {\n const match = disposition.match(/filename[*]?=(?:UTF-8''|\"?)([^\";]+)/i)\n if (match) filename = decodeURIComponent(match[1].replace(/\"/g, ''))\n }\n\n const buffer = Buffer.from(await res.arrayBuffer())\n\n // Stream to stdout if -o -\n if (opts.output === '-') {\n process.stdout.write(buffer)\n return\n }\n\n const outputPath = opts.output || path.join(process.cwd(), filename)\n fs.writeFileSync(outputPath, buffer)\n\n if (opts.json) {\n console.log(\n JSON.stringify({\n doc_id: docId,\n path: outputPath,\n bytes: buffer.length,\n filename: path.basename(outputPath),\n })\n )\n return\n }\n\n success(\n `Downloaded: ${path.basename(outputPath)} (${(buffer.length / (1024 * 1024)).toFixed(1)} MB)`\n )\n })()\n )\n}\n","/**\n * arbi ask <question> [-b] [-n] [-c <msg-id>] [-w <id>] [-q]\n *\n * Default: Streams SSE response from POST /v1/assistant/query.\n * -b/--background: Submits via POST /v1/responses with background=true,\n * returns immediately with a task ID. Use `arbi task` to check status.\n * -c/--continue: Continue from a specific message ID (e.g. a completed\n * background task result). Overrides the automatic chat session.\n *\n * Always includes all workspace documents in retrieval context.\n * Maintains conversation continuity: each response's assistant message ID\n * is saved and sent as previous_response_id in the next query.\n * Use --new to start a fresh conversation.\n *\n * Session handling: The chat session stores the workspace ID alongside the\n * conversation state. When the resolved workspace differs from the stored\n * session workspace (either because the user switched workspaces or passed\n * a different -w flag), the stale session is cleared and a fresh\n * conversation starts automatically.\n */\n\nimport { Command } from 'commander'\nimport {\n streamSSE,\n formatAgentStepLabel,\n formatStreamSummary,\n countCitations,\n stripCitationMarkdown,\n documents,\n assistant,\n responses,\n} from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport {\n getConfig,\n getChatSession,\n updateChatSession,\n clearChatSession,\n saveLastMetadata,\n} from '../config.js'\nimport { addTask } from '../task-store.js'\nimport { chalk } from '../output.js'\n\nexport function registerAskCommand(program: Command): void {\n program\n .command('ask <question...>')\n .description('Ask the RAG assistant a question (no quotes needed)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-c, --continue <msg-id>', 'Continue from a specific message ID')\n .option('--config <id>', 'Config ext_id to use (e.g. cfg-xxx)')\n .option('-n, --new', 'Start a new conversation (ignore previous context)')\n .option('-b, --background', 'Submit as background task — fetch result with `arbi task result`')\n .option('-q, --quiet', 'Suppress agent steps and tool calls')\n .option('--json', 'Output in JSON format (background mode only)')\n .option(\n '--raw-citations',\n 'Keep raw `[text](#cite-N)` markdown links instead of the cleaner `text[N]` form'\n )\n .action(\n (\n words: string[],\n opts: {\n workspace?: string\n continue?: string\n config?: string\n new?: boolean\n background?: boolean\n quiet?: boolean\n json?: boolean\n rawCitations?: boolean\n }\n ) =>\n runAction(async () => {\n // `--json` is meaningful only on the background path — the streaming\n // SSE response is prose, not JSON. Silently ignoring `--json`\n // (the old behavior) means an agent expecting structured output\n // gets back a transcript and no signal anything went wrong. Fail\n // loudly so the caller knows to add `-b`.\n if (opts.json && !opts.background) {\n console.error(\n 'Error: --json only works with -b/--background. Streaming mode emits prose, not JSON.\\nRun: arbi ask -b --json <question> (then `arbi task result`)'\n )\n process.exit(1)\n }\n\n const question = words.join(' ')\n const { arbi, accessToken, workspaceId, config } = await resolveWorkspace(opts.workspace)\n\n // Resolve previousResponseId from flags and session\n let previousResponseId: string | null = null\n\n if (opts.continue) {\n // Explicit message ID — overrides session\n previousResponseId = opts.continue\n } else if (opts.new) {\n clearChatSession()\n } else {\n const session = getChatSession()\n const workspaceChanged =\n session.lastMessageExtId && session.workspaceId && session.workspaceId !== workspaceId\n\n if (workspaceChanged) {\n clearChatSession()\n } else if (session.lastMessageExtId) {\n previousResponseId = session.lastMessageExtId\n }\n }\n\n // Always include all workspace documents in retrieval context\n const docs = await documents.listDocuments(arbi)\n const docIds = docs.map((d) => d.external_id as string)\n\n // ── Background mode ──────────────────────────────────────────────\n // Background tasks start a standalone conversation (no parent ID).\n // Use `arbi ask --continue <msg-id>` to follow up on a result.\n if (opts.background) {\n const result = await responses.submitBackgroundQuery({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceId,\n question,\n docIds,\n previousResponseId: null,\n model: opts.config,\n })\n\n // Store locally for `arbi task list/status/result`\n addTask({\n id: result.id,\n question: question.slice(0, 200),\n workspaceId,\n submittedAt: new Date().toISOString(),\n status: 'queued',\n model: result.model,\n })\n\n if (opts.json) {\n console.log(JSON.stringify({ id: result.id, status: result.status }))\n } else {\n console.log(`Task queued: ${chalk.cyan(result.id)}`)\n console.log(\n chalk.dim('Use `arbi task status` or `arbi task result` to check progress.')\n )\n }\n return\n }\n\n // ── Streaming mode (default) ─────────────────────────────────────\n\n // Query the assistant (retry as new conversation if parent message is stale)\n let res: Response\n try {\n res = await assistant.queryAssistant({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceId,\n question,\n docIds,\n previousResponseId,\n model: opts.config,\n })\n } catch (err) {\n // Detect stale parent message via HTTP 404 or specific error text.\n // This handles edge cases like conversation deletion on the server.\n const isStaleParent =\n previousResponseId &&\n err instanceof Error &&\n (err.message.includes('404') || err.message.includes('Parent message not found'))\n\n if (!isStaleParent) throw err\n\n // Parent message no longer exists — start a new conversation\n clearChatSession()\n res = await assistant.queryAssistant({\n baseUrl: config.baseUrl,\n accessToken,\n workspaceId,\n question,\n docIds,\n previousResponseId: null,\n model: opts.config,\n })\n }\n\n // Resolve verbosity: flag > config > default (true)\n const verbose = opts.quiet === true ? false : getConfig()?.verbose !== false\n\n let elapsedTime: number | null = null\n let firstToken = true\n\n // The backend embeds citations inline as `[claim text](#cite-N)`\n // markdown links inside the streamed tokens. Default behavior: pipe\n // tokens through `stripCitationMarkdown` so a human (and an agent\n // grepping for `\\[\\d+\\]`) sees a clean `claim text[1]` form. Pass\n // `--raw-citations` to keep the original markdown — useful when\n // piping to a markdown renderer that resolves the anchors itself.\n //\n // Streaming complication: a citation marker can be split across\n // token chunks. We buffer the tail until it's safe to flush.\n let buf = ''\n const transform = opts.rawCitations ? (s: string) => s : stripCitationMarkdown\n const flush = (final: boolean) => {\n // If we might be mid-marker, hold the tail. The longest possible\n // partial-marker prefix is `](#cite-` (8 chars) — keep at least\n // 32 chars buffered to cover the inner text too.\n const cut = final ? buf.length : Math.max(0, buf.length - 32)\n if (cut === 0) return\n const out = transform(buf.slice(0, cut))\n buf = buf.slice(cut)\n if (out) process.stdout.write(out)\n }\n\n const result = await streamSSE(res, {\n onToken: (content) => {\n if (firstToken) {\n process.stderr.write(chalk.dim('[ARBI] '))\n firstToken = false\n }\n buf += content\n flush(false)\n },\n onAgentStep: (data) => {\n if (verbose) {\n const label = formatAgentStepLabel(data)\n // Skip \"Writing answer\" — the [agent] prefix is printed inline with the first token\n if (label && data.step !== 'answering') {\n console.error(chalk.dim(`\\n[ARBI] ${label}`))\n }\n }\n },\n onElapsedTime: (t) => {\n elapsedTime = t\n },\n onError: (message) => console.error(chalk.red(`\\nError: ${message}`)),\n })\n\n // Flush any remainder still in the citation-aware buffer.\n flush(true)\n process.stdout.write('\\n')\n\n // Persist metadata for `arbi cite`\n if (result.metadata) {\n saveLastMetadata(result.metadata)\n }\n\n // Print summary line (right-aligned, hidden only in quiet mode)\n const refs = countCitations(result.metadata)\n const summary = opts.quiet !== true ? formatStreamSummary(result, elapsedTime) : ''\n if (summary) {\n const refSuffix = refs > 0 ? ` · ${refs} ref${refs === 1 ? '' : 's'}` : ''\n const text = `[${summary}${refSuffix}]`\n const cols = process.stderr.columns || 80\n const pad = Math.max(0, cols - text.length)\n console.error(chalk.dim(' '.repeat(pad) + text))\n }\n\n // Print citation hint\n if (refs > 0 && opts.quiet !== true) {\n console.error(\n chalk.dim(`[${refs} citation${refs === 1 ? '' : 's'} — arbi cite to browse]`)\n )\n }\n\n // Save conversation state for continuity and history restoration.\n // Always save the resolved workspaceId so future calls can detect changes.\n //\n // The SDK's `streamSSE` only captures `assistantMessageExtId` from\n // `response.created` events; some backend configs don't emit that\n // event yet. The result metadata still has the assistant message's\n // `external_id`, so we fall back to it — otherwise every `arbi ask`\n // would start a new conversation because the session pointer never\n // updates.\n const assistantId =\n result.assistantMessageExtId ?? (result.metadata?.external_id as string | undefined)\n if (assistantId) {\n const updates: Partial<{\n lastMessageExtId: string\n conversationExtId: string\n workspaceId: string\n }> = {\n lastMessageExtId: assistantId,\n workspaceId,\n }\n const conversationExtId =\n result.userMessage?.conversation_ext_id ?? result.metadata?.conversation_ext_id\n if (conversationExtId) {\n updates.conversationExtId = conversationExtId\n }\n updateChatSession(updates)\n } else if (opts.quiet !== true) {\n // No assistant message ID anywhere → the response didn't emit the\n // events the SDK needs (`response.created` / `arbi.message_metadata`\n // / `response.completed`). Probably truncated mid-stream by an\n // upstream agent failure. Warn loudly so the caller knows the\n // next `arbi ask` will start a fresh conversation instead of\n // resuming this one — an agent script that chains multiple asks\n // would otherwise silently fan out into N orphan conversations.\n console.error(\n chalk.yellow(\n '[warn] No assistant message ID received — session not saved. ' +\n 'The next `arbi ask` will start a new conversation.'\n )\n )\n }\n })()\n )\n}\n","/**\n * arbi cite — list all citations from the last response\n * arbi cite <N> — show citation N (markdown block with every field)\n * arbi cite -a / --all — show every citation as markdown blocks\n * arbi cite --json — JSON envelope, same data\n * arbi cite verify <N> — verification block for citation N\n *\n * Reads persisted metadata from `~/.arbi/last-metadata.json`, written by\n * the last `arbi ask` response.\n *\n * ── Design note: one canonical format ───────────────────────────────────────\n *\n * The previous incarnation had three text shapes (default pretty, --raw text\n * dump, --json) and `arbi cite --json | jq …` was the only path to extract\n * a doc_id or chunk_ext_id without parsing fragments of the human output.\n *\n * That put formatting work on the agent. The new default IS the\n * agent-grade format: a markdown block per citation with every field\n * exposed under stable headings (`**Doc ID:** doc-…`, `**Chunk ID:** chk-…`,\n * `**SHA256:** …`) that an agent can extract with a one-line regex — no\n * external tool needed. Humans get the same blocks rendered the same way,\n * with chalk for the headers when stdout is a TTY.\n *\n * `--json` still exists for the rare case where an agent really wants the\n * full structured payload, but it's no longer the *only* path to the\n * underlying IDs. `--raw` is gone — its job (just the passage text) is\n * trivially recovered by extracting the fenced code block from the\n * canonical output.\n */\n\nimport { createHash } from 'node:crypto'\nimport { Command } from 'commander'\nimport { resolveCitations, countCitations, type MessageMetadataPayload } from '@arbidocs/sdk'\nimport { runAction, printJson } from '../helpers.js'\nimport { loadLastMetadata } from '../config.js'\nimport { chalk } from '../output.js'\n\nfunction hashUtf8(s: string): string {\n return createHash('sha256').update(s, 'utf8').digest('hex')\n}\n\ntype Resolved = ReturnType<typeof resolveCitations>[number]\n\nexport function registerCiteCommand(program: Command): void {\n const cite = program\n .command('cite [number]')\n .description('Browse citations from the last `arbi ask` response in this shell')\n .allowExcessArguments(true)\n .option('-a, --all', 'Show all citations as markdown blocks')\n .option('--json', 'Output citations as JSON (full structured payload)')\n .action((numberOrVerb: string | undefined, opts: { all?: boolean; json?: boolean }) =>\n runAction(async () => {\n if (numberOrVerb === 'verify') {\n const argv = process.argv\n const i = argv.indexOf('verify')\n const target = i !== -1 ? argv[i + 1] : undefined\n if (!target) {\n console.error('Usage: arbi cite verify <number>')\n process.exit(1)\n }\n await verifyOne(target, opts)\n return\n }\n await listOrShow(numberOrVerb, opts)\n })()\n )\n\n void cite\n}\n\n// ── Output ──────────────────────────────────────────────────────────────────\n\n/**\n * Render a single citation as a markdown block. Stable headings so a regex\n * like `^\\*\\*Doc ID:\\*\\* (doc-[a-z0-9]+)` reliably extracts the ID; fenced\n * triple-backtick passage so an agent can pull the content with a one-liner.\n * Headers are chalk-bolded when stdout is a TTY — the markdown structure\n * survives in non-TTY output (chalk auto-strips colors).\n */\nfunction renderCitation(r: Resolved): string {\n const firstChunk = r.chunks[0]\n const docTitle = firstChunk?.metadata?.doc_title ?? 'Unknown document'\n const page = firstChunk?.metadata?.page_number\n const docId = firstChunk?.metadata?.doc_ext_id ?? null\n const chunkId = firstChunk?.metadata?.chunk_ext_id ?? null\n const passage = r.chunks.map((c) => c.content).join('\\n\\n')\n const sha = hashUtf8(passage)\n\n const lines: string[] = []\n lines.push(chalk.bold(`## Citation ${r.citationNum}`))\n lines.push('')\n lines.push(`${chalk.bold('**Document:**')} ${docTitle}`)\n if (page != null) lines.push(`${chalk.bold('**Page:**')} ${page}`)\n if (docId) lines.push(`${chalk.bold('**Doc ID:**')} ${docId}`)\n if (chunkId) lines.push(`${chalk.bold('**Chunk ID:**')} ${chunkId}`)\n lines.push(`${chalk.bold('**SHA256:**')} ${sha}`)\n lines.push('')\n lines.push(chalk.bold('### Claim'))\n lines.push(r.citationData.statement ?? '')\n lines.push('')\n lines.push(chalk.bold('### Passage'))\n lines.push('```')\n lines.push(passage)\n lines.push('```')\n return lines.join('\\n')\n}\n\nasync function listOrShow(\n number: string | undefined,\n opts: { all?: boolean; json?: boolean }\n): Promise<void> {\n const raw = loadLastMetadata()\n if (!raw) {\n if (opts.json) {\n printJson({ count: 0, citations: [] })\n return\n }\n process.stderr.write('No citation data available. Run `arbi ask` first.\\n')\n return\n }\n\n const metadata = raw as MessageMetadataPayload\n if (countCitations(metadata) === 0) {\n if (opts.json) {\n printJson({ count: 0, citations: [] })\n return\n }\n process.stderr.write('The last response contained no citations.\\n')\n return\n }\n\n const resolved = resolveCitations(metadata)\n\n if (opts.json) {\n const projection = resolved.map((r) => {\n const passage = r.chunks.map((c) => c.content).join('\\n\\n')\n return {\n num: r.citationNum,\n statement: r.citationData.statement ?? '',\n doc_title: r.chunks[0]?.metadata?.doc_title ?? null,\n page_number: r.chunks[0]?.metadata?.page_number ?? null,\n chunk_ext_ids: r.chunks.map((c) => c.metadata?.chunk_ext_id ?? null),\n doc_ext_ids: [...new Set(r.chunks.map((c) => c.metadata?.doc_ext_id).filter(Boolean))],\n passages: r.chunks.map((c) => c.content),\n passage_hashes: r.chunks.map((c) => hashUtf8(c.content)),\n combined_passage_hash: hashUtf8(passage),\n }\n })\n const filtered = number ? projection.filter((p) => p.num === number) : projection\n printJson({ count: filtered.length, citations: filtered })\n return\n }\n\n // Default: markdown blocks. List mode (no flags) shows a short index;\n // <N>/--all shows the full markdown for one or every citation.\n if (number) {\n const hit = resolved.find((r) => r.citationNum === number)\n if (!hit) {\n console.error(chalk.red(`Citation [${number}] not found.`))\n process.exit(3)\n }\n console.log(renderCitation(hit))\n return\n }\n if (opts.all) {\n for (let i = 0; i < resolved.length; i++) {\n if (i > 0) console.log('\\n---\\n')\n console.log(renderCitation(resolved[i]))\n }\n return\n }\n\n // Index view — one line per citation, but the same parseable shape. An\n // agent that wants the underlying IDs can re-run `arbi cite <N>` for the\n // canonical block.\n console.log(chalk.bold(`# Citations (${resolved.length})`))\n console.log('')\n for (const r of resolved) {\n const docTitle = r.chunks[0]?.metadata?.doc_title ?? 'Unknown document'\n const page = r.chunks[0]?.metadata?.page_number\n const pageSuffix = page != null ? `, p${page}` : ''\n const docId = r.chunks[0]?.metadata?.doc_ext_id\n const statement = (r.citationData.statement ?? '').replace(/\\s+/g, ' ').trim()\n const trimmed = statement.length > 140 ? statement.slice(0, 140) + '…' : statement\n console.log(\n `- ${chalk.bold(`[${r.citationNum}]`)} ${docTitle}${pageSuffix}${docId ? ` (${docId})` : ''}`\n )\n console.log(` ${trimmed}`)\n }\n console.log('')\n console.log(\n chalk.dim('`arbi cite <N>` for the full markdown block; `--json` for the structured payload.')\n )\n}\n\nasync function verifyOne(number: string, opts: { json?: boolean }): Promise<void> {\n const raw = loadLastMetadata()\n if (!raw) {\n if (opts.json) {\n printJson({ verified: false, reason: 'no-last-metadata' })\n return\n }\n process.stderr.write('No citation data available. Run `arbi ask` first.\\n')\n process.exit(1)\n }\n\n const metadata = raw as MessageMetadataPayload\n const resolved = resolveCitations(metadata)\n const citation = resolved.find((r) => r.citationNum === number)\n if (!citation) {\n if (opts.json) {\n printJson({ verified: false, reason: 'not-found', number })\n return\n }\n console.error(chalk.red(`Citation [${number}] not found in last response.`))\n process.exit(3)\n }\n\n const chunks = citation.chunks.map((c) => ({\n chunk_ext_id: c.metadata?.chunk_ext_id ?? null,\n doc_ext_id: c.metadata?.doc_ext_id ?? null,\n doc_title: c.metadata?.doc_title ?? null,\n page_number: c.metadata?.page_number ?? null,\n passage_length: c.content.length,\n passage_sha256: hashUtf8(c.content),\n }))\n\n if (opts.json) {\n printJson({\n verified: chunks.length > 0,\n number,\n statement: citation.citationData.statement ?? '',\n chunks,\n followup_hint:\n 'For independent re-verification, run `arbi doc get <doc_ext_id> --json` and confirm the passage hash matches the doc content.',\n })\n return\n }\n\n // Verify default: a parseable markdown block too. Same `**Doc ID:**` /\n // `**Chunk ID:**` / `**SHA256:**` headers as the cite-show output so the\n // same regex extracts from either.\n console.log(chalk.bold(`## Verification: Citation ${number}`))\n console.log('')\n console.log(`${chalk.bold('**Status:**')} ${chunks.length > 0 ? 'verified' : 'no chunks'}`)\n console.log(`${chalk.bold('**Claim:**')} ${citation.citationData.statement ?? ''}`)\n console.log('')\n for (let i = 0; i < chunks.length; i++) {\n const v = chunks[i]\n console.log(chalk.bold(`### Chunk ${i + 1}/${chunks.length}`))\n console.log(`${chalk.bold('**Doc:**')} ${v.doc_title ?? 'Unknown'}`)\n if (v.page_number != null) console.log(`${chalk.bold('**Page:**')} ${v.page_number}`)\n if (v.doc_ext_id) console.log(`${chalk.bold('**Doc ID:**')} ${v.doc_ext_id}`)\n if (v.chunk_ext_id) console.log(`${chalk.bold('**Chunk ID:**')} ${v.chunk_ext_id}`)\n console.log(`${chalk.bold('**Length:**')} ${v.passage_length} chars`)\n console.log(`${chalk.bold('**SHA256:**')} ${v.passage_sha256}`)\n if (i < chunks.length - 1) console.log('')\n }\n console.log('')\n console.log(\n chalk.dim('Re-verify: `arbi doc get <Doc ID> --json` and compare the passage SHA256.')\n )\n}\n","/**\n * arbi find <query...> — document search without LLM\n *\n * Calls POST /v1/assistant/retrieve for search-only results.\n * Supports semantic, keyword, and hybrid search modes.\n * Output can be grouped by document (default) or flat sorted by relevance.\n */\n\nimport { Command } from 'commander'\nimport { assistant } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { chalk } from '../output.js'\n\n/**\n * Mirrors src/lib/retrieve-limits.ts in the webapp. Kept inline because the\n * CLI package doesn't depend on `src/`. If you change the limit here, change\n * it there too.\n */\nconst MAX_INDIVIDUALLY_SELECTED_DOCS = 5000\n\ninterface FindOpts {\n workspace?: string\n mode?: 'semantic' | 'keyword' | 'hybrid'\n docs?: string\n minScore?: string\n limit?: string\n flat?: boolean\n toc?: string\n fullContext?: string\n json?: boolean\n}\n\n/** Pick the best available score from a chunk. */\nfunction chunkScore(chunk: assistant.Chunk): number {\n return chunk.metadata.rerank_score ?? chunk.metadata.score ?? 0\n}\n\n/** Truncate text to a max length, appending ellipsis if needed. */\nfunction truncate(text: string, max: number): string {\n const oneLine = text.replace(/\\n/g, ' ').trim()\n return oneLine.length > max ? oneLine.slice(0, max - 1) + '…' : oneLine\n}\n\n/** Format a score as a percentage string like \"[92%]\". */\nfunction fmtScore(score: number): string {\n const pct = Math.min(Math.round(score * 100), 100)\n return `[${pct}%]`\n}\n\nexport function registerFindCommand(program: Command): void {\n program\n .command('find <query...>')\n .description('Search documents without LLM generation (retrieve only)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-m, --mode <mode>', 'Search mode: semantic, keyword, hybrid', 'semantic')\n .option(\n '-d, --docs <ids>',\n `Comma-separated document IDs to search within (omit to search the whole workspace; max ${MAX_INDIVIDUALLY_SELECTED_DOCS} when set)`\n )\n .option('--min-score <n>', 'Minimum relevance score 0-1', '0.2')\n .option('-l, --limit <n>', 'Max results to display', '20')\n .option('--flat', 'Flat list sorted by relevance (instead of grouped by document)')\n .option('--toc <ids>', 'Comma-separated doc IDs to fetch table of contents for')\n .option('--full-context <ids>', 'Comma-separated doc IDs to fetch full content for')\n .option('--json', 'Raw JSON output for scripting')\n .action((words: string[], opts: FindOpts) =>\n runAction(async () => {\n const query = words.join(' ')\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n\n // Resolve document IDs\n //\n // No `-d` → send an empty list so the backend searches the whole\n // workspace. The previous behaviour (list every doc client-side and\n // stuff every ID into the request body) blew up on large workspaces:\n // a 35 k-doc workspace produced an ~500 KB request body and a server\n // 500 in milliseconds. The empty-list path is workspace-wide on the\n // server and stays a few hundred bytes on the wire.\n let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs\n .split(',')\n .map((id) => id.trim())\n .filter((id) => id.length > 0)\n if (docIds.length > MAX_INDIVIDUALLY_SELECTED_DOCS) {\n console.error(\n chalk.red(\n `Error: ${docIds.length.toLocaleString()} document IDs supplied — maximum is ${MAX_INDIVIDUALLY_SELECTED_DOCS.toLocaleString()}.\\n` +\n 'Narrow your selection, or omit -d to search the whole workspace.'\n )\n )\n process.exitCode = 1\n return\n }\n } else {\n docIds = []\n }\n\n const searchMode = (opts.mode ?? 'semantic') as 'semantic' | 'keyword' | 'hybrid'\n const tocDocIds = opts.toc ? opts.toc.split(',').map((id) => id.trim()) : undefined\n const fullContextDocIds = opts.fullContext\n ? opts.fullContext.split(',').map((id) => id.trim())\n : undefined\n\n const result = await assistant.retrieve({\n arbi,\n workspaceId,\n query,\n docIds,\n searchMode,\n tocDocIds,\n fullContextDocIds,\n })\n\n // Collect all chunks from retrieval_chunk responses\n const allChunks: assistant.Chunk[] = []\n if (result.retrieval_chunk?.tool_responses) {\n for (const chunks of Object.values(result.retrieval_chunk.tool_responses)) {\n allChunks.push(...chunks)\n }\n }\n\n // Filter by min score and sort descending\n const minScore = parseFloat(opts.minScore ?? '0.2')\n const limit = parseInt(opts.limit ?? '20', 10)\n\n const filtered = allChunks\n .filter((c) => chunkScore(c) >= minScore)\n .sort((a, b) => chunkScore(b) - chunkScore(a))\n .slice(0, limit)\n\n // Count unique documents in results\n const uniqueDocs = new Set(filtered.map((c) => c.metadata.doc_ext_id))\n\n // ── JSON output ──────────────────────────────────────────────────\n // Old behavior dumped the raw retrieval envelope. That's noisy and\n // inconsistent with `arbi docs --json` (which returns a clean array).\n // Emit the filtered, sorted chunks under `results` plus the\n // unfiltered raw payload under `raw` for the rare consumer that\n // wants the retrieval-tool metadata.\n if (opts.json) {\n console.log(\n JSON.stringify(\n {\n results: filtered,\n count: filtered.length,\n unique_documents: uniqueDocs.size,\n raw: result,\n },\n null,\n 2\n )\n )\n return\n }\n\n if (filtered.length === 0) {\n process.stderr.write('No results found.\\n')\n return\n }\n\n console.log(\n `\\nFound ${chalk.bold(String(filtered.length))} result${filtered.length === 1 ? '' : 's'} across ${chalk.bold(String(uniqueDocs.size))} document${uniqueDocs.size === 1 ? '' : 's'}\\n`\n )\n\n // ── Flat output ──────────────────────────────────────────────────\n if (opts.flat) {\n for (let i = 0; i < filtered.length; i++) {\n const chunk = filtered[i]\n const score = fmtScore(chunkScore(chunk))\n const doc = chunk.metadata.doc_title ?? chunk.metadata.doc_ext_id ?? ''\n const page = chunk.metadata.page_number ? `p.${chunk.metadata.page_number}` : ''\n const preview = truncate(chunk.content, 80)\n\n console.log(\n ` ${chalk.dim(String(i + 1).padStart(2, ' '))}. ${chalk.yellow(score)} ${chalk.cyan(doc)} ${chalk.dim(page)}`\n )\n console.log(` ${chalk.dim(preview)}`)\n }\n console.log()\n return\n }\n\n // ── Grouped output (default) ─────────────────────────────────────\n const grouped = new Map<string, assistant.Chunk[]>()\n for (const chunk of filtered) {\n const key = chunk.metadata.doc_ext_id ?? 'unknown'\n if (!grouped.has(key)) grouped.set(key, [])\n grouped.get(key)!.push(chunk)\n }\n\n for (const [, chunks] of grouped) {\n const docTitle =\n chunks[0].metadata.doc_title ?? chunks[0].metadata.doc_ext_id ?? 'Unknown'\n const hitCount = chunks.length\n const header = `${docTitle} (${hitCount} hit${hitCount === 1 ? '' : 's'})`\n\n console.log(\n `${chalk.dim('──')} ${chalk.bold(header)} ${chalk.dim('─'.repeat(Math.max(0, 50 - header.length)))}`\n )\n\n for (const chunk of chunks) {\n const score = fmtScore(chunkScore(chunk))\n const page = chunk.metadata.page_number ? `p.${chunk.metadata.page_number}` : ''\n const preview = truncate(chunk.content, 72)\n\n console.log(\n ` ${chalk.yellow(score)} ${chalk.dim(page.padEnd(6))} ${chalk.dim(preview)}`\n )\n }\n console.log()\n }\n })()\n )\n}\n","/**\n * arbi watch — stream workspace activity in real time\n *\n * Flags:\n * --timeout <seconds> Auto-close after N seconds\n * --count <n> Stop after N messages\n * --json Output NDJSON for piping\n */\n\nimport { Command } from 'commander'\nimport { connectWebSocket, formatWsMessage, type MessageLevel } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { chalk } from '../output.js'\n\nfunction colorize(level: MessageLevel, text: string): string {\n if (level === 'success') return chalk.green(text)\n if (level === 'error') return chalk.red(text)\n if (level === 'warning') return chalk.yellow(text)\n return text\n}\n\ninterface WatchOpts {\n workspace?: string\n timeout?: string\n count?: string\n json?: boolean\n type?: string\n}\n\n/**\n * Known event types emitted by the workspace WebSocket. Used both for the\n * `--type` help text and for runtime validation so a typo doesn't silently\n * drop every event.\n */\nconst KNOWN_WATCH_TYPES = [\n 'task_update',\n 'batch_complete',\n 'presence_update',\n 'response_complete',\n 'notification',\n 'error',\n] as const\n\nexport function registerWatchCommand(program: Command): void {\n program\n .command('watch')\n .description('Watch workspace activity in real time')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('-t, --timeout <seconds>', 'Auto-close after N seconds')\n .option('-n, --count <n>', 'Stop after N messages')\n .option(\n '--type <comma-list>',\n `Only emit events of these types (default: all). Known: ${KNOWN_WATCH_TYPES.join(',')}`\n )\n .option('--json', 'Output NDJSON (one JSON object per line)')\n .action((opts: WatchOpts) =>\n runAction(async () => {\n const { config, accessToken, workspaceId } = await resolveWorkspace(opts.workspace, {\n skipNotifications: true,\n })\n const timeoutSec = opts.timeout ? parseInt(opts.timeout, 10) : undefined\n const maxCount = opts.count ? parseInt(opts.count, 10) : undefined\n const jsonMode = opts.json ?? false\n\n // Resolve the `--type` filter once up front. Validating against the\n // known list catches typos like `--type messages` (instead of\n // `notification`) immediately rather than silently swallowing every\n // event for the lifetime of the watch.\n const typeFilter = opts.type\n ? new Set(\n opts.type\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n )\n : null\n if (typeFilter) {\n const unknown = [...typeFilter].filter(\n (t) => !(KNOWN_WATCH_TYPES as readonly string[]).includes(t)\n )\n if (unknown.length > 0) {\n console.error(\n `Error: unknown event type(s): ${unknown.join(', ')}\\n` +\n `Known: ${KNOWN_WATCH_TYPES.join(', ')}`\n )\n process.exit(1)\n }\n }\n\n if (!jsonMode) {\n const parts = [`Watching workspace ${workspaceId}...`]\n if (timeoutSec) parts.push(`(timeout: ${timeoutSec}s)`)\n if (maxCount) parts.push(`(max: ${maxCount} messages)`)\n parts.push('(Ctrl+C to stop)')\n console.log(parts.join(' '))\n }\n\n let messageCount = 0\n let timedOut = false\n let onDone!: () => void\n const done = new Promise<void>((r) => {\n onDone = r\n })\n\n const conn = await connectWebSocket({\n baseUrl: config.baseUrl,\n accessToken,\n onMessage: (msg) => {\n if (typeFilter) {\n const type = (msg as Record<string, unknown>).type as string | undefined\n if (!type || !typeFilter.has(type)) return\n }\n messageCount++\n\n if (jsonMode) {\n console.log(JSON.stringify(msg))\n } else {\n const { text, level } = formatWsMessage(msg)\n console.log(colorize(level, text))\n }\n\n if (maxCount && messageCount >= maxCount) {\n if (!jsonMode) console.log(chalk.dim(`\\nReached ${maxCount} messages, closing.`))\n conn.close()\n }\n },\n onClose: (code, reason) => {\n if (!jsonMode) {\n console.log(\n chalk.yellow(`\\nConnection closed (code ${code}${reason ? ': ' + reason : ''})`)\n )\n }\n onDone()\n },\n })\n\n // Timeout auto-close\n let timer: ReturnType<typeof setTimeout> | undefined\n if (timeoutSec) {\n timer = setTimeout(() => {\n timedOut = true\n if (!jsonMode) console.log(chalk.dim(`\\nTimeout (${timeoutSec}s), closing.`))\n conn.close()\n }, timeoutSec * 1000)\n }\n\n // Clean SIGINT handler\n const sigintHandler = () => {\n if (timer) clearTimeout(timer)\n conn.close()\n }\n process.on('SIGINT', sigintHandler)\n\n await done\n\n // Cleanup\n if (timer) clearTimeout(timer)\n process.removeListener('SIGINT', sigintHandler)\n\n // If the caller asked for N messages and we never got them, surface\n // that explicitly. Old behavior was exit 0 with no output — agents\n // couldn't tell \"got it\" from \"still waiting.\" Match GNU `timeout`'s\n // 124 exit code and emit a terminator JSON line for NDJSON consumers.\n if (timedOut && maxCount && messageCount < maxCount) {\n if (jsonMode) {\n console.log(\n JSON.stringify({\n type: 'timeout',\n received: messageCount,\n expected: maxCount,\n timeout_seconds: timeoutSec,\n })\n )\n } else {\n console.error(\n chalk.yellow(`Timed out before reaching ${maxCount} messages (got ${messageCount}).`)\n )\n }\n process.exit(124)\n }\n })()\n )\n}\n","/**\n * arbi contacts — list contacts\n * arbi contacts add [emails] — add contacts (prompt if no emails)\n * arbi contacts remove [ids] — remove contacts (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { contacts as contactOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n requireInteractive,\n dryRun,\n formatUserName,\n type UserInfo,\n} from '../helpers.js'\nimport { promptCheckbox, promptInput } from '../prompts.js'\nimport { success } from '../output.js'\n\n/**\n * Strip the giant base64 `picture` field from each contact's embedded user\n * record. The full image is rarely useful for an agent (5 KB+ per contact)\n * and a single piped `arbi contacts --json | jq` was unreadable. Callers\n * who need the bytes can pass `--include-pictures`.\n */\nfunction redactPictures<T extends Record<string, unknown>>(rows: T[]): T[] {\n return rows.map((row) => {\n const user = row.user as Record<string, unknown> | null | undefined\n if (!user || typeof user.picture !== 'string' || user.picture.length === 0) return row\n return {\n ...row,\n user: {\n ...user,\n has_picture: true,\n picture: null,\n },\n } as T\n })\n}\n\nexport function registerContactsCommand(program: Command): void {\n const contacts = program.command('contacts').description('Contacts: list, add, remove')\n\n contacts\n .command('list')\n .description('List all contacts')\n .option('--json', 'Output as JSON')\n .option('--include-pictures', 'Keep base64 profile-picture bytes in --json output')\n .action((opts: { json?: boolean; includePictures?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await contactOps.listContacts(arbi)\n\n if (opts.json) {\n // Default: drop the inline base64 picture. Opt-in keeps the bytes\n // for the rare workflow that wants the avatar (download tool, etc).\n printJson(opts.includePictures ? data : redactPictures(data))\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No contacts found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 20,\n value: (r) => formatUserName(r.user as UserInfo | null),\n },\n { header: 'EMAIL', width: 30, value: (r) => r.email as string },\n { header: 'STATUS', width: 18, value: (r) => r.status as string },\n ],\n data\n )\n })()\n )\n\n contacts\n .command('add [emails...]')\n .description('Add contacts by email (prompt if no emails given)')\n .action((emails?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!emails || emails.length === 0) {\n requireInteractive('Pass email(s) as positional args: arbi contacts add foo@x.y bar@x.y')\n const input = await promptInput('Email address(es), comma-separated')\n emails = input\n .split(',')\n .map((e) => e.trim())\n .filter(Boolean)\n if (emails.length === 0) return\n }\n const data = await contactOps.addContacts(arbi, emails)\n // Agents extract IDs from the text:\n // arbi contacts add … | grep -oE 'cnt-[a-z0-9]+'\n for (const c of data) {\n success(`Added: ${c.email} (${c.external_id}) — ${c.status}`)\n }\n })()\n )\n\n contacts\n .command('remove [ids...]')\n .description('Remove contacts (interactive picker if no IDs given)')\n .option('--dry-run', 'Preview which contacts would be removed (no SDK call)')\n .action((ids: string[] | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let contactIds = ids && ids.length > 0 ? ids : undefined\n if (!contactIds) {\n const data = await contactOps.listContacts(arbi)\n if (data.length === 0) {\n process.stderr.write('No contacts found.\\n')\n return\n }\n requireInteractive('Pass contact IDs directly: arbi contacts remove cnt-…')\n contactIds = await promptCheckbox(\n 'Select contacts to remove',\n data.map((c) => {\n const name = formatUserName(c.user as UserInfo | null)\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: c.external_id as string,\n }\n })\n )\n if (contactIds.length === 0) return\n }\n if (opts?.dryRun) {\n dryRun(`remove ${contactIds.length} contact(s)`, contactIds)\n return\n }\n await contactOps.removeContacts(arbi, contactIds)\n success(`Removed ${contactIds.length} contact(s).`)\n })()\n )\n\n // Default action: list. Forward raw argv tail rather than pre-declaring\n // --json on the parent — see comment in tags.ts for the commander-binding\n // bug that motivates this pattern. allowUnknownOption keeps the parent\n // shorthand (e.g. `arbi contacts --json`) working.\n contacts\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = contacts.args ?? []\n await contacts.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi dm list — list DMs (decrypted, filterable)\n * arbi dm send [recipient] [content] — send an E2E encrypted DM\n * arbi dm read [ids...] — mark messages as read\n * arbi dm delete [ids...] — delete messages\n *\n * `dm list` supports `--json` for filtering/iteration (the natural list-view\n * use case). `dm send/read/delete` deliberately do NOT — their text output\n * is the canonical confirmation and carries every useful field (notification\n * ID via `ntf-…`, encryption status via `(encrypted)` suffix). Agents grep\n * the text instead of piping `--json` through jq.\n */\n\nimport { Command } from 'commander'\nimport {\n dm as dmOps,\n contacts as contactOps,\n agents as agentOps,\n workspaces as workspaceOps,\n} from '@arbidocs/sdk'\nimport {\n runAction,\n resolveDmCrypto,\n printTable,\n formatUserName,\n truncate,\n requireInteractive,\n printJson,\n suggestSubcommandAndExit,\n dryRun,\n type UserInfo,\n} from '../helpers.js'\nimport { promptSelect, promptCheckbox, promptInput } from '../prompts.js'\nimport { success, error } from '../output.js'\n\n/**\n * Common shape of one decrypted DM row from the SDK. We type it loosely\n * because the SDK returns `Record<string, unknown>` (it widens the OpenAPI\n * type after stitching in decrypted content).\n */\ntype DmRow = Record<string, unknown>\n\n/**\n * Resolve a `recipient` arg (email OR `usr-/agt-` ext_id) into the values\n * `sendEncryptedDM` needs: the recipient's external_id and their curve25519\n * public key. Walks three lists in order — contacts, persistent agents,\n * current-workspace users — and stops at the first hit. Returns `null` when\n * nothing matches so callers can render a recovery hint with exit code 3.\n *\n * One helper replaces the previous code that searched twice (once for email\n * input, once for ext_id input) with subtly different ordering, which\n * exposed a `recipientExtId === recipient` parsing bug for ext_id inputs.\n */\nasync function resolveRecipient(\n arbi: Awaited<ReturnType<typeof resolveDmCrypto>>['arbi'],\n ref: string\n): Promise<{ extId: string; pubKey: string } | null> {\n const isEmail = ref.includes('@')\n const matchKey: 'email' | 'external_id' = isEmail ? 'email' : 'external_id'\n\n // Contacts: extract the embedded user record's pubkey, fall back to the\n // contact-level external_id when the contact hasn't been registered yet.\n const contacts = await contactOps.listContacts(arbi)\n const contactMatch = contacts.find((c) => {\n if (isEmail) return c.email === ref\n const u = c.user as UserInfo | undefined\n return u?.external_id === ref || c.external_id === ref\n })\n if (contactMatch) {\n const u = contactMatch.user as Record<string, unknown> | undefined\n const extId = (u?.external_id as string) ?? (contactMatch.external_id as string)\n const pubKey = (u?.encryption_public_key as string) ?? ''\n if (pubKey) return { extId, pubKey }\n }\n\n // Agents: parent-owned child identities. Wrapped in try/catch because\n // workspace-scoped tokens can't list cross-workspace agents.\n try {\n const agents = await agentOps.listAgents(arbi)\n const agentMatch = agents.find((a) => (a as Record<string, unknown>)[matchKey] === ref)\n if (agentMatch) {\n return { extId: agentMatch.external_id, pubKey: agentMatch.encryption_public_key }\n }\n } catch {\n // Agent listing not available in this auth context — keep going.\n }\n\n // Workspace members: catches DMs to peers we share a workspace with but\n // haven't explicitly added as contacts.\n try {\n const wsUsers = await workspaceOps.listWorkspaceUsers(arbi)\n const wsMatch = wsUsers.find((wu) => (wu as Record<string, unknown>)[matchKey] === ref)\n if (wsMatch) {\n const u = wsMatch as Record<string, unknown>\n return {\n extId: u.external_id as string,\n pubKey: u.encryption_public_key as string,\n }\n }\n } catch {\n // Workspace-user listing not available — fall through to null.\n }\n\n return null\n}\n\nfunction rowMatchesFilters(\n row: DmRow,\n opts: { unread?: boolean; from?: string; since?: string; thread?: string; myExtId?: string }\n): boolean {\n if (opts.unread && row.read) return false\n\n const sender = row.sender as UserInfo | null\n const recipient = row.recipient as UserInfo | null\n\n if (opts.from) {\n const needle = opts.from.toLowerCase()\n const senderMatch = sender?.email?.toLowerCase() === needle || sender?.external_id === opts.from\n const recipientMatch =\n recipient?.email?.toLowerCase() === needle || recipient?.external_id === opts.from\n if (!senderMatch && !recipientMatch) return false\n }\n\n if (opts.thread) {\n const needle = opts.thread.toLowerCase()\n // `--thread` is \"show everything with this peer,\" in either direction.\n const peer = sender?.external_id === opts.myExtId ? recipient : sender\n const peerMatch = peer?.email?.toLowerCase() === needle || peer?.external_id === opts.thread\n if (!peerMatch) return false\n }\n\n if (opts.since) {\n const cutoff = Date.parse(opts.since)\n if (Number.isFinite(cutoff)) {\n const createdAt = typeof row.created_at === 'string' ? Date.parse(row.created_at) : NaN\n if (!Number.isFinite(createdAt) || createdAt < cutoff) return false\n }\n }\n\n return true\n}\n\nexport function registerDmCommand(program: Command): void {\n const dm = program.command('dm').description('Direct messages (E2E encrypted)')\n\n dm.command('list')\n .description('List direct messages (decrypted, newest first)')\n .option('--unread', 'Only show unread messages')\n .option('--from <email-or-extid>', 'Filter by sender OR recipient (email or usr- id)')\n .option(\n '--thread <email-or-extid>',\n 'Show the full conversation with one peer (both directions)'\n )\n .option('--since <iso>', 'Only messages newer than this ISO timestamp')\n .option('-l, --limit <n>', 'Cap to N most-recent messages', (v) => parseInt(v, 10))\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts: Record<string, unknown>) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as DmRow[]\n\n // `arbi dm` is the DM inbox view — the underlying endpoint also returns\n // workspaceuser_* / contact_accepted notifications, which have no place\n // here. (`arbi notifications` for the firehose, once that lands.)\n // session.userExtId is `string | null`; the filter helper wants\n // `string | undefined`. Coerce here so both shapes mean \"no peer\n // to test against.\"\n const myExtId = arbi.session.getState().userExtId ?? undefined\n const dms = all.filter((r) => (r.type as string) === 'user_message')\n\n const filterOpts = {\n unread: Boolean(opts.unread),\n from: typeof opts.from === 'string' ? opts.from : undefined,\n thread: typeof opts.thread === 'string' ? opts.thread : undefined,\n since: typeof opts.since === 'string' ? opts.since : undefined,\n myExtId,\n }\n const filtered = dms.filter((r) => rowMatchesFilters(r, filterOpts))\n const limited =\n typeof opts.limit === 'number' && opts.limit > 0\n ? filtered.slice(0, opts.limit)\n : filtered\n\n if (opts.json) {\n // Re-tag every row with `encrypted_in_transit: true` — the SDK\n // verifies decryption end-to-end before returning, so the row's\n // mere presence in this list is proof. Surfacing it explicitly\n // matches SKILL.md's contract and lets security review grep for it.\n printJson(limited.map((r) => ({ ...r, encrypted_in_transit: true })))\n return\n }\n\n if (limited.length === 0) {\n // Status, not data. Goes to stderr so `arbi dm list | wc -l` is\n // accurate when there are no messages.\n process.stderr.write('No messages found.\\n')\n return\n }\n\n const peer = (r: DmRow) => {\n const s = r.sender as UserInfo | null\n const recip = r.recipient as UserInfo | null\n return s?.external_id === myExtId ? recip : s\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n {\n header: 'DIR',\n width: 4,\n value: (r) => ((r.sender as UserInfo | null)?.external_id === myExtId ? '→' : '←'),\n },\n {\n header: 'PEER',\n width: 26,\n value: (r) => {\n const p = peer(r)\n return formatUserName(p) || p?.email || ''\n },\n },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n {\n header: 'CONTENT',\n width: 50,\n value: (r) => truncate((r.content as string) ?? '', 49),\n },\n ],\n limited\n )\n })()\n )\n\n dm.command('send [recipient] [content...]')\n .description('Send an E2E encrypted DM (interactive if no args)')\n .action((recipient?: string, contentParts?: string[]) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n\n // Pick recipient from contacts if not given\n if (!recipient) {\n requireInteractive(\n 'Pass recipient + message as arguments: arbi dm send <email-or-id> \"<message>\"'\n )\n const contacts = await contactOps.listContacts(arbi)\n if (contacts.length === 0) {\n error('No contacts found. Add contacts first: arbi contacts add <email>')\n process.exit(1)\n }\n recipient = await promptSelect(\n 'Send to',\n contacts.map((c) => {\n const u = c.user as UserInfo | null\n const name = formatUserName(u)\n return {\n name: name ? `${name} (${c.email})` : (c.email as string),\n value: u?.external_id ?? (c.external_id as string),\n description: c.email as string,\n }\n })\n )\n }\n\n // Join variadic content parts or prompt interactively\n let content = contentParts?.length ? contentParts.join(' ') : undefined\n if (!content) {\n requireInteractive(\n 'Pass the message as a positional argument: arbi dm send <email> \"your message\"'\n )\n content = await promptInput('Message')\n }\n\n // Resolve recipient ext_id + encryption public key from one of three\n // sources (contacts, agents, workspace members). The old code did the\n // same six-way search twice (once for email input, once for ext_id);\n // collapsing into one helper removed ~80 LOC and a stack of subtle\n // branching bugs.\n const resolved = await resolveRecipient(arbi, recipient)\n if (!resolved) {\n error(\n `No contact, agent, or workspace member found for: ${recipient}\\n` +\n `Try: arbi contacts add ${recipient.includes('@') ? recipient : '<their-email>'}`\n )\n // Distinct exit code so callers can branch \"fix the reference\" (3)\n // vs \"auth missing\" (2) vs \"server fault\" (1).\n process.exit(3)\n }\n const recipientExtId = resolved.extId\n const recipientPubKey = resolved.pubKey\n\n if (!recipientPubKey) {\n error(\n 'Cannot send encrypted DM — recipient public key not found.\\n' +\n 'Add them as a contact first: arbi contacts add <email>'\n )\n process.exit(3)\n }\n\n const data = await dmOps.sendEncryptedDM(\n arbi,\n [\n {\n recipient_ext_id: recipientExtId,\n content,\n recipient_encryption_public_key: recipientPubKey,\n },\n ],\n crypto\n )\n // The text confirmation carries the security receipt: \"(encrypted)\"\n // makes the encrypted_in_transit invariant visible without needing\n // --json. Agents extract the notification ID with grep -oE 'ntf-…'.\n for (const n of data) {\n success(`Sent (encrypted): ${n.external_id} → ${n.recipient.email}`)\n }\n })()\n )\n\n dm.command('read [ids...]')\n .description('Mark messages as read (interactive picker if no IDs given)')\n .option('--all', 'Mark every unread message as read (no picker)')\n .action((ids?: string[], opts?: Record<string, unknown>) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n\n if (!msgIds && opts?.all) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n msgIds = data.filter((m) => !m.read).map((m) => m.external_id as string)\n }\n\n if (!msgIds) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n const unread = data.filter((m) => !m.read)\n if (unread.length === 0) {\n process.stderr.write('No unread messages.\\n')\n return\n }\n requireInteractive('Pass IDs directly or use --all to mark every unread message read.')\n msgIds = await promptCheckbox(\n 'Select messages to mark as read',\n unread.map((m) => {\n const s = m.sender as UserInfo | null\n const from = formatUserName(s) || s?.email || ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n\n if (msgIds.length === 0) {\n process.stderr.write('No unread messages.\\n')\n return\n }\n const data = await dmOps.markRead(arbi, msgIds)\n success(`Marked ${data.length} message(s) as read.`)\n })()\n )\n\n dm.command('delete [ids...]')\n .description('Delete messages (interactive picker if no IDs given)')\n .option('--all', 'Delete every message in your DM history (no picker, no prompt)')\n .option('--dry-run', 'Preview which messages would be deleted (no SDK call)')\n .action((ids?: string[], opts?: Record<string, unknown>) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n\n if (!msgIds && opts?.all) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n msgIds = data.map((m) => m.external_id as string)\n }\n\n if (!msgIds) {\n const data = await dmOps.listDecryptedDMs(arbi, crypto)\n if (data.length === 0) {\n process.stderr.write('No messages found.\\n')\n return\n }\n requireInteractive('Pass IDs directly or use --all to delete the whole inbox.')\n msgIds = await promptCheckbox(\n 'Select messages to delete',\n data.map((m) => {\n const s = m.sender as UserInfo | null\n const from = formatUserName(s) || s?.email || ''\n return {\n name: `${from}: ${((m.content as string) ?? '').slice(0, 50)}`,\n value: m.external_id as string,\n }\n })\n )\n if (msgIds.length === 0) return\n }\n if (msgIds.length === 0) {\n process.stderr.write('No messages to delete.\\n')\n return\n }\n if (opts?.dryRun) {\n dryRun(`delete ${msgIds.length} message(s)`, msgIds)\n return\n }\n await dmOps.deleteDMs(arbi, msgIds)\n success(`Deleted ${msgIds.length} message(s).`)\n })()\n )\n\n // Default action: list, OR suggest a subcommand if user typed a typo\n // (\"arbi dm lst\" used to return \"too many arguments for 'dm'\" with no hint\n // because commander treated `lst` as a positional arg, not a subcommand).\n dm.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'dm',\n maybe,\n dm.commands.map((c) => c.name())\n )\n }\n await dm.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi tags — list tags in workspace\n * arbi tags create [name] — create a tag (form if no name)\n * arbi tags delete [id] — delete a tag (picker if no ID)\n * arbi tags update [id] [json] — update a tag (picker + form if no args)\n */\n\nimport { Command } from 'commander'\nimport { tags as tagOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n printTable,\n printJson,\n parseJsonArg,\n dryRun,\n} from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\nimport { success, ref } from '../output.js'\n\n/** Fetch workspace tags and return as picker choices */\nasync function fetchTagChoices(arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi']) {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n process.stderr.write('No tags found.\\n')\n process.exit(0)\n }\n return {\n data,\n choices: data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? 'unknown'}, ${t.doctag_count} docs)`,\n value: t.external_id as string,\n description: t.external_id as string,\n })),\n }\n}\n\nexport function registerTagsCommand(program: Command): void {\n const tags = program\n .command('tags')\n .description('Tags: list, create, delete, update, share, unshare, rename')\n\n tags\n .command('list')\n .description('List tags in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .action((opts: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await tagOps.listTags(arbi)\n\n if (opts.json) {\n // Use the shared printer so every --json command emits the same\n // shape (trailing newline, no chalk leakage).\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n // Empty-state text goes to stderr — keeps stdout `[]`-shaped-or-empty\n // so `arbi tags list | wc -l` is honest.\n process.stderr.write('No tags found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 24, value: (r) => r.name as string },\n {\n header: 'TYPE',\n width: 12,\n value: (r) => (r.tag_type as { type?: string })?.type ?? '',\n },\n { header: 'DOCS', width: 6, value: (r) => String(r.doctag_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n tags\n .command('create [name]')\n .description('Create a new tag (interactive form if no name given)')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option(\n '-t, --type <type>',\n 'Tag type (checkbox, text, number, select, folder, search, date, assistant)',\n 'checkbox'\n )\n .option('-i, --instruction <text>', 'Tag instruction')\n .option('--shared', 'Make tag shared', false)\n .action(\n (\n name: string | undefined,\n opts: {\n workspace?: string\n type?: string\n instruction?: string\n shared?: boolean\n }\n ) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n\n // Interactive form if name not given\n const interactive = !name\n if (!name) {\n name = await promptInput('Tag name')\n }\n const tagType =\n opts.type ||\n (await promptSelect('Tag type', [\n { name: 'Checkbox', value: 'checkbox' },\n { name: 'Text', value: 'text' },\n { name: 'Number', value: 'number' },\n { name: 'Select', value: 'select' },\n { name: 'Date', value: 'date' },\n { name: 'Folder', value: 'folder' },\n { name: 'Search', value: 'search' },\n { name: 'Assistant', value: 'assistant' },\n ]))\n const instruction = interactive\n ? (opts.instruction ?? ((await promptInput('Instruction (optional)', false)) || null))\n : (opts.instruction ?? null)\n const shared = interactive\n ? opts.shared || (await promptConfirm('Shared?', false))\n : (opts.shared ?? false)\n\n const data = await tagOps.createTag(arbi, {\n name,\n tagType: {\n type: tagType as 'checkbox' | 'text' | 'number' | 'select' | 'search' | 'date',\n options: [],\n },\n instruction,\n shared,\n })\n // Agents extract the new ID from the predictable text:\n // arbi tags create … | grep -oE 'tag-[a-z0-9]+'\n success(`Created: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n tags\n .command('delete [id]')\n .description('Delete a tag (interactive picker if no ID given)')\n .option('--dry-run', 'Preview which tag would be deleted (no SDK call)')\n .action((id: string | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi)\n id = await promptSelect('Select tag to delete', choices)\n }\n if (opts?.dryRun) {\n dryRun('delete tag', id)\n return\n }\n const data = await tagOps.deleteTag(arbi, id)\n success(data?.detail ?? `Deleted tag ${id}`)\n })()\n )\n\n // ── share / unshare / rename ─────────────────────────────────────────────\n // Named shortcuts for the most common `tags update` operations — agents\n // shouldn't have to hand-write {\"shared\":true} JSON for a one-flag toggle.\n tags\n .command('share <id>')\n .description('Mark a tag as shared (visible to other workspace members)')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await tagOps.updateTag(arbi, id, { shared: true })\n success(`Shared: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n tags\n .command('unshare <id>')\n .description('Mark a tag as private (owner-only)')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await tagOps.updateTag(arbi, id, { shared: false })\n success(`Unshared: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n tags\n .command('rename <id> <name>')\n .description('Rename a tag')\n .action((id: string, name: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await tagOps.updateTag(arbi, id, { name })\n success(`Renamed: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n tags\n .command('update [id] [json]')\n .description('Update a tag (interactive picker + form if no args)')\n .action((id?: string, json?: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi)\n id = await promptSelect('Select tag to update', choices)\n }\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(json, 'arbi tags update tag-123 \\'{\"name\": \"New Name\"}\\'')\n } else {\n const field = await promptSelect('Field to update', [\n { name: 'Name', value: 'name' },\n { name: 'Instruction', value: 'instruction' },\n { name: 'Shared', value: 'shared' },\n ])\n if (field === 'shared') {\n body = { shared: await promptConfirm('Shared?') }\n } else {\n body = { [field]: await promptInput(field.charAt(0).toUpperCase() + field.slice(1)) }\n }\n }\n\n const data = await tagOps.updateTag(arbi, id, body)\n success(`Updated: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n // Default action: list. We do NOT pre-declare --json/-w on the parent\n // because that breaks `arbi tags list --json` — commander binds the option\n // to the parent and the inner `list` subcommand's --json never fires.\n // `allowUnknownOption` keeps `arbi tags --json` working by routing those\n // flags into `tags.args` for forwarding to the inner subcommand.\n tags\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = tags.args ?? []\n await tags.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi doctags create [tag-id] [doc-ids...] — assign tag to docs (pickers if no args)\n * arbi doctags delete [tag-id] [doc-ids...] — remove tag from docs (pickers if no args)\n * arbi doctags generate — AI-generate doctags (pickers if no flags)\n */\n\nimport { Command } from 'commander'\nimport { doctags as doctagOps, tags as tagOps, documents } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n requireInteractive,\n resolveByIdOrName,\n failResolveAndExit,\n pickFromList,\n dryRun,\n} from '../helpers.js'\nimport { promptCheckbox } from '../prompts.js'\nimport { success } from '../output.js'\n\n/**\n * Resolve a tag arg (id like `tag-…` or a unique tag name) to its external_id.\n * Delegates to the shared `resolveByIdOrName` so the ambiguous/not-found\n * messages match every other resolver in the CLI.\n */\nasync function resolveTagRef(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n ref: string\n): Promise<string> {\n if (ref.startsWith('tag-')) return ref\n const data = await tagOps.listTags(arbi)\n const res = resolveByIdOrName(data as Array<{ external_id?: string; name?: string }>, ref)\n if (!res.ok) failResolveAndExit('tag', ref, res)\n return res.id\n}\n\n/** Interactive single-tag picker. Delegates the empty/non-TTY handling to\n * `pickFromList` so this stays a one-liner over the formatting concern. */\nfunction pickTag(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n message = 'Select tag'\n): Promise<string> {\n return tagOps.listTags(arbi).then((data) =>\n pickFromList(\n data,\n (t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n description: t.external_id as string,\n }),\n {\n message,\n emptyMessage: 'No tags found.',\n nonTtyHint: 'Pass <tag-id> (or unique tag name) and <doc-ids...> directly.',\n }\n )\n )\n}\n\n/**\n * Multi-select doc picker. Stays separate from `pickFromList` (which is\n * single-select) because doctag operations inherently target a set.\n */\nasync function pickDocs(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n message = 'Select documents'\n): Promise<string[]> {\n const data = await documents.listDocuments(arbi)\n if (data.length === 0) {\n process.stderr.write('No documents found.\\n')\n process.exit(0)\n }\n requireInteractive('Pass <doc-ids...> directly: arbi docs --ids to list them.')\n return promptCheckbox(\n message,\n data.map((d) => ({\n name: `${d.file_name ?? 'Unnamed'} (${d.status})`,\n value: d.external_id as string,\n }))\n )\n}\n\nexport function registerDoctagsCommand(program: Command): void {\n const doctagsCmd = program\n .command('doctags')\n .description('Doctags (tag↔doc links): create, delete, generate')\n\n doctagsCmd\n .command('create [tag] [doc-ids...]')\n .description('Assign a tag to documents (tag accepts ID or unique name; pickers if no args)')\n .option('-n, --note <text>', 'Note for the doctag')\n .action((tagRef?: string, docIds?: string[], opts?: { note?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let tagId = tagRef ? await resolveTagRef(arbi, tagRef) : undefined\n if (!tagId) tagId = await pickTag(arbi, 'Select tag to assign')\n if (!docIds || docIds.length === 0) docIds = await pickDocs(arbi, 'Select documents to tag')\n if (docIds.length === 0) return\n const data = await doctagOps.assignDocTags(arbi, tagId, docIds, opts?.note)\n success(`Created ${data.length} doctag(s) for tag ${tagId}.`)\n })()\n )\n\n doctagsCmd\n .command('delete [tag] [doc-ids...]')\n .description('Remove a tag from documents (tag accepts ID or unique name; pickers if no args)')\n .option('--dry-run', 'Preview which doctag links would be removed (no SDK call)')\n .action(\n (tagRef: string | undefined, docIds: string[] | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n let tagId = tagRef ? await resolveTagRef(arbi, tagRef) : undefined\n if (!tagId) tagId = await pickTag(arbi, 'Select tag to remove')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, 'Select documents to untag')\n if (docIds.length === 0) return\n if (opts?.dryRun) {\n dryRun(`remove tag ${tagId} from ${docIds.length} document(s)`, docIds)\n return\n }\n await doctagOps.removeDocTags(arbi, tagId, docIds)\n success(`Removed tag ${tagId} from ${docIds.length} document(s).`)\n })()\n )\n\n doctagsCmd\n .command('generate')\n .description('AI-generate doctags (interactive pickers if no flags)')\n .option('--tags <ids>', 'Comma-separated tag IDs')\n .option('--docs <ids>', 'Comma-separated document IDs')\n .action((opts: { tags?: string; docs?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n\n let tagIds: string[]\n if (opts.tags) {\n tagIds = opts.tags.split(',').map((s) => s.trim())\n } else {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n console.log('No tags found.')\n return\n }\n tagIds = await promptCheckbox(\n 'Select tags to generate',\n data.map((t) => ({\n name: `${t.name} (${(t.tag_type as { type?: string })?.type ?? ''})`,\n value: t.external_id as string,\n }))\n )\n if (tagIds.length === 0) return\n }\n\n let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs.split(',').map((s) => s.trim())\n } else {\n docIds = await pickDocs(arbi, 'Select documents for AI tagging')\n if (docIds.length === 0) return\n }\n\n const data = await doctagOps.generateDocTags(arbi, tagIds, docIds)\n console.log(\n `Generating doctags for ${data.doc_ext_ids.length} doc(s) with ${data.tag_ext_ids.length} tag(s).`\n )\n })()\n )\n}\n","/**\n * arbi convo list — list conversations\n * arbi convo switch <id> — resume an older conversation\n * arbi convo threads [id] — show threads (picker if no ID)\n * arbi convo delete [id] — delete (picker if no ID)\n * arbi convo share [id] — share (picker if no ID)\n * arbi convo title [id] [title] — update title (picker + prompt)\n * arbi convo message <message-id> — get message details\n * arbi convo trace <message-id> — full decrypted execution trace\n * arbi convo delete-message <msg-id> — delete one message + descendants\n *\n * Note the command name is `convo`, not `conversations` — nobody types\n * the long form. There is no alias.\n */\n\nimport { Command } from 'commander'\nimport { conversations as convOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n resolveWorkspace,\n printTable,\n printJson,\n dryRun,\n} from '../helpers.js'\nimport { updateChatSession } from '../config.js'\nimport { promptSelect, promptInput } from '../prompts.js'\nimport { success } from '../output.js'\n\n/** Fetch workspace conversations and return as picker choices */\nasync function pickConversation(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select conversation'\n) {\n const data = await convOps.listConversations(arbi)\n if (data.length === 0) {\n process.stderr.write('No conversations found.\\n')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((c) => ({\n name: `${(c.title as string) ?? 'Untitled'} (${c.message_count} msgs)`,\n value: c.external_id as string,\n description: c.external_id as string,\n }))\n )\n}\n\nexport function registerConversationsCommand(program: Command): void {\n const conv = program\n .command('convo')\n .description('Conversations: list, switch, threads, delete, share, title, message, trace')\n\n conv\n .command('list')\n .description('List conversations in the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .option('--json', 'Output as JSON')\n .action((opts: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await convOps.listConversations(arbi)\n\n if (opts.json) {\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No conversations found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 36, value: (r) => (r.title as string) ?? 'Untitled' },\n { header: 'MSGS', width: 6, value: (r) => String(r.message_count) },\n { header: 'SHARED', width: 8, value: (r) => (r.is_shared ? 'yes' : 'no') },\n ],\n data\n )\n })()\n )\n\n conv\n .command('threads [conversation-id]')\n .description('Show threads (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n const data = await convOps.getConversationThreads(arbi, conversationId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n // ── switch ───────────────────────────────────────────────────────────────\n // CLI equivalent of clicking a different conversation in the frontend\n // sidebar. Looks up the latest message in the target conversation and\n // points the shell's chat-session pointer at it, so the next `arbi ask`\n // continues the chosen conversation. Without this an agent could only\n // continue the most recent conversation (auto-tracked) or pass --continue\n // with a raw message-id it had to find some other way.\n conv\n .command('switch <conversation-id>')\n .description(\n 'Continue a previous conversation — next `arbi ask` resumes from its latest message'\n )\n .action((conversationId: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n const data = (await convOps.getConversationThreads(arbi, conversationId)) as {\n conversation_ext_id?: string\n threads?: Array<{\n leaf_message_ext_id?: string\n history?: Array<Record<string, unknown>>\n }>\n }\n // Threads shape from the backend:\n // { conversation_ext_id, threads: [{leaf_message_ext_id, history: [msg, ...]}, ...] }\n // The \"latest\" point to resume is the longest thread's leaf_message_ext_id\n // (or, if missing, the last assistant message in its history). We don't\n // need to walk all threads — the backend already orders them so the\n // primary thread is index 0.\n const threads = data.threads ?? []\n if (threads.length === 0) {\n process.stderr.write(`Conversation ${conversationId} has no threads.\\n`)\n process.exit(3)\n }\n const primary = threads[0]\n const leafId = primary.leaf_message_ext_id\n const lastAssistant = [...(primary.history ?? [])]\n .reverse()\n .find((m) => (m.role as string) === 'assistant') as Record<string, unknown> | undefined\n const resumeId = leafId ?? (lastAssistant?.external_id as string | undefined)\n if (!resumeId) {\n process.stderr.write(\n `No resumable message in conversation ${conversationId}. ` +\n `(Empty thread or never reached an assistant turn.)\\n`\n )\n process.exit(3)\n }\n updateChatSession({\n conversationExtId: conversationId,\n lastMessageExtId: resumeId,\n workspaceId,\n })\n success(`Switched to conversation ${conversationId} (resume from ${resumeId}).`)\n })()\n )\n\n conv\n .command('delete [conversation-id]')\n .description('Delete a conversation (interactive picker if no ID given)')\n .option('--dry-run', 'Preview which conversation would be deleted (no SDK call)')\n .action((conversationId: string | undefined, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(\n arbi,\n workspaceId,\n 'Select conversation to delete'\n )\n if (opts?.dryRun) {\n dryRun('delete conversation', conversationId)\n return\n }\n const data = await convOps.deleteConversation(arbi, conversationId)\n success(data?.detail ?? `Deleted conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('share [conversation-id]')\n .description('Share a conversation (interactive picker if no ID given)')\n .action((conversationId?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId)\n conversationId = await pickConversation(arbi, workspaceId, 'Select conversation to share')\n const data = await convOps.shareConversation(arbi, conversationId)\n success(data?.detail ?? `Shared conversation ${conversationId}`)\n })()\n )\n\n conv\n .command('title [conversation-id] [title]')\n .description('Update conversation title (interactive if no args)')\n .action((conversationId?: string, title?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!conversationId) conversationId = await pickConversation(arbi, workspaceId)\n if (!title) title = await promptInput('New title')\n const data = await convOps.updateConversationTitle(arbi, conversationId, title)\n success(data?.detail ?? `Updated title to: ${title}`)\n })()\n )\n\n conv\n .command('message <message-id>')\n .description('Get message details (full decrypted JSON, useful for debugging)')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n printJson(data)\n })()\n )\n\n // ── trace ────────────────────────────────────────────────────────────────\n // Decrypted execution trace for a single agent response — which tools were\n // called, which docs were cited, intermediate reasoning. Same endpoint as\n // `conversations message` underneath, but presented as the post-mortem\n // primitive an agent reaches for after a step fails. JSON-only by design:\n // human rendering would lose half the structure.\n conv\n .command('trace <message-id>')\n .description('Decrypted execution trace for one agent response (alias for `message`)')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n printJson(data)\n })()\n )\n\n conv\n .command('delete-message <message-id>')\n .description('Delete a message and its descendants')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await convOps.deleteMessage(arbi, messageId)\n success(data?.detail ?? `Deleted message ${messageId}`)\n })()\n )\n\n // Default action: list. Forward raw argv tail rather than pre-declaring\n // --json/-w on the parent — see tags.ts for the commander-binding bug.\n conv\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = conv.args ?? []\n await conv.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi settings — show current user settings\n * arbi settings set — update a setting\n */\n\nimport { Command } from 'commander'\nimport { settings as settingsOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, parseJsonArg, printJson } from '../helpers.js'\nimport { success } from '../output.js'\n\nexport function registerSettingsCommand(program: Command): void {\n const settings = program.command('settings').description('User settings: get, set')\n\n settings\n .command('get')\n .description('Show current user settings (always JSON; --json accepted for consistency)')\n .option('--json', 'Output as JSON (default — always JSON)')\n .action(() =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await settingsOps.getSettings(arbi)\n printJson(data)\n })()\n )\n\n settings\n .command('set <json>')\n .description('Update user settings (pass JSON object)')\n .action((json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi settings set \\'{\"hide_online_status\": true}\\'')\n const { arbi } = await resolveAuth()\n await settingsOps.updateSettings(arbi, body)\n success('Settings updated.')\n })()\n )\n\n // Default action: get\n settings.action(async () => {\n await settings.commands.find((c) => c.name() === 'get')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi agentconfig list — list saved config versions\n * arbi agentconfig get [id] — show config (picker if no ID, 'default' for system)\n * arbi agentconfig save [json] — save new config (interactive if no JSON)\n * arbi agentconfig delete [id] — delete config (picker if no ID)\n * arbi agentconfig schema — dump JSON schema for all config models\n */\n\nimport { Command } from 'commander'\nimport { agentconfig as acOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, printTable, parseJsonArg } from '../helpers.js'\nimport { promptSelect, promptInput, promptConfirm } from '../prompts.js'\nimport { success, ref } from '../output.js'\n\n/** Config sections that have a MODEL_NAME field — the most common thing to change */\nconst MODEL_SECTIONS = [\n 'Agents',\n 'QueryLLM',\n 'EvaluatorLLM',\n 'TitleLLM',\n 'SummariseLLM',\n 'DoctagLLM',\n 'ArtifactLLM',\n] as const\n\n/** Pick a config version from saved versions */\nasync function pickConfig(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi'],\n message = 'Select configuration'\n) {\n const data = await acOps.listConfigs(arbi)\n if (data.versions.length === 0) {\n console.log('No saved configurations found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.versions.map((v) => ({\n name: `${v.title || '(untitled)'} — ${new Date(v.created_at).toLocaleString()}`,\n value: v.external_id,\n description: v.external_id,\n }))\n )\n}\n\n/** Fetch available models for interactive picker */\nasync function fetchModels(arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']) {\n const data = await acOps.getModels(arbi)\n return data.models.map((m) => ({\n name: `${m.model_name} (${m.provider ?? m.api_type})`,\n value: m.model_name,\n description: m.api_type,\n }))\n}\n\n/** Interactive config builder — walks through most common settings */\nasync function buildConfigInteractively(\n arbi: Awaited<ReturnType<typeof resolveAuth>>['arbi']\n): Promise<Record<string, unknown>> {\n const body: Record<string, unknown> = {}\n\n // Title\n const title = await promptInput('Config title (optional)', false)\n if (title) body.title = title\n\n // Pick section to configure\n const section = await promptSelect('Section to configure', [\n { name: 'Agents — main agent model, persona, tools', value: 'Agents' },\n { name: 'QueryLLM — answer review model', value: 'QueryLLM' },\n { name: 'EvaluatorLLM — chunk evaluation', value: 'EvaluatorLLM' },\n { name: 'TitleLLM — title generation', value: 'TitleLLM' },\n { name: 'SummariseLLM — conversation summariser', value: 'SummariseLLM' },\n { name: 'DoctagLLM — AI document tagging', value: 'DoctagLLM' },\n { name: 'ArtifactLLM — skill/memory synthesis', value: 'ArtifactLLM' },\n { name: 'Retriever — search parameters', value: 'Retriever' },\n { name: 'Reranker — reranking model', value: 'Reranker' },\n { name: 'ModelCitation — citation thresholds', value: 'ModelCitation' },\n { name: 'Chunker — chunk size', value: 'Chunker' },\n { name: 'Embedder — embedding model', value: 'Embedder' },\n { name: 'KeywordEmbedder — BM25 parameters', value: 'KeywordEmbedder' },\n ])\n\n const sectionConfig: Record<string, unknown> = {}\n\n // Sections with MODEL_NAME get a model picker\n if ((MODEL_SECTIONS as readonly string[]).includes(section)) {\n const models = await fetchModels(arbi)\n if (models.length > 0) {\n const changeModel = await promptConfirm('Change model?', true)\n if (changeModel) {\n const modelKey = section === 'Agents' ? 'AGENT_MODEL_NAME' : 'MODEL_NAME'\n sectionConfig[modelKey] = await promptSelect('Model', models)\n\n if (section === 'Agents') {\n sectionConfig.AGENT_API_TYPE = 'remote'\n } else {\n sectionConfig.API_TYPE = 'remote'\n }\n }\n }\n }\n\n // Section-specific fields\n if (section === 'Agents') {\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'LLM_AGENT_TEMPERATURE' },\n { name: 'Max tokens', value: 'AGENT_MAX_TOKENS' },\n { name: 'Max iterations', value: 'AGENT_MAX_ITERATIONS' },\n { name: 'Persona', value: 'PERSONA' },\n { name: 'Web search enabled', value: 'WEB_SEARCH' },\n { name: 'Human in the loop', value: 'HUMAN_IN_THE_LOOP' },\n ])\n if (field !== 'done') {\n if (field === 'WEB_SEARCH' || field === 'HUMAN_IN_THE_LOOP') {\n sectionConfig[field] = await promptConfirm(field + '?')\n } else if (field === 'LLM_AGENT_TEMPERATURE') {\n sectionConfig[field] = parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n } else if (field === 'AGENT_MAX_TOKENS' || field === 'AGENT_MAX_ITERATIONS') {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n } else {\n sectionConfig[field] = await promptInput(field)\n }\n }\n } else if (section === 'Retriever') {\n const field = await promptSelect('Field to change', [\n { name: 'Search mode', value: 'SEARCH_MODE' },\n { name: 'Min similarity score', value: 'MIN_RETRIEVAL_SIM_SCORE' },\n { name: 'Max chunks to retrieve', value: 'MAX_TOTAL_CHUNKS_TO_RETRIEVE' },\n { name: 'Max distinct documents', value: 'MAX_DISTINCT_DOCUMENTS' },\n { name: 'Hybrid dense weight', value: 'HYBRID_DENSE_WEIGHT' },\n { name: 'Hybrid sparse weight', value: 'HYBRID_SPARSE_WEIGHT' },\n ])\n if (field === 'SEARCH_MODE') {\n sectionConfig[field] = await promptSelect('Search mode', [\n { name: 'Semantic (dense)', value: 'semantic' },\n { name: 'Keyword (sparse/BM25)', value: 'keyword' },\n { name: 'Hybrid (dense + sparse)', value: 'hybrid' },\n ])\n } else {\n sectionConfig[field] = parseFloat(await promptInput(field))\n }\n } else if (section === 'ModelCitation') {\n const field = await promptSelect('Field to change', [\n { name: 'Similarity threshold', value: 'SIM_THREASHOLD' },\n { name: 'Min char size', value: 'MIN_CHAR_SIZE_TO_ANSWER' },\n { name: 'Max citations', value: 'MAX_NUMB_CITATIONS' },\n ])\n sectionConfig[field] = parseFloat(await promptInput(field))\n } else if (section === 'Chunker') {\n sectionConfig.MAX_CHUNK_TOKENS = parseInt(await promptInput('Max chunk tokens'), 10)\n } else if (section === 'Reranker') {\n const field = await promptSelect('Field to change', [\n { name: 'Max chunks after rerank', value: 'MAX_NUMB_OF_CHUNKS' },\n { name: 'Model', value: 'MODEL_NAME' },\n ])\n if (field === 'MODEL_NAME') {\n const models = await fetchModels(arbi)\n sectionConfig.MODEL_NAME = await promptSelect('Model', models)\n sectionConfig.API_TYPE = 'remote'\n } else {\n sectionConfig[field] = parseInt(await promptInput(field), 10)\n }\n } else if (\n section === 'QueryLLM' ||\n section === 'EvaluatorLLM' ||\n section === 'TitleLLM' ||\n section === 'SummariseLLM' ||\n section === 'DoctagLLM' ||\n section === 'ArtifactLLM'\n ) {\n // LLM sections share temperature/max_tokens\n const field = await promptSelect('What else to change?', [\n { name: 'Nothing else', value: 'done' },\n { name: 'Temperature', value: 'TEMPERATURE' },\n { name: 'Max tokens', value: 'MAX_TOKENS' },\n ])\n if (field !== 'done') {\n sectionConfig[field] =\n field === 'TEMPERATURE'\n ? parseFloat(await promptInput('Temperature (0.0 - 2.0)'))\n : parseInt(await promptInput('Max tokens'), 10)\n }\n }\n\n if (Object.keys(sectionConfig).length > 0) {\n body[section] = sectionConfig\n }\n\n return body\n}\n\nexport function registerAgentconfigCommand(program: Command): void {\n const ac = program\n .command('agentconfig')\n .description('Agent configurations: list, get, save, delete, schema')\n\n ac.command('list')\n .description('List saved configuration versions')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.listConfigs(arbi)\n\n if (data.versions.length === 0) {\n console.log('No saved configurations.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'TITLE', width: 30, value: (r) => (r.title as string) ?? '(untitled)' },\n {\n header: 'CREATED',\n width: 22,\n value: (r) => new Date(r.created_at as string).toLocaleString(),\n },\n ],\n data.versions\n )\n })\n )\n\n ac.command('get [config-id]')\n .description('Show configuration details (picker if no ID; use \"default\" for system defaults)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) {\n configId = await promptSelect('Which configuration?', [\n { name: 'System defaults', value: 'default', description: 'Built-in defaults' },\n { name: 'Pick from saved versions...', value: '__pick__' },\n ])\n if (configId === '__pick__') {\n configId = await pickConfig(arbi)\n }\n }\n const data = await acOps.getConfig(arbi, configId)\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n\n ac.command('save [json]')\n .description('Save a new configuration (interactive if no JSON given)')\n .option('-t, --title <title>', 'Config title')\n .option('--tag <tag-ext-id>', 'Associate with an assistant tag')\n .option('--message <msg-ext-id>', 'Associate with a parent message')\n .action((json?: string, opts?: { title?: string; tag?: string; message?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n let body: Record<string, unknown>\n if (json) {\n body = parseJsonArg(\n json,\n 'arbi agentconfig save \\'{\"Agents\": {\"AGENT_MODEL_NAME\": \"GPT4o@OpenAI\"}, \"title\": \"GPT-4o config\"}\\''\n )\n if (opts?.title) body.title = opts.title\n } else {\n body = await buildConfigInteractively(arbi)\n }\n\n if (opts?.tag) body.tag_ext_id = opts.tag\n if (opts?.message) body.parent_message_ext_id = opts.message\n\n const data = await acOps.saveConfig(arbi, body as Parameters<typeof acOps.saveConfig>[1])\n success(`Saved: ${data.title || '(untitled)'} (${ref(data.external_id)})`)\n })()\n )\n\n ac.command('delete [config-id]')\n .description('Delete a configuration (picker if no ID)')\n .action((configId?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n if (!configId) configId = await pickConfig(arbi, 'Select configuration to delete')\n const data = await acOps.deleteConfig(arbi, configId)\n success(data.detail)\n })()\n )\n\n ac.command('schema')\n .description('Show JSON schema for all configuration models')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await acOps.getSchema(arbi)\n console.log(JSON.stringify(data, null, 2))\n })\n )\n\n // Default action: list\n ac.action(async () => {\n await ac.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi health — show server health\n * arbi models — list available models\n */\n\nimport { Command } from 'commander'\nimport { health as healthOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, printTable } from '../helpers.js'\nimport { label, bold, status } from '../output.js'\n\nexport function registerHealthCommand(program: Command): void {\n program\n .command('health')\n .description('Show server health status')\n .option('--json', 'Output raw JSON for scripting')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealth(arbi)\n\n if (opts.json) {\n console.log(JSON.stringify(data, null, 2))\n // Non-zero exit when server is not healthy, so scripts can gate on it.\n if (data.status && data.status.toLowerCase() !== 'healthy') {\n process.exit(2)\n }\n return\n }\n\n label('Status:', status(data.status))\n if (data.backend_git_hash) label('Backend:', data.backend_git_hash)\n if (data.frontend_docker_version) label('Frontend:', data.frontend_docker_version)\n\n if (data.services.length > 0) {\n bold('\\nServices:')\n for (const s of data.services) {\n console.log(` ${s.name}: ${status(s.status)}${s.detail ? ` — ${s.detail}` : ''}`)\n }\n }\n\n if (data.models_health) {\n bold(`\\nModels (${data.models_health.application}):`)\n for (const m of data.models_health.models) {\n console.log(` ${m.model}: ${status(m.status)}${m.detail ? ` — ${m.detail}` : ''}`)\n }\n }\n })()\n )\n\n program\n .command('models')\n .description('List available AI models')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealthModels(arbi)\n\n if (opts.json) {\n console.log(JSON.stringify(data.models, null, 2))\n return\n }\n\n if (data.models.length === 0) {\n console.log('No models available.')\n return\n }\n\n printTable(\n [\n { header: 'NAME', width: 30, value: (r) => r.model_name as string },\n { header: 'PROVIDER', width: 20, value: (r) => (r.provider as string) ?? '' },\n { header: 'API_TYPE', width: 16, value: (r) => r.api_type as string },\n ],\n data.models\n )\n })()\n )\n}\n","/**\n * arbi tui [--workspace <id>]\n *\n * Launches the interactive terminal UI (@arbidocs/tui).\n * The TUI package is a direct dependency, so it's always available.\n */\n\nimport { Command } from 'commander'\nimport { spawn } from 'node:child_process'\nimport { createRequire } from 'node:module'\n\nexport function registerTuiCommand(program: Command): void {\n program\n .command('tui')\n .description('Launch interactive terminal UI')\n .option('-w, --workspace <id>', 'Workspace ID to use')\n .allowUnknownOption(true)\n .action((opts: { workspace?: string }, cmd: Command) => {\n const require = createRequire(import.meta.url)\n const entryPoint = require.resolve('@arbidocs/tui')\n\n const args: string[] = []\n if (opts.workspace) {\n args.push('-w', opts.workspace)\n }\n args.push(...cmd.args)\n\n const child = spawn(process.execPath, [entryPoint, ...args], {\n stdio: 'inherit',\n env: process.env,\n })\n\n child.on('exit', (code) => process.exit(code ?? 0))\n })\n}\n","/**\n * arbi update — update to latest version (shows changelog)\n * arbi update auto — enable auto-update on login\n */\n\nimport { Command } from 'commander'\nimport { execSync } from 'node:child_process'\nimport { updateConfig } from '../config.js'\nimport { getLatestVersion, getCurrentVersion, showChangelog } from '../version-check.js'\nimport { success, error, dim, label } from '../output.js'\nimport { printJson } from '../helpers.js'\n\nexport function registerUpdateCommand(program: Command): void {\n const update = program\n .command('update')\n .description('Update ARBI CLI to the latest version (use --check to only probe)')\n .option('--check', 'Only report whether an update is available — never install anything')\n .option('--json', 'Output {current, latest, update_available} as JSON (implies --check)')\n .action((opts: { check?: boolean; json?: boolean }) => {\n const current = getCurrentVersion()\n // --json implies --check: an agent calling `arbi update --json` is\n // looking for a status probe, not an in-place reinstall.\n const checkOnly = Boolean(opts.check || opts.json)\n\n if (!checkOnly) {\n label('Current version:', current)\n console.log('Checking for updates...\\n')\n }\n\n try {\n const latest =\n getLatestVersion(true) ||\n execSync('npm view @arbidocs/cli version', { encoding: 'utf8' }).trim()\n\n if (checkOnly) {\n // Non-mutating probe. Exit 0 if up to date, 1 if an update is\n // available — same convention as `git diff --exit-code` so a CI\n // step can branch with `arbi update --check || arbi update`.\n const updateAvailable = latest !== current\n if (opts.json) {\n printJson({ current, latest, update_available: updateAvailable })\n } else if (updateAvailable) {\n label('Current version:', current)\n label('Latest version:', latest)\n console.log('Update available. Run `arbi update` to install.')\n } else {\n label('Current version:', current)\n success('Already up to date.')\n }\n process.exit(updateAvailable ? 1 : 0)\n }\n\n if (latest === current) {\n success('Already up to date.')\n return\n }\n\n success(`New version available: ${latest}`)\n\n console.log('\\nUpdating...\\n')\n execSync('npm install -g @arbidocs/cli@latest', { stdio: 'inherit' })\n\n // Show what changed (reads from the newly installed package)\n showChangelog(current, latest)\n\n success(`\\nUpdated to ${latest}.`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n if (opts.json) {\n printJson({ current, latest: null, update_available: null, error: msg })\n process.exit(1)\n }\n error(`Update failed: ${msg}`)\n error('\\nYou can update manually with:')\n dim(' npm install -g @arbidocs/cli@latest')\n process.exit(1)\n }\n })\n\n update\n .command('auto')\n .description('Enable automatic updates on login')\n .action(() => {\n updateConfig({ autoUpdate: true })\n success('Auto-update enabled. ARBI CLI will update automatically on login.')\n })\n}\n","/**\n * arbi quickstart — interactive wizard for new users\n *\n * Walks a real user from zero to a working CLI setup:\n * 1. Detect/confirm server URL\n * 2. Register or login\n * 3. Select or create a workspace\n * 4. Ready to go\n */\n\nimport { Command } from 'commander'\nimport { createArbiClient } from '@arbidocs/client'\nimport {\n getErrorMessage,\n performPasswordLogin,\n formatWorkspaceChoices,\n generateNewWorkspaceKey,\n workspaces as workspaceOps,\n projects as projectOps,\n} from '@arbidocs/sdk'\nimport { success, error, ref, dim } from '../output.js'\nimport { store, updateConfig } from '../config.js'\nimport { promptInput, promptPassword, promptSelect, promptConfirm } from '../prompts.js'\n\n/**\n * @inquirer/prompts throws an `ExitPromptError` when the user hits Ctrl+C.\n * We match by name to avoid importing the class (extra dep).\n */\nfunction isExitPromptError(err: unknown): boolean {\n return err instanceof Error && err.name === 'ExitPromptError'\n}\n\nexport function registerQuickstartCommand(program: Command): void {\n program\n .command('quickstart')\n .description('Interactive setup wizard — configure, register/login, and select a workspace')\n .argument('[url]', 'Server URL (auto-detected if omitted)')\n .action(async (url: string | undefined) => {\n try {\n await runQuickstart(url)\n } catch (err) {\n if (isExitPromptError(err)) {\n // User hit Ctrl+C — exit cleanly without dumping a Node stack trace.\n console.log('\\nSetup cancelled.')\n process.exit(130)\n }\n error(`Quickstart failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n })\n}\n\nasync function runQuickstart(url: string | undefined): Promise<void> {\n console.log('\\nWelcome to ARBI CLI setup!\\n')\n\n // 1. Resolve server URL\n const { config, source } = store.resolveConfigWithFallbacks()\n if (url) {\n const domain = new URL(url).hostname\n config.baseUrl = url.replace(/\\/$/, '')\n config.deploymentDomain = domain\n store.saveConfig(config)\n }\n\n const useDetected = await promptConfirm(`Use server ${config.baseUrl}?`, true)\n if (!useDetected) {\n const customUrl = await promptInput('Server URL')\n try {\n const domain = new URL(customUrl).hostname\n config.baseUrl = customUrl.replace(/\\/$/, '')\n config.deploymentDomain = domain\n store.saveConfig(config)\n } catch {\n error('Invalid URL')\n process.exit(1)\n }\n } else if (source !== 'config') {\n store.saveConfig(config)\n }\n dim(`Server: ${config.baseUrl}`)\n\n // 2. Register or login\n const action = await promptSelect('Do you have an account?', [\n { name: 'Yes, log me in', value: 'login' },\n { name: 'No, register a new account', value: 'register' },\n ])\n\n const arbiClient = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbiClient.crypto.initSodium()\n\n let email: string\n let password: string\n\n if (action === 'register') {\n email = await promptInput('Email')\n password = await promptPassword('Password')\n const confirmPw = await promptPassword('Confirm password')\n if (password !== confirmPw) {\n error('Passwords do not match.')\n process.exit(1)\n }\n\n // Verification\n const codeMethod = await promptSelect('Verification method', [\n { name: 'I have an invitation code', value: 'code' },\n { name: 'Send me a verification email', value: 'email' },\n ])\n\n let verificationCode: string\n if (codeMethod === 'code') {\n verificationCode = await promptInput('Invitation code')\n } else {\n console.log('Sending verification email...')\n const verifyResponse = await arbiClient.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n error(`Failed to send verification email: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n success('Verification email sent. Check your inbox.')\n verificationCode = await promptInput('Verification code')\n }\n\n try {\n const firstName = (await promptInput('First name', false)) || 'User'\n const lastName = (await promptInput('Last name', false)) || ''\n await arbiClient.auth.register({\n email,\n password,\n verificationCode,\n firstName,\n lastName,\n })\n success(`Registered as ${email}`)\n } catch (err) {\n if (isExitPromptError(err)) throw err\n error(`Registration failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n } else {\n email = await promptInput('Email')\n password = await promptPassword('Password')\n }\n\n // 3. Login\n try {\n const { arbi, loginResult } = await performPasswordLogin(config, email, password, store)\n success(`Logged in as ${email}`)\n\n // 4. Select or create workspace\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.user.email === email))\n\n // Get user's personal project for workspace creation\n const userProjects = await projectOps.listProjects(arbi)\n const defaultProjectExtId = userProjects[0]?.external_id\n if (!defaultProjectExtId) throw new Error('No projects found for user')\n\n let workspaceId: string\n let workspaceName: string\n\n if (memberWorkspaces.length === 0) {\n console.log('Creating your first workspace...')\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(\n arbi,\n 'My Workspace',\n encryptedKey,\n defaultProjectExtId\n )\n workspaceId = ws.external_id\n workspaceName = ws.name\n } else {\n const choices = [\n ...formatWorkspaceChoices(memberWorkspaces),\n { name: '+ Create new workspace', value: '__new__', description: '' },\n ]\n const selected = await promptSelect('Select workspace', choices)\n\n if (selected === '__new__') {\n const name = (await promptInput('Workspace name', false)) || 'My Workspace'\n const encKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(arbi, name, encKey, defaultProjectExtId)\n workspaceId = ws.external_id\n workspaceName = ws.name\n } else {\n workspaceId = selected\n workspaceName = memberWorkspaces.find((w) => w.external_id === selected)?.name || ''\n }\n }\n\n updateConfig({ selectedWorkspaceId: workspaceId })\n\n // 5. Summary\n console.log('')\n success('Setup complete!')\n console.log('')\n console.log(` Server: ${ref(config.baseUrl)}`)\n console.log(` Account: ${ref(email)}`)\n console.log(` Workspace: ${workspaceName} (${ref(workspaceId)})`)\n console.log('')\n dim('Try: arbi ask \"hello\"')\n } catch (err) {\n if (isExitPromptError(err)) throw err\n error(`Login failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n}\n","/**\n * arbi agent-create — create a bot/test account non-interactively\n *\n * Requires SUPPORT_API_KEY for CI verification flow.\n * Generates agent-{timestamp}@{deploymentDomain} accounts.\n *\n * Usage:\n * SUPPORT_API_KEY=xxx arbi agent-create\n * SUPPORT_API_KEY=xxx arbi agent-create https://my-server.com\n */\n\nimport { Command } from 'commander'\nimport { createArbiClient } from '@arbidocs/client'\nimport {\n getErrorMessage,\n performPasswordLogin,\n generateNewWorkspaceKey,\n workspaces as workspaceOps,\n projects as projectOps,\n} from '@arbidocs/sdk'\nimport { success, error, ref, dim } from '../output.js'\nimport { store, updateConfig } from '../config.js'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\nconst DEFAULT_PASSWORD = 'agent-dev-1234'\n\nasync function getVerificationCode(email: string, apiKey: string): Promise<string> {\n const params = new URLSearchParams({ email })\n const res = await fetch(`${CENTRAL_API_URL}/license-management/verify-ci?${params.toString()}`, {\n method: 'GET',\n headers: { 'x-api-key': apiKey },\n })\n\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n throw new Error(`Failed to get verification code: ${res.status} ${body}`)\n }\n\n const data = (await res.json()) as { verification_words?: string[]; verification_code?: string }\n const words = data?.verification_words ?? data?.verification_code ?? null\n if (!words) throw new Error('No verification code in response')\n\n return Array.isArray(words) ? words.join(' ') : String(words)\n}\n\nexport function registerAgentCreateCommand(program: Command): void {\n program\n .command('agent-create')\n .description(\n 'Create a standalone bot/test ACCOUNT via SUPPORT_API_KEY (different from ' +\n '`arbi agent create`, which makes a child agent under the current user)'\n )\n .argument('[url]', 'Server URL (auto-detected if omitted)')\n .option('-p, --password <password>', 'Account password', DEFAULT_PASSWORD)\n .option('--workspace-name <name>', 'Workspace name', 'Agent Workspace')\n .option('--email <email>', 'Custom email (default: agent-{timestamp}@{domain})')\n .action(\n async (\n url: string | undefined,\n opts: { password: string; workspaceName: string; email?: string }\n ) => {\n // 1. Resolve server URL\n const { config, source } = store.resolveConfigWithFallbacks()\n if (url) {\n const domain = new URL(url).hostname\n config.baseUrl = url.replace(/\\/$/, '')\n config.deploymentDomain = domain\n store.saveConfig(config)\n dim(`Server: ${config.baseUrl}`)\n } else {\n dim(`Server: ${config.baseUrl} (from ${source})`)\n }\n\n // 2. Check for SUPPORT_API_KEY\n const supportApiKey = process.env.SUPPORT_API_KEY\n if (!supportApiKey) {\n error(\n 'SUPPORT_API_KEY is required.\\n' +\n 'Set it with: export SUPPORT_API_KEY=<key>\\n' +\n 'Or source from .env: source .env && arbi agent-create'\n )\n process.exit(1)\n }\n\n // 3. Resolve email\n const timestamp = Date.now()\n let email = opts.email || `agent-${timestamp}@${config.deploymentDomain}`\n if (!email.includes('@')) {\n email = `${email}@${config.deploymentDomain}`\n }\n dim(`Email: ${email}`)\n\n // 4. Register\n const arbiClient = createArbiClient({\n baseUrl: config.baseUrl,\n deploymentDomain: config.deploymentDomain,\n credentials: 'omit',\n })\n await arbiClient.crypto.initSodium()\n\n const verifyResponse = await arbiClient.fetch.POST('/v1/user/verify-email', {\n body: { email },\n })\n if (verifyResponse.error) {\n error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n\n let verificationCode: string\n try {\n verificationCode = await getVerificationCode(email, supportApiKey)\n } catch (err) {\n error(`Failed to get verification code: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n\n try {\n await arbiClient.auth.register({\n email,\n password: opts.password,\n verificationCode,\n firstName: 'Agent',\n lastName: `${timestamp}`,\n })\n } catch (err) {\n error(`Registration failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n\n // 5. Login + create workspace\n try {\n const { arbi, loginResult } = await performPasswordLogin(\n config,\n email,\n opts.password,\n store\n )\n const userProjects = await projectOps.listProjects(arbi)\n const defaultProjectExtId = userProjects[0]?.external_id\n if (!defaultProjectExtId) throw new Error('No projects found for agent')\n const encryptedKey = await generateNewWorkspaceKey(arbi, loginResult.serverSessionKey)\n const ws = await workspaceOps.createWorkspace(\n arbi,\n opts.workspaceName,\n encryptedKey,\n defaultProjectExtId\n )\n updateConfig({ selectedWorkspaceId: ws.external_id })\n\n console.log('')\n success('Agent account created!')\n console.log('')\n console.log(` Email: ${ref(email)}`)\n console.log(` Password: ${ref(opts.password)}`)\n console.log(` Workspace: ${ws.name} (${ref(ws.external_id)})`)\n console.log(` Server: ${ref(config.baseUrl)}`)\n console.log('')\n dim('Ready to use: arbi ask \"hello\"')\n } catch (err) {\n error(`Post-registration setup failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n }\n )\n}\n","/**\n * arbi agent create — create a persistent agent\n * arbi agent list — list persistent agents\n * arbi agent delete <id> — delete an agent\n */\n\nimport { Command } from 'commander'\nimport { agents as agentOps, generateEncryptedWorkspaceKey } from '@arbidocs/sdk'\nimport { initSodium, generateLoginCredentials, bytesToBase64 } from '@arbidocs/client'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n requireInteractive,\n suggestSubcommandAndExit,\n dryRun,\n formatUserName,\n type UserInfo,\n} from '../helpers.js'\nimport { promptSelect, promptConfirm, promptInput, promptCheckbox } from '../prompts.js'\nimport { success, ref, dim } from '../output.js'\nimport { store, resolveConfig } from '../config.js'\n\n/** Generate a random URL-safe password (20 chars). */\nfunction generatePassword(): string {\n const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'\n const bytes = new Uint8Array(20)\n crypto.getRandomValues(bytes)\n return Array.from(bytes, (b) => chars[b % chars.length]).join('')\n}\n\nexport function registerAgentCommand(program: Command): void {\n const agent = program\n .command('agent')\n .description(\n 'Child agents under your user: list, create, delete ' +\n '(for SUPPORT_API_KEY bot accounts, use `arbi agent-create`)'\n )\n\n // ── create ────────────────────────────────────────────────────────────────\n agent\n .command('create')\n .description(\n 'Create a child persistent agent owned by the current user (different from ' +\n '`arbi agent-create`, which is a SUPPORT_API_KEY bot-account flow)'\n )\n .option('--name <name>', 'Agent name (letters, digits, hyphens, underscores)')\n .option('-w, --workspace <ids...>', 'Workspace IDs to share with the agent')\n .option('--role <role>', 'Workspace role: collaborator or guest', 'collaborator')\n .action((opts: { name?: string; workspace?: string[]; role?: string }) =>\n runAction(async () => {\n const { arbi, loginResult } = await resolveAuth()\n const config = resolveConfig()\n const creds = store.requireCredentials()\n\n let name = opts.name\n if (!name) name = await promptInput('Agent name (letters, digits, hyphens, underscores)')\n if (!name?.trim() || !/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(name.trim())) {\n throw new Error('Invalid agent name — use letters, digits, hyphens, underscores')\n }\n\n // Resolve workspaces to share (optional)\n let workspaceIds = opts.workspace ?? []\n if (workspaceIds.length === 0) {\n const { data: allWorkspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n if (allWorkspaces && allWorkspaces.length > 0) {\n workspaceIds = await promptCheckbox(\n 'Share with workspaces (optional — press Enter to skip)',\n allWorkspaces.map((ws) => ({\n name: `${ws.name} (${ws.external_id})`,\n value: ws.external_id,\n }))\n )\n }\n }\n\n // Derive keypair from email + password, same as human registration.\n // Agent email: name.usr-XXXXXXXX@domain — use session state for parent ext_id.\n await initSodium()\n const parentExtId = arbi.session.getState().userExtId ?? ''\n if (!parentExtId) throw new Error('Could not determine current user ext_id')\n\n const agentEmail = `${name.trim()}.${parentExtId}@${config.deploymentDomain}`\n const password = generatePassword()\n\n const { signingPrivateKey } = await generateLoginCredentials(\n { email: agentEmail },\n password,\n config.deploymentDomain\n )\n const signingPubKey = bytesToBase64(signingPrivateKey.slice(32))\n\n const { data: agent, error } = await arbi.fetch.POST('/v1/user/agent', {\n body: {\n name: name.trim(),\n signing_key: signingPubKey,\n recovery_key: bytesToBase64(signingPrivateKey),\n },\n })\n if (!agent) throw new Error(`Failed to create agent: ${JSON.stringify(error)}`)\n\n // Share selected workspaces\n if (workspaceIds.length > 0) {\n const { data: allWs } = await arbi.fetch.GET('/v1/user/workspaces')\n for (const wsId of workspaceIds) {\n const ws = allWs?.find((w) => w.external_id === wsId)\n if (!ws?.wrapped_key) {\n dim(`Skipping ${wsId} — no key found`)\n continue\n }\n const encryptedKey = await generateEncryptedWorkspaceKey(\n arbi,\n ws.wrapped_key,\n loginResult.serverSessionKey,\n creds.signingPrivateKeyBase64\n )\n await arbi.fetch.POST('/v1/workspace/users', {\n body: {\n emails: [agent.email],\n role: (opts.role ?? 'collaborator') as 'collaborator' | 'guest',\n workspace_key: encryptedKey,\n workspace_ext_id: wsId,\n },\n })\n }\n }\n\n console.log('')\n success('Agent created!')\n console.log('')\n console.log(` Email: ${ref(agent.email)}`)\n console.log(` Password: ${ref(password)}`)\n if (workspaceIds.length > 0) console.log(` Workspaces: ${workspaceIds.join(', ')}`)\n console.log('')\n dim(`On the agent machine: arbi login --email ${agent.email} --password <password>`)\n })()\n )\n\n // ── list ─────────────────────────────────────────────────────────────────\n agent\n .command('list')\n .description('List your persistent agents')\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts?: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await agentOps.listAgents(arbi)\n\n if (opts?.json) {\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No agents found.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 20, value: (r) => r.external_id as string },\n {\n header: 'NAME',\n width: 24,\n value: (r) => formatUserName(r as unknown as UserInfo) || (r.email as string) || '',\n },\n { header: 'EMAIL', width: 40, value: (r) => (r.email as string) || '' },\n ],\n data\n )\n })()\n )\n\n // ── delete ───────────────────────────────────────────────────────────────\n agent\n .command('delete [agent-id]')\n .description('Delete a persistent agent (picker if no ID)')\n .option('-y, --yes', 'Skip confirmation (required in non-TTY shells)')\n .option('--dry-run', 'Preview which agent would be deleted (no SDK call)')\n .action((agentId: string | undefined, opts: { yes?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n if (!agentId) {\n const data = await agentOps.listAgents(arbi)\n if (data.length === 0) {\n process.stderr.write('No agents to delete.\\n')\n return\n }\n requireInteractive('Pass <agent-id> directly: arbi agent delete <id>')\n agentId = await promptSelect(\n 'Select agent to delete',\n data.map((a) => ({\n name: `${formatUserName(a as unknown as UserInfo) || a.email} (${a.external_id})`,\n value: a.external_id,\n }))\n )\n }\n\n if (opts?.dryRun) {\n dryRun('delete agent', agentId)\n return\n }\n\n if (!opts?.yes) {\n requireInteractive('Pass -y/--yes to confirm in non-TTY shells.')\n const confirmed = await promptConfirm(`Delete agent ${agentId}?`, false)\n if (!confirmed) {\n console.log('Cancelled.')\n return\n }\n }\n\n await agentOps.deleteAgents(arbi, [agentId])\n success(`Agent ${agentId} deleted.`)\n })()\n )\n\n // Default action: list, OR suggest a subcommand if user typed a typo.\n agent.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'agent',\n maybe,\n agent.commands.map((c) => c.name())\n )\n }\n await agent.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi task list List background tasks\n * arbi task status [task-id] Poll and display current status\n * arbi task result [task-id] Fetch and print completed result\n *\n * Management commands for background tasks submitted via `arbi ask -b`.\n * Task metadata is stored locally in ~/.arbi/tasks.json.\n * Status and results are fetched from the backend via GET /v1/responses/{id}.\n */\n\nimport { Command } from 'commander'\nimport { responses } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n} from '../helpers.js'\nimport { getTasks, getLatestTask, updateTaskStatus } from '../task-store.js'\nimport { chalk } from '../output.js'\n\nfunction formatAge(isoDate: string): string {\n const ms = Date.now() - new Date(isoDate).getTime()\n if (ms < 60_000) return `${Math.round(ms / 1000)}s`\n if (ms < 3_600_000) return `${Math.round(ms / 60_000)}m`\n if (ms < 86_400_000) return `${Math.round(ms / 3_600_000)}h`\n return `${Math.round(ms / 86_400_000)}d`\n}\n\nfunction resolveTaskId(taskIdArg?: string): string {\n if (taskIdArg) return taskIdArg\n const latest = getLatestTask()\n if (!latest) {\n console.error(chalk.red('No tasks found. Submit one with: arbi ask -b \"your question\"'))\n process.exit(1)\n }\n return latest.id\n}\n\n/** Shape we return from `task list --json`. Public contract — keep stable. */\ninterface TaskListEntry {\n id: string\n status: string\n question: string\n age_seconds: number\n submitted_at: string\n}\n\nfunction statusColor(s: string): string {\n if (s === 'completed') return chalk.green(s)\n if (s === 'failed') return chalk.red(s)\n if (s === 'queued' || s === 'in_progress') return chalk.yellow(s)\n return s\n}\n\nexport function registerTaskCommand(program: Command): void {\n const task = program\n .command('task')\n .description('Background tasks (from `arbi ask -b`): list, status, result')\n\n // Default action: list, OR suggest a subcommand if user typed a typo.\n task.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'task',\n maybe,\n task.commands.map((c) => c.name())\n )\n }\n await task.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n\n task\n .command('list')\n .description('List background tasks')\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts?: { json?: boolean }) =>\n runAction(async () => {\n const tasks = getTasks()\n if (opts?.json) {\n const out: TaskListEntry[] = tasks.map((t) => ({\n id: t.id,\n status: t.status,\n question: t.question,\n age_seconds: Math.round((Date.now() - new Date(t.submittedAt).getTime()) / 1000),\n submitted_at: t.submittedAt,\n }))\n printJson(out)\n return\n }\n if (tasks.length === 0) {\n // Empty-state hint stays useful for humans but goes to stderr so\n // `arbi task list | wc -l` returns 0, not 1.\n process.stderr.write('No tasks. Submit one with: arbi ask -b \"your question\"\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 20, value: (r) => r.id as string },\n { header: 'STATUS', width: 14, value: (r) => statusColor(r.status as string) },\n { header: 'QUESTION', width: 42, value: (r) => r.question as string },\n { header: 'AGE', width: 6, value: (r) => formatAge(r.submittedAt as string) },\n ],\n tasks as unknown as Record<string, unknown>[]\n )\n })()\n )\n\n task\n .command('status [task-id]')\n .description('Check current task status (defaults to most recent)')\n .option('-w, --workspace <id>', 'Workspace ID')\n .option('--json', 'Output in JSON format')\n .action((taskId?: string, opts?: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const id = resolveTaskId(taskId)\n const { accessToken, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse({ baseUrl: config.baseUrl, accessToken }, id)\n\n if (result.status === 'completed' || result.status === 'failed') {\n updateTaskStatus(id, result.status)\n }\n\n if (opts?.json) {\n console.log(JSON.stringify(result, null, 2))\n } else {\n console.log(`${chalk.bold('ID:')} ${result.id}`)\n console.log(`${chalk.bold('Status:')} ${statusColor(result.status)}`)\n if (result.model) console.log(`${chalk.bold('Model:')} ${result.model}`)\n if (result.usage) {\n console.log(`${chalk.bold('Tokens:')} ${result.usage.total_tokens.toLocaleString()}`)\n }\n }\n })()\n )\n\n task\n .command('result [task-id]')\n .description('Fetch and print the completed task result')\n .option('-w, --workspace <id>', 'Workspace ID')\n .option('--json', 'Output in JSON format')\n .action((taskId?: string, opts?: { workspace?: string; json?: boolean }) =>\n runAction(async () => {\n const id = resolveTaskId(taskId)\n const { accessToken, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse({ baseUrl: config.baseUrl, accessToken }, id)\n\n if (result.status === 'completed' || result.status === 'failed') {\n updateTaskStatus(id, result.status)\n }\n\n if (opts?.json) {\n console.log(JSON.stringify(result, null, 2))\n return\n }\n\n if (result.status !== 'completed') {\n console.error(\n chalk.yellow(`Task is ${result.status}. Use \\`arbi task status\\` to check progress.`)\n )\n process.exit(1)\n }\n\n const text = responses.extractResponseText(result)\n process.stdout.write(text + '\\n')\n if (result.usage) {\n console.error(chalk.dim(`[${result.usage.total_tokens.toLocaleString()} tokens]`))\n }\n })()\n )\n}\n","/**\n * arbi completion install — append shell completion function to rc file\n * arbi completion uninstall — remove completion block from rc file\n * arbi completion refresh — authenticate + fetch workspaces + update cache\n */\n\nimport { existsSync, readFileSync, writeFileSync, appendFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\nimport { Command } from 'commander'\nimport { workspaces } from '@arbidocs/sdk'\nimport { runAction, resolveAuth } from '../helpers.js'\nimport { success, dim } from '../output.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\nconst MARKER_START = '# arbi-cli completion start'\nconst MARKER_END = '# arbi-cli completion end'\n\nconst BASH_COMPLETION = `\n${MARKER_START}\n_arbi_completions() {\n local cur=\"\\${COMP_WORDS[COMP_CWORD]}\"\n local candidates\n candidates=$(arbi --get-completions \"\\${COMP_LINE}\" 2>/dev/null)\n COMPREPLY=($(compgen -W \"$candidates\" -- \"$cur\"))\n}\ncomplete -o default -F _arbi_completions arbi\n${MARKER_END}`\n\nconst ZSH_COMPLETION = `\n${MARKER_START}\n_arbi_completions() {\n local candidates\n candidates=(\\${(f)\"$(arbi --get-completions \"\\${words[*]}\" 2>/dev/null)\"})\n compadd -a candidates\n}\ncompdef _arbi_completions arbi\n${MARKER_END}`\n\nfunction getShellRcPath(): string {\n const shell = process.env.SHELL || ''\n if (shell.includes('zsh')) return join(homedir(), '.zshrc')\n return join(homedir(), '.bashrc')\n}\n\nfunction isZsh(): boolean {\n return (process.env.SHELL || '').includes('zsh')\n}\n\nfunction isCompletionInstalled(rcPath: string): boolean {\n if (!existsSync(rcPath)) return false\n const content = readFileSync(rcPath, 'utf-8')\n return content.includes(MARKER_START)\n}\n\nfunction removeCompletionBlock(content: string): string {\n const startIdx = content.indexOf(MARKER_START)\n const endIdx = content.indexOf(MARKER_END)\n if (startIdx === -1 || endIdx === -1) return content\n\n // Remove from the newline before the start marker to end of the end marker line\n const before = content.substring(0, startIdx).replace(/\\n+$/, '')\n const after = content.substring(endIdx + MARKER_END.length)\n return before + after\n}\n\nexport function registerCompletionCommand(program: Command): void {\n const completion = program\n .command('completion')\n .description('Shell tab completion: install, uninstall, refresh')\n\n completion\n .command('install')\n .description('Install shell tab completion (auto-detects bash or zsh — no shell arg needed)')\n .action(() => {\n const rcPath = getShellRcPath()\n\n if (isCompletionInstalled(rcPath)) {\n success(`Completion already installed in ${rcPath}`)\n dim(\"If it's not working, run: source \" + rcPath)\n return\n }\n\n const snippet = isZsh() ? ZSH_COMPLETION : BASH_COMPLETION\n appendFileSync(rcPath, snippet + '\\n')\n success(`Installed tab completion in ${rcPath}`)\n dim('')\n dim(`Run: source ${rcPath}`)\n dim('Then try: arbi <TAB>')\n })\n\n completion\n .command('uninstall')\n .description('Remove shell tab completion')\n .action(() => {\n const rcPath = getShellRcPath()\n\n if (!isCompletionInstalled(rcPath)) {\n dim('Completion is not installed.')\n return\n }\n\n const content = readFileSync(rcPath, 'utf-8')\n const cleaned = removeCompletionBlock(content)\n writeFileSync(rcPath, cleaned)\n success(`Removed tab completion from ${rcPath}`)\n dim(`Run: source ${rcPath}`)\n })\n\n completion\n .command('refresh')\n .description('Refresh cached workspace IDs for tab completion')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n updateCompletionCache(data)\n success(`Cached ${data.length} workspace(s) for tab completion.`)\n })\n )\n}\n","/**\n * arbi local ls [path] — list files in a directory\n * arbi local find <pattern> — find files matching a glob pattern\n * arbi local cat <file> — print file contents\n * arbi local tree [path] — show directory tree\n *\n * Local filesystem operations — allows agents to browse files\n * without requiring shell access. Each command supports `--json` so\n * an agent can parse the output cleanly; SKILL.md positions these\n * commands as AI-friendly, so they have to actually be parseable.\n */\n\nimport { Command } from 'commander'\nimport { readdirSync, readFileSync, statSync, globSync } from 'node:fs'\nimport { resolve, join, basename } from 'node:path'\nimport { homedir } from 'node:os'\nimport { printJson } from '../helpers.js'\n\n/** Resolve ~ and relative paths */\nfunction resolvePath(p?: string): string {\n const raw = p ?? '.'\n const expanded = raw.startsWith('~') ? raw.replace('~', homedir()) : raw\n return resolve(expanded)\n}\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes}B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}K`\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)}M`\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}G`\n}\n\n/** Stat shape returned by --json paths. Public contract — keep stable. */\ninterface LocalEntry {\n name: string\n type: 'dir' | 'file' | 'symlink' | 'other'\n size: number | null\n}\n\nfunction entryToRow(dir: string, name: string): LocalEntry {\n try {\n const stat = statSync(join(dir, name))\n if (stat.isDirectory()) return { name, type: 'dir', size: null }\n if (stat.isSymbolicLink()) return { name, type: 'symlink', size: stat.size }\n if (stat.isFile()) return { name, type: 'file', size: stat.size }\n return { name, type: 'other', size: stat.size }\n } catch {\n return { name, type: 'other', size: null }\n }\n}\n\nexport function registerLocalCommand(program: Command): void {\n const local = program.command('local').description('Local filesystem operations')\n\n // ── ls ──────────────────────────────────────────────────────────────────\n local\n .command('ls [path]')\n .description('List files in a directory')\n .option('-l, --long', 'Show file sizes and types (ignored when --json is set)')\n .option('-a, --all', 'Include dotfiles')\n .option('--json', 'Output as JSON array of {name, type, size}')\n .action((path?: string, opts?: { long?: boolean; all?: boolean; json?: boolean }) => {\n const dir = resolvePath(path)\n let entries: string[]\n try {\n entries = readdirSync(dir)\n } catch {\n console.error(`Cannot read directory: ${dir}`)\n process.exit(1)\n }\n\n const sorted = entries.filter((e) => opts?.all || !e.startsWith('.')).sort()\n\n if (opts?.json) {\n const rows: LocalEntry[] = sorted.map((name) => entryToRow(dir, name))\n printJson(rows)\n return\n }\n\n for (const entry of sorted) {\n if (opts?.long) {\n const row = entryToRow(dir, entry)\n const size = row.size !== null && row.type === 'file' ? formatSize(row.size) : '-'\n console.log(`${row.type.padEnd(5)} ${size.padStart(10)} ${entry}`)\n } else {\n console.log(entry)\n }\n }\n })\n\n // ── find ─────────────────────────────────────────────────────────────────\n local\n .command('find <pattern>')\n .description('Find files matching a glob (e.g. \"**/*.pdf\")')\n .option('-d, --dir <path>', 'Directory to search in', '.')\n .option('--json', 'Output as JSON array of matched paths')\n .action((pattern: string, opts: { dir: string; json?: boolean }) => {\n const dir = resolvePath(opts.dir)\n const results = globSync(pattern, { cwd: dir })\n\n if (opts.json) {\n // Always print an array, even when empty — keeps `arbi local find …\n // --json | jq` honest. Status hints (the human \"No files matching\"\n // line) go to stderr in JSON mode so stdout is purely data.\n if (results.length === 0) {\n process.stderr.write(`No files matching \"${pattern}\" in ${dir}\\n`)\n }\n printJson(results)\n return\n }\n\n if (results.length === 0) {\n process.stderr.write(`No files matching \"${pattern}\" in ${dir}\\n`)\n return\n }\n\n for (const file of results) {\n console.log(file)\n }\n })\n\n // ── cat ──────────────────────────────────────────────────────────────────\n local\n .command('cat <file>')\n .description('Print file contents')\n .option('--head <lines>', 'Only show first N lines')\n .option(\n '--json',\n 'Output as {path, bytes, content} — useful when content has newlines an agent needs to handle'\n )\n .action((file: string, opts: { head?: string; json?: boolean }) => {\n const filePath = resolvePath(file)\n let content: string\n try {\n content = readFileSync(filePath, 'utf-8')\n } catch {\n console.error(`Cannot read file: ${filePath}`)\n process.exit(1)\n }\n\n if (opts.head) {\n const n = parseInt(opts.head, 10)\n content = content.split('\\n').slice(0, n).join('\\n')\n }\n\n if (opts.json) {\n printJson({ path: filePath, bytes: Buffer.byteLength(content, 'utf-8'), content })\n return\n }\n\n console.log(content)\n })\n\n // ── tree ─────────────────────────────────────────────────────────────────\n local\n .command('tree [path]')\n .description('Show directory tree')\n .option('-d, --depth <n>', 'Maximum depth', '3')\n .option('--json', 'Output as nested {name, type, children} tree')\n .action((path?: string, opts?: { depth?: string; json?: boolean }) => {\n const dir = resolvePath(path)\n const maxDepth = parseInt(opts?.depth ?? '3', 10)\n\n if (opts?.json) {\n printJson(buildTree(dir, maxDepth, 0))\n return\n }\n\n console.log(basename(dir) + '/')\n printTree(dir, '', maxDepth, 0)\n })\n}\n\ninterface TreeNode {\n name: string\n type: 'dir' | 'file' | 'symlink' | 'other'\n children?: TreeNode[]\n}\n\nfunction buildTree(dir: string, maxDepth: number, depth: number): TreeNode {\n const node: TreeNode = { name: basename(dir), type: 'dir', children: [] }\n if (depth >= maxDepth) return node\n let entries: string[]\n try {\n entries = readdirSync(dir)\n .filter((e) => !e.startsWith('.'))\n .sort()\n } catch {\n return node\n }\n for (const entry of entries) {\n const full = join(dir, entry)\n let isDir = false\n try {\n isDir = statSync(full).isDirectory()\n } catch {\n node.children!.push({ name: entry, type: 'other' })\n continue\n }\n if (isDir) {\n node.children!.push(buildTree(full, maxDepth, depth + 1))\n } else {\n node.children!.push({ name: entry, type: 'file' })\n }\n }\n return node\n}\n\nfunction printTree(dir: string, prefix: string, maxDepth: number, depth: number): void {\n if (depth >= maxDepth) return\n let entries: string[]\n try {\n entries = readdirSync(dir)\n .filter((e) => !e.startsWith('.'))\n .sort()\n } catch {\n return\n }\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n const isLast = i === entries.length - 1\n const connector = isLast ? '└── ' : '├── '\n const full = join(dir, entry)\n let isDir = false\n try {\n isDir = statSync(full).isDirectory()\n } catch {\n continue\n }\n console.log(`${prefix}${connector}${entry}${isDir ? '/' : ''}`)\n if (isDir) {\n const nextPrefix = prefix + (isLast ? ' ' : '│ ')\n printTree(full, nextPrefix, maxDepth, depth + 1)\n }\n }\n}\n","/**\n * arbi session list — list active sessions\n */\n\nimport { Command } from 'commander'\nimport { sessions as sessionOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n} from '../helpers.js'\n\nfunction humanizeTtl(seconds: number): string {\n if (!Number.isFinite(seconds) || seconds < 0) return ''\n if (seconds < 60) return `${seconds}s`\n if (seconds < 3600) return `${Math.round(seconds / 60)}m`\n if (seconds < 86400) return `${Math.round(seconds / 3600)}h`\n return `${Math.round(seconds / 86400)}d`\n}\n\nexport function registerSessionCommand(program: Command): void {\n const session = program.command('session').description('List and manage sessions')\n\n session\n .command('list')\n .description('List active sessions')\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts?: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await sessionOps.listSessions(arbi)\n\n if (opts?.json) {\n printJson(data)\n return\n }\n\n if (data.length === 0) {\n process.stderr.write('No active sessions.\\n')\n return\n }\n\n printTable(\n [\n {\n header: 'ID',\n width: 18,\n value: (r) => (r.external_id as string) || (r.session_id as string),\n },\n { header: 'NAME', width: 20, value: (r) => (r.name as string) || '' },\n { header: 'STATUS', width: 12, value: (r) => r.status as string },\n {\n header: 'TTL',\n width: 10,\n // Raw `<n>s` was unreadable past a few hours; humanize once the\n // window grows beyond a minute.\n value: (r) => humanizeTtl(r.ttl as number),\n },\n {\n header: 'WORKSPACES',\n width: 12,\n value: (r) => String((r.workspaces as string[])?.length ?? 0),\n },\n ],\n data\n )\n })()\n )\n\n // Default action: list, OR suggest a subcommand if user typed a typo.\n session.arguments('[maybeSubcommand]').action(async (maybe?: string) => {\n if (maybe) {\n suggestSubcommandAndExit(\n 'session',\n maybe,\n session.commands.map((c) => c.name())\n )\n }\n await session.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi notifications list — list non-DM notifications (workspaceuser_invited,\n * contact_accepted, …)\n *\n * `arbi dm list` is intentionally narrowed to `user_message` rows. This view\n * is the firehose for everything else the server pushes — invites, contact\n * accepts, batch completes, etc. — and is the right place for agents that\n * need to react to system-level events without a long-running `arbi watch`\n * subscription.\n *\n * Backed by the same GET /v1/notifications/ endpoint as `dm list`; we just\n * filter to non-DM types.\n */\n\nimport { Command } from 'commander'\nimport { dm as dmOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveDmCrypto,\n printTable,\n printJson,\n truncate,\n suggestSubcommandAndExit,\n dryRun,\n} from '../helpers.js'\n\ntype Row = Record<string, unknown>\n\nexport function registerNotificationsCommand(program: Command): void {\n // `enablePositionalOptions` keeps `--json` (declared on both parent and\n // `list`) attached to whichever command the user actually wrote it after.\n // Without this commander resolves the parent option first and the inner\n // list subcommand's --json never fires.\n const notif = program\n .command('notifications')\n .enablePositionalOptions()\n .description('Non-DM notifications')\n\n notif\n .command('list')\n .description('List non-DM notifications (workspace invites, contact accepts, …)')\n .option('--unread', 'Only show unread notifications')\n .option('--type <comma-list>', 'Filter to specific type(s), e.g. workspaceuser_invited')\n .option('-l, --limit <n>', 'Cap to N most-recent', (v) => parseInt(v, 10))\n .option('--json', 'Output as JSON (recommended for scripting / agents)')\n .action((opts: { unread?: boolean; type?: string; limit?: number; json?: boolean }) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n // `listDecryptedDMs` returns ALL notifications and only DM rows have\n // decryptable content — non-DM rows pass through with `content`\n // already set to whatever the server emitted (usually null/empty).\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as Row[]\n const nonDm = all.filter((r) => (r.type as string) !== 'user_message')\n\n const typeFilter = opts.type\n ? new Set(\n opts.type\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n )\n : null\n\n const filtered = nonDm.filter((r) => {\n if (opts.unread && r.read) return false\n if (typeFilter && !typeFilter.has((r.type as string) ?? '')) return false\n return true\n })\n\n const limited = opts.limit && opts.limit > 0 ? filtered.slice(0, opts.limit) : filtered\n\n if (opts.json) {\n printJson(limited)\n return\n }\n\n if (limited.length === 0) {\n process.stderr.write('No notifications.\\n')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n { header: 'TYPE', width: 24, value: (r) => (r.type as string) ?? '' },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n {\n header: 'CONTENT',\n width: 50,\n // Non-DM rows usually carry a JSON-encoded payload in\n // `content`. Show the first slice and let the JSON path\n // expose the full thing for agents that want to introspect.\n value: (r) => truncate((r.content as string) ?? '', 49),\n },\n ],\n limited\n )\n })()\n )\n\n // ── mark-read ────────────────────────────────────────────────────────────\n // Closes the long-running-agent feedback loop: without --all, the\n // `notifications --unread` filter grows unbounded after a burst of\n // workspace invites or task completions.\n notif\n .command('mark-read [ids...]')\n .description('Mark notifications as read (use --all to drain the unread queue)')\n .option('--all', 'Mark every unread non-DM notification as read')\n .action((ids: string[] | undefined, opts: { all?: boolean }) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let toMark = ids && ids.length > 0 ? ids : undefined\n if (!toMark && opts.all) {\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as Row[]\n toMark = all\n .filter((r) => (r.type as string) !== 'user_message' && !r.read)\n .map((r) => r.external_id as string)\n }\n if (!toMark || toMark.length === 0) {\n process.stderr.write('Nothing to mark read. (Pass IDs or --all.)\\n')\n return\n }\n const data = await dmOps.markRead(arbi, toMark)\n process.stdout.write(`Marked ${data.length} notification(s) as read.\\n`)\n })()\n )\n\n // ── delete ───────────────────────────────────────────────────────────────\n notif\n .command('delete [ids...]')\n .description('Delete notifications by ID (or use --all to clear non-DM noise)')\n .option('--all', 'Delete every non-DM notification (workspace invites, contact accepts, ...)')\n .option('--dry-run', 'Preview which notifications would be deleted (no SDK call)')\n .action((ids: string[] | undefined, opts: { all?: boolean; dryRun?: boolean }) =>\n runAction(async () => {\n const { arbi, crypto } = await resolveDmCrypto()\n let toDelete = ids && ids.length > 0 ? ids : undefined\n if (!toDelete && opts.all) {\n const all = (await dmOps.listDecryptedDMs(arbi, crypto)) as Row[]\n toDelete = all\n .filter((r) => (r.type as string) !== 'user_message')\n .map((r) => r.external_id as string)\n }\n if (!toDelete || toDelete.length === 0) {\n process.stderr.write('Nothing to delete. (Pass IDs or --all.)\\n')\n return\n }\n if (opts?.dryRun) {\n dryRun(`delete ${toDelete.length} notification(s)`, toDelete)\n return\n }\n await dmOps.deleteDMs(arbi, toDelete)\n process.stdout.write(`Deleted ${toDelete.length} notification(s).\\n`)\n })()\n )\n\n // Default action: forward unknown args (including --json/--unread/etc.) to\n // the `list` subcommand. We avoid pre-declaring those options on the parent\n // because commander 11 binds them to whichever command declared them first\n // — `arbi notifications list --json` then dispatches `list` with an empty\n // opts and the data never gets JSON-formatted.\n notif\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = notif.args ?? []\n const subcommands = notif.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('notifications', firstNonFlag, subcommands)\n }\n await notif.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi project list — list projects\n * arbi project create <name> — create a new project\n * arbi project refresh <id> — refresh project metadata\n *\n * Projects are the tenancy unit above workspaces. Until this command landed\n * the only way to discover a `projectExtId` (needed for `arbi workspace\n * create`) was indirectly via `arbi register` / `arbi agent-create`. Exposing\n * `project list` lets agents bootstrap multi-project setups themselves.\n */\n\nimport { Command } from 'commander'\nimport { projects as projectOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveAuth,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n emitListOrTable,\n} from '../helpers.js'\nimport { success, ref } from '../output.js'\n\nexport function registerProjectCommand(program: Command): void {\n const project = program.command('project').description('Project tenancy: list, create, refresh')\n\n project\n .command('list')\n .description('List your projects')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await projectOps.listProjects(arbi)\n\n if (!emitListOrTable(data, opts, 'No projects found.')) return\n\n printTable(\n [\n { header: 'ID', width: 18, value: (r) => r.external_id as string },\n { header: 'NAME', width: 30, value: (r) => (r.name as string) ?? '' },\n { header: 'PLAN', width: 14, value: (r) => (r.plan as string) ?? '' },\n { header: 'ROLE', width: 14, value: (r) => (r.role as string) ?? '' },\n ],\n data\n )\n })()\n )\n\n project\n .command('create <name>')\n .description('Create a new project')\n .action((name: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await projectOps.createProject(arbi, name)\n // Agents extract the project ID with: grep -oE 'prj-[a-z0-9]+'\n success(`Created project: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n project\n .command('refresh <id>')\n .description('Refresh a project (force plan/usage sync from billing)')\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n await projectOps.refreshProject(arbi, id)\n success(`Refreshed project: ${ref(id)}`)\n })()\n )\n\n // Default action: list, with typo suggestion for unknown subcommands.\n project\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = project.args ?? []\n const subcommands = project.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('project', firstNonFlag, subcommands)\n }\n await project.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi files list — list ephemeral files\n * arbi files upload <path> — upload a file\n * arbi files get <id> — show a file's metadata\n * arbi files delete <id> — delete a file\n * arbi files content <id> [-o <path>] — write the file's bytes to disk (or stdout)\n *\n * OpenAI-compatible Files API surface. These files are independent of the\n * workspace document index — they're meant for the Responses API\n * (`arbi ask -b`) where an agent attaches a short-lived file to a single\n * request. Until this command existed, the entire file subsystem was\n * unreachable from the CLI even though the SDK has full coverage.\n */\n\nimport { Command } from 'commander'\nimport { readFileSync } from 'node:fs'\nimport { writeFileSync } from 'node:fs'\nimport { basename, resolve } from 'node:path'\nimport { files as filesOps } from '@arbidocs/sdk'\nimport {\n runAction,\n resolveWorkspace,\n printTable,\n printJson,\n suggestSubcommandAndExit,\n emitListOrTable,\n truncate,\n dryRun,\n} from '../helpers.js'\nimport { success, ref, error } from '../output.js'\n\nfunction formatBytes(n: number): string {\n if (n < 1024) return `${n}B`\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)}K`\n if (n < 1024 * 1024 * 1024) return `${(n / (1024 * 1024)).toFixed(1)}M`\n return `${(n / (1024 * 1024 * 1024)).toFixed(1)}G`\n}\n\nexport function registerFilesCommand(program: Command): void {\n const files = program\n .command('files')\n .description('Ephemeral files: list, upload, get, delete, fetch content')\n\n files\n .command('list')\n .description('List ephemeral files attached to your account')\n .option('--purpose <name>', 'Filter by purpose (default: assistants)')\n .option('-l, --limit <n>', 'Cap to N entries', (v) => parseInt(v, 10))\n .option('--json', 'Output as JSON')\n .action((opts: { purpose?: string; limit?: number; json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await filesOps.listFiles(arbi, {\n purpose: opts.purpose ?? null,\n limit: opts.limit,\n })\n // The OpenAI envelope is `{ data: [...], object: 'list' }` — surface\n // the array directly for human callers, but let `--json` consumers\n // see whatever shape the SDK returned (some downstream tools want\n // the `object: 'list'` discriminator).\n const items = (data.data ?? []) as Array<Record<string, unknown>>\n\n if (opts.json) {\n printJson(data)\n return\n }\n if (!emitListOrTable(items, opts, 'No files found.')) return\n\n printTable(\n [\n { header: 'ID', width: 30, value: (r) => r.id as string },\n {\n header: 'NAME',\n width: 30,\n value: (r) => truncate((r.filename as string) ?? '', 29),\n },\n { header: 'BYTES', width: 10, value: (r) => formatBytes((r.bytes as number) ?? 0) },\n { header: 'PURPOSE', width: 14, value: (r) => (r.purpose as string) ?? '' },\n ],\n items\n )\n })()\n )\n\n files\n .command('upload <path>')\n .description('Upload a file (file ID is returned for use with arbi ask -b --attach)')\n .option('--purpose <name>', 'OpenAI purpose tag (default: assistants)', 'assistants')\n .action((path: string, opts: { purpose?: string }) =>\n runAction(async () => {\n const { loginResult, config } = await resolveWorkspace()\n const filePath = resolve(path)\n let bytes: Buffer\n try {\n bytes = readFileSync(filePath)\n } catch {\n error(`Cannot read file: ${filePath}`)\n process.exit(3)\n }\n const blob = new Blob([new Uint8Array(bytes)])\n const data = await filesOps.uploadFile(\n {\n baseUrl: config.baseUrl,\n accessToken: loginResult.accessToken,\n } as Parameters<typeof filesOps.uploadFile>[0],\n blob,\n basename(filePath),\n opts.purpose ?? 'assistants'\n )\n // Agents extract the file ID with: grep -oE 'file-[A-Za-z0-9]+'\n success(`Uploaded: ${ref(data.id)} (${formatBytes(data.bytes ?? 0)})`)\n })()\n )\n\n files\n .command('get <id>')\n .description(\"Show a file's metadata (always JSON — the metadata IS the data)\")\n .action((id: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await filesOps.getFile(arbi, id)\n printJson(data)\n })()\n )\n\n files\n .command('delete <id>')\n .description('Delete an ephemeral file')\n .option('--dry-run', 'Preview which file would be deleted (no SDK call)')\n .action((id: string, opts: { dryRun?: boolean }) =>\n runAction(async () => {\n if (opts?.dryRun) {\n dryRun('delete file', id)\n return\n }\n const { arbi } = await resolveWorkspace()\n await filesOps.deleteFile(arbi, id)\n success(`Deleted: ${ref(id)}`)\n })()\n )\n\n files\n .command('content <id>')\n .description(\"Fetch a file's raw bytes (writes to disk or stdout)\")\n .option('-o, --output <path>', 'Output file path (use \"-\" for stdout)')\n .action((id: string, opts: { output?: string }) =>\n runAction(async () => {\n const { loginResult, config } = await resolveWorkspace()\n const res = await filesOps.getFileContent(\n {\n baseUrl: config.baseUrl,\n accessToken: loginResult.accessToken,\n } as Parameters<typeof filesOps.getFileContent>[0],\n id\n )\n const buf = Buffer.from(await res.arrayBuffer())\n if (!opts.output || opts.output === '-') {\n process.stdout.write(buf)\n return\n }\n writeFileSync(resolve(opts.output), buf)\n success(`Wrote ${formatBytes(buf.length)} → ${opts.output}`)\n })()\n )\n\n // Default action: list, with typo suggestion for unknown subcommands.\n files\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = files.args ?? []\n const subcommands = files.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('files', firstNonFlag, subcommands)\n }\n await files.commands.find((c) => c.name() === 'list')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi usage today — show today's per-user usage against the daily cap\n *\n * Pre-flight cost check before launching long batch jobs. The endpoint is at\n * /v1/user/me/usage/today but no SDK helper wraps it yet, so we call it via\n * the typed openapi-fetch client directly.\n */\n\nimport { Command } from 'commander'\nimport { runAction, resolveAuth, printJson, suggestSubcommandAndExit } from '../helpers.js'\nimport { label, dim } from '../output.js'\n\nexport function registerUsageCommand(program: Command): void {\n const usage = program.command('usage').description(\"Show today's usage against the daily cap\")\n\n usage\n .command('today')\n .description(\"Today's tokens used / remaining (for the current user)\")\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n // Cast through `unknown` to recover the openapi-fetch result shape —\n // strict overload resolution drops it for some path/op combos.\n const res = (await arbi.fetch.GET('/v1/user/me/usage/today')) as {\n data?: Record<string, unknown>\n error?: unknown\n }\n if (res.error) {\n throw new Error(`Failed to fetch usage: ${JSON.stringify(res.error)}`)\n }\n const data = res.data as Record<string, unknown>\n if (opts.json) {\n printJson(data)\n return\n }\n // Best-effort human render. Fields are forward-compatible: we display\n // whatever the server actually returns, so adding new caps server-side\n // doesn't require a CLI release.\n for (const [k, v] of Object.entries(data)) {\n label(`${k}:`, typeof v === 'object' ? JSON.stringify(v) : String(v))\n }\n dim('\\nPass --json for machine-readable output.')\n })()\n )\n\n // Default action: today, with typo suggestion for unknown subcommands.\n usage\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = usage.args ?? []\n const subcommands = usage.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('usage', firstNonFlag, subcommands)\n }\n await usage.commands.find((c) => c.name() === 'today')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi auth profile [--name <n>] [--family <n>] [--picture <path>]\n * arbi auth change-email <new-email> — request verification code\n * arbi auth confirm-email <code> — confirm the new email\n * arbi auth delete-account — start 30-day deletion timer\n * arbi auth cancel-deletion — cancel an in-flight deletion\n * arbi auth sso-config — show whether the deployment supports SSO\n *\n * Self-service user-account operations. None of these were previously\n * reachable from the CLI — agents that needed to rotate credentials or\n * retire an account had to bounce through the web UI. The endpoints all\n * live under /v1/user/* and are wired via the typed openapi-fetch client.\n */\n\nimport { Command } from 'commander'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { runAction, resolveAuth, printJson, suggestSubcommandAndExit } from '../helpers.js'\nimport { success, error, label, dim } from '../output.js'\n\nexport function registerAuthCommand(program: Command): void {\n const auth = program\n .command('auth')\n .description('Self-service account ops: profile, change-email, delete-account, sso-config')\n\n // ── profile ──────────────────────────────────────────────────────────────\n // /v1/user/profile is PATCH-only — there's no read endpoint that returns\n // the display name pair. To \"show\" the current profile we look at the\n // /v1/user/contacts entry that points at ourselves (which carries\n // given/family/picture); that's the only path that doesn't require a\n // separate user-read endpoint. Falls back to `arbi status` if the user\n // hasn't added themselves as a contact.\n auth\n .command('profile')\n .description('Show or update your display profile (given/family name, picture)')\n .option('--name <given>', 'New given name')\n .option('--family <family>', 'New family name (empty string clears it)')\n .option(\n '--picture <path-or-url>',\n 'Profile picture (local path → base64 inline; URL → stored verbatim)'\n )\n .action((opts: { name?: string; family?: string; picture?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const noUpdates = !opts.name && opts.family === undefined && !opts.picture\n if (noUpdates) {\n // No flags → show whatever the workspace-users list exposes about\n // the current user (the only place the backend surfaces given/\n // family/picture in a single round-trip).\n const myExtId = arbi.session.getState().userExtId\n const res = await arbi.fetch.GET('/v1/workspace/users')\n if (res.error || !res.data) {\n error(\n 'No profile-read endpoint exists. To inspect: arbi status --json or arbi contacts --json'\n )\n process.exit(1)\n }\n const me = (res.data as Array<Record<string, unknown>>).find(\n (u) => u.external_id === myExtId\n )\n const profile = me ?? { external_id: myExtId }\n for (const [k, v] of Object.entries(profile)) {\n label(`${k}:`, typeof v === 'object' ? JSON.stringify(v) : String(v))\n }\n dim('\\nPass --name/--family/--picture to update.')\n return\n }\n\n // Read local picture file → data URL (the backend accepts both URLs\n // and `data:image/...;base64,...` strings).\n let picture = opts.picture\n if (picture && !/^https?:|^data:/.test(picture)) {\n try {\n const bytes = readFileSync(resolve(picture))\n const ext = picture.toLowerCase().split('.').pop()\n const mime = ext === 'png' ? 'image/png' : ext === 'gif' ? 'image/gif' : 'image/jpeg'\n picture = `data:${mime};base64,${bytes.toString('base64')}`\n } catch {\n error(`Cannot read picture file: ${picture}`)\n process.exit(3)\n }\n }\n\n const body: Record<string, string | null> = {}\n if (opts.name !== undefined) body.given_name = opts.name\n if (opts.family !== undefined) body.family_name = opts.family\n if (picture !== undefined) body.picture = picture\n\n const res = await arbi.fetch.PATCH('/v1/user/profile', { body })\n if (res.error) throw new Error(`Profile update failed: ${JSON.stringify(res.error)}`)\n success('Profile updated.')\n })()\n )\n\n // ── change-email ─────────────────────────────────────────────────────────\n auth\n .command('change-email <new-email>')\n .description('Request a verification code for an email change (SSO users update at IdP)')\n .action((newEmail: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const res = await arbi.fetch.POST('/v1/user/request-email-change', {\n body: { new_email: newEmail },\n })\n if (res.error) throw new Error(`request-email-change failed: ${JSON.stringify(res.error)}`)\n success(`Verification code sent to ${newEmail}.`)\n dim(`Confirm with: arbi auth confirm-email <code>`)\n })()\n )\n\n // ── confirm-email ────────────────────────────────────────────────────────\n auth\n .command('confirm-email <code>')\n .description('Confirm an email change with the code from change-email')\n .option('--new-email <email>', 'The new email being confirmed (required)')\n .action((code: string, opts: { newEmail?: string }) =>\n runAction(async () => {\n if (!opts.newEmail) {\n error('Missing --new-email. The new address is required to complete the change.')\n process.exit(1)\n }\n const { arbi } = await resolveAuth()\n const res = await arbi.fetch.POST('/v1/user/confirm-email-change', {\n body: { new_email: opts.newEmail, verification_code: code },\n })\n if (res.error) throw new Error(`confirm-email-change failed: ${JSON.stringify(res.error)}`)\n success(`Email changed to ${opts.newEmail}.`)\n })()\n )\n\n // ── delete-account / cancel-deletion REMOVED ────────────────────────────\n // The /v1/user/request-deletion and /v1/user/cancel-deletion endpoints\n // never landed on the backend. I shipped these commands against schema\n // entries that were either hand-edited or generated against a different\n // backend snapshot. The typecheck on the frontend (DeleteAccountDialog /\n // DeletionPendingBanner) caught it; both surfaces are removed in the same\n // PR. Re-add when the backend ships the endpoints for real.\n\n // ── sso-config ───────────────────────────────────────────────────────────\n // The actual pre-login probe: does this deployment support SSO at all, and\n // which Auth0 tenant? Doesn't need authentication.\n //\n // (We do NOT expose /v1/user/sso-status because that endpoint requires an\n // Auth0 sso_token and only returns useful info AFTER the device-code flow\n // completes — it's an internal step of the SSO login machinery, not a CLI\n // workflow agents would call directly.)\n auth\n .command('sso-config')\n .description('Show SSO config for this deployment (sso_enabled, Auth0 domain, audience)')\n .option('--json', 'Output as JSON')\n .action((opts: { json?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n // openapi-fetch's strict overload resolution loses the response shape\n // for some path/op combos (the union doesn't narrow); fall back to a\n // typed accessor so we still get the .data / .error contract.\n const res = (await arbi.fetch.GET('/v1/user/sso-config')) as {\n data?: Record<string, unknown>\n error?: unknown\n }\n if (res.error) throw new Error(`sso-config failed: ${JSON.stringify(res.error)}`)\n if (opts.json) {\n printJson(res.data)\n return\n }\n for (const [k, v] of Object.entries(res.data as Record<string, unknown>)) {\n label(`${k}:`, typeof v === 'object' ? JSON.stringify(v) : String(v))\n }\n dim('\\nTo log in: arbi login --sso -e <email> -p <master-password>')\n dim('(--sso still needs --password — the master password is the E2E key seed.)')\n })()\n )\n\n // Default action: profile show, with typo suggestion for unknown subcommands.\n auth\n .allowUnknownOption(true)\n .allowExcessArguments(true)\n .action(async () => {\n const tail = auth.args ?? []\n const subcommands = auth.commands.map((c) => c.name())\n const firstNonFlag = tail.find((a) => !a.startsWith('-'))\n if (firstNonFlag && !subcommands.includes(firstNonFlag)) {\n suggestSubcommandAndExit('auth', firstNonFlag, subcommands)\n }\n await auth.commands.find((c) => c.name() === 'profile')!.parseAsync(tail, { from: 'user' })\n })\n}\n","/**\n * arbi skills list — list user-invocable skills\n * arbi skills show <name> — print a skill's SKILL.md body\n * arbi skills install <source> — upload a SKILL.md from a URL or local path\n *\n * Skills are workspace documents (``wp_type='skill'``) parsed by the\n * backend's frontmatter loader. This CLI surface is the parity layer\n * for the TUI's ``/skills`` / ``/skill view`` commands and the React\n * UI's slash menu — all three frontends read the same\n * ``GET /v1/assistant/skills`` endpoint via the SDK.\n *\n * The CLI uses a workspace context (not just auth) because skills are\n * scoped to the active workspace's encryption key — the same reason\n * the backend endpoint takes a workspace-context dependency.\n */\n\nimport { readFileSync, statSync } from 'node:fs'\nimport { basename } from 'node:path'\nimport { Command } from 'commander'\nimport { assistant, documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace, printTable } from '../helpers.js'\nimport { bold, dim } from '../output.js'\n\n/**\n * Parse the frontmatter block of a SKILL.md to extract a slug.\n *\n * Returns ``null`` if no frontmatter, no ``name`` field, or the file\n * doesn't start with ``---``. We only need ``name`` — the backend\n * loader handles the rest. ``--slug`` overrides this entirely.\n *\n * Exported for unit tests.\n */\nexport function extractSlugFromFrontmatter(body: string): string | null {\n // Must open with ``---\\n`` exactly. Windows line endings (\\r\\n) are\n // tolerated by stripping the carriage return before matching.\n const normalized = body.replace(/\\r\\n/g, '\\n')\n if (!normalized.startsWith('---\\n')) return null\n\n const end = normalized.indexOf('\\n---', 4)\n if (end < 0) return null\n const block = normalized.slice(4, end)\n\n // Minimal YAML: ``name: <value>`` on its own line. Doesn't handle\n // quoted strings or block scalars — but the SKILL.md convention\n // already requires a one-line ``name`` field, so this matches every\n // file the backend's parser accepts.\n for (const line of block.split('\\n')) {\n const m = /^name:\\s*(.+?)\\s*$/.exec(line)\n if (m) {\n // Slugify: lowercase, replace whitespace and underscores with\n // dashes, drop chars that aren't a-z/0-9/dash. Matches the\n // backend's ``SkillManager._slug`` (str-to-slug) behavior so\n // the user types the same ``/<slug>`` either way.\n return m[1]\n .toLowerCase()\n .replace(/['\"]/g, '')\n .replace(/[_\\s]+/g, '-')\n .replace(/[^a-z0-9-]/g, '')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n }\n }\n return null\n}\n\n/**\n * Resolve a skill source (URL or local file) to its body text.\n *\n * - ``http://`` or ``https://`` → ``fetch`` it. We don't follow\n * ``data:`` URIs or anything else; keep the surface obvious.\n * - Anything else is treated as a local path. We refuse directories\n * here because the upload endpoint takes a single file — if the\n * user wants to install a multi-file skill, they should use\n * ``arbi upload --folder skills/<slug> --wp-type skill``.\n *\n * Exported for unit tests.\n */\nexport async function loadSkillSource(source: string): Promise<string> {\n if (source.startsWith('http://') || source.startsWith('https://')) {\n const res = await fetch(source)\n if (!res.ok) {\n throw new Error(`Failed to fetch ${source}: HTTP ${res.status} ${res.statusText}`)\n }\n return await res.text()\n }\n\n const stat = statSync(source)\n if (stat.isDirectory()) {\n throw new Error(\n `${source} is a directory. Pass a single SKILL.md file, or use ` +\n '``arbi upload --folder skills/<slug> --wp-type skill`` for multi-file skills.'\n )\n }\n void basename // reserved for future ``--name-from-file`` heuristic\n return readFileSync(source, 'utf8')\n}\n\nexport function registerSkillsCommand(program: Command): void {\n const skills = program.command('skills').description('Skills: list, show')\n\n skills\n .command('list')\n .description('List user-invocable skills in the active workspace')\n .option('--json', 'Output as JSON')\n .option('--include-hidden', 'Include skills with user-invocable: false')\n .action((opts: { json?: boolean; includeHidden?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const list = await assistant.listSkills(arbi, {\n includeHidden: opts.includeHidden,\n })\n\n if (opts.json) {\n console.log(JSON.stringify(list, null, 2))\n return\n }\n\n if (list.length === 0) {\n process.stderr.write(\n 'No skills in this workspace yet. Upload a SKILL.md with wp_type=skill to add one.\\n'\n )\n return\n }\n\n // Same table layout as ``arbi contacts list``: ID-ish first\n // column, name, then variable-width detail. Slug is the\n // ``/<slug>`` identifier the user types in the TUI.\n printTable(\n [\n { header: 'SLUG', width: 20, value: (r) => (r.slug as string) ?? '' },\n { header: 'NAME', width: 24, value: (r) => (r.name as string) ?? '' },\n {\n header: 'TYPE',\n width: 10,\n value: (r) => (r.skill_type as string) ?? 'markdown',\n },\n {\n header: 'ARGS',\n width: 20,\n value: (r) => (r.arg_hint as string) ?? '',\n },\n {\n header: 'DESCRIPTION',\n width: 40,\n value: (r) => (r.description as string) ?? '',\n },\n ],\n list as unknown as Record<string, unknown>[]\n )\n })()\n )\n\n skills\n .command('install <source>')\n .description(\n 'Install a skill from a URL or local path (SKILL.md). Slug derived from frontmatter unless --slug is given.'\n )\n .option('--slug <slug>', 'Override the slug (default: derived from frontmatter name)')\n .option('--json', 'Output the upload result as JSON')\n .action((source: string, opts: { slug?: string; json?: boolean }) =>\n runAction(async () => {\n const ctx = await resolveWorkspace()\n const authHeaders = {\n baseUrl: ctx.config.baseUrl,\n accessToken: ctx.accessToken,\n }\n\n // Source resolution: anything starting with http(s) is fetched\n // over the network; everything else is read from disk. We\n // don't try to be clever about ``file://`` URIs — keep the\n // surface small and obvious. Users can pipe through curl if\n // they need anything fancier.\n const body = await loadSkillSource(source)\n\n // Slug precedence: explicit --slug → frontmatter name →\n // error. We never silently pick something from the filename;\n // a SKILL.md from a tarball might be called whatever, and we\n // don't want the slug to depend on directory layout.\n const slug =\n opts.slug ??\n extractSlugFromFrontmatter(body) ??\n (() => {\n process.stderr.write(\n 'Could not derive slug: no --slug flag and no ``name:`` in frontmatter.\\n' +\n 'Add a frontmatter block like:\\n\\n ---\\n name: my-skill\\n description: …\\n ---\\n\\n' +\n 'or pass ``--slug my-skill`` explicitly.\\n'\n )\n process.exit(1)\n })()\n\n // Upload via the same path as ``arbi upload --wp-type skill\n // --folder skills/<slug>``. We always use the plain\n // ``uploadFile`` path (not direct-to-MinIO) because SKILL.md\n // files are tiny — a few KB at most — and the streaming\n // overhead of the direct path doesn't pay off here.\n const blob = new Blob([body], { type: 'text/markdown' })\n const result = await documents.uploadFile(authHeaders, blob, 'SKILL.md', {\n folder: `skills/${slug}`,\n wpType: 'skill',\n })\n\n if (opts.json) {\n console.log(JSON.stringify({ slug, ...result }, null, 2))\n return\n }\n\n console.log(bold(`Installed skill: ${slug}`))\n console.log(dim(`source: ${source}`))\n console.log(dim(`folder: skills/${slug}`))\n console.log(\n dim('Backend frontmatter loader picks it up on the next /v1/assistant/skills call.')\n )\n })()\n )\n\n skills\n .command('show <slug>')\n .description(\"Show a skill's SKILL.md body (read-only)\")\n .option('--json', 'Output as JSON (includes metadata)')\n .action((slug: string, opts: { json?: boolean }) =>\n runAction(async () => {\n const ctx = await resolveWorkspace()\n const list = await assistant.listSkills(ctx.arbi, { includeHidden: true })\n const skill = list.find((s) => s.slug === slug || s.name === slug)\n if (!skill) {\n process.stderr.write(\n `No skill matching \"${slug}\" in this workspace. Try \\`arbi skills list\\`.\\n`\n )\n process.exit(1)\n }\n\n // Fetch the skill body via the regular document-download\n // endpoint — the SKILL.md is just a markdown file in the\n // workspace. We can't use ``getParsedContent`` here because\n // the marker parsing pipeline only runs for source documents;\n // skills typically skip it (or 422 if it tried).\n const authHeaders = {\n baseUrl: ctx.config.baseUrl,\n accessToken: ctx.accessToken,\n }\n const dlRes = await documents.downloadDocument(authHeaders, skill.doc_ext_id)\n const body = dlRes.ok ? await dlRes.text() : ''\n\n if (opts.json) {\n console.log(JSON.stringify({ ...skill, body }, null, 2))\n return\n }\n\n // Pretty text output: header line per metadata field, then the\n // body verbatim. Matches the TUI's ``/skill view`` rendering.\n console.log(bold(`${skill.name} (${skill.slug})`))\n if (skill.description) console.log(dim(skill.description))\n if (skill.arg_hint) console.log(dim(`args: ${skill.arg_hint}`))\n console.log(dim(`type: ${skill.skill_type} doc: ${skill.doc_ext_id}`))\n console.log('')\n console.log(body)\n })()\n )\n}\n","/**\n * ARBI CLI — entry point\n *\n * Wires all commands into commander and runs.\n */\n\n// Suppress SDK middleware logging (console.debug/info go to stdout in Node.js, polluting piped output)\nconsole.debug = () => {}\nconst _origInfo = console.info\nconsole.info = (...args: unknown[]) => {\n if (typeof args[0] === 'string' && args[0].startsWith('[API]')) return\n _origInfo(...args)\n}\n\nimport { Command } from 'commander'\nimport { getCompletions } from './completion.js'\nimport { registerConfigCommand } from './commands/config-cmd.js'\nimport { registerLoginCommand } from './commands/login.js'\nimport { registerRegisterCommand } from './commands/register.js'\nimport { registerLogoutCommand } from './commands/logout.js'\nimport { registerStatusCommand } from './commands/status.js'\nimport { registerWorkspacesCommand } from './commands/workspaces.js'\nimport { registerDocsCommand } from './commands/docs.js'\nimport { registerUploadCommand } from './commands/upload.js'\nimport { registerDownloadCommand } from './commands/download.js'\nimport { registerAskCommand } from './commands/ask.js'\nimport { registerCiteCommand } from './commands/cite.js'\nimport { registerFindCommand } from './commands/find.js'\nimport { registerWatchCommand } from './commands/watch.js'\nimport { registerContactsCommand } from './commands/contacts.js'\nimport { registerDmCommand } from './commands/dm.js'\nimport { registerTagsCommand } from './commands/tags.js'\nimport { registerDoctagsCommand } from './commands/doctags.js'\nimport { registerConversationsCommand } from './commands/conversations.js'\nimport { registerSettingsCommand } from './commands/settings.js'\nimport { registerAgentconfigCommand } from './commands/agentconfig.js'\nimport { registerHealthCommand } from './commands/health.js'\nimport { registerTuiCommand } from './commands/tui.js'\nimport { registerUpdateCommand } from './commands/update.js'\nimport { registerQuickstartCommand } from './commands/quickstart.js'\nimport { registerAgentCreateCommand } from './commands/agent-create.js'\nimport { registerAgentCommand } from './commands/agent.js'\nimport { registerTaskCommand } from './commands/task.js'\nimport { registerCompletionCommand } from './commands/completion.js'\nimport { registerListenCommand } from './commands/listen.js'\nimport { registerLocalCommand } from './commands/local.js'\nimport { registerSessionCommand } from './commands/session.js'\nimport { registerNotificationsCommand } from './commands/notifications.js'\nimport { registerProjectCommand } from './commands/project.js'\nimport { registerFilesCommand } from './commands/files.js'\nimport { registerUsageCommand } from './commands/usage.js'\nimport { registerAuthCommand } from './commands/auth.js'\nimport { registerSkillsCommand } from './commands/skills.js'\n\nconst program = new Command()\n\ndeclare const __CLI_VERSION__: string\n\nprogram\n .name('arbi')\n .description('ARBI CLI — interact with ARBI from the terminal')\n .version(__CLI_VERSION__)\n // Self-correcting CLI: any unknown command / unknown option / missing\n // required argument auto-prints the relevant help screen so an agent\n // can read it and retry without a second round-trip to fetch `--help`.\n .showHelpAfterError(true)\n .showSuggestionAfterError(true)\n\nregisterConfigCommand(program)\nregisterLoginCommand(program)\nregisterRegisterCommand(program)\nregisterLogoutCommand(program)\nregisterStatusCommand(program)\nregisterWorkspacesCommand(program)\nregisterDocsCommand(program)\nregisterUploadCommand(program)\nregisterDownloadCommand(program)\nregisterAskCommand(program)\nregisterCiteCommand(program)\nregisterFindCommand(program)\nregisterWatchCommand(program)\nregisterContactsCommand(program)\nregisterDmCommand(program)\nregisterTagsCommand(program)\nregisterDoctagsCommand(program)\nregisterConversationsCommand(program)\nregisterSettingsCommand(program)\nregisterAgentconfigCommand(program)\nregisterHealthCommand(program)\nregisterTuiCommand(program)\nregisterUpdateCommand(program)\nregisterQuickstartCommand(program)\nregisterAgentCreateCommand(program)\nregisterAgentCommand(program)\nregisterTaskCommand(program)\nregisterCompletionCommand(program)\nregisterListenCommand(program)\nregisterSessionCommand(program)\nregisterLocalCommand(program)\nregisterNotificationsCommand(program)\nregisterProjectCommand(program)\nregisterFilesCommand(program)\nregisterUsageCommand(program)\nregisterAuthCommand(program)\nregisterSkillsCommand(program)\n\n// ── Help-screen grouping ────────────────────────────────────────────────────\n// Commander v14's `helpGroup()` keeps the alphabetical-ish registration order\n// from being the user's first impression. We bucket the 30+ top-level\n// commands by INTENT so an agent searching the help can find the verb they\n// want without `grep --help -A 100`.\napplyHelpGroups(program, {\n 'Getting started:': [\n 'quickstart',\n 'login',\n 'register',\n 'logout',\n 'status',\n 'config',\n 'completion',\n ],\n 'Workspaces:': ['workspaces', 'workspace', 'project'],\n 'Documents:': ['docs', 'doc', 'add', 'upload', 'download'],\n 'Search & ask:': ['ask', 'find', 'cite', 'watch'],\n 'Tagging:': ['tags', 'doctags'],\n 'Conversations & messaging:': ['convo', 'dm', 'listen', 'notifications', 'contacts'],\n 'Agents & tasks:': ['agent', 'agent-create', 'task', 'agentconfig', 'session'],\n 'Account:': ['auth', 'usage', 'files'],\n 'System:': ['health', 'models', 'settings', 'tui', 'local', 'update'],\n})\n\nfunction applyHelpGroups(prog: Command, groups: Record<string, string[]>): void {\n for (const [groupLabel, names] of Object.entries(groups)) {\n for (const name of names) {\n const cmd = prog.commands.find((c) => c.name() === name)\n // Commander 14 ships `helpGroup` on the Command instance; tolerate the\n // method being absent (older shims, type-only stub) without crashing.\n const hg = (cmd as unknown as { helpGroup?: (label: string) => unknown })?.helpGroup\n if (cmd && typeof hg === 'function') {\n hg.call(cmd, groupLabel)\n }\n }\n }\n}\n\n// ── Tab completion (runs after all commands are registered) ─────────────────\nconst completionIdx = process.argv.indexOf('--get-completions')\nif (completionIdx !== -1) {\n const line = process.argv[completionIdx + 1] ?? ''\n const candidates = getCompletions(program, line)\n if (candidates.length > 0) process.stdout.write(candidates.join('\\n') + '\\n')\n process.exit(0)\n}\n\nprogram.parse()\n"]}
|