@arbidocs/cli 0.3.16 → 0.3.18

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/prompts.ts","../src/version-check.ts","../src/commands/login.ts","../src/commands/register.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/task-store.ts","../src/notifications.ts","../src/helpers.ts","../src/commands/workspaces.ts","../src/commands/docs.ts","../src/commands/upload.ts","../src/commands/download.ts","../src/commands/ask.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/task.ts","../src/index.ts"],"names":["FileConfigStore","ArbiError","chalk","join","homedir","existsSync","readFileSync","program","appendFileSync","error","input","callback","current","confirmActiveTransaction","rolledBack","store","db","select","checkbox","search","password","confirm","path","os","fs","execSync","performPasswordLogin","workspaces","ws","formatWorkspaceChoices","getErrorMessage","createArbiClient","workspaceOps","status","connectWithReconnect","isMessageType","formatWsMessage","getErrorCode","ArbiApiError","coreResolveAuth","coreResolveWorkspace","generateEncryptedWorkspaceKey","documents","documentsNode","connectWebSocket","result","responses","assistant","streamSSE","label","formatAgentStepLabel","colorize","contactOps","formatUserName","dmOps","data","tagOps","doctagOps","convOps","settingsOps","acOps","healthOps","require","createRequire","spawn","CENTRAL_API_URL","getVerificationCode","timestamp","Command"],"mappings":"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","file":"index.js","sourcesContent":["/**\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// ── 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.command('config').description('Manage CLI configuration')\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 .action(() => {\n const cfg = getConfig()\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 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('Set up shell alias A for \"arbi ask\"')\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 * 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 * 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\n/**\n * On unexpected errors, hint from cache only (no network call).\n */\nexport function hintUpdateOnError(): void {\n try {\n const cached = readCache()\n if (cached && cached.latest !== __CLI_VERSION__) {\n warn(\n `Your arbi version is out of date (${__CLI_VERSION__} → ${cached.latest}). Run \"arbi update\".`\n )\n }\n } catch {\n // Silent\n }\n}\n","/**\n * arbi login [--email <email>] [--password <password>]\n *\n * Authenticates via SDK, stores signing key.\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 { getErrorMessage, performPasswordLogin, formatWorkspaceChoices } 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'\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('-w, --workspace <id>', 'Workspace ID to select after login')\n .action(async (opts: { email?: string; password?: string; workspace?: string }) => {\n const config = store.requireConfig()\n\n // Resolve credentials: flags > env vars > interactive prompt\n const email = opts.email || process.env.ARBI_EMAIL || (await promptInput('Email'))\n const pw = opts.password || process.env.ARBI_PASSWORD || (await promptPassword('Password'))\n\n try {\n const { arbi } = await performPasswordLogin(config, email, pw, store)\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\n // Filter to workspaces where user has a role (member of workspace)\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.email === email))\n\n if (memberWorkspaces.length === 0) {\n console.log('No workspaces found. Create one with: arbi workspace create <name>')\n return\n }\n\n // If workspace specified via flag, select it directly\n if (opts.workspace) {\n const ws = memberWorkspaces.find((w) => w.external_id === opts.workspace)\n if (!ws) {\n error(`Workspace ${opts.workspace} not found or you don't have access.`)\n process.exit(1)\n }\n updateConfig({ selectedWorkspaceId: ws.external_id })\n success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n return\n }\n\n // Auto-select if only one member workspace\n if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n success(\n `Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`\n )\n return\n }\n\n // Interactive workspace selection\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 success(`Workspace: ${ws.name} (${ref(selected)})`)\n dim('\\nTip: Run \"arbi config alias\" to use A as a shortcut for \"arbi ask\"')\n } catch (err) {\n error(`Login failed: ${getErrorMessage(err)}`)\n process.exit(1)\n } finally {\n await checkForUpdates(getConfig()?.autoUpdate)\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 getErrorMessage,\n performPasswordLogin,\n formatWorkspaceChoices,\n workspaces as workspaceOps,\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'\n\nconst CENTRAL_API_URL = 'https://central.arbi.work'\n\n// ── CI verification code fetch ───────────────────────────────────────────────\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\n// ── Command ──────────────────────────────────────────────────────────────────\n\ninterface RegisterOpts {\n nonInteractive?: boolean\n email?: string\n password?: string\n verificationCode?: string\n firstName?: string\n lastName?: string\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 .action(async (opts: RegisterOpts) => {\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// ── 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 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 success(`\\nRegistered successfully as ${email}`)\n } catch (err) {\n error(`Registration failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n\n // 6. If all values were flags, auto-login. Otherwise offer choice.\n const allFlagsProvided =\n !!(opts.email || process.env.ARBI_EMAIL) &&\n !!(opts.password || process.env.ARBI_PASSWORD) &&\n !!opts.verificationCode\n const doLogin = allFlagsProvided || (await promptConfirm('Log in now?'))\n\n if (doLogin) {\n await loginAfterRegister(config, email, pw)\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 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 console.log(`Using email: ${email}`)\n }\n\n if (!password) {\n error('Password required. Use --password <password> or set ARBI_PASSWORD')\n process.exit(1)\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 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 error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n\n // Fetch code from CI endpoint\n verificationCode = await getVerificationCode(email, supportApiKey)\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 success(`Registered: ${email}`)\n } catch (err) {\n error(`Registration failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\n\n // Auto-login and create workspace in non-interactive mode\n await loginAfterRegister(config, email, password)\n}\n\n// ── Post-registration login ──────────────────────────────────────────────────\n\nasync function loginAfterRegister(\n config: { baseUrl: string; deploymentDomain: string },\n email: string,\n password: string\n) {\n try {\n const { arbi } = await performPasswordLogin(config, email, password, store)\n success(`Logged in as ${email}`)\n\n const { data: workspaces } = await arbi.fetch.GET('/v1/user/workspaces')\n const wsList = workspaces || []\n\n // Filter to workspaces where user has a role (has wrapped_key from membership, not public access)\n // Public workspaces get wrapped_key computed on-the-fly, but we want member workspaces only\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.email === email))\n\n if (memberWorkspaces.length === 0) {\n console.log('Creating your first workspace...')\n const ws = await workspaceOps.createWorkspace(arbi, 'My First Workspace')\n updateConfig({ selectedWorkspaceId: ws.external_id })\n success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n return\n }\n\n if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n success(`Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`)\n return\n }\n\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 success(`Workspace: ${ws.name} (${ref(selected)})`)\n } catch (err) {\n error(`Login failed: ${getErrorMessage(err)}`)\n error('You can log in later with: arbi login')\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 .action(() => {\n deleteCredentials()\n clearChatSession()\n updateConfig({ selectedWorkspaceId: undefined })\n success('Logged out.')\n })\n}\n","/**\n * arbi status\n *\n * Shows current config + login state (no API calls).\n */\n\nimport { Command } from 'commander'\nimport { getConfig, getCredentials } from '../config.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 .action(() => {\n const config = getConfig()\n const creds = getCredentials()\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 (config.selectedWorkspaceId) {\n label('Workspace:', config.selectedWorkspaceId)\n } else {\n label('Workspace:', '(none selected)')\n }\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 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 * We extract any `detail` or `message` field and append it when not already present.\n */\nfunction 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\n // Try several common server-error fields\n const detail = (apiErr.detail ?? apiErr.message ?? apiErr.error) as string | undefined\n if (typeof detail === 'string' && detail && !base.includes(detail)) {\n return `${base} — ${detail}`\n }\n return base\n }\n return getErrorMessage(err)\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 */\nexport async function resolveWorkspace(workspaceOpt?: string): 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\n if (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// ── Table formatting ──────────────────────────────────────────────────────────\n\nexport interface Column {\n header: string\n width: number\n value: (row: Record<string, unknown>) => string\n}\n\n/**\n * Print a formatted table with header + rows.\n * Handles truncation to column width and padding.\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 return val.slice(0, c.width - 2).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 * 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 { workspaces, formatWorkspaceChoices, generateEncryptedWorkspaceKey } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { getConfig, updateConfig, getChatSession, clearChatSession } from '../config.js'\nimport { promptSelect } from '../prompts.js'\nimport { success, error, ref } from '../output.js'\n\nexport function registerWorkspacesCommand(program: Command): void {\n program\n .command('workspaces')\n .description('List workspaces')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 30, value: (r) => r.name as string },\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: 10,\n value: (r) => (r.users as { role: string }[])?.[0]?.role ?? '',\n },\n ],\n data\n )\n })\n )\n\n const workspace = program.command('workspace').description('Workspace management')\n\n workspace\n .command('select [id]')\n .description('Select active workspace (interactive picker if no ID given)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.listWorkspaces(arbi)\n\n if (data.length === 0) {\n console.log('No workspaces found.')\n return\n }\n\n let selectedId: string\n if (id) {\n const ws = data.find((w) => w.external_id === id)\n if (!ws) {\n error(`Workspace ${id} not found.`)\n error('Available workspaces:')\n for (const w of data) error(` ${w.external_id} ${w.name}`)\n process.exit(1)\n }\n selectedId = 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 .action((name: string, opts: { description?: string; public?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.createWorkspace(\n arbi,\n name,\n opts.description,\n opts.public ?? false\n )\n success(`Created: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('delete [id]')\n .description('Delete a workspace (defaults to selected workspace)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const targetId = id ?? getConfig()?.selectedWorkspaceId\n if (!targetId) {\n error('No workspace ID given and no workspace selected. Run: arbi workspace select')\n process.exit(1)\n }\n await workspaces.deleteWorkspaces(arbi, [targetId])\n // Clear session if we deleted the workspace it was in\n const session = getChatSession()\n if (session.workspaceId === targetId) {\n clearChatSession()\n }\n success(`Deleted workspace ${targetId}`)\n })()\n )\n\n workspace\n .command('update <id> <json>')\n .description('Update workspace properties (pass JSON)')\n .action((id: string, json: string) =>\n runAction(async () => {\n const body = parseJsonArg(json, 'arbi workspace update wrk-123 \\'{\"name\": \"New Name\"}\\'')\n const { arbi } = await resolveWorkspace(id)\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.listWorkspaceUsers(arbi)\n\n if (data.length === 0) {\n console.log('No users found.')\n return\n }\n\n type User = {\n external_id?: string\n email?: string\n given_name?: string\n family_name?: string\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, workspaceId } = 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 <user-ids...>')\n .description('Remove users from the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n await workspaces.removeWorkspaceUsers(arbi, userIds)\n success(`Removed ${userIds.length} user(s).`)\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, workspaceId } = 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-id> <doc-ids...>')\n .description('Copy documents to another workspace')\n .option('-w, --workspace <id>', 'Source workspace ID (defaults to selected workspace)')\n .action((targetId: string, docIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, loginResult } = await resolveWorkspace(opts.workspace)\n const signingPrivateKeyBase64 = arbi.crypto.bytesToBase64(loginResult.signingPrivateKey)\n\n // Fetch workspaces to find the target workspace's wrapped key\n const wsList = await workspaces.listWorkspaces(arbi)\n const targetWs = wsList.find((w) => w.external_id === targetId)\n if (!targetWs || !targetWs.wrapped_key) {\n error(`Target workspace ${targetId} not found or has no encryption key`)\n process.exit(1)\n }\n\n // Generate encrypted key for the target workspace\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 success(`${data.detail} (${data.documents_copied} document(s) copied)`)\n })()\n )\n}\n","/**\n * arbi docs — list documents\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 */\n\nimport { Command } from 'commander'\nimport { documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { success, error, warn, chalk } from '../output.js'\nimport { promptSearch, promptCheckbox, promptInput, promptSelect } from '../prompts.js'\n\nfunction 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\n/** Fetch workspace docs and return as picker choices */\nasync function fetchDocChoices(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await documents.listDocuments(arbi)\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\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.listDocuments(arbi)\n\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'S', width: 2, value: (r) => statusSymbol(r.status as string | null) },\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: '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: 'SUMMARY',\n width: 50,\n value: (r) => {\n const meta = r.doc_metadata as { doc_subject?: string | null } | null\n return meta?.doc_subject ?? '-'\n },\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, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\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 .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n const selected = await promptCheckbox('Select documents to delete', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n await documents.deleteDocuments(arbi, docIds)\n success(`Deleted ${docIds.length} document(s).`)\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(arbi, docs)\n success(`Updated ${data.length} document(s).`)\n } else {\n // Interactive: pick a doc, then ask what to change\n const { arbi, workspaceId } = await resolveWorkspace()\n const choices = await fetchDocChoices(arbi, workspaceId)\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 .action((urls: string[], opts: { workspace?: string; shared?: boolean }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.uploadUrl(arbi, urls, workspaceId, opts.shared ?? false)\n success(`Uploaded: ${data.doc_ext_ids.join(', ')}`)\n if (data.duplicates && data.duplicates.length > 0) {\n warn(`Duplicates: ${data.duplicates.join(', ')}`)\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, workspaceKeyHeader, 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, workspaceKeyHeader },\n docId,\n selectedStage\n )\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n}\n","/**\n * arbi upload <file...> [--workspace <id>] [--watch]\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 *\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 { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport { documentsNode, connectWebSocket } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getConfig } from '../config.js'\nimport { success, error, warn, status, dim } from '../output.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 .action((paths: string[], opts: { workspace?: string; watch?: boolean }) =>\n runAction(async () => {\n // Validate paths exist before authenticating\n for (const p of paths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n }\n\n const { config, accessToken, workspaceKeyHeader, workspaceId } = await resolveWorkspace(\n opts.workspace\n )\n\n // Track uploaded doc IDs and their file names for --watch\n const uploadedDocs = new Map<string, string>()\n\n const auth = { baseUrl: config.baseUrl, accessToken, workspaceKeyHeader }\n\n for (const filePath of paths) {\n const stat = fs.statSync(filePath)\n\n if (stat.isDirectory()) {\n // Directory upload — walk and upload with folder structure\n const result = await documentsNode.uploadDirectory(auth, workspaceId, filePath)\n\n if (result.doc_ext_ids.length === 0) {\n warn(`No supported files found in directory: ${filePath}`)\n continue\n }\n\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.duplicates.length > 0) {\n warn(` Duplicates: ${info.duplicates.join(', ')}`)\n }\n }\n success(\n `Uploaded directory: ${filePath} (${result.doc_ext_ids.length} document(s) total)`\n )\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else if (filePath.toLowerCase().endsWith('.zip')) {\n // Zip upload — extract and upload with folder structure\n const result = await documentsNode.uploadZip(auth, workspaceId, filePath)\n\n if (result.doc_ext_ids.length === 0) {\n warn(`No supported files found in zip: ${filePath}`)\n continue\n }\n\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.duplicates.length > 0) {\n warn(` Duplicates: ${info.duplicates.join(', ')}`)\n }\n }\n success(`Uploaded zip: ${filePath} (${result.doc_ext_ids.length} document(s) total)`)\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else {\n // Single file upload\n const result = await documentsNode.uploadLocalFile(auth, workspaceId, filePath)\n\n success(`Uploaded: ${result.fileName} (${result.doc_ext_ids.join(', ')})`)\n if (result.duplicates && result.duplicates.length > 0) {\n warn(` Duplicates: ${result.duplicates.join(', ')}`)\n }\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, result.fileName)\n }\n }\n\n // Determine whether to watch processing:\n // --no-watch → never watch\n // --watch flag → always watch\n // config watch !== false + interactive TTY → auto-watch\n // otherwise → skip (safe for CI / pipes)\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const shouldWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n if (shouldWatch && 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 if (msg.status === 'completed') {\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 && !shouldWatch) {\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 * 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('-o, --output <path>', 'Output file path')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((docId: string | undefined, opts: { output?: string; workspace?: string }) =>\n runAction(async () => {\n const { arbi, config, accessToken, workspaceKeyHeader, workspaceId } =\n 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, workspaceKeyHeader },\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 outputPath = opts.output || path.join(process.cwd(), filename)\n const buffer = Buffer.from(await res.arrayBuffer())\n fs.writeFileSync(outputPath, buffer)\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 { streamSSE, formatAgentStepLabel, documents, assistant, responses } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getConfig, getChatSession, updateChatSession, clearChatSession } 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 (fire and forget)')\n .option('-q, --quiet', 'Suppress agent steps and tool calls')\n .option('--json', 'Output in JSON format (background mode only)')\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 }\n ) =>\n runAction(async () => {\n const question = words.join(' ')\n const { arbi, accessToken, workspaceKeyHeader, workspaceId, config } =\n 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 workspaceKeyHeader,\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 workspaceKeyHeader,\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 workspaceKeyHeader,\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\n const result = await streamSSE(res, {\n onToken: (content) => process.stdout.write(content),\n onAgentStep: (data) => {\n if (verbose) {\n const label = formatAgentStepLabel(data)\n if (label) console.error(chalk.dim(`\\n[agent] ${label}`))\n }\n },\n onElapsedTime: (t) => {\n elapsedTime = t\n },\n onError: (message) => console.error(chalk.red(`\\nError: ${message}`)),\n })\n\n process.stdout.write('\\n')\n\n // Print summary line\n const parts: string[] = []\n if (result.agentSteps.length > 0) {\n let stepLabel = `${result.agentSteps.length} step${result.agentSteps.length === 1 ? '' : 's'}`\n if (result.toolCallCount > 0) {\n stepLabel += ` (${result.toolCallCount} tool call${result.toolCallCount === 1 ? '' : 's'})`\n }\n parts.push(stepLabel)\n }\n if (result.usage) {\n parts.push(`${result.usage.total_tokens.toLocaleString()} tokens`)\n }\n if (result.context && result.context.context_window > 0) {\n const used =\n result.context.all_llm_calls?.last_input_tokens ?? result.context.total_input\n parts.push(\n `${used.toLocaleString()}/${result.context.context_window.toLocaleString()} context`\n )\n }\n if (elapsedTime != null) {\n parts.push(`${elapsedTime.toFixed(1)}s`)\n }\n if (parts.length > 0) {\n console.error(chalk.dim(`[${parts.join(' · ')}]`))\n }\n\n // Save conversation state for continuity and history restoration.\n // Always save the resolved workspaceId so future calls can detect changes.\n if (result.assistantMessageExtId) {\n const updates: Partial<{\n lastMessageExtId: string\n conversationExtId: string\n workspaceId: string\n }> = {\n lastMessageExtId: result.assistantMessageExtId,\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 }\n })()\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, documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { chalk } from '../output.js'\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('-d, --docs <ids>', 'Comma-separated document IDs to search within')\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 let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs.split(',').map((id) => id.trim())\n } else {\n const docs = await documents.listDocuments(arbi)\n docIds = docs.map((d) => d.external_id as string)\n }\n\n if (docIds.length === 0) {\n console.log('No documents found in workspace.')\n return\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 if (opts.json) {\n console.log(JSON.stringify(result, null, 2))\n return\n }\n\n if (filtered.length === 0) {\n console.log('No results found.')\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}\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('--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 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 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 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 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 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 )\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 { runAction, resolveAuth, printTable, formatUserName, type UserInfo } from '../helpers.js'\nimport { promptCheckbox, promptInput } from '../prompts.js'\nimport { success } from '../output.js'\n\nexport function registerContactsCommand(program: Command): void {\n const contacts = program.command('contacts').description('Manage contacts')\n\n contacts\n .command('list')\n .description('List all contacts')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await contactOps.listContacts(arbi)\n\n if (data.length === 0) {\n console.log('No contacts found.')\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 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 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 .action((ids?: string[]) =>\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 console.log('No contacts found.')\n return\n }\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 await contactOps.removeContacts(arbi, contactIds)\n success(`Removed ${contactIds.length} contact(s).`)\n })()\n )\n\n // Default action: list\n contacts.action(async () => {\n await contacts.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi dm list — list DMs / notifications\n * arbi dm send [recipient] [content] — send a DM (picker + prompt if no args)\n * arbi dm read [ids...] — mark messages as read (picker if no IDs)\n * arbi dm delete [ids...] — delete messages (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { dm as dmOps, contacts as contactOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, printTable, formatUserName, type UserInfo } from '../helpers.js'\nimport { promptSelect, promptCheckbox, promptInput } from '../prompts.js'\nimport { success, error } from '../output.js'\n\nexport function registerDmCommand(program: Command): void {\n const dm = program.command('dm').description('Direct messages')\n\n dm.command('list')\n .description('List all DMs and notifications')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await dmOps.listDMs(arbi)\n\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n { header: 'TYPE', width: 18, value: (r) => r.type as string },\n {\n header: 'FROM',\n width: 22,\n value: (r) => {\n const s = r.sender as UserInfo | null\n return formatUserName(s) || s?.email || ''\n },\n },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n { header: 'CONTENT', width: 40, value: (r) => (r.content as string) ?? '' },\n ],\n data\n )\n })\n )\n\n dm.command('send [recipient] [content]')\n .description('Send a DM (interactive if no args; recipient can be email or user ext_id)')\n .action((recipient?: string, content?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n // Pick recipient from contacts if not given\n if (!recipient) {\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 // Prompt for content if not given\n if (!content) {\n content = await promptInput('Message')\n }\n\n // If recipient looks like an email, resolve to ext_id via contacts\n let recipientExtId = recipient\n if (recipient.includes('@')) {\n const contacts = await contactOps.listContacts(arbi)\n const match = contacts.find((c) => c.email === recipient)\n if (!match) {\n error(`No contact found with email: ${recipient}`)\n error('Add them first: arbi contacts add ' + recipient)\n process.exit(1)\n }\n recipientExtId = (match.user as UserInfo)?.external_id ?? (match.external_id as string)\n }\n\n const data = await dmOps.sendDM(arbi, [{ recipient_ext_id: recipientExtId, content }])\n for (const n of data) {\n success(`Sent: ${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 .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n const unread = data.filter((m) => !m.read)\n if (unread.length === 0) {\n console.log('No unread messages.')\n return\n }\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 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 .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\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 await dmOps.deleteDMs(arbi, msgIds)\n success(`Deleted ${msgIds.length} message(s).`)\n })()\n )\n\n // Default action: list\n dm.action(async () => {\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 { runAction, resolveWorkspace, printTable, parseJsonArg } 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(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n console.log('No tags found.')\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.command('tags').description('Manage tags')\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await tagOps.listTags(arbi)\n\n if (data.length === 0) {\n console.log('No tags found.')\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: { workspace?: string; type?: string; instruction?: string; shared?: boolean }\n ) =>\n runAction(async () => {\n const { arbi, workspaceId } = 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: { type: tagType, options: [] },\n instruction,\n shared,\n })\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 .action((id?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\n id = await promptSelect('Select tag to delete', choices)\n }\n const data = await tagOps.deleteTag(arbi, id)\n success(data?.detail ?? `Deleted tag ${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, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\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\n tags.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { 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 { runAction, resolveWorkspace } from '../helpers.js'\nimport { promptSelect, promptCheckbox } from '../prompts.js'\nimport { success } from '../output.js'\n\n/** Fetch tags as picker choices */\nasync function pickTag(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select tag'\n) {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n console.log('No tags found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((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}\n\n/** Fetch docs as checkbox choices */\nasync function pickDocs(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select documents'\n) {\n const data = await documents.listDocuments(arbi)\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\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.command('doctags').description('Manage document tags (doctags)')\n\n doctagsCmd\n .command('create [tag-id] [doc-ids...]')\n .description('Assign a tag to documents (interactive pickers if no args)')\n .option('-n, --note <text>', 'Note for the doctag')\n .action((tagId?: string, docIds?: string[], opts?: { note?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to assign')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, '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-id] [doc-ids...]')\n .description('Remove a tag from documents (interactive pickers if no args)')\n .action((tagId?: string, docIds?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to remove')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, 'Select documents to untag')\n if (docIds.length === 0) return\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, workspaceId } = 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, workspaceId, '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 conversations list — list conversations\n * arbi conversations threads [id] — show threads (picker if no ID)\n * arbi conversations delete [id] — delete (picker if no ID)\n * arbi conversations share [id] — share (picker if no ID)\n * arbi conversations title [id] [title] — update title (picker + prompt)\n * arbi conversations message <message-id> — get message details\n * arbi conversations delete-message <msg-id> — delete message\n */\n\nimport { Command } from 'commander'\nimport { conversations as convOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, resolveWorkspace, printTable } from '../helpers.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 console.log('No conversations found.')\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.command('conversations').description('Manage conversations')\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await convOps.listConversations(arbi)\n\n if (data.length === 0) {\n console.log('No conversations found.')\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 conv\n .command('delete [conversation-id]')\n .description('Delete 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(\n arbi,\n workspaceId,\n 'Select conversation to delete'\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')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n console.log(JSON.stringify(data, null, 2))\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\n conv.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { 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 } from '../helpers.js'\nimport { success } from '../output.js'\n\nexport function registerSettingsCommand(program: Command): void {\n const settings = program.command('settings').description('Manage user settings')\n\n settings\n .command('get')\n .description('Show current user settings')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await settingsOps.getSettings(arbi)\n console.log(JSON.stringify(data, null, 2))\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.command('agentconfig').description('Manage agent configurations')\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)\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 .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealth(arbi)\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 .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealthModels(arbi)\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'\n\nexport function registerUpdateCommand(program: Command): void {\n const update = program\n .command('update')\n .description('Update ARBI CLI to the latest version')\n .action(() => {\n const current = getCurrentVersion()\n label('Current version:', current)\n console.log('Checking for updates...\\n')\n\n try {\n const latest =\n getLatestVersion(true) ||\n execSync('npm view @arbidocs/cli version', { encoding: 'utf8' }).trim()\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 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 workspaces as workspaceOps,\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\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 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 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 } = 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.email === email))\n\n let workspaceId: string\n let workspaceName: string\n\n if (memberWorkspaces.length === 0) {\n console.log('Creating your first workspace...')\n const ws = await workspaceOps.createWorkspace(arbi, 'My Workspace')\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 ws = await workspaceOps.createWorkspace(arbi, name)\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 error(`Login failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\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 { getErrorMessage, performPasswordLogin, workspaces as workspaceOps } 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('Create a bot/test account (requires SUPPORT_API_KEY)')\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 } = await performPasswordLogin(config, email, opts.password, store)\n const ws = await workspaceOps.createWorkspace(arbi, opts.workspaceName)\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 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 { runAction, resolveWorkspace, printTable } 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\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.command('task').description('Manage background tasks')\n\n // Default action: list\n task.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n\n task\n .command('list')\n .description('List background tasks')\n .action(() =>\n runAction(async () => {\n const tasks = getTasks()\n if (tasks.length === 0) {\n console.log('No tasks. Submit one with: arbi ask -b \"your question\"')\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\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, workspaceKeyHeader, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse(\n { baseUrl: config.baseUrl, accessToken, workspaceKeyHeader },\n id\n )\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, workspaceKeyHeader, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse(\n { baseUrl: config.baseUrl, accessToken, workspaceKeyHeader },\n id\n )\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 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 { 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 { 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 { registerTaskCommand } from './commands/task.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\nregisterConfigCommand(program)\nregisterLoginCommand(program)\nregisterRegisterCommand(program)\nregisterLogoutCommand(program)\nregisterStatusCommand(program)\nregisterWorkspacesCommand(program)\nregisterDocsCommand(program)\nregisterUploadCommand(program)\nregisterDownloadCommand(program)\nregisterAskCommand(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)\nregisterTaskCommand(program)\n\nprogram.parse()\n"]}
1
+ {"version":3,"sources":["../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/prompts.ts","../src/version-check.ts","../src/task-store.ts","../src/notifications.ts","../src/helpers.ts","../src/commands/login.ts","../src/commands/register.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/commands/workspaces.ts","../src/commands/docs.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/task.ts","../src/commands/completion.ts","../src/index.ts"],"names":["path","os","fs","workspaces","program","FileConfigStore","ArbiError","chalk","join","homedir","existsSync","readFileSync","appendFileSync","error","input","callback","current","confirmActiveTransaction","rolledBack","store","db","select","checkbox","search","password","confirm","execSync","ensureDir","status","connectWithReconnect","isMessageType","formatWsMessage","getErrorCode","ArbiApiError","getErrorMessage","coreResolveAuth","coreResolveWorkspace","performSsoDeviceFlowLogin","performPasswordLogin","ws","formatWorkspaceChoices","createArbiClient","workspaceOps","generateEncryptedWorkspaceKey","documents","documentsNode","connectWebSocket","result","responses","assistant","streamSSE","label","formatAgentStepLabel","countCitations","formatStreamSummary","resolveCitations","summarizeCitations","colorize","contactOps","formatUserName","dmOps","data","tagOps","doctagOps","convOps","settingsOps","acOps","healthOps","require","createRequire","spawn","CENTRAL_API_URL","getVerificationCode","timestamp","getShellRcPath","writeFileSync","Command"],"mappings":"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","file":"index.js","sourcesContent":["/**\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/** 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.command('config').description('Manage CLI configuration')\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 .action(() => {\n const cfg = getConfig()\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 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('Set up shell alias A for \"arbi ask\"')\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 * 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 * 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\n/**\n * On unexpected errors, hint from cache only (no network call).\n */\nexport function hintUpdateOnError(): void {\n try {\n const cached = readCache()\n if (cached && cached.latest !== __CLI_VERSION__) {\n warn(\n `Your arbi version is out of date (${__CLI_VERSION__} → ${cached.latest}). Run \"arbi update\".`\n )\n }\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 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 * We extract any `detail` or `message` field and append it when not already present.\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\n // Try several common server-error fields\n const detail = (apiErr.detail ?? apiErr.message ?? apiErr.error) as string | undefined\n if (typeof detail === 'string' && detail && !base.includes(detail)) {\n return `${base} — ${detail}`\n }\n return base\n }\n return getErrorMessage(err)\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 */\nexport async function resolveWorkspace(workspaceOpt?: string): 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\n if (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// ── Table formatting ──────────────────────────────────────────────────────────\n\nexport interface Column {\n header: string\n width: number\n value: (row: Record<string, unknown>) => string\n}\n\n/**\n * Print a formatted table with header + rows.\n * Handles truncation to column width and padding.\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 return val.slice(0, c.width - 2).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 * arbi login [--email <email>] [--password <password>]\n *\n * Authenticates via SDK, stores signing key.\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 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'\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('-w, --workspace <id>', 'Workspace ID to select after login')\n .option('--sso', 'Log in with Auth0 SSO (device flow)')\n .action((opts: { email?: string; password?: string; workspace?: string; sso?: boolean }) =>\n runAction(async () => {\n const config = store.requireConfig()\n\n // Resolve credentials: flags > env vars > interactive prompt\n const email = opts.email || process.env.ARBI_EMAIL || (await promptInput('Email'))\n const pw = opts.password || process.env.ARBI_PASSWORD || (await promptPassword('Password'))\n\n try {\n let ssoPolling = false\n const { arbi } = opts.sso\n ? await (async () => {\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 performPasswordLogin(config, email, pw, store)\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 if (memberWorkspaces.length === 0) {\n console.log('No workspaces found. Create one with: arbi workspace create <name>')\n return\n }\n\n // If workspace specified via flag, select it directly\n if (opts.workspace) {\n const ws = memberWorkspaces.find((w) => w.external_id === opts.workspace)\n if (!ws) {\n error(`Workspace ${opts.workspace} not found or you don't have access.`)\n process.exit(1)\n }\n updateConfig({ selectedWorkspaceId: ws.external_id })\n success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n return\n }\n\n // Auto-select if only one member workspace\n if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n success(\n `Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`\n )\n return\n }\n\n // Interactive workspace selection\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 success(`Workspace: ${ws.name} (${ref(selected)})`)\n dim('\\nTip: Run \"arbi config alias\" to use A as a shortcut for \"arbi ask\"')\n } catch (err) {\n error(`Login failed: ${formatCliError(err)}`)\n process.exit(1)\n } finally {\n await checkForUpdates(getConfig()?.autoUpdate)\n }\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 workspaces as workspaceOps,\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\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\n// ── Command ──────────────────────────────────────────────────────────────────\n\ninterface RegisterOpts {\n nonInteractive?: boolean\n email?: string\n password?: string\n verificationCode?: string\n firstName?: string\n lastName?: string\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 .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 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 success(`\\nRegistered successfully as ${email}`)\n } catch (err) {\n error(`Registration failed: ${formatCliError(err)}`)\n process.exit(1)\n }\n\n // 6. If all values were flags, auto-login. Otherwise offer choice.\n const allFlagsProvided =\n !!(opts.email || process.env.ARBI_EMAIL) &&\n !!(opts.password || process.env.ARBI_PASSWORD) &&\n !!opts.verificationCode\n const doLogin = allFlagsProvided || (await promptConfirm('Log in now?'))\n\n if (doLogin) {\n await loginAfterRegister(config, email, pw)\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 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 console.log(`Using email: ${email}`)\n }\n\n if (!password) {\n error('Password required. Use --password <password> or set ARBI_PASSWORD')\n process.exit(1)\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 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 error(`verify-email failed: ${JSON.stringify(verifyResponse.error)}`)\n process.exit(1)\n }\n\n // Fetch code from CI endpoint\n verificationCode = await getVerificationCode(email, supportApiKey)\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 success(`Registered: ${email}`)\n } catch (err) {\n error(`Registration failed: ${formatCliError(err)}`)\n process.exit(1)\n }\n\n // Auto-login and create workspace in non-interactive mode\n await loginAfterRegister(config, email, password)\n}\n\n// ── Post-registration login ──────────────────────────────────────────────────\n\nasync function loginAfterRegister(\n config: { baseUrl: string; deploymentDomain: string },\n email: string,\n password: string\n) {\n try {\n const { arbi } = await performPasswordLogin(config, email, password, store)\n 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 // Filter to workspaces where user has a role (has wrapped_key from membership, not public access)\n // Public workspaces get wrapped_key computed on-the-fly, but we want member workspaces only\n const memberWorkspaces = wsList.filter((ws) => ws.users?.some((u) => u.email === email))\n\n if (memberWorkspaces.length === 0) {\n console.log('Creating your first workspace...')\n const ws = await workspaceOps.createWorkspace(arbi, 'My First Workspace')\n updateConfig({ selectedWorkspaceId: ws.external_id })\n success(`Workspace: ${ws.name} (${ref(ws.external_id)})`)\n return\n }\n\n if (memberWorkspaces.length === 1) {\n updateConfig({ selectedWorkspaceId: memberWorkspaces[0].external_id })\n success(`Workspace: ${memberWorkspaces[0].name} (${ref(memberWorkspaces[0].external_id)})`)\n return\n }\n\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 success(`Workspace: ${ws.name} (${ref(selected)})`)\n } catch (err) {\n error(`Login failed: ${formatCliError(err)}`)\n error('You can log in later with: arbi login')\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 .action(() => {\n deleteCredentials()\n clearChatSession()\n updateConfig({ selectedWorkspaceId: undefined })\n success('Logged out.')\n })\n}\n","/**\n * arbi status\n *\n * Shows current config + login state (no API calls).\n */\n\nimport { Command } from 'commander'\nimport { getConfig, getCredentials } from '../config.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 .action(() => {\n const config = getConfig()\n const creds = getCredentials()\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 (config.selectedWorkspaceId) {\n label('Workspace:', config.selectedWorkspaceId)\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 { workspaces, formatWorkspaceChoices, generateEncryptedWorkspaceKey } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { getConfig, updateConfig, getChatSession, clearChatSession } from '../config.js'\nimport { promptSelect } from '../prompts.js'\nimport { success, error, ref } from '../output.js'\nimport { updateCompletionCache } from '../completion-cache.js'\n\nexport function registerWorkspacesCommand(program: Command): void {\n program\n .command('workspaces')\n .description('List workspaces')\n .action(\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 printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'NAME', width: 30, value: (r) => r.name as string },\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: 10,\n value: (r) => (r.users as { role: string }[])?.[0]?.role ?? '',\n },\n ],\n data\n )\n })\n )\n\n const workspace = program.command('workspace').description('Workspace management')\n\n workspace\n .command('select [id]')\n .description('Select active workspace (interactive picker if no ID given)')\n .action((id?: 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 (id) {\n const ws = data.find((w) => w.external_id === id)\n if (!ws) {\n error(`Workspace ${id} not found.`)\n error('Available workspaces:')\n for (const w of data) error(` ${w.external_id} ${w.name}`)\n process.exit(1)\n }\n selectedId = 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 .action((name: string, opts: { description?: string; public?: boolean }) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await workspaces.createWorkspace(\n arbi,\n name,\n opts.description,\n opts.public ?? false\n )\n success(`Created: ${data.name} (${ref(data.external_id)})`)\n })()\n )\n\n workspace\n .command('delete [id]')\n .description('Delete a workspace (defaults to selected workspace)')\n .action((id?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const targetId = id ?? getConfig()?.selectedWorkspaceId\n if (!targetId) {\n error('No workspace ID given and no workspace selected. Run: arbi workspace select')\n process.exit(1)\n }\n await workspaces.deleteWorkspaces(arbi, [targetId])\n // Clear session if we deleted the workspace it was in\n const session = getChatSession()\n if (session.workspaceId === targetId) {\n clearChatSession()\n }\n success(`Deleted workspace ${targetId}`)\n })()\n )\n\n workspace\n .command('update <json>')\n .description('Update workspace properties (pass JSON)')\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n const data = await workspaces.listWorkspaceUsers(arbi)\n\n if (data.length === 0) {\n console.log('No users found.')\n return\n }\n\n type User = {\n external_id?: string\n email?: string\n given_name?: string\n family_name?: string\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 <user-ids...>')\n .description('Remove users from the active workspace')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((userIds: string[], opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace(opts.workspace)\n await workspaces.removeWorkspaceUsers(arbi, userIds)\n success(`Removed ${userIds.length} user(s).`)\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-id> <doc-ids...>')\n .description('Copy documents to another workspace')\n .option('-w, --workspace <id>', 'Source workspace ID (defaults to selected workspace)')\n .action((targetId: 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 // Find target workspace's wrapped key (needed for target key generation)\n const targetWs = wsList.find((w) => w.external_id === targetId)\n if (!targetWs || !targetWs.wrapped_key) {\n error(`Target workspace ${targetId} not found or has no encryption key`)\n process.exit(1)\n }\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 success(`${data.detail} (${data.documents_copied} document(s) copied)`)\n })()\n )\n}\n","/**\n * arbi docs — list documents\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 */\n\nimport { Command } from 'commander'\nimport { documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace, printTable, parseJsonArg } from '../helpers.js'\nimport { success, error, warn, chalk } from '../output.js'\nimport { promptSearch, promptCheckbox, promptInput, promptSelect } from '../prompts.js'\n\nfunction 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\n/** Fetch workspace docs and return as picker choices */\nasync function fetchDocChoices(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await documents.listDocuments(arbi)\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\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.listDocuments(arbi)\n\n if (data.length === 0) {\n console.log('No documents found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 24, value: (r) => r.external_id as string },\n { header: 'S', width: 2, value: (r) => statusSymbol(r.status as string | null) },\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: '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: 'SUMMARY',\n width: 50,\n value: (r) => {\n const meta = r.doc_metadata as { doc_subject?: string | null } | null\n return meta?.doc_subject ?? '-'\n },\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, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\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 .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n let docIds = ids && ids.length > 0 ? ids : undefined\n if (!docIds) {\n const choices = await fetchDocChoices(arbi, workspaceId)\n const selected = await promptCheckbox('Select documents to delete', choices)\n if (selected.length === 0) return\n docIds = selected\n }\n await documents.deleteDocuments(arbi, docIds)\n success(`Deleted ${docIds.length} document(s).`)\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(arbi, docs)\n success(`Updated ${data.length} document(s).`)\n } else {\n // Interactive: pick a doc, then ask what to change\n const { arbi, workspaceId } = await resolveWorkspace()\n const choices = await fetchDocChoices(arbi, workspaceId)\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 .action((urls: string[], opts: { workspace?: string; shared?: boolean }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await documents.uploadUrl(arbi, urls, workspaceId, opts.shared ?? false)\n success(`Uploaded: ${data.doc_ext_ids.join(', ')}`)\n if (data.duplicates && data.duplicates.length > 0) {\n warn(`Duplicates: ${data.duplicates.join(', ')}`)\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, workspaceKeyHeader, 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, workspaceKeyHeader },\n docId,\n selectedStage\n )\n console.log(JSON.stringify(data, null, 2))\n })()\n )\n}\n","/**\n * arbi upload <file...> [--workspace <id>] [--watch]\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 *\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 { isMessageType, type WsTaskUpdateMessage } from '@arbidocs/client'\nimport { documentsNode, connectWebSocket } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { getConfig } from '../config.js'\nimport { success, error, warn, status, dim } from '../output.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 .action((paths: string[], opts: { workspace?: string; watch?: boolean }) =>\n runAction(async () => {\n // Validate paths exist before authenticating\n for (const p of paths) {\n if (!fs.existsSync(p)) {\n error(`Path not found: ${p}`)\n process.exit(1)\n }\n }\n\n const { config, accessToken, workspaceKeyHeader, workspaceId } = await resolveWorkspace(\n opts.workspace\n )\n\n // Track uploaded doc IDs and their file names for --watch\n const uploadedDocs = new Map<string, string>()\n\n const auth = { baseUrl: config.baseUrl, accessToken, workspaceKeyHeader }\n\n for (const filePath of paths) {\n const stat = fs.statSync(filePath)\n\n if (stat.isDirectory()) {\n // Directory upload — walk and upload with folder structure\n const result = await documentsNode.uploadDirectory(auth, workspaceId, filePath)\n\n if (result.doc_ext_ids.length === 0) {\n warn(`No supported files found in directory: ${filePath}`)\n continue\n }\n\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.duplicates.length > 0) {\n warn(` Duplicates: ${info.duplicates.join(', ')}`)\n }\n }\n success(\n `Uploaded directory: ${filePath} (${result.doc_ext_ids.length} document(s) total)`\n )\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else if (filePath.toLowerCase().endsWith('.zip')) {\n // Zip upload — extract and upload with folder structure\n const result = await documentsNode.uploadZip(auth, workspaceId, filePath)\n\n if (result.doc_ext_ids.length === 0) {\n warn(`No supported files found in zip: ${filePath}`)\n continue\n }\n\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.duplicates.length > 0) {\n warn(` Duplicates: ${info.duplicates.join(', ')}`)\n }\n }\n success(`Uploaded zip: ${filePath} (${result.doc_ext_ids.length} document(s) total)`)\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, filePath)\n } else {\n // Single file upload\n const result = await documentsNode.uploadLocalFile(auth, workspaceId, filePath)\n\n success(`Uploaded: ${result.fileName} (${result.doc_ext_ids.join(', ')})`)\n if (result.duplicates && result.duplicates.length > 0) {\n warn(` Duplicates: ${result.duplicates.join(', ')}`)\n }\n\n for (const id of result.doc_ext_ids) uploadedDocs.set(id, result.fileName)\n }\n }\n\n // Determine whether to watch processing:\n // --no-watch → never watch\n // --watch flag → always watch\n // config watch !== false + interactive TTY → auto-watch\n // otherwise → skip (safe for CI / pipes)\n const isInteractive = process.stdout.isTTY === true\n const watchPref = getConfig()?.watch !== false\n const shouldWatch =\n opts.watch === false ? false : opts.watch === true || (watchPref && isInteractive)\n\n if (shouldWatch && 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 if (msg.status === 'completed') {\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 && !shouldWatch) {\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 * 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('-o, --output <path>', 'Output file path')\n .option('-w, --workspace <id>', 'Workspace ID (defaults to selected workspace)')\n .action((docId: string | undefined, opts: { output?: string; workspace?: string }) =>\n runAction(async () => {\n const { arbi, config, accessToken, workspaceKeyHeader, workspaceId } =\n 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, workspaceKeyHeader },\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 outputPath = opts.output || path.join(process.cwd(), filename)\n const buffer = Buffer.from(await res.arrayBuffer())\n fs.writeFileSync(outputPath, buffer)\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 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 (fire and forget)')\n .option('-q, --quiet', 'Suppress agent steps and tool calls')\n .option('--json', 'Output in JSON format (background mode only)')\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 }\n ) =>\n runAction(async () => {\n const question = words.join(' ')\n const { arbi, accessToken, workspaceKeyHeader, workspaceId, config } =\n 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 workspaceKeyHeader,\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 workspaceKeyHeader,\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 workspaceKeyHeader,\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 const result = await streamSSE(res, {\n onToken: (content) => {\n if (firstToken) {\n process.stderr.write(chalk.dim('[ARBI] '))\n firstToken = false\n }\n process.stdout.write(content)\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 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 if (result.assistantMessageExtId) {\n const updates: Partial<{\n lastMessageExtId: string\n conversationExtId: string\n workspaceId: string\n }> = {\n lastMessageExtId: result.assistantMessageExtId,\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 }\n })()\n )\n}\n","/**\n * arbi cite — browse citations from the last assistant response.\n *\n * Usage:\n * arbi cite List all citation summaries\n * arbi cite <N> Show full passage for citation N\n * arbi cite --all Show all citations with full passages\n *\n * Reads persisted metadata from `~/.arbi/last-metadata.json`,\n * which is saved automatically after each `arbi ask` response.\n */\n\nimport { Command } from 'commander'\nimport {\n resolveCitations,\n summarizeCitations,\n countCitations,\n type MessageMetadataPayload,\n} from '@arbidocs/sdk'\nimport { runAction } from '../helpers.js'\nimport { loadLastMetadata } from '../config.js'\nimport { chalk } from '../output.js'\n\nconst MAX_PASSAGE_LINES = 40\n\nexport function registerCiteCommand(program: Command): void {\n program\n .command('cite [number]')\n .description('Browse citations from the last response')\n .option('-a, --all', 'Show all citations with full passages')\n .action((number: string | undefined, opts: { all?: boolean }) =>\n runAction(async () => {\n const raw = loadLastMetadata()\n if (!raw) {\n console.error(chalk.dim('No citation data available. Run `arbi ask` first.'))\n return\n }\n\n const metadata = raw as MessageMetadataPayload\n const count = countCitations(metadata)\n if (count === 0) {\n console.log(chalk.dim('The last response contained no citations.'))\n return\n }\n\n const resolved = resolveCitations(metadata)\n\n if (opts.all) {\n // Show all citations with full passages\n for (const r of resolved) {\n printCitationDetail(r.citationNum, resolved)\n console.log()\n }\n return\n }\n\n if (number) {\n // Show detail for a specific citation\n printCitationDetail(number, resolved)\n return\n }\n\n // List all citation summaries\n const summaries = summarizeCitations(resolved)\n console.log(chalk.bold(`Citations (${summaries.length}):\\n`))\n\n for (const s of summaries) {\n const page = s.pageNumber != null ? `, p${s.pageNumber}` : ''\n const chunks = s.chunkCount > 1 ? ` (${s.chunkCount} passages)` : ''\n console.log(\n ` ${chalk.cyan(`[${s.citationNum}]`)} ${chalk.bold(s.docTitle)}${page}${chunks}`\n )\n const truncated =\n s.statement.length > 120\n ? s.statement.slice(0, 120).replace(/\\n/g, ' ').trim() + '...'\n : s.statement.replace(/\\n/g, ' ').trim()\n console.log(` ${chalk.dim(truncated)}`)\n }\n\n console.log(chalk.dim(`\\nUse \\`arbi cite <N>\\` to view full passage.`))\n })()\n )\n}\n\nfunction printCitationDetail(\n num: string,\n resolved: {\n citationNum: string\n citationData: { statement: string }\n chunks: Array<{\n content: string\n metadata?: {\n doc_title?: string | null\n page_number?: number | null\n chunk_ext_id?: string | null\n }\n }>\n }[]\n): void {\n const citation = resolved.find((r) => r.citationNum === num)\n if (!citation) {\n console.error(chalk.red(`Citation [${num}] not found.`))\n return\n }\n\n const firstChunk = citation.chunks[0]\n const docTitle = firstChunk?.metadata?.doc_title ?? 'Unknown document'\n const page = firstChunk?.metadata?.page_number\n\n // Header\n console.log(chalk.bold.cyan(`[Citation ${citation.citationNum}]`) + ' ' + chalk.bold(docTitle))\n if (page != null) {\n console.log(chalk.dim(`Page ${page}`))\n }\n console.log()\n\n // Statement\n console.log(chalk.bold('Statement:'))\n console.log(` ${citation.citationData.statement}`)\n console.log()\n\n // Passage(s)\n for (let i = 0; i < citation.chunks.length; i++) {\n const chunk = citation.chunks[i]\n if (citation.chunks.length > 1) {\n console.log(chalk.bold(`Passage ${i + 1}/${citation.chunks.length}:`))\n } else {\n console.log(chalk.bold('Passage:'))\n }\n\n // Truncate long passages\n const lines = chunk.content.split('\\n')\n if (lines.length > MAX_PASSAGE_LINES) {\n console.log(lines.slice(0, MAX_PASSAGE_LINES).join('\\n'))\n console.log(chalk.dim(` ... (${lines.length - MAX_PASSAGE_LINES} more lines)`))\n } else {\n console.log(chunk.content)\n }\n\n if (i < citation.chunks.length - 1) console.log()\n }\n\n if (citation.chunks.length === 0) {\n console.log(chalk.dim(' (no passage data available)'))\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, documents } from '@arbidocs/sdk'\nimport { runAction, resolveWorkspace } from '../helpers.js'\nimport { chalk } from '../output.js'\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('-d, --docs <ids>', 'Comma-separated document IDs to search within')\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 let docIds: string[]\n if (opts.docs) {\n docIds = opts.docs.split(',').map((id) => id.trim())\n } else {\n const docs = await documents.listDocuments(arbi)\n docIds = docs.map((d) => d.external_id as string)\n }\n\n if (docIds.length === 0) {\n console.log('No documents found in workspace.')\n return\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 if (opts.json) {\n console.log(JSON.stringify(result, null, 2))\n return\n }\n\n if (filtered.length === 0) {\n console.log('No results found.')\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}\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('--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 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 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 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 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 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 )\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 { runAction, resolveAuth, printTable, formatUserName, type UserInfo } from '../helpers.js'\nimport { promptCheckbox, promptInput } from '../prompts.js'\nimport { success } from '../output.js'\n\nexport function registerContactsCommand(program: Command): void {\n const contacts = program.command('contacts').description('Manage contacts')\n\n contacts\n .command('list')\n .description('List all contacts')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await contactOps.listContacts(arbi)\n\n if (data.length === 0) {\n console.log('No contacts found.')\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 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 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 .action((ids?: string[]) =>\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 console.log('No contacts found.')\n return\n }\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 await contactOps.removeContacts(arbi, contactIds)\n success(`Removed ${contactIds.length} contact(s).`)\n })()\n )\n\n // Default action: list\n contacts.action(async () => {\n await contacts.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n}\n","/**\n * arbi dm list — list DMs / notifications\n * arbi dm send [recipient] [content] — send a DM (picker + prompt if no args)\n * arbi dm read [ids...] — mark messages as read (picker if no IDs)\n * arbi dm delete [ids...] — delete messages (picker if no IDs)\n */\n\nimport { Command } from 'commander'\nimport { dm as dmOps, contacts as contactOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, printTable, formatUserName, type UserInfo } from '../helpers.js'\nimport { promptSelect, promptCheckbox, promptInput } from '../prompts.js'\nimport { success, error } from '../output.js'\n\nexport function registerDmCommand(program: Command): void {\n const dm = program.command('dm').description('Direct messages')\n\n dm.command('list')\n .description('List all DMs and notifications')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await dmOps.listDMs(arbi)\n\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\n\n printTable(\n [\n { header: 'ID', width: 16, value: (r) => r.external_id as string },\n { header: 'TYPE', width: 18, value: (r) => r.type as string },\n {\n header: 'FROM',\n width: 22,\n value: (r) => {\n const s = r.sender as UserInfo | null\n return formatUserName(s) || s?.email || ''\n },\n },\n { header: 'READ', width: 6, value: (r) => (r.read ? 'yes' : 'no') },\n { header: 'CONTENT', width: 40, value: (r) => (r.content as string) ?? '' },\n ],\n data\n )\n })\n )\n\n dm.command('send [recipient] [content]')\n .description('Send a DM (interactive if no args; recipient can be email or user ext_id)')\n .action((recipient?: string, content?: string) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n\n // Pick recipient from contacts if not given\n if (!recipient) {\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 // Prompt for content if not given\n if (!content) {\n content = await promptInput('Message')\n }\n\n // If recipient looks like an email, resolve to ext_id via contacts\n let recipientExtId = recipient\n if (recipient.includes('@')) {\n const contacts = await contactOps.listContacts(arbi)\n const match = contacts.find((c) => c.email === recipient)\n if (!match) {\n error(`No contact found with email: ${recipient}`)\n error('Add them first: arbi contacts add ' + recipient)\n process.exit(1)\n }\n recipientExtId = (match.user as UserInfo)?.external_id ?? (match.external_id as string)\n }\n\n const data = await dmOps.sendDM(arbi, [{ recipient_ext_id: recipientExtId, content }])\n for (const n of data) {\n success(`Sent: ${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 .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n const unread = data.filter((m) => !m.read)\n if (unread.length === 0) {\n console.log('No unread messages.')\n return\n }\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 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 .action((ids?: string[]) =>\n runAction(async () => {\n const { arbi } = await resolveAuth()\n let msgIds = ids && ids.length > 0 ? ids : undefined\n if (!msgIds) {\n const data = await dmOps.listDMs(arbi)\n if (data.length === 0) {\n console.log('No messages found.')\n return\n }\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 await dmOps.deleteDMs(arbi, msgIds)\n success(`Deleted ${msgIds.length} message(s).`)\n })()\n )\n\n // Default action: list\n dm.action(async () => {\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 { runAction, resolveWorkspace, printTable, parseJsonArg } 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(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string\n) {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n console.log('No tags found.')\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.command('tags').description('Manage tags')\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await tagOps.listTags(arbi)\n\n if (data.length === 0) {\n console.log('No tags found.')\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: { workspace?: string; type?: string; instruction?: string; shared?: boolean }\n ) =>\n runAction(async () => {\n const { arbi, workspaceId } = 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: { type: tagType, options: [] },\n instruction,\n shared,\n })\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 .action((id?: string) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\n id = await promptSelect('Select tag to delete', choices)\n }\n const data = await tagOps.deleteTag(arbi, id)\n success(data?.detail ?? `Deleted tag ${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, workspaceId } = await resolveWorkspace()\n if (!id) {\n const { choices } = await fetchTagChoices(arbi, workspaceId)\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\n tags.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { 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 { runAction, resolveWorkspace } from '../helpers.js'\nimport { promptSelect, promptCheckbox } from '../prompts.js'\nimport { success } from '../output.js'\n\n/** Fetch tags as picker choices */\nasync function pickTag(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select tag'\n) {\n const data = await tagOps.listTags(arbi)\n if (data.length === 0) {\n console.log('No tags found.')\n process.exit(0)\n }\n return promptSelect(\n message,\n data.map((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}\n\n/** Fetch docs as checkbox choices */\nasync function pickDocs(\n arbi: Awaited<ReturnType<typeof resolveWorkspace>>['arbi'],\n workspaceId: string,\n message = 'Select documents'\n) {\n const data = await documents.listDocuments(arbi)\n if (data.length === 0) {\n console.log('No documents found.')\n process.exit(0)\n }\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.command('doctags').description('Manage document tags (doctags)')\n\n doctagsCmd\n .command('create [tag-id] [doc-ids...]')\n .description('Assign a tag to documents (interactive pickers if no args)')\n .option('-n, --note <text>', 'Note for the doctag')\n .action((tagId?: string, docIds?: string[], opts?: { note?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to assign')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, '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-id] [doc-ids...]')\n .description('Remove a tag from documents (interactive pickers if no args)')\n .action((tagId?: string, docIds?: string[]) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace()\n if (!tagId) tagId = await pickTag(arbi, workspaceId, 'Select tag to remove')\n if (!docIds || docIds.length === 0)\n docIds = await pickDocs(arbi, workspaceId, 'Select documents to untag')\n if (docIds.length === 0) return\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, workspaceId } = 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, workspaceId, '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 conversations list — list conversations\n * arbi conversations threads [id] — show threads (picker if no ID)\n * arbi conversations delete [id] — delete (picker if no ID)\n * arbi conversations share [id] — share (picker if no ID)\n * arbi conversations title [id] [title] — update title (picker + prompt)\n * arbi conversations message <message-id> — get message details\n * arbi conversations delete-message <msg-id> — delete message\n */\n\nimport { Command } from 'commander'\nimport { conversations as convOps } from '@arbidocs/sdk'\nimport { runAction, resolveAuth, resolveWorkspace, printTable } from '../helpers.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 console.log('No conversations found.')\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.command('conversations').description('Manage conversations')\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 .action((opts: { workspace?: string }) =>\n runAction(async () => {\n const { arbi, workspaceId } = await resolveWorkspace(opts.workspace)\n const data = await convOps.listConversations(arbi)\n\n if (data.length === 0) {\n console.log('No conversations found.')\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 conv\n .command('delete [conversation-id]')\n .description('Delete 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(\n arbi,\n workspaceId,\n 'Select conversation to delete'\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')\n .action((messageId: string) =>\n runAction(async () => {\n const { arbi } = await resolveWorkspace()\n const data = await convOps.getMessage(arbi, messageId)\n console.log(JSON.stringify(data, null, 2))\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\n conv.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { 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 } from '../helpers.js'\nimport { success } from '../output.js'\n\nexport function registerSettingsCommand(program: Command): void {\n const settings = program.command('settings').description('Manage user settings')\n\n settings\n .command('get')\n .description('Show current user settings')\n .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await settingsOps.getSettings(arbi)\n console.log(JSON.stringify(data, null, 2))\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.command('agentconfig').description('Manage agent configurations')\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)\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 .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealth(arbi)\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 .action(\n runAction(async () => {\n const { arbi } = await resolveAuth()\n const data = await healthOps.getHealthModels(arbi)\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'\n\nexport function registerUpdateCommand(program: Command): void {\n const update = program\n .command('update')\n .description('Update ARBI CLI to the latest version')\n .action(() => {\n const current = getCurrentVersion()\n label('Current version:', current)\n console.log('Checking for updates...\\n')\n\n try {\n const latest =\n getLatestVersion(true) ||\n execSync('npm view @arbidocs/cli version', { encoding: 'utf8' }).trim()\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 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 workspaces as workspaceOps,\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\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 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 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 } = 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.email === email))\n\n let workspaceId: string\n let workspaceName: string\n\n if (memberWorkspaces.length === 0) {\n console.log('Creating your first workspace...')\n const ws = await workspaceOps.createWorkspace(arbi, 'My Workspace')\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 ws = await workspaceOps.createWorkspace(arbi, name)\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 error(`Login failed: ${getErrorMessage(err)}`)\n process.exit(1)\n }\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 { getErrorMessage, performPasswordLogin, workspaces as workspaceOps } 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('Create a bot/test account (requires SUPPORT_API_KEY)')\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 } = await performPasswordLogin(config, email, opts.password, store)\n const ws = await workspaceOps.createWorkspace(arbi, opts.workspaceName)\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 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 { runAction, resolveWorkspace, printTable } 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\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.command('task').description('Manage background tasks')\n\n // Default action: list\n task.action(async (_opts: Record<string, unknown>, cmd: Command) => {\n await cmd.commands.find((c) => c.name() === 'list')!.parseAsync([], { from: 'user' })\n })\n\n task\n .command('list')\n .description('List background tasks')\n .action(() =>\n runAction(async () => {\n const tasks = getTasks()\n if (tasks.length === 0) {\n console.log('No tasks. Submit one with: arbi ask -b \"your question\"')\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\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, workspaceKeyHeader, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse(\n { baseUrl: config.baseUrl, accessToken, workspaceKeyHeader },\n id\n )\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, workspaceKeyHeader, config } = await resolveWorkspace(opts?.workspace)\n\n const result = await responses.getResponse(\n { baseUrl: config.baseUrl, accessToken, workspaceKeyHeader },\n id\n )\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.command('completion').description('Manage shell tab completion')\n\n completion\n .command('install')\n .description('Install shell tab completion (bash/zsh)')\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 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 { registerTaskCommand } from './commands/task.js'\nimport { registerCompletionCommand } from './commands/completion.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\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)\nregisterTaskCommand(program)\nregisterCompletionCommand(program)\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"]}